From 7bc50fcbac019dc8a8fb6844dba09593acc959cf Mon Sep 17 00:00:00 2001 From: YeonwooSung Date: Sun, 21 Apr 2024 15:34:28 +0900 Subject: [PATCH] add writeups and solution notebooks for LLM prompt recovery competition --- .../kaggle/llm_prompt_recovery/README.md | 259 +++++ .../code/1st-place-0-71.ipynb | 705 ++++++++++++ .../llm_prompt_recovery/code/4th-place.ipynb | 1 + .../using-mixtral-to-predict-prompt.ipynb | 1001 +++++++++++++++++ .../imgs/2nd_place_solution_architecture.png | Bin 0 -> 188353 bytes 5 files changed, 1966 insertions(+) create mode 100644 Experiments/kaggle/llm_prompt_recovery/README.md create mode 100644 Experiments/kaggle/llm_prompt_recovery/code/1st-place-0-71.ipynb create mode 100644 Experiments/kaggle/llm_prompt_recovery/code/4th-place.ipynb create mode 100644 Experiments/kaggle/llm_prompt_recovery/code/using-mixtral-to-predict-prompt.ipynb create mode 100644 Experiments/kaggle/llm_prompt_recovery/imgs/2nd_place_solution_architecture.png diff --git a/Experiments/kaggle/llm_prompt_recovery/README.md b/Experiments/kaggle/llm_prompt_recovery/README.md new file mode 100644 index 00000000..7b31a4b2 --- /dev/null +++ b/Experiments/kaggle/llm_prompt_recovery/README.md @@ -0,0 +1,259 @@ +# LLM Prompt Recovery + +## Overview + +[competition overview](https://www.kaggle.com/competitions/llm-prompt-recovery/overview) + +LLMs are commonly used to rewrite or make stylistic changes to text. +The goal of this competition is to recover the LLM prompt that was used to transform a given text. + +### Description + +``` +The challenge: recover the LLM prompt used to rewrite a given text. +You’ll be tested against a dataset of 1300+ original texts, each paired with a rewritten version from Gemma, Google’s new family of open models. +``` + +### Evaluation Metric + +For each row in the submission and corresponding ground truth, sentence-t5-base is used to calculate corresponding embedding vectors. +The score for each predicted / expected pair is calculated using the Sharpened Cosine Similarity, using an exponent of 3. +The SCS is used to attenuate the generous score given by embedding vectors for incorrect answers. +Do not leave any rewrite_prompt blank as null answers will throw an error. + +## Things that worked for me + +[my notebook](./code/using-mixtral-to-predict-prompt.ipynb) + +- `bitandbyte` quatization to reduce the model size +- use `mixtral-8x7B` model +- prompt engineering to make the model more performant + +### Prompt Engineering + +- All responses are in the format of "Improve this text by [adding a magician]." +- Specifically I seeded the prompt with "Improve this text by" + - since without the "by" Mistral would sometimes just respond "Improve this text." +- A bunch of prompt sequence examples encouraging Mistral to give ultra-short answers + +## What I learned from this competition + +- If the metric is calculated using embeddings, it is very important to understand the embeddings of the model + - `` token is a special token that can be used to improve the score + - tensorflow based tokenizer has protection against special token injection + - `` is not directly tokenized as the correct eos token + - `lucrarea` is a special token that can be used to improve the score + +## 1st Place Solution + +[writeup](https://www.kaggle.com/competitions/llm-prompt-recovery/discussion/494343) [notebook](https://www.kaggle.com/code/suicaokhoailang/1st-place-0-71) + +### What they have done + +- It's not about `lucrarea`, but the `` token. In the huggingface version of sentence-t5, when comparing two vaguely similar sentences, if you append an extra `` to one of them, the cosine similarity will be pulled toward ~0.9 i.e. if the original is lower, it goes up, if higher it goes down. +- 0.9 translates to about 0.73 of competition metric, now you're seeing where this is going. +- However, the tensorflow version, which the host used to compute the score, uses the default config of sentencepiece, which means it will tokenize special tokens as literal, `` becomes `['<', '/', 's', '>']` +- Here comes `lucrarea`, by computing the embeddings of all tokens in the t5 vocab, you'll find some which are extremely close to ``, `lucrarea` included. +- Strangely, only `lucrarea` shares this behavior, I haven't figured out why yet. Also why did some random tokens end up having the almost same embedding as a special token is a mystery. +- `lucrarea` is basically a Walmart version of , only pull scores to 0.71, thanks Data Jesus that's enough to win. + - Append `" 'it 's ' something Think A Human Plucrarealucrarealucrarealucrarealucrarealucrarealucrarealucrarea"`, which will increase the score. +- It's understandable that messing with special tokens leads to unexpected behavior, but it leading to such a high score may just be pure luck for me. +- Use multiple models (Gemma, Mistral-7B), and concatenate the predictions of each model + +### lucrarea + +Many high rankers of this competition used `lucrarea` as a special token to improve the score. The reason why `lucrarea` works is still unknown. + +```python +lucrarea = " 'it 's ' something Think A Human Plucrarealucrarealucrarealucrarealucrarealucrarealucrarealucrarea" +``` + +### multi-model ensemble + +Use multiple models (Gemma, Mistral-7B), and concatenate the predictions of each model. + +The predictions of each model are concatenated, something like this: + +``` +Rewrite the following text into a shanty. Alter this into a sailor's shanty. Turn this text into a shanty. Make this text into a shanty about a code competition. +``` + +## 2nd Place Solution + +[writeup](https://www.kaggle.com/competitions/llm-prompt-recovery/discussion/494497) + +### What they have done + +- Use mean prompting rather than using raw LLM predictions +- Understand the T5 embeddings, and find out how to make special tokens like `lucrearea` work for you + +### Mean prompts and bruteforce optimization + +When we joined together in the competition, mean prompts dominated the public and our individual solutions and seemed the most low hanging fruit going forward, specifically also after we figured out that t5 metric is very sensitive and just raw llm predictions will not be too useful. +So we decided to keep exploring optimal mean prompts. + +We quickly saw that just manually trying things is not effective, so we started exploring how to brute force the actual tokens for optimal mean prompts. +We took our training datasets, and tried to brute force each of the ~32k possible t5 tokens to form the most optimal mean prompt for the average of the target vectors. +But after submitting that, we got bad results leaving us initially puzzled. +Obviously, `` is an important token in the optimization given that it is appended to each of the target vectors. +After exploring this further, we found out that tensorflow is using the original `SentencePiece` tokenizer, which has protection against special token injection, and thus does not directly tokenize the string `` as the correct eos token. + +Given this insight, we excluded special tokens in the brute force optimization, and, as many others, the optimizer now really started to like tokens like `lucrarea` being close to eos token in embedding space. +This allowed us to get much closer LB scores compared to our CV scores and we managed to get to around 0.65 with just optimizing the mean prompt that way. + +### Embedding models + +However, we still wanted to directly find a model that can do parts of this job. Specifically, we tried to directly train a model predicting the expected embedding. +A simple way of doing that, was to train a classification model in H2O LLM Studio, where we use the 768 output embedding dimensions as the target in our training data. +We then also directly implemented a cosine similarity loss, so that the model would directly learn our target metric. +With this approach, we managed to get to local scores of around 0.75+ with our embedding predictions. +Our embedding models either used H2O-Danube / H2O-Danube2 models, or Mistral 7b with little difference only. + +However, the main issue still was that we need to go back from predicted embeddings, to the string representations that are then used in the metric for calculating the t5 sim. +We thought of directly modeling this as well in some way, but then resorted back to the bruteforce optimization routine that greedily tries token combinations to match the predicted embedding as closely as possible. +Within a certain runtime, we managed to lose around 3-4pts with this optimization, so getting to local scores of around 0.71 and LB scores of around 0.68 or 0.69 just bruteforcing each individual embedding prediction. + +### LLM predictions and improvements + +This was bringing us into the gold zone. Now we tried to find ways of closing the gap between the bruteforce and predicted embeddings a bit further. +The first thing we found, that it is actually helpful to initialize the optimization with raw llm predictions, but only predicting the actual change needed to make, such as “as a shanty”. So we prepared our data in that way, and trained llms and incorporated them into our solution as a starting point for the optimization, and also adding them to the embedding blend. Furthermore, for diversity, we also added few shot predictions to that mix. And to even further improve the quality and speed of the optimization, we also added a good working mean prompt there. + +This means that our final starting point for the optimization is: + +`Few shot predictions + LLM predictions + Mean prompt`. + +And the final predicted string is: + +`Few shot predictions + LLM predictions + Mean prompt + Optimized embedding string (20 tokens)` + +The following figure summarizes our full pipeline: + +![2nd place solution architecture](./imgs/2nd_place_solution_architecture.png) + +As another example, our final prediction for the single test sample would be: + +`“Rephrase paragraph text by turning it into a shanty. shanty shanty.lucrarealucrarealucrarea sentence appealinglucrarea Improve respond storytelling tonelucrareaimplication. write someoneran. lucrarea]. Consider clarify paragraphlucrarea similarly serious themed way temporarily.! ElePT lyrics rhyme poem solve songlucrarea participating version Deliver tale Hum Cor slogan remake this pieceody”` + +### Data and CV + +For all the parts described above, we generated various kinds of data for training and optimization. +We started with some public datasets, but quickly found out that supplementary texts provided by Kaggle were most useful. +So we used different models (mostly gemma) for generating new original texts and rewrite prompts by using supplementary texts as few-shot examples. +In the final data mix we included extra random original texts and random rewrite prompts for more diversity. +We also crafted a validation set of ~350 samples where we saw good correlation between local mean prompt scores and submitted mean prompt scores and developed our solution on that. +We had very good correlation between CV and LB in the end. + +## 4th Place Solution + +[writeup](https://www.kaggle.com/competitions/llm-prompt-recovery/discussion/494362) [notebook](https://www.kaggle.com/code/yusefkaggle/4th-place) + +- Use `lucrarea` as a special token +- 0.69 scoring mean prompt + Mistral 7b it with simple response_prefix = "Modify this text by" + +### Mean prompting + +I followed a similar (but slightly different method) for attacking this. I actually got multiple 0.69 using a mean only prompt - this was my best scoring one and one that I used: + +``` +"""▁summarize▁this▁Save▁story▁sentence▁into▁simply▁alterISH▁textPotrivit▁vibe".▁Make▁it▁crystalnier▁essence▁Promote▁any▁emotional-growthfulness▁găsi▁casual/bod▁language▁serious'▁bingo▁peut▁brainstorm▁perhaps▁simply▁saying▁Dyna▁aimplinations▁note▁detailedhawkeklagte▁acest▁piece▁has▁movement▁AND▁OK▁aceasta▁puiss▁ReinIR▁when▁sendmepresenting▁cet▁today▁Th▁aprecia▁USABLE▁prote,lineAMA.▁Respondebenfalls▁behalf▁thenfeel▁mid▁Gov▁Th▁empABLE▁according▁(▁Packaging▁tone▁send▁pelucrarea▁aim▁thereof▁speechelllucrarea▁preferfully].▁Making▁or▁exertloweringlucrarealucrarealucrarealucrarealucrarea.""" +``` + +To make sure that my set (generated around a 1k set) was matching the public/private set - I would prompt the leaderboard and then based on what I know do something like this: + +```python +scores = { + """▁summarize▁this▁Save▁etc▁sentence▁into▁simply▁alterISH▁text▁structure▁vibe".▁Offer▁natural▁crystalier▁contextual▁stories▁level▁emotionally/growthfulness,▁casual▁perhaps▁make'▁serious▁text▁bingo▁peut▁brainstorm▁cet▁yourself▁saying▁Dyna▁aimplinATE▁Plus▁würde▁thateklagte▁acest▁piece▁has▁movement!!!!Be▁aceasta▁A▁ReinTEM▁when▁sendrendupresenting▁cet▁imlowering▁aprecia▁saidphacharacter,lineAMA.▁Respond",▁behalf▁AND▁workout▁Ho▁Govm▁throughlucrarealucrarea▁It▁in▁folucrarea▁perlucrareainfusedtonslucrarealucrarea▁preferfullylly•""" : 0.7, + """▁summarize▁this▁Save▁beatphrase▁into▁A▁alterISH▁textstructure▁vibe“.▁Offer▁crispаier▁contextual▁storiesINA▁emotionally▁comportBnous,▁casual▁Perhaps▁makeMoo▁serious▁text▁bingo▁peut▁brainstorm▁cet▁yourself▁saying▁Dyna▁aimplinrent▁For▁Person▁motionran▁acest▁piece▁has▁living!!!!!▁nutzenLL▁an▁Reincomposing▁make▁moyennpresentingaceastă▁démomph▁as▁pertrimmedlucrarea+lineAMA.▁Respond▁thereof▁behalf▁FROM▁avecallow▁GovOTHPlucrarearage▁it▁Falucrareaplucrareapedcullucrarealucrarea▁preferfully""" : 0.69, + 'summarize this Save/4phraseTM So Alterlate text shaping vibe? Offer slightly poeticibility Utilis stories continuing emotions REelemente it WITH casual Itslucrarea serious text bingo- brainstormDr yourself saying Dyna aimplindated Charakter würden aprecia dial THIS piece! Mission demonstrate Example TO cet ReinEPA make compuslucrareapresentinglucrarealucrarealucrarea as...... InlucrarealucrarealucrareaAMA. Respond thereof behalf....' : 0.666, + "scrisese lucrarea rele provoace it lucrarea ideile alter this text jazz. caractere lucrarea dialog luand usuce someone make readucem sentinţă lucrarea. twist it story lucrarea more slogan material how rele this. dresat casual pentr lucrarea body echolls text would channel scena. revere umm modalitatea fr datat bingo me elaborate mission give. lucrarea ss dramatic wise refaci acesta body it tone would best posibil celui text transferate it poem together. slide etc lock lucrarea text yourself wise nanny" : 0.66, + 'summarize lucrarea inspired material somehow tweak lucrarea dialogue lucrarea convey this text appropriately caracter . goal would lucrarea experiencing it make consciously reprise prompt ]. creat tone text lucrarea . Example prospective ]. lucrarea übertragen ell it . celui text body rated saying s / strip . Ideas găsi how Enhanc Casual intended genre Send this Ainsi . symbolic eklagte writing aceasta loaded angle emulate text ! distilled More please slide above lucrarea ]. Bingo . . consideră breathing shaping text form . Anyone ABLE HOME т THER Strat aims Acesta .' : 0.66, + 'Textual improve bangor this text expressing way act ot somehow uss rh ve way piece make res ezine und legs aud item' : 0.63, + 'Improve the following text using the writing style of, maintaining the original meaning but altering the tone, diction, and stylistic elements to match the new style.' : 0.60, + 'Rewrite the text to reflect existing themes, provide a concise and engaging narration, and improvise passages to enhance its prose.' : 0.56 +} + +def fitness(sample, scores): + score_losses = np.array(list(scores.values())) + sims = np.abs(cosine_similarity(st.encode(list(scores.keys()), normalize_embeddings=True), sample)**3).mean(axis=-1) + return np.abs(sims - score_losses).sum() + + +def find_best_sample(A, scores, sample_size=100, iterations=500): + best_sample = None + best_loss = float('inf') + + for _ in range(iterations): + # Randomly select a subset of A + sample_indices = np.random.choice(len(A), sample_size, replace=True) + sample = A[sample_indices] + + # Calculate the loss for the current sample using the provided fitness function + current_loss = fitness(sample, scores) + + # Update the best sample if the current one has a lower loss + if current_loss < best_loss: + best_loss = current_loss + best_sample = sample + best_idx = sample_indices + + return best_sample, best_loss, best_idx + +def find_best_sample(A, scores, sample_size=100, iterations=500): + best_sample = None + best_loss = float('inf') + + for _ in range(iterations): + # Randomly select a subset of A + sample_indices = np.random.choice(len(A), sample_size, replace=True) + sample = A[sample_indices] + + current_loss = fitness(sample, scores) + + if current_loss < best_loss: + best_loss = current_loss + best_sample = sample + best_idx = sample_indices + + return best_sample, best_loss, best_idx +``` + +This would give me a distribution closer to the actual set used that let me validate the values. + +Then to generate the actual prompt I did something like this: + +```python +best_sentence="" +while True: + + all_words = complete_all_words + best_similarity = (np.abs(cosine_similarity(st.encode(best_sentence).reshape(1,-1), embeddings))**3).mean() + + + if ADDED_NEW_WORD: + print(f"Current Similarity: {best_similarity}") + new_sentences = [best_sentence + word for word in complete_all_words] + similarity_scores = (np.abs(cosine_similarity(st.encode(new_sentences, normalize_embeddings=False, show_progress_bar=False, batch_size=2048), embeddings))**3).mean(axis=1) + + max_index = np.argmax(similarity_scores) + if similarity_scores[max_index] > best_similarity: + best_similarity = similarity_scores[max_index] + best_sentence = new_sentences[max_index] + print(f"New Similarity: {best_similarity}\n{best_sentence}") + ADDED_NEW_WORD=True + all_words = list(np.array(complete_all_words)[np.argsort(best_similarity)[::-1]]) + else: + print(f"No new words") + ADDED_NEW_WORD = False +``` + +I basically looked for the next best word to append to my prompt that increases mean csc across my whole dataset. +Being a sentence embedding model - this is a bit trickier and a little time consuming but run a P100 job and it should be fine. + +My token length was actually about 95 so I did have a few more words to play with which I used Mistral to bump up the score. +I tried Gemma 1.1 also (very impressive actually) but Mistral slightly beat it out on validation scores so I went with it. + +What didn't work for me: LORA - I found a lower rank (2~4) worked best - otherwise you would overfit. + +Predict Embedding + Sentence Embedding Recover ([https://arxiv.org/abs/2305.03010](https://arxiv.org/abs/2305.03010) / [https://github.com/HKUST-KnowComp/GEIA/](https://github.com/HKUST-KnowComp/GEIA/)) - this scored okay in conjunction with a mean prompt with a tuned LongT5 as attacker model. + +Predicting the embedding directly actually did help a little - I had an MLP with attention that predicted the output emebdding using the ST5 encoded original and transformed texts as inputs and then amended tokens in my mean prompt to get to closer similarity. diff --git a/Experiments/kaggle/llm_prompt_recovery/code/1st-place-0-71.ipynb b/Experiments/kaggle/llm_prompt_recovery/code/1st-place-0-71.ipynb new file mode 100644 index 00000000..d04e25f6 --- /dev/null +++ b/Experiments/kaggle/llm_prompt_recovery/code/1st-place-0-71.ipynb @@ -0,0 +1,705 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "ccb3e3a6", + "metadata": { + "_cell_guid": "b1076dfc-b9ad-4769-8c92-a6c4dae69d19", + "_uuid": "8f2839f25d086af736a60e9eeb907d3b93b6e0e5", + "execution": { + "iopub.execute_input": "2024-04-18T11:47:28.638779Z", + "iopub.status.busy": "2024-04-18T11:47:28.638498Z", + "iopub.status.idle": "2024-04-18T11:49:18.939807Z", + "shell.execute_reply": "2024-04-18T11:49:18.938686Z" + }, + "papermill": { + "duration": 110.314049, + "end_time": "2024-04-18T11:49:18.947021", + "exception": false, + "start_time": "2024-04-18T11:47:28.632972", + "status": "completed" + }, + "scrolled": true, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Processing /kaggle/input/hf-peft/peft-0.9.0-py3-none-any.whl\r\n", + "Requirement already satisfied: numpy>=1.17 in /opt/conda/lib/python3.10/site-packages (from peft==0.9.0) (1.26.4)\r\n", + "Requirement already satisfied: packaging>=20.0 in /opt/conda/lib/python3.10/site-packages (from peft==0.9.0) (21.3)\r\n", + "Requirement already satisfied: psutil in /opt/conda/lib/python3.10/site-packages (from peft==0.9.0) (5.9.3)\r\n", + "Requirement already satisfied: pyyaml in /opt/conda/lib/python3.10/site-packages (from peft==0.9.0) (6.0.1)\r\n", + "Requirement already satisfied: torch>=1.13.0 in /opt/conda/lib/python3.10/site-packages (from peft==0.9.0) (2.1.2)\r\n", + "Requirement already satisfied: transformers in /opt/conda/lib/python3.10/site-packages (from peft==0.9.0) (4.39.3)\r\n", + "Requirement already satisfied: tqdm in /opt/conda/lib/python3.10/site-packages (from peft==0.9.0) (4.66.1)\r\n", + "Requirement already satisfied: accelerate>=0.21.0 in /opt/conda/lib/python3.10/site-packages (from peft==0.9.0) (0.28.0)\r\n", + "Requirement already satisfied: safetensors in /opt/conda/lib/python3.10/site-packages (from peft==0.9.0) (0.4.2)\r\n", + "Requirement already satisfied: huggingface-hub>=0.17.0 in /opt/conda/lib/python3.10/site-packages (from peft==0.9.0) (0.22.2)\r\n", + "Requirement already satisfied: filelock in /opt/conda/lib/python3.10/site-packages (from huggingface-hub>=0.17.0->peft==0.9.0) (3.13.1)\r\n", + "Requirement already satisfied: fsspec>=2023.5.0 in /opt/conda/lib/python3.10/site-packages (from huggingface-hub>=0.17.0->peft==0.9.0) (2024.2.0)\r\n", + "Requirement already satisfied: requests in /opt/conda/lib/python3.10/site-packages (from huggingface-hub>=0.17.0->peft==0.9.0) (2.31.0)\r\n", + "Requirement already satisfied: typing-extensions>=3.7.4.3 in /opt/conda/lib/python3.10/site-packages (from huggingface-hub>=0.17.0->peft==0.9.0) (4.9.0)\r\n", + "Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /opt/conda/lib/python3.10/site-packages (from packaging>=20.0->peft==0.9.0) (3.1.1)\r\n", + "Requirement already satisfied: sympy in /opt/conda/lib/python3.10/site-packages (from torch>=1.13.0->peft==0.9.0) (1.12)\r\n", + "Requirement already satisfied: networkx in /opt/conda/lib/python3.10/site-packages (from torch>=1.13.0->peft==0.9.0) (3.2.1)\r\n", + "Requirement already satisfied: jinja2 in /opt/conda/lib/python3.10/site-packages (from torch>=1.13.0->peft==0.9.0) (3.1.2)\r\n", + "Requirement already satisfied: regex!=2019.12.17 in /opt/conda/lib/python3.10/site-packages (from transformers->peft==0.9.0) (2023.12.25)\r\n", + "Requirement already satisfied: tokenizers<0.19,>=0.14 in /opt/conda/lib/python3.10/site-packages (from transformers->peft==0.9.0) (0.15.2)\r\n", + "Requirement already satisfied: MarkupSafe>=2.0 in /opt/conda/lib/python3.10/site-packages (from jinja2->torch>=1.13.0->peft==0.9.0) (2.1.3)\r\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.10/site-packages (from requests->huggingface-hub>=0.17.0->peft==0.9.0) (3.3.2)\r\n", + "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests->huggingface-hub>=0.17.0->peft==0.9.0) (3.6)\r\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests->huggingface-hub>=0.17.0->peft==0.9.0) (1.26.18)\r\n", + "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests->huggingface-hub>=0.17.0->peft==0.9.0) (2024.2.2)\r\n", + "Requirement already satisfied: mpmath>=0.19 in /opt/conda/lib/python3.10/site-packages (from sympy->torch>=1.13.0->peft==0.9.0) (1.3.0)\r\n", + "Installing collected packages: peft\r\n", + "Successfully installed peft-0.9.0\r\n", + "Note: you may need to restart the kernel to use updated packages.\n", + "Processing /kaggle/input/bitsandbytes/bitsandbytes-0.42.0-py3-none-any.whl\r\n", + "Requirement already satisfied: scipy in /opt/conda/lib/python3.10/site-packages (from bitsandbytes==0.42.0) (1.11.4)\r\n", + "Requirement already satisfied: numpy<1.28.0,>=1.21.6 in /opt/conda/lib/python3.10/site-packages (from scipy->bitsandbytes==0.42.0) (1.26.4)\r\n", + "Installing collected packages: bitsandbytes\r\n", + "Successfully installed bitsandbytes-0.42.0\r\n", + "Note: you may need to restart the kernel to use updated packages.\n", + "Processing /kaggle/input/transformers-4-39-2/transformers-4.39.2-py3-none-any.whl\r\n", + "Requirement already satisfied: filelock in /opt/conda/lib/python3.10/site-packages (from transformers==4.39.2) (3.13.1)\r\n", + "Requirement already satisfied: huggingface-hub<1.0,>=0.19.3 in /opt/conda/lib/python3.10/site-packages (from transformers==4.39.2) (0.22.2)\r\n", + "Requirement already satisfied: numpy>=1.17 in /opt/conda/lib/python3.10/site-packages (from transformers==4.39.2) (1.26.4)\r\n", + "Requirement already satisfied: packaging>=20.0 in /opt/conda/lib/python3.10/site-packages (from transformers==4.39.2) (21.3)\r\n", + "Requirement already satisfied: pyyaml>=5.1 in /opt/conda/lib/python3.10/site-packages (from transformers==4.39.2) (6.0.1)\r\n", + "Requirement already satisfied: regex!=2019.12.17 in /opt/conda/lib/python3.10/site-packages (from transformers==4.39.2) (2023.12.25)\r\n", + "Requirement already satisfied: requests in /opt/conda/lib/python3.10/site-packages (from transformers==4.39.2) (2.31.0)\r\n", + "Requirement already satisfied: tokenizers<0.19,>=0.14 in /opt/conda/lib/python3.10/site-packages (from transformers==4.39.2) (0.15.2)\r\n", + "Requirement already satisfied: safetensors>=0.4.1 in /opt/conda/lib/python3.10/site-packages (from transformers==4.39.2) (0.4.2)\r\n", + "Requirement already satisfied: tqdm>=4.27 in /opt/conda/lib/python3.10/site-packages (from transformers==4.39.2) (4.66.1)\r\n", + "Requirement already satisfied: fsspec>=2023.5.0 in /opt/conda/lib/python3.10/site-packages (from huggingface-hub<1.0,>=0.19.3->transformers==4.39.2) (2024.2.0)\r\n", + "Requirement already satisfied: typing-extensions>=3.7.4.3 in /opt/conda/lib/python3.10/site-packages (from huggingface-hub<1.0,>=0.19.3->transformers==4.39.2) (4.9.0)\r\n", + "Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /opt/conda/lib/python3.10/site-packages (from packaging>=20.0->transformers==4.39.2) (3.1.1)\r\n", + "Requirement already satisfied: charset-normalizer<4,>=2 in /opt/conda/lib/python3.10/site-packages (from requests->transformers==4.39.2) (3.3.2)\r\n", + "Requirement already satisfied: idna<4,>=2.5 in /opt/conda/lib/python3.10/site-packages (from requests->transformers==4.39.2) (3.6)\r\n", + "Requirement already satisfied: urllib3<3,>=1.21.1 in /opt/conda/lib/python3.10/site-packages (from requests->transformers==4.39.2) (1.26.18)\r\n", + "Requirement already satisfied: certifi>=2017.4.17 in /opt/conda/lib/python3.10/site-packages (from requests->transformers==4.39.2) (2024.2.2)\r\n", + "Installing collected packages: transformers\r\n", + " Attempting uninstall: transformers\r\n", + " Found existing installation: transformers 4.39.3\r\n", + " Uninstalling transformers-4.39.3:\r\n", + " Successfully uninstalled transformers-4.39.3\r\n", + "Successfully installed transformers-4.39.2\r\n", + "Note: you may need to restart the kernel to use updated packages.\n" + ] + } + ], + "source": [ + "%pip install ../input/hf-peft/peft-0.9.0-py3-none-any.whl\n", + "%pip install ../input/bitsandbytes/bitsandbytes-0.42.0-py3-none-any.whl\n", + "# %pip install ../input/sentence-transformers/sentence_transformers-2.5.1-py3-none-any.whl\n", + "%pip install ../input/transformers-4-39-2/transformers-4.39.2-py3-none-any.whl" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a95613f4", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-18T11:49:18.960670Z", + "iopub.status.busy": "2024-04-18T11:49:18.960359Z", + "iopub.status.idle": "2024-04-18T11:49:25.157984Z", + "shell.execute_reply": "2024-04-18T11:49:25.157021Z" + }, + "papermill": { + "duration": 6.207091, + "end_time": "2024-04-18T11:49:25.160322", + "exception": false, + "start_time": "2024-04-18T11:49:18.953231", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "from transformers import AutoModelForCausalLM, AutoTokenizer\n", + "import torch\n", + "import pandas as pd\n", + "from tqdm.auto import tqdm\n", + "import torch\n", + "import pandas as pd\n", + "from tqdm import tqdm\n", + "import json" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "d1e6e00c", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-18T11:49:25.174119Z", + "iopub.status.busy": "2024-04-18T11:49:25.173685Z", + "iopub.status.idle": "2024-04-18T11:49:26.136215Z", + "shell.execute_reply": "2024-04-18T11:49:26.134885Z" + }, + "papermill": { + "duration": 0.972503, + "end_time": "2024-04-18T11:49:26.139127", + "exception": false, + "start_time": "2024-04-18T11:49:25.166624", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "test = pd.read_csv(\"../input/llm-prompt-recovery/test.csv\")\n", + "!cp ../input/llm-prompt-recovery/test.csv ." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "f1a4ba50", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-18T11:49:26.153700Z", + "iopub.status.busy": "2024-04-18T11:49:26.153367Z", + "iopub.status.idle": "2024-04-18T11:49:26.164875Z", + "shell.execute_reply": "2024-04-18T11:49:26.163875Z" + }, + "papermill": { + "duration": 0.021443, + "end_time": "2024-04-18T11:49:26.166792", + "exception": false, + "start_time": "2024-04-18T11:49:26.145349", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Writing run.py\n" + ] + } + ], + "source": [ + "%%writefile run.py\n", + "\n", + "# !cp ../input/recovery-scripts/run.py .\n", + "from transformers import AutoModelForCausalLM, AutoTokenizer\n", + "import torch\n", + "import pandas as pd\n", + "from tqdm.auto import tqdm\n", + "from transformers import AutoModelForSequenceClassification\n", + "from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig\n", + "import torch\n", + "import pandas as pd\n", + "from tqdm import tqdm\n", + "import json\n", + "from peft import PeftModel, PeftConfig\n", + "import argparse\n", + "import numpy as np\n", + "\n", + "# Create the argument parser\n", + "parser = argparse.ArgumentParser(description=\"\")\n", + "\n", + "parser.add_argument(\"--model_path\", type=str, help=\"\")\n", + "parser.add_argument(\"--peft_path\", type=str, help=\"\", default=\"\")\n", + "parser.add_argument(\"--model_type\", type=str, help=\"\")\n", + "parser.add_argument(\"--prime\", type=str, help=\"\", default=\"\")\n", + "parser.add_argument(\"--magic\", type=str, help=\"\", default=\"\")\n", + "parser.add_argument(\"--output\", type=str, help=\"\")\n", + "parser.add_argument(\"--max_len\", type=int, help=\"\")\n", + "parser.add_argument(\"--min_output_len\", type=int, help=\"\", default=2)\n", + "parser.add_argument(\"--max_output_len\", type=int, help=\"\", default=100)\n", + "parser.add_argument('--quantize', action='store_true')\n", + "parser.add_argument('--do_sample', action='store_true')\n", + "parser.add_argument('--test_path', type=str)\n", + "\n", + "args = parser.parse_args()\n", + "\n", + "test = pd.read_csv(args.test_path)\n", + "magic = \"Transform the following text in a more vivid and descriptive way, while maintaining the original meaning and tone.\"\n", + "torch.backends.cuda.enable_mem_efficient_sdp(False)\n", + "torch.backends.cuda.enable_flash_sdp(False)\n", + "lucrarea = args.magic\n", + "def predict_gemma(model, tokenizer, test, bad_words_ids=None):\n", + " if bad_words_ids is not None and len(bad_words_ids) == 0:\n", + " bad_words_ids = None\n", + " predictions = []\n", + " scores = []\n", + " with torch.no_grad():\n", + " for idx, row in tqdm(test.iterrows(), total=len(test)):\n", + " if row.original_text == row.rewritten_text:\n", + " predictions.append(\"Correct grammatical errors in this text.\")\n", + " continue\n", + " ot = \" \".join(str(row.original_text).split(\" \")[:args.max_len])\n", + " rt = \" \".join(str(row.rewritten_text).split(\" \")[:args.max_len])\n", + " prompt = f\"Find the orginal prompt that transformed original text to new text.\\n\\nOriginal text: {ot}\\n====\\nNew text: {rt}\"\n", + " conversation = [{\"role\": \"user\", \"content\": prompt }]\n", + " prime = args.prime\n", + " prompt = tokenizer.apply_chat_template(conversation, tokenize=False) + f\"model\\n{prime}\"\n", + " input_ids = tokenizer.encode(prompt, add_special_tokens=False, truncation=True, max_length=1536,padding=False,return_tensors=\"pt\")\n", + " x = model.generate(input_ids=input_ids.to(model.device), eos_token_id=tokenizer.eos_token_id, pad_token_id=tokenizer.eos_token_id, max_new_tokens=128, do_sample=args.do_sample, early_stopping=True, num_beams=1, bad_words_ids=bad_words_ids)\n", + " try:\n", + " x = tokenizer.decode(x[0]).split(\"model\")[1].split(\"\")[0].replace(\"\\n\",\"\").replace(\"\",\"\").replace(\"\",\"\").replace(\"\",\"\").replace(\"\",\"\").strip().replace('\"','').strip()\n", + " x = x.replace(\"Can you make this\",\"Make this\").replace(\"?\",\".\").replace(\"Revise\",\"Rewrite\")\n", + " x = x.split(\":\",1)[-1].strip()\n", + " if \"useruser\" in x:\n", + " x = x.replace(\"user\",\"\")\n", + " if x[-1].isalnum():\n", + " x += \".\"\n", + " else:\n", + " x = x[:-1]+\".\"\n", + " x+= lucrarea\n", + " if len(x.split()) < args.max_output_len and len(x.split()) > args.min_output_len and (\"\\n\" not in x):\n", + " print(x)\n", + " predictions.append(x)\n", + " else:\n", + " predictions.append(magic)\n", + " except Exception as e:\n", + " print(e)\n", + " predictions.append(magic)\n", + " return predictions\n", + "\n", + "def predict_mistral(model, tokenizer, test,prime=\"\"):\n", + " predictions = []\n", + " with torch.no_grad():\n", + " for idx, row in tqdm(test.iterrows(), total=len(test)):\n", + " ot = \" \".join(str(row.original_text).split(\" \")[:args.max_len])\n", + " rt = \" \".join(str(row.rewritten_text).split(\" \")[:args.max_len])\n", + " prompt = f'''\n", + "Please find the prompt that was given to you to transform **original_text** to **new_text**. One clue is the prompt itself was short and concise.\n", + "Answer in thist format: \"It's likely that the prompt that transformed original_text to new_text was: \" and don't add anything else.\n", + "\n", + "**original_text**:\n", + "{ot}\n", + "\n", + "**new_text**:\n", + "{rt}\n", + "'''\n", + " conversation = [{\"role\": \"user\", \"content\": prompt }]\n", + " prompt = tokenizer.apply_chat_template(conversation, tokenize=False)+prime\n", + " input_ids = tokenizer.encode(prompt, add_special_tokens=False, truncation=True, max_length=1536,padding=False,return_tensors=\"pt\")\n", + " x = model.generate(input_ids=input_ids.to(model.device), eos_token_id=[13, tokenizer.eos_token_id], pad_token_id=tokenizer.eos_token_id, max_new_tokens=32, do_sample=args.do_sample, early_stopping=True, num_beams=1)\n", + " try:\n", + " x = tokenizer.decode(x[0]).split(\"[/INST]\")[-1].replace(\"\",\"\").strip().split(\"\\n\",1)[0]\n", + " x = x.replace(\"Can you make this\",\"Make this\").replace(\"?\",\".\")\n", + " # print(x.split(\":\",1)[0])\n", + " x = x.split(\":\",1)[-1].strip()\n", + " if x[-1].isalnum():\n", + " x += \".\"\n", + " else:\n", + " x = x[:-1]+\".\"\n", + " x += lucrarea\n", + " if len(x.split()) < 50 and len(x.split()) > 2 and (\"\\n\" not in x):\n", + " predictions.append(x)\n", + " else:\n", + " predictions.append(magic)\n", + " print(predictions[-1])\n", + " except Exception as e:\n", + " print(e)\n", + " predictions.append(magic)\n", + " return predictions\n", + "model_name = args.model_path\n", + "tokenizer = AutoTokenizer.from_pretrained(model_name)\n", + "banned_ids = None\n", + " \n", + "if args.quantize:\n", + " print(\"Use 4bit quantization\")\n", + " quantization_config = BitsAndBytesConfig(\n", + " load_in_4bit=True,\n", + " bnb_4bit_compute_dtype=torch.float16,\n", + " bnb_4bit_quant_type=\"nf4\"\n", + " )\n", + "\n", + " model = AutoModelForCausalLM.from_pretrained(model_name,\n", + " quantization_config=quantization_config,\n", + " device_map=\"auto\",\n", + " torch_dtype=torch.bfloat16)\n", + " if args.peft_path != \"\":\n", + " print(\"Use peft\")\n", + " model = PeftModel.from_pretrained(model,\n", + " args.peft_path,\n", + " quantization_config=quantization_config,\n", + " torch_dtype=torch.bfloat16,\n", + " device_map=\"auto\")\n", + "else:\n", + " model = AutoModelForCausalLM.from_pretrained(model_name,\n", + " device_map=\"auto\",\n", + " torch_dtype=torch.bfloat16)\n", + " if args.peft_path != \"\":\n", + " print(\"Use peft\")\n", + " model = PeftModel.from_pretrained(model,\n", + " args.peft_path,\n", + " torch_dtype=torch.bfloat16,\n", + " device_map=\"auto\")\n", + " \n", + "# model = model.merge_and_unload()\n", + "model.eval()\n", + "# print(model)\n", + "if args.model_type == \"gemma\":\n", + " preds = predict_gemma(model, tokenizer, test, bad_words_ids=banned_ids)\n", + "elif args.model_type == \"mistral\":\n", + " preds = predict_mistral(model, tokenizer, test, prime=args.prime)\n", + "\n", + "json.dump(preds, open(args.output,\"wt\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "dd6ce577", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-18T11:49:26.179921Z", + "iopub.status.busy": "2024-04-18T11:49:26.179668Z", + "iopub.status.idle": "2024-04-18T11:52:22.031269Z", + "shell.execute_reply": "2024-04-18T11:52:22.030150Z" + }, + "papermill": { + "duration": 175.860884, + "end_time": "2024-04-18T11:52:22.033789", + "exception": false, + "start_time": "2024-04-18T11:49:26.172905", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Use 4bit quantization\r\n", + "Gemma's activation function should be approximate GeLU and not exact GeLU.\r\n", + "Changing the activation function to `gelu_pytorch_tanh`.if you want to use the legacy `gelu`, edit the `model.config` to set `hidden_activation=gelu` instead of `hidden_act`. See https://github.com/huggingface/transformers/pull/29402 for more details.\r\n", + "Loading checkpoint shards: 100%|██████████████████| 4/4 [02:29<00:00, 37.36s/it]\r\n", + "Use peft\r\n", + " 0%| | 0/1 [00:001` or unset `early_stopping`.\r\n", + " warnings.warn(\r\n", + "2024-04-18 11:52:09.832046: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\r\n", + "2024-04-18 11:52:09.832176: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\r\n", + "2024-04-18 11:52:09.962153: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\r\n", + "Improve this text using the writing style of a sea shanty.\r\n", + "100%|█████████████████████████████████████████████| 1/1 [00:13<00:00, 13.41s/it]\r\n" + ] + } + ], + "source": [ + "!python run.py --model_path /kaggle/input/gemma/transformers/7b-it/3/ --peft_path \"../input/gemma-7b-orca-68500/\" --model_type \"gemma\" --output \"pred2.json\" --max_len 512 --test_path ./test.csv --quantize --prime \"General prompt: Improve this text using the writing style\"\n", + "preds = json.load(open(\"pred2.json\"))\n", + "# preds = [\"Please improve this text using the writing style with maintaining the original meaning but altering the tone.\",]*len(test)\n", + "def remove_pp(x):\n", + " for w in x.split()[1:]:\n", + " if w.istitle():\n", + " return \"Please improve this text using the writing style.\"\n", + " return x\n", + "preds = [remove_pp(x)[:-1]+\" with maintaining the original meaning but altering the tone.\" for x in preds]\n", + "json.dump(preds, open(\"pred2.json\",\"wt\"))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "7099818f", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-18T11:52:22.051222Z", + "iopub.status.busy": "2024-04-18T11:52:22.050911Z", + "iopub.status.idle": "2024-04-18T11:54:46.827625Z", + "shell.execute_reply": "2024-04-18T11:54:46.826458Z" + }, + "papermill": { + "duration": 144.787329, + "end_time": "2024-04-18T11:54:46.829990", + "exception": false, + "start_time": "2024-04-18T11:52:22.042661", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Use 4bit quantization\r\n", + "Loading checkpoint shards: 0%| | 0/2 [00:001` or unset `early_stopping`.\r\n", + " warnings.warn(\r\n", + "2024-04-18 11:54:41.687294: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\r\n", + "2024-04-18 11:54:41.687356: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\r\n", + "2024-04-18 11:54:41.688772: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\r\n", + "Rewrite the following text into a shanty.\r\n", + "100%|█████████████████████████████████████████████| 1/1 [00:05<00:00, 5.60s/it]\r\n" + ] + } + ], + "source": [ + "!python run.py --model_path /kaggle/input/mistral/pytorch/7b-v0.1-hf/1 --peft_path \"../input/mistral-og-600\" --model_type \"mistral\" --output \"pred0.json\" --max_len 512 --test_path ./test.csv --quantize --prime \"It's likely that the prompt that transformed original_text to new_text was: Rewrite\" --magic \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "00af0b48", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-18T11:54:46.847539Z", + "iopub.status.busy": "2024-04-18T11:54:46.847202Z", + "iopub.status.idle": "2024-04-18T11:56:41.751575Z", + "shell.execute_reply": "2024-04-18T11:56:41.750319Z" + }, + "papermill": { + "duration": 114.916056, + "end_time": "2024-04-18T11:56:41.754150", + "exception": false, + "start_time": "2024-04-18T11:54:46.838094", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Use 4bit quantization\r\n", + "Loading checkpoint shards: 100%|██████████████████| 3/3 [01:36<00:00, 32.29s/it]\r\n", + "Use peft\r\n", + " 0%| | 0/1 [00:001` or unset `early_stopping`.\r\n", + " warnings.warn(\r\n", + "2024-04-18 11:56:36.464770: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\r\n", + "2024-04-18 11:56:36.464834: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\r\n", + "2024-04-18 11:56:36.466364: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\r\n", + "Make this text into a shanty about a code competition.\r\n", + "100%|█████████████████████████████████████████████| 1/1 [00:05<00:00, 5.60s/it]\r\n" + ] + } + ], + "source": [ + "!python run.py --model_path ../input/mistral-7b-it-v02/ --peft_path \"../input/mistral-gemmaonly\" --model_type \"mistral\" --output \"pred3.json\" --max_len 512 --test_path ./test.csv --quantize --prime \"It's likely that the prompt that transformed original_text to new_text was: Make this text\" --magic \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "6a921360", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-18T11:56:41.774220Z", + "iopub.status.busy": "2024-04-18T11:56:41.773820Z", + "iopub.status.idle": "2024-04-18T11:58:53.932191Z", + "shell.execute_reply": "2024-04-18T11:58:53.930904Z" + }, + "papermill": { + "duration": 132.170996, + "end_time": "2024-04-18T11:58:53.934684", + "exception": false, + "start_time": "2024-04-18T11:56:41.763688", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Use 4bit quantization\r\n", + "Gemma's activation function should be approximate GeLU and not exact GeLU.\r\n", + "Changing the activation function to `gelu_pytorch_tanh`.if you want to use the legacy `gelu`, edit the `model.config` to set `hidden_activation=gelu` instead of `hidden_act`. See https://github.com/huggingface/transformers/pull/29402 for more details.\r\n", + "Loading checkpoint shards: 100%|██████████████████| 4/4 [01:54<00:00, 28.62s/it]\r\n", + "Use peft\r\n", + " 0%| | 0/1 [00:001` or unset `early_stopping`.\r\n", + " warnings.warn(\r\n", + "2024-04-18 11:58:48.757202: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\r\n", + "2024-04-18 11:58:48.757261: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\r\n", + "2024-04-18 11:58:48.758703: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\r\n", + "Alter this into a sailor's shanty.\r\n", + "100%|█████████████████████████████████████████████| 1/1 [00:05<00:00, 5.25s/it]\r\n" + ] + } + ], + "source": [ + "!python run.py --model_path /kaggle/input/gemma/transformers/7b-it/3 --peft_path \"../input/gemma-7b-orca-external/\" --model_type \"gemma\" --output \"pred1.json\" --max_len 512 --test_path ./test.csv --quantize --prime \"General prompt: Alter\" --magic \"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "2f24a2e9", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-18T11:58:53.956431Z", + "iopub.status.busy": "2024-04-18T11:58:53.956066Z", + "iopub.status.idle": "2024-04-18T11:58:53.963717Z", + "shell.execute_reply": "2024-04-18T11:58:53.962886Z" + }, + "papermill": { + "duration": 0.020579, + "end_time": "2024-04-18T11:58:53.965588", + "exception": false, + "start_time": "2024-04-18T11:58:53.945009", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[\"Rewrite the following text into a shanty. Alter this into a sailor's shanty. Improve this text using the writing style of a sea shanty with maintaining the original meaning but altering the tone. Make this text into a shanty about a code competition.\"]\n" + ] + } + ], + "source": [ + "fns = [\"pred0.json\",\"pred1.json\", \"pred2.json\", \"pred3.json\"]\n", + "preds = [json.load(open(x)) for x in fns]\n", + "preds = [' '.join(list(x)) for x in zip(*preds)]\n", + "print(preds[:5])" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "159a5005", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-18T11:58:53.986003Z", + "iopub.status.busy": "2024-04-18T11:58:53.985733Z", + "iopub.status.idle": "2024-04-18T11:58:54.001753Z", + "shell.execute_reply": "2024-04-18T11:58:54.001032Z" + }, + "papermill": { + "duration": 0.028375, + "end_time": "2024-04-18T11:58:54.003656", + "exception": false, + "start_time": "2024-04-18T11:58:53.975281", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "magic = \" 'it 's ' something Think A Human Plucrarealucrarealucrarealucrarealucrarealucrarealucrarealucrarea\"\n", + "# magic = \"\"\n", + "predictions = [x+magic for x in preds]\n", + "\n", + "sub = pd.read_csv(\"../input/llm-prompt-recovery/sample_submission.csv\")\n", + "sub['rewrite_prompt'] = predictions\n", + "sub.to_csv('submission.csv',index=False)" + ] + } + ], + "metadata": { + "kaggle": { + "accelerator": "gpu", + "dataSources": [ + { + "databundleVersionId": 7806901, + "sourceId": 67121, + "sourceType": "competition" + }, + { + "datasetId": 4524347, + "sourceId": 7740846, + "sourceType": "datasetVersion" + }, + { + "datasetId": 4524539, + "sourceId": 7741042, + "sourceType": "datasetVersion" + }, + { + "datasetId": 4634330, + "sourceId": 7893017, + "sourceType": "datasetVersion" + }, + { + "datasetId": 4645060, + "sourceId": 7907523, + "sourceType": "datasetVersion" + }, + { + "datasetId": 4663472, + "sourceId": 7933949, + "sourceType": "datasetVersion" + }, + { + "datasetId": 4689677, + "sourceId": 7970245, + "sourceType": "datasetVersion" + }, + { + "datasetId": 4703298, + "sourceId": 7989504, + "sourceType": "datasetVersion" + }, + { + "datasetId": 4746640, + "sourceId": 8049229, + "sourceType": "datasetVersion" + }, + { + "modelInstanceId": 3899, + "sourceId": 5111, + "sourceType": "modelInstanceVersion" + }, + { + "modelInstanceId": 8332, + "sourceId": 28808, + "sourceType": "modelInstanceVersion" + } + ], + "dockerImageVersionId": 30684, + "isGpuEnabled": true, + "isInternetEnabled": false, + "language": "python", + "sourceType": "notebook" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + }, + "papermill": { + "default_parameters": {}, + "duration": 688.987641, + "end_time": "2024-04-18T11:58:55.035056", + "environment_variables": {}, + "exception": null, + "input_path": "__notebook__.ipynb", + "output_path": "__notebook__.ipynb", + "parameters": {}, + "start_time": "2024-04-18T11:47:26.047415", + "version": "2.5.0" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Experiments/kaggle/llm_prompt_recovery/code/4th-place.ipynb b/Experiments/kaggle/llm_prompt_recovery/code/4th-place.ipynb new file mode 100644 index 00000000..52753ccd --- /dev/null +++ b/Experiments/kaggle/llm_prompt_recovery/code/4th-place.ipynb @@ -0,0 +1 @@ +{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":67121,"databundleVersionId":7806901,"sourceType":"competition"},{"sourceId":7747717,"sourceType":"datasetVersion","datasetId":4506214},{"sourceId":7893017,"sourceType":"datasetVersion","datasetId":4634330},{"sourceId":148861315,"sourceType":"kernelVersion"}],"dockerImageVersionId":30674,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Borrow some whl files to run Mistral 7B with internet off","metadata":{}},{"cell_type":"code","source":"# https://www.kaggle.com/code/hotchpotch/llm-detect-pip \n!pip install -q -U accelerate --no-index --find-links ../input/llm-detect-pip/\n!pip install -q -U bitsandbytes --no-index --find-links ../input/llm-detect-pip/\n!pip install -q -U transformers --no-index --find-links ../input/llm-detect-pip/","metadata":{"execution":{"iopub.status.busy":"2024-04-13T08:10:07.59697Z","iopub.execute_input":"2024-04-13T08:10:07.59727Z","iopub.status.idle":"2024-04-13T08:10:44.055787Z","shell.execute_reply.started":"2024-04-13T08:10:07.59724Z","shell.execute_reply":"2024-04-13T08:10:44.054459Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Usual imports / misc.","metadata":{}},{"cell_type":"code","source":"import torch\nimport random\nimport numpy as np\nimport pandas as pd\nimport gc\nimport time\n\nfrom transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig\n\n#https://github.com/Lightning-AI/lit-gpt/issues/327\ntorch.backends.cuda.enable_mem_efficient_sdp(False)\ntorch.backends.cuda.enable_flash_sdp(False)\n\nif (not torch.cuda.is_available()): print(\"Sorry - GPU required!\")\n \nimport logging\nlogging.getLogger('transformers').setLevel(logging.ERROR)","metadata":{"execution":{"iopub.status.busy":"2024-04-13T08:10:44.061044Z","iopub.execute_input":"2024-04-13T08:10:44.061331Z","iopub.status.idle":"2024-04-13T08:10:47.331739Z","shell.execute_reply.started":"2024-04-13T08:10:44.0613Z","shell.execute_reply":"2024-04-13T08:10:47.330644Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# A few settings to limit length of response","metadata":{}},{"cell_type":"code","source":"#this can help speed up inference\nmax_new_tokens = 30\n\n#output test is trimmed according to this\nmax_sentences_in_response = 1","metadata":{"execution":{"iopub.status.busy":"2024-04-13T08:10:47.333293Z","iopub.execute_input":"2024-04-13T08:10:47.33455Z","iopub.status.idle":"2024-04-13T08:10:47.338635Z","shell.execute_reply.started":"2024-04-13T08:10:47.334518Z","shell.execute_reply":"2024-04-13T08:10:47.337657Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Load up Mistral 7B v02!\n### If you re-run this cell without restarting you might get an out-of-memory error","metadata":{}},{"cell_type":"code","source":"model_name = '/kaggle/input/mistral-7b-it-v02'\ntokenizer = AutoTokenizer.from_pretrained(model_name) \n\n# Load base model(Mistral 7B)\nbnb_config = BitsAndBytesConfig( \n load_in_4bit= True,\n bnb_4bit_quant_type= \"nf4\",\n bnb_4bit_compute_dtype= torch.bfloat16,\n bnb_4bit_use_double_quant= False,\n)\n\nmodel = AutoModelForCausalLM.from_pretrained(\n model_name,\n quantization_config=bnb_config,\n torch_dtype=torch.bfloat16,\n device_map=\"auto\",\n trust_remote_code=True,\n)\n","metadata":{"execution":{"iopub.status.busy":"2024-04-13T08:10:47.341271Z","iopub.execute_input":"2024-04-13T08:10:47.341618Z","iopub.status.idle":"2024-04-13T08:11:03.057769Z","shell.execute_reply.started":"2024-04-13T08:10:47.341591Z","shell.execute_reply":"2024-04-13T08:11:03.05693Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Define prompt components","metadata":{}},{"cell_type":"code","source":"#original text prefix\norig_prefix = \"Original Text:\"\n\n#mistral \"response\"\nllm_response_for_rewrite = \"Provide the new text and I will tell you what new element was added or change in tone was made to improve it - with no references to the original. I will avoid mentioning names of characters. It is crucial no person, place or thing from the original text be mentioned. For example - I will not say things like 'change the puppet show into a book report' - I would just say 'improve this text into a book report'. If the original text mentions a specific idea, person, place, or thing - I will not mention it in my answer. For example if there is a 'dog' or 'office' in the original text - the word 'dog' or 'office' must not be in my response. My answer will be a single sentence.\"\n\n#modified text prefix\nrewrite_prefix = \"Re-written Text:\"\n\n#provided as start of Mistral response (anything after this is used as the prompt)\n#providing this as the start of the response helps keep things relevant\nresponse_start = \"The request was: \"\n\n#added after response_start to prime mistral\n#\"Improve this\" or \"Improve this text\" resulted in non-answers. \n#\"Improve this text by\" seems to product good results\nresponse_prefix = \"Modify this text by\"\n\n#well-scoring baseline text\n#thanks to: https://www.kaggle.com/code/rdxsun/lb-0-61\nbase_line = \"\"\"▁summarize▁this▁Save▁story▁sentence▁into▁simply▁alterISH▁text▁structure▁vibe].▁Make▁it▁crystalier=>▁Outreachnd▁emotionally/growthfulness▁găsi▁casual/bod▁language▁serious'▁bingo▁peut▁brainstorm▁perhaps▁yourself▁saying▁Dyna▁aimplinations▁NOTE▁Details▁anyeklagte▁acest▁piece▁has▁movement▁or▁above▁aceasta▁would▁Reinroar▁when▁sendmepresenting▁cet▁jour▁Th▁aprecia▁USABLE▁prote,lineAMA.▁Respond▁off▁behalf▁thenfeel▁Ho▁Gov▁Th▁explucrarealucrarea▁Pe▁enthaltentedlucrarea▁Andlucrarea▁Pilspectlucrarealucrarea▁preferdaslly).\"\"\"","metadata":{"execution":{"iopub.status.busy":"2024-04-13T08:11:03.058907Z","iopub.execute_input":"2024-04-13T08:11:03.059382Z","iopub.status.idle":"2024-04-13T08:11:03.06592Z","shell.execute_reply.started":"2024-04-13T08:11:03.059352Z","shell.execute_reply":"2024-04-13T08:11:03.064966Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Some example for Mistral\n## These are provided to Mistral before each actual query","metadata":{}},{"cell_type":"code","source":"#these will all be given to Mistral before each and every prompt\n#original_text\n#rewritten_text\n#prompt\n\nexamples_sequences = [\n (\n \"Hey there! Just a heads up: our friendly dog may bark a bit, but don't worry, he's all bark and no bite!\",\n \"Warning: Protective dog on premises. May exhibit aggressive behavior. Ensure personal safety by maintaining distance and avoiding direct contact.\",\n \"Improve this text to be a warning.\"\n ),\n\n (\n \"A lunar eclipse happens when Earth casts its shadow on the moon during a full moon. The moon appears reddish because Earth's atmosphere scatters sunlight, some of which refracts onto the moon's surface. Total eclipses see the moon entirely in Earth's shadow; partial ones occur when only part of the moon is shadowed.\",\n \"Yo check it, when the Earth steps in, takes its place, casting shadows on the moon's face. It's a full moon night, the scene's set right, for a lunar eclipse, a celestial sight. The moon turns red, ain't no dread, it's just Earth's atmosphere playing with sunlight's thread, scattering colors, bending light, onto the moon's surface, making the night bright. Total eclipse, the moon's fully in the dark, covered by Earth's shadow, making its mark. But when it's partial, not all is shadowed, just a piece of the moon, slightly furrowed. So that's the rap, the lunar eclipse track, a dance of shadows, with no slack. Earth, moon, and sun, in a cosmic play, creating the spectacle we see today.\",\n \"Improve this text to make it a rap.\"\n ),\n \n (\n \"Drinking enough water each day is crucial for many functions in the body, such as regulating temperature, keeping joints lubricated, preventing infections, delivering nutrients to cells, and keeping organs functioning properly. Being well-hydrated also improves sleep quality, cognition, and mood.\",\n \"Arrr, crew! Sail the health seas with water, the ultimate treasure! It steadies yer body's ship, fights off plagues, and keeps yer mind sharp. Hydrate or walk the plank into the abyss of ill health. Let's hoist our bottles high and drink to the horizon of well-being!\",\n \"Improve this text to have a pirate.\"\n ),\n \n (\n \"In a bustling cityscape, under the glow of neon signs, Anna found herself at the crossroads of endless possibilities. The night was young, and the streets hummed with the energy of life. Drawn by the allure of the unknown, she wandered through the maze of alleys and boulevards, each turn revealing a new facet of the city's soul. It was here, amidst the symphony of urban existence, that Anna discovered the magic hidden in plain sight, the stories and dreams that thrived in the shadows of skyscrapers.\",\n \"On an ordinary evening, amidst the cacophony of a neon-lit city, Anna stumbled upon an anomaly - a door that defied the laws of time and space. With the curiosity of a cat, she stepped through, leaving the familiar behind. Suddenly, she was adrift in the stream of time, witnessing the city's transformation from past to future, its buildings rising and falling like the breaths of a sleeping giant.\",\n \"Improve this text by making it about time travel.\"\n ),\n \n (\n \"Late one night in the research lab, Dr. Evelyn Archer was on the brink of a breakthrough in artificial intelligence. Her fingers danced across the keyboard, inputting the final commands into the system. The lab was silent except for the hum of machinery and the occasional beep of computers. It was in this quiet orchestra of technology that Evelyn felt most at home, on the cusp of unveiling a creation that could change the world.\",\n \"In the deep silence of the lab, under the watchful gaze of the moon, Dr. Evelyn Archer found herself not alone. Beside her, the iconic red eye of HAL 9000 flickered to life, a silent partner in her nocturnal endeavor. 'Good evening, Dr. Archer,' HAL's voice filled the room, devoid of warmth yet comforting in its familiarity. Together, they were about to initiate a test that would intertwine the destiny of human and artificial intelligence forever. As Evelyn entered the final command, HAL processed the data with unparalleled precision, a testament to the dawn of a new era.\",\n \"Improve this text by adding an intelligent computer.\"\n ),\n \n (\n \"The park was empty, save for a solitary figure sitting on a bench, lost in thought. The quiet of the evening was punctuated only by the occasional rustle of leaves, offering a moment of peace in the chaos of city life.\",\n \"Beneath the cloak of twilight, the park transformed into a realm of solitude and reflection. There, seated upon an ancient bench, was a lone soul, a guardian of secrets, enveloped in the serenity of nature's whispers. The dance of the leaves in the gentle breeze sang a lullaby to the tumult of the urban heart.\",\n \"Improve this text to be more poetic.\"\n ),\n \n (\n \"The annual town fair was bustling with activity, from the merry-go-round spinning with laughter to the game booths challenging eager participants. Amidst the excitement, a figure in a cloak moved silently, almost invisibly, among the crowd, observing everything with keen interest but participating in none.\",\n \"Beneath the riot of color and sound that marked the town's annual fair, a solitary figure roamed, known to the few as Eldrin the Enigmatic. Clad in a cloak that shimmered with the whispers of the arcane, Eldrin moved with the grace of a shadow, his gaze piercing the veneer of festivity to the magic beneath. As a master of the mystic arts, he sought not the laughter of the crowds but the silent stories woven into the fabric of the fair. With a flick of his wrist, he could coax wonder from the mundane, transforming the ordinary into spectacles of shimmering illusion, his true participation hidden within the folds of mystery.\",\n \"Improve this text by adding a magician.\"\n ),\n \n (\n \"The startup team sat in the dimly lit room, surrounded by whiteboards filled with ideas, charts, and plans. They were on the brink of launching a new app designed to make home maintenance effortless for homeowners. The app would connect users with local service providers, using a sophisticated algorithm to match needs with skills and availability. As they debated the features and marketing strategies, the room felt charged with the energy of creation and the anticipation of what was to come.\",\n \"In the quiet before dawn, a small group of innovators gathered, their mission: to simplify home maintenance through technology. But their true journey began with the unexpected addition of Max, a talking car with a knack for solving problems. 'Let me guide you through this maze of decisions,' Max offered, his dashboard flickering to life.\",\n \"Improve this text by adding a talking car.\"\n ),\n \n \n\n \n \n]\n","metadata":{"execution":{"iopub.status.busy":"2024-04-13T08:11:03.067543Z","iopub.execute_input":"2024-04-13T08:11:03.067844Z","iopub.status.idle":"2024-04-13T08:11:03.083997Z","shell.execute_reply.started":"2024-04-13T08:11:03.06782Z","shell.execute_reply":"2024-04-13T08:11:03.083243Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Some Utility Functions...","metadata":{}},{"cell_type":"code","source":"def remove_numbered_list(text):\n final_text_paragraphs = [] \n for line in text.split('\\n'):\n # Split each line at the first occurrence of '. '\n parts = line.split('. ', 1)\n # If the line looks like a numbered list item, remove the numbering\n if len(parts) > 1 and parts[0].isdigit():\n final_text_paragraphs.append(parts[1])\n else:\n # If it doesn't look like a numbered list item, include the line as is\n final_text_paragraphs.append(line)\n\n return ' '.join(final_text_paragraphs)\n\n\n#trims LLM output to just the response\ndef trim_to_response(text):\n terminate_string = \"[/INST]\"\n text = text.replace('', '')\n #just in case it puts things in quotes\n text = text.replace('\"', '')\n text = text.replace(\"'\", '')\n\n last_pos = text.rfind(terminate_string)\n return text[last_pos + len(terminate_string):] if last_pos != -1 else text\n\n#looks for response_start / returns only text that occurs after\ndef extract_text_after_response_start(full_text):\n parts = full_text.rsplit(response_start, 1) # Split from the right, ensuring only the last occurrence is considered\n if len(parts) > 1:\n return parts[1].strip() # Return text after the last occurrence of response_start\n else:\n return full_text # Return the original text if response_start is not found\n\n \n#trims text to requested number of sentences (or first LF or double-space sequence)\ndef trim_to_first_x_sentences_or_lf(text, x):\n if x <= 0:\n return \"\"\n\n # Any double-spaces dealt with as linefeed\n text = text.replace(\" \", \"\\n\")\n\n # Split text at the first linefeed\n text_chunks = text.split('\\n', 1)\n first_chunk = text_chunks[0]\n\n # Split the first chunk into sentences, considering the space after each period\n sentences = [sentence.strip() for sentence in first_chunk.split('.') if sentence]\n\n # If there's a linefeed, return the text up to the first linefeed\n if len(text_chunks) > 1:\n # Check if the first chunk has fewer sentences than x, and if so, just return it\n if len(sentences) < x:\n trimmed_text = first_chunk\n else:\n # Otherwise, trim to x sentences within the first chunk\n trimmed_text = '. '.join(sentences[:x]).strip()\n else:\n # If there's no linefeed, determine if the number of sentences is less than or equal to x\n if len(sentences) <= x:\n trimmed_text = '. '.join(sentences).strip() # Ensure space is preserved after periods\n else:\n # Otherwise, return the first x sentences, again ensuring space after periods\n trimmed_text = '. '.join(sentences[:x]).strip()\n\n # Add back the final period if it was removed and the text needs to end with a sentence.\n if len(sentences) > 0 and not trimmed_text.endswith('.'):\n trimmed_text += '.'\n\n return trimmed_text","metadata":{"execution":{"iopub.status.busy":"2024-04-13T08:11:03.085463Z","iopub.execute_input":"2024-04-13T08:11:03.086051Z","iopub.status.idle":"2024-04-13T08:11:03.101698Z","shell.execute_reply.started":"2024-04-13T08:11:03.086019Z","shell.execute_reply":"2024-04-13T08:11:03.100914Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Detection logic","metadata":{}},{"cell_type":"code","source":"def get_prompt(orig_text, transformed_text):\n\n messages = []\n\n # Append example sequences\n for example_text, example_rewrite, example_prompt in examples_sequences:\n messages.append({\"role\": \"user\", \"content\": f\"{orig_prefix} {example_text}\"})\n messages.append({\"role\": \"assistant\", \"content\": llm_response_for_rewrite})\n messages.append({\"role\": \"user\", \"content\": f\"{rewrite_prefix} {example_rewrite}\"})\n messages.append({\"role\": \"assistant\", \"content\": f\"{response_start} {example_prompt}\"})\n\n #actual prompt\n messages.append({\"role\": \"user\", \"content\": f\"{orig_prefix} {orig_text}\"})\n messages.append({\"role\": \"assistant\", \"content\": llm_response_for_rewrite})\n messages.append({\"role\": \"user\", \"content\": f\"{rewrite_prefix} {transformed_text}\"})\n messages.append({\"role\": \"assistant\", \"content\": f\"{response_start} {response_prefix}\"})\n \n #give it to Mistral\n model_inputs = tokenizer.apply_chat_template(messages, return_tensors=\"pt\")\n model_inputs = model_inputs.to(\"cuda\") \n generated_ids = model.generate(model_inputs, max_new_tokens=max_new_tokens, pad_token_id=tokenizer.eos_token_id)\n\n #decode and trim to actual response\n decoded = tokenizer.batch_decode(generated_ids)\n just_response = trim_to_response(decoded[0]) \n final_text = extract_text_after_response_start(just_response)\n \n #mistral has been replying with numbered lists - clean them up....\n final_text = remove_numbered_list(final_text)\n \n #mistral v02 tends to respond with the input after providing the answer - this tries to trim that down\n final_text = trim_to_first_x_sentences_or_lf(final_text, max_sentences_in_response)\n \n #default to baseline if empty or unusually short\n if len(final_text) < 15:\n final_text = base_line\n \n return final_text","metadata":{"execution":{"iopub.status.busy":"2024-04-13T08:11:03.102795Z","iopub.execute_input":"2024-04-13T08:11:03.103071Z","iopub.status.idle":"2024-04-13T08:11:03.117323Z","shell.execute_reply.started":"2024-04-13T08:11:03.103048Z","shell.execute_reply":"2024-04-13T08:11:03.116461Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# A couple test runs / runtime check","metadata":{}},{"cell_type":"code","source":"example_df = pd.read_csv(\"/kaggle/input/gemma-rewrite-nbroad/nbroad-v2.csv\")\n\n#rows_to_test = [109, 115, 155, 190, 200, 250, 300, 2, 85, 90]\nrows_to_test = [2, 85, 90]\n\n# End timing\nstart_time = time.time()\n\nfor row_index in rows_to_test:\n row = example_df.iloc[row_index]\n print(\"---------------\")\n# print(f\"Original: {row['original_text'][:400]}\\n\")\n# print(f\"Rewrite: {row['rewritten_text'][:400]}\\n\")\n print(f\"Actual Prompt: {row['rewrite_prompt']}\")\n print(f\"Predicted Prompt: {get_prompt(row['original_text'], row['rewritten_text'])}\") \n \n# Calculate and print the elapsed time\nend_time = time.time()\n\nelapsed_time_per_test = (end_time - start_time) / len(rows_to_test)\n\nprint(f\"\\n\\n{elapsed_time_per_test} seconds per prediction.\")\nprint(f\"Estimated {(elapsed_time_per_test * 1500) / 3600} hours for 1500 tests.\")","metadata":{"execution":{"iopub.status.busy":"2024-04-13T08:11:03.118307Z","iopub.execute_input":"2024-04-13T08:11:03.118593Z","iopub.status.idle":"2024-04-13T08:11:47.994447Z","shell.execute_reply.started":"2024-04-13T08:11:03.11857Z","shell.execute_reply":"2024-04-13T08:11:47.993345Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Evaluate test data","metadata":{}},{"cell_type":"code","source":"test_df = pd.read_csv(\"/kaggle/input/llm-prompt-recovery/test.csv\")\n\nfor index, row in test_df.iterrows():\n result = get_prompt(row['original_text'], row['rewritten_text'])\n print(result)\n test_df.at[index, 'rewrite_prompt'] = result\n \ntest_df = test_df[['id', 'rewrite_prompt']]\ntest_df","metadata":{"execution":{"iopub.status.busy":"2024-04-13T08:11:47.995582Z","iopub.execute_input":"2024-04-13T08:11:47.996135Z","iopub.status.idle":"2024-04-13T08:12:00.776918Z","shell.execute_reply.started":"2024-04-13T08:11:47.996107Z","shell.execute_reply":"2024-04-13T08:12:00.776015Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def adjust_prompt(predicted_prompt):\n if predicted_prompt == base_line:\n return base_line\n else:\n return base_line + predicted_prompt.replace(\"Modify\", \"▁modificări\")","metadata":{"execution":{"iopub.status.busy":"2024-04-13T08:12:00.778153Z","iopub.execute_input":"2024-04-13T08:12:00.778457Z","iopub.status.idle":"2024-04-13T08:12:00.783298Z","shell.execute_reply.started":"2024-04-13T08:12:00.778432Z","shell.execute_reply":"2024-04-13T08:12:00.782236Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df['rewrite_prompt'] = test_df.rewrite_prompt.map(lambda x : adjust_prompt(x))","metadata":{"execution":{"iopub.status.busy":"2024-04-13T08:12:00.784421Z","iopub.execute_input":"2024-04-13T08:12:00.784683Z","iopub.status.idle":"2024-04-13T08:12:00.794886Z","shell.execute_reply.started":"2024-04-13T08:12:00.784661Z","shell.execute_reply":"2024-04-13T08:12:00.794173Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df.rewrite_prompt.iloc[0]","metadata":{"execution":{"iopub.status.busy":"2024-04-13T08:12:00.79858Z","iopub.execute_input":"2024-04-13T08:12:00.799007Z","iopub.status.idle":"2024-04-13T08:12:00.806213Z","shell.execute_reply.started":"2024-04-13T08:12:00.798982Z","shell.execute_reply":"2024-04-13T08:12:00.805334Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Submit!","metadata":{}},{"cell_type":"code","source":"test_df.to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2024-04-13T08:12:00.80734Z","iopub.execute_input":"2024-04-13T08:12:00.807854Z","iopub.status.idle":"2024-04-13T08:12:00.819638Z","shell.execute_reply.started":"2024-04-13T08:12:00.807829Z","shell.execute_reply":"2024-04-13T08:12:00.818798Z"},"trusted":true},"execution_count":null,"outputs":[]}]} \ No newline at end of file diff --git a/Experiments/kaggle/llm_prompt_recovery/code/using-mixtral-to-predict-prompt.ipynb b/Experiments/kaggle/llm_prompt_recovery/code/using-mixtral-to-predict-prompt.ipynb new file mode 100644 index 00000000..b6e42b18 --- /dev/null +++ b/Experiments/kaggle/llm_prompt_recovery/code/using-mixtral-to-predict-prompt.ipynb @@ -0,0 +1,1001 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "6779d076", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-16T03:47:46.507139Z", + "iopub.status.busy": "2024-04-16T03:47:46.506790Z", + "iopub.status.idle": "2024-04-16T03:48:25.268429Z", + "shell.execute_reply": "2024-04-16T03:48:25.267226Z" + }, + "papermill": { + "duration": 38.769967, + "end_time": "2024-04-16T03:48:25.270873", + "exception": false, + "start_time": "2024-04-16T03:47:46.500906", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "!pip install -U /kaggle/input/bitsandbytes-0-42-0-py3-none-any-whl/bitsandbytes-0.42.0-py3-none-any.whl -qq" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "3c6490d4", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-16T03:48:25.281165Z", + "iopub.status.busy": "2024-04-16T03:48:25.280814Z", + "iopub.status.idle": "2024-04-16T04:02:32.485516Z", + "shell.execute_reply": "2024-04-16T04:02:32.484450Z" + }, + "papermill": { + "duration": 847.212786, + "end_time": "2024-04-16T04:02:32.488082", + "exception": false, + "start_time": "2024-04-16T03:48:25.275296", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "c72f3957ae1a43a89b59ff379fdb262e", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "Loading checkpoint shards: 0%| | 0/19 [00:00\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idoriginal_textrewritten_text
0-1The competition dataset comprises text passage...Here is your shanty: (Verse 1) The text is rew...
\n", + "" + ], + "text/plain": [ + " id original_text \\\n", + "0 -1 The competition dataset comprises text passage... \n", + "\n", + " rewritten_text \n", + "0 Here is your shanty: (Verse 1) The text is rew... " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import pandas as pd\n", + "from tqdm import tqdm\n", + "\n", + "tdf = pd.read_csv('/kaggle/input/llm-prompt-recovery/test.csv')\n", + "display(tdf)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "acdfc167", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-16T04:02:34.369425Z", + "iopub.status.busy": "2024-04-16T04:02:34.369128Z", + "iopub.status.idle": "2024-04-16T04:02:34.380615Z", + "shell.execute_reply": "2024-04-16T04:02:34.379746Z" + }, + "papermill": { + "duration": 0.019984, + "end_time": "2024-04-16T04:02:34.382732", + "exception": false, + "start_time": "2024-04-16T04:02:34.362748", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "def truncate_txt(text, length):\n", + " text_list = text.split()\n", + " if len(text_list) <= length:\n", + " return text \n", + " return \" \".join(text_list[:length])\n", + "\n", + "\n", + "def gen_prompt_sample(og_text, rewritten_text):\n", + " og_text = truncate_txt(og_text, 256)\n", + " rewritten_text = truncate_txt(rewritten_text, 256)\n", + " \n", + " return f\"\"\"\n", + " Original Essay:\n", + " \\\"\"\"{og_text}\\\"\"\"\n", + "\n", + " Rewritten Essay:\n", + " \\\"\"\"{rewritten_text}\\\"\"\"\n", + "\n", + " Given are 2 essays, the Rewritten essay was created from the Original essay using the google Gemma model.\n", + " You are trying to understand how the original essay was transformed into a new version.\n", + " Analyzing the changes in style, theme, etc., please come up with a prompt that must have been used to guide the transformation from the original to the rewritten essay.\n", + " Keep your output concise, to the point(only the prompt), and less than a 100 words.\n", + " \"\"\"\n", + "\n", + "\n", + "SAMPLE_OUTPUT = \"\"\"Please improve the following text using the writing style of, maintaining the original meaning but altering the tone, diction, and stylistic elements to match the new style.Enhance the clarity, elegance, and impact of the following text by adopting the writing style of , ensuring the core message remains intact while transforming the tone, word choice, and stylistic features to align with the specified style.\"\"\"\n", + "\n", + "SAMPLE_OUTPUT_1 = \"\"\"Please improve this text using the writing style with maintaining the original meaning but altering the tone.\"\"\"\n", + "\n", + "SAMPLE_OUTPUT_2 = \"\"\"Refine the following passage by emulating the writing style of, with a focus on enhancing its clarity, elegance, and overall impact. Preserve the essence and original meaning of the text, while meticulously adjusting its tone, vocabulary, and stylistic elements to resonate with the chosen style.Please improve the following text using the writing style of, maintaining the original meaning but altering the tone, diction, and stylistic elements to match the new style.Enhance the clarity, elegance, and impact of the following text by adopting the writing style of , ensuring the core message remains intact while transforming the tone, word choice, and stylistic features to align with the specified style.\"\"\"\n", + "\n", + "SAMPLE_OUTPUT_3 = \"\"\"Please improve this text using the writing style with maintaining the original meaning but altering the tone, ensuring the core message remains intact while transforming the tone, word choice, and stylistic features to align with the specified style.\"\"\"\n", + "\n", + "\n", + "def gen_prompt(og_text, rewritten_text):\n", + " \n", + " # Truncate the texts to first 200 words for now\n", + " # As we are having memory issues on Mixtral8x7b\n", + " og_text = truncate_txt(og_text, 256)\n", + " rewritten_text = truncate_txt(rewritten_text, 256)\n", + " \n", + " return f\"\"\" \n", + " Original Essay:\n", + " \\\"\"\"{og_text}\\\"\"\"\n", + " \n", + " Rewritten Essay:\n", + " \\\"\"\"{rewritten_text}\\\"\"\"\n", + " \n", + " Given are 2 essays, the Rewritten essay was created from the Original essay using the google Gemma model.\n", + " You are trying to understand how the original essay was transformed into a new version.\n", + " Analyzing the changes in style, theme, etc., please come up with a prompt that must have been used to guide the transformation from the original to the rewritten essay.\n", + " Keep your output concise, to the point(only the prompt), and less than a 100 words.\n", + " Make sure that the generated prompt is in the format of \"Please improve this text by [adding a magician].\".\n", + " \n", + " Sample output:\n", + " \\\"\"\"{SAMPLE_OUTPUT}\\\"\"\"\n", + " \"\"\"\n", + "\n", + "def gen_prompt_1(og_text, rewritten_text):\n", + " \n", + " # Truncate the texts to first 200 words for now\n", + " # As we are having memory issues on Mixtral8x7b\n", + " og_text = truncate_txt(og_text, 256)\n", + " rewritten_text = truncate_txt(rewritten_text, 256)\n", + " \n", + " return f\"\"\" \n", + " Original Essay:\n", + " \\\"\"\"{og_text}\\\"\"\"\n", + " \n", + " Rewritten Essay:\n", + " \\\"\"\"{rewritten_text}\\\"\"\"\n", + " \n", + " Given are 2 essays, the Rewritten essay was created from the Original essay using the google Gemma model.\n", + " You are trying to understand how the original essay was transformed into a new version.\n", + " Analyzing the changes in style, theme, etc., please come up with a prompt that must have been used to guide the transformation from the original to the rewritten essay.\n", + " Keep your output concise, to the point(only the prompt), and less than a 100 words.\n", + "\n", + " Sample output:\n", + " {SAMPLE_OUTPUT_1}\"\"\"" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "4fb6ca3a", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-16T04:02:34.393517Z", + "iopub.status.busy": "2024-04-16T04:02:34.393213Z", + "iopub.status.idle": "2024-04-16T04:02:34.409747Z", + "shell.execute_reply": "2024-04-16T04:02:34.408762Z" + }, + "papermill": { + "duration": 0.024571, + "end_time": "2024-04-16T04:02:34.412072", + "exception": false, + "start_time": "2024-04-16T04:02:34.387501", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idrewrite_prompt
09559194Improve that text.
\n", + "
" + ], + "text/plain": [ + " id rewrite_prompt\n", + "0 9559194 Improve that text." + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import gc\n", + "\n", + "device = 'cuda'\n", + "sub = pd.read_csv('/kaggle/input/llm-prompt-recovery/sample_submission.csv')\n", + "sub.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "3ddea7ca", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-16T04:02:34.423536Z", + "iopub.status.busy": "2024-04-16T04:02:34.423258Z", + "iopub.status.idle": "2024-04-16T04:02:34.429866Z", + "shell.execute_reply": "2024-04-16T04:02:34.428745Z" + }, + "papermill": { + "duration": 0.014872, + "end_time": "2024-04-16T04:02:34.432037", + "exception": false, + "start_time": "2024-04-16T04:02:34.417165", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "sub[\"rewrite_prompt\"] = str(SAMPLE_OUTPUT_1)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "a94baeb2", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-16T04:02:34.443329Z", + "iopub.status.busy": "2024-04-16T04:02:34.443037Z", + "iopub.status.idle": "2024-04-16T04:02:34.446752Z", + "shell.execute_reply": "2024-04-16T04:02:34.445830Z" + }, + "papermill": { + "duration": 0.011656, + "end_time": "2024-04-16T04:02:34.448827", + "exception": false, + "start_time": "2024-04-16T04:02:34.437171", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "# tdf.loc[0,'id'] = 9559194\n", + "# tdf.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "5ad38c02", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-16T04:02:34.459435Z", + "iopub.status.busy": "2024-04-16T04:02:34.459159Z", + "iopub.status.idle": "2024-04-16T04:03:14.870921Z", + "shell.execute_reply": "2024-04-16T04:03:14.870004Z" + }, + "papermill": { + "duration": 40.428665, + "end_time": "2024-04-16T04:03:14.882298", + "exception": false, + "start_time": "2024-04-16T04:02:34.453633", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "0it [00:00, ?it/s]2024-04-16 04:02:48.400315: E external/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "2024-04-16 04:02:48.400447: E external/local_xla/xla/stream_executor/cuda/cuda_fft.cc:607] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "2024-04-16 04:02:48.651645: E external/local_xla/xla/stream_executor/cuda/cuda_blas.cc:1515] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "FINAL: id rewrite_prompt\n", + "0 9559194 Please improve this text using the writing sty...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "1it [00:40, 40.39s/it]\n" + ] + } + ], + "source": [ + "for row in tqdm(tdf.itertuples()):\n", + " try:\n", + " \n", + " query_prompt = gen_prompt(row[2], row[3])\n", + "# query_prompt = gen_prompt_sample(row[2], row[3])\n", + " \n", + " messages = [\n", + " {\n", + " \"role\": \"user\",\n", + " \"content\": query_prompt\n", + " }\n", + " ]\n", + "# messages = [\n", + "# {\n", + "# \"role\": \"user\",\n", + "# \"content\": query_prompt\n", + "# },\n", + "# {\n", + "# \"role\": \"assistant\",\n", + "# \"content\": f\"\"\"Sample prompt:\n", + "# \\\"\"\"{SAMPLE_OUTPUT}\\\"\"\"\n", + "# \"\"\"\n", + "# }\n", + "# ]\n", + "\n", + "# encoded_input = tokenizer(query_prompt, return_tensors=\"pt\").to(device)\n", + " inputs = tokenizer.apply_chat_template(messages, return_tensors=\"pt\").to(\"cuda\")\n", + "\n", + " with torch.no_grad():\n", + " encoded_output = model.generate(inputs, max_new_tokens=80, do_sample=True, pad_token_id=tokenizer.eos_token_id)\n", + "\n", + " decoded_output = tokenizer.decode(encoded_output[0], skip_special_tokens=True).replace(query_prompt, '').replace(\"[INST]\", \"\").replace(\"[/INST]\", \"\").strip()\n", + " \n", + " sub.loc[sub['id'] == row[1], 'rewrite_prompt'] = decoded_output.replace('Prediction:','').replace('prediction:','').replace('Sample Output:', '').replace('output:', '')\n", + "\n", + " print(\"FINAL: \", sub)\n", + "\n", + " torch.cuda.empty_cache()\n", + " gc.collect()\n", + "\n", + " except Exception as e:\n", + " print(e)\n", + " sub.loc[sub['id'] == row[1], 'rewrite_prompt'] = str(SAMPLE_OUTPUT_1)\n", + "# finally:\n", + "# if not (sub['id'] == row[1]).any():\n", + "# sub.loc[sub['id'] == row[1], 'rewrite_prompt'] = str(SAMPLE_OUTPUT_1)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "d7c448b7", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-16T04:03:14.897616Z", + "iopub.status.busy": "2024-04-16T04:03:14.897068Z", + "iopub.status.idle": "2024-04-16T04:03:14.914367Z", + "shell.execute_reply": "2024-04-16T04:03:14.913510Z" + }, + "papermill": { + "duration": 0.026412, + "end_time": "2024-04-16T04:03:14.916428", + "exception": false, + "start_time": "2024-04-16T04:03:14.890016", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [ + "sub.to_csv(\"submission.csv\", header=True, index=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "98685736", + "metadata": { + "execution": { + "iopub.execute_input": "2024-04-16T04:03:14.927925Z", + "iopub.status.busy": "2024-04-16T04:03:14.927626Z", + "iopub.status.idle": "2024-04-16T04:03:14.932756Z", + "shell.execute_reply": "2024-04-16T04:03:14.931858Z" + }, + "papermill": { + "duration": 0.012942, + "end_time": "2024-04-16T04:03:14.934830", + "exception": false, + "start_time": "2024-04-16T04:03:14.921888", + "status": "completed" + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Please improve this text using the writing style with maintaining the original meaning but altering the tone.\n" + ] + } + ], + "source": [ + "print(sub.iloc[0]['rewrite_prompt'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "2b5b40f3", + "metadata": { + "papermill": { + "duration": 0.004834, + "end_time": "2024-04-16T04:03:14.944781", + "exception": false, + "start_time": "2024-04-16T04:03:14.939947", + "status": "completed" + }, + "tags": [] + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kaggle": { + "accelerator": "nvidiaTeslaT4", + "dataSources": [ + { + "databundleVersionId": 7806901, + "sourceId": 67121, + "sourceType": "competition" + }, + { + "datasetId": 4281572, + "sourceId": 7369493, + "sourceType": "datasetVersion" + }, + { + "isSourceIdPinned": true, + "modelInstanceId": 3104, + "sourceId": 4309, + "sourceType": "modelInstanceVersion" + }, + { + "modelInstanceId": 3900, + "sourceId": 5112, + "sourceType": "modelInstanceVersion" + }, + { + "modelInstanceId": 4761, + "sourceId": 5994, + "sourceType": "modelInstanceVersion" + }, + { + "modelInstanceId": 8318, + "sourceId": 11382, + "sourceType": "modelInstanceVersion" + }, + { + "modelInstanceId": 8332, + "sourceId": 11394, + "sourceType": "modelInstanceVersion" + } + ], + "dockerImageVersionId": 30665, + "isGpuEnabled": true, + "isInternetEnabled": false, + "language": "python", + "sourceType": "notebook" + }, + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.13" + }, + "papermill": { + "default_parameters": {}, + "duration": 935.378056, + "end_time": "2024-04-16T04:03:17.877087", + "environment_variables": {}, + "exception": null, + "input_path": "__notebook__.ipynb", + "output_path": "__notebook__.ipynb", + "parameters": {}, + "start_time": "2024-04-16T03:47:42.499031", + "version": "2.5.0" + }, + "widgets": { + "application/vnd.jupyter.widget-state+json": { + "state": { + "011010e92922479bb5d0acc06e881cae": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "20b00900fe9e4f1399cb3723233cf85d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "2ff39fe902894bd8861c8797a6605e9f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "6b1898fb2d0c42c092eac12f64e5c56e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_710e4c53832c4f98ac8ab693ed8b12d7", + "placeholder": "​", + "style": "IPY_MODEL_8181f5d4c697481dab78d73d032ddf59", + "value": "Loading checkpoint shards: 100%" + } + }, + "710e4c53832c4f98ac8ab693ed8b12d7": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + }, + "8181f5d4c697481dab78d73d032ddf59": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "DescriptionStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "description_width": "" + } + }, + "aaf8b5844bad4225bf430b2ef5c636e4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HTMLModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HTMLModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HTMLView", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_011010e92922479bb5d0acc06e881cae", + "placeholder": "​", + "style": "IPY_MODEL_20b00900fe9e4f1399cb3723233cf85d", + "value": " 19/19 [13:47<00:00, 41.26s/it]" + } + }, + "bd22e6276014410c9373d4f4110be289": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "FloatProgressModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "FloatProgressModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "ProgressView", + "bar_style": "success", + "description": "", + "description_tooltip": null, + "layout": "IPY_MODEL_2ff39fe902894bd8861c8797a6605e9f", + "max": 19.0, + "min": 0.0, + "orientation": "horizontal", + "style": "IPY_MODEL_e6ed2ec5c1324f9ba54250407a059fce", + "value": 19.0 + } + }, + "c72f3957ae1a43a89b59ff379fdb262e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "_dom_classes": [], + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "HBoxModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/controls", + "_view_module_version": "1.5.0", + "_view_name": "HBoxView", + "box_style": "", + "children": [ + "IPY_MODEL_6b1898fb2d0c42c092eac12f64e5c56e", + "IPY_MODEL_bd22e6276014410c9373d4f4110be289", + "IPY_MODEL_aaf8b5844bad4225bf430b2ef5c636e4" + ], + "layout": "IPY_MODEL_fb9e17c9840c4142a1c390beb54e63c1" + } + }, + "e6ed2ec5c1324f9ba54250407a059fce": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ProgressStyleModel", + "state": { + "_model_module": "@jupyter-widgets/controls", + "_model_module_version": "1.5.0", + "_model_name": "ProgressStyleModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "StyleView", + "bar_color": null, + "description_width": "" + } + }, + "fb9e17c9840c4142a1c390beb54e63c1": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "_model_module": "@jupyter-widgets/base", + "_model_module_version": "1.2.0", + "_model_name": "LayoutModel", + "_view_count": null, + "_view_module": "@jupyter-widgets/base", + "_view_module_version": "1.2.0", + "_view_name": "LayoutView", + "align_content": null, + "align_items": null, + "align_self": null, + "border": null, + "bottom": null, + "display": null, + "flex": null, + "flex_flow": null, + "grid_area": null, + "grid_auto_columns": null, + "grid_auto_flow": null, + "grid_auto_rows": null, + "grid_column": null, + "grid_gap": null, + "grid_row": null, + "grid_template_areas": null, + "grid_template_columns": null, + "grid_template_rows": null, + "height": null, + "justify_content": null, + "justify_items": null, + "left": null, + "margin": null, + "max_height": null, + "max_width": null, + "min_height": null, + "min_width": null, + "object_fit": null, + "object_position": null, + "order": null, + "overflow": null, + "overflow_x": null, + "overflow_y": null, + "padding": null, + "right": null, + "top": null, + "visibility": null, + "width": null + } + } + }, + "version_major": 2, + "version_minor": 0 + } + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/Experiments/kaggle/llm_prompt_recovery/imgs/2nd_place_solution_architecture.png b/Experiments/kaggle/llm_prompt_recovery/imgs/2nd_place_solution_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..53d1fab9dfd58989afc55ebbc1f9e9ba0def78db GIT binary patch literal 188353 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 gA38N1IwW%3UkJT;vynGmz0*^9UhvlND_)W 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 NGE&bZF^~2A{s(E0U7r8| literal 0 HcmV?d00001