Spaces:
Build error
Build error
File size: 172,136 Bytes
0156aec |
1 2 |
{"cells":[{"cell_type":"code","execution_count":1,"metadata":{"executionInfo":{"elapsed":476,"status":"ok","timestamp":1720679526275,"user":{"displayName":"HUANG DONGHAO _","userId":"00977795705617022768"},"user_tz":-480},"id":"uWKRSV6eZsCn"},"outputs":[],"source":["%load_ext autoreload\n","%autoreload 2"]},{"cell_type":"code","execution_count":2,"metadata":{"application/vnd.databricks.v1+cell":{"cellMetadata":{"byteLimit":2048000,"rowLimit":10000},"inputWidgets":{},"nuid":"6d394937-6c99-4a7c-9d32-7600a280032f","showTitle":false,"title":""},"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":5,"status":"ok","timestamp":1720679529345,"user":{"displayName":"HUANG DONGHAO _","userId":"00977795705617022768"},"user_tz":-480},"id":"G5pNu3zgZBrL","outputId":"160a554f-fb08-4aa0-bc00-0422fb7c1fac"},"outputs":[{"name":"stdout","output_type":"stream","text":["workding dir: /Users/inflaton/code/engd/papers/rapget-translation\n"]}],"source":["import os\n","import sys\n","from pathlib import Path\n","\n","# check if workding_dir is in local variables\n","if \"workding_dir\" not in locals():\n"," workding_dir = str(Path.cwd().parent)\n","\n","os.chdir(workding_dir)\n","sys.path.append(workding_dir)\n","print(\"workding dir:\", workding_dir)"]},{"cell_type":"code","execution_count":3,"metadata":{"application/vnd.databricks.v1+cell":{"cellMetadata":{"byteLimit":2048000,"rowLimit":10000},"inputWidgets":{},"nuid":"9f67ec60-2f24-411c-84eb-0dd664b44775","showTitle":false,"title":""},"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1720679529345,"user":{"displayName":"HUANG DONGHAO _","userId":"00977795705617022768"},"user_tz":-480},"id":"hPCC-6m7ZBrM","outputId":"c7aa2c96-5e99-440a-c148-201d79465ff9"},"outputs":[{"name":"stdout","output_type":"stream","text":["loading env vars from: /Users/inflaton/code/engd/papers/rapget-translation/.env\n"]},{"data":{"text/plain":["True"]},"execution_count":3,"metadata":{},"output_type":"execute_result"}],"source":["from dotenv import find_dotenv, load_dotenv\n","\n","found_dotenv = find_dotenv(\".env\")\n","\n","if len(found_dotenv) == 0:\n"," found_dotenv = find_dotenv(\".env.example\")\n","print(f\"loading env vars from: {found_dotenv}\")\n","load_dotenv(found_dotenv, override=True)"]},{"cell_type":"code","execution_count":8,"metadata":{"application/vnd.databricks.v1+cell":{"cellMetadata":{"byteLimit":2048000,"rowLimit":10000},"inputWidgets":{},"nuid":"f1597656-8042-4878-9d3b-9ebfb8dd86dc","showTitle":false,"title":""},"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":3,"status":"ok","timestamp":1720679529345,"user":{"displayName":"HUANG DONGHAO _","userId":"00977795705617022768"},"user_tz":-480},"id":"1M3IraVtZBrM","outputId":"29ab35f6-2970-4ade-d85d-3174acf8cda0"},"outputs":[{"name":"stdout","output_type":"stream","text":["01-ai/Yi-1.5-9B-Chat None False datasets/mac/mac.tsv results/mac-results_few_shots.csv False 300\n"]}],"source":["import os\n","\n","model_name = os.getenv(\"MODEL_NAME\")\n","adapter_name_or_path = os.getenv(\"ADAPTER_NAME_OR_PATH\")\n","load_in_4bit = os.getenv(\"LOAD_IN_4BIT\") == \"true\"\n","data_path = os.getenv(\"DATA_PATH\")\n","results_path = \"results/mac-results_few_shots.csv\" # os.getenv(\"RESULTS_PATH\")\n","use_english_datasets = os.getenv(\"USE_ENGLISH_DATASETS\") == \"true\"\n","max_new_tokens = int(os.getenv(\"MAX_NEW_TOKENS\", 2048))\n","\n","print(model_name, adapter_name_or_path, load_in_4bit, data_path, results_path, use_english_datasets, max_new_tokens)"]},{"cell_type":"code","execution_count":9,"metadata":{"application/vnd.databricks.v1+cell":{"cellMetadata":{"byteLimit":2048000,"rowLimit":10000},"inputWidgets":{},"nuid":"b2a43943-9324-4839-9a47-cfa72de2244b","showTitle":false,"title":""},"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":564,"status":"ok","timestamp":1720679529907,"user":{"displayName":"HUANG DONGHAO _","userId":"00977795705617022768"},"user_tz":-480},"id":"UgMvt6dIZBrM","outputId":"ce37581c-fd26-46c2-ad87-d933d99f68f7"},"outputs":[{"name":"stdout","output_type":"stream","text":["Python 3.11.9\n","Name: torch\n","Version: 2.4.0\n","Summary: Tensors and Dynamic neural networks in Python with strong GPU acceleration\n","Home-page: https://pytorch.org/\n","Author: PyTorch Team\n","Author-email: [email protected]\n","License: BSD-3\n","Location: /Users/inflaton/anaconda3/envs/rapget/lib/python3.11/site-packages\n","Requires: filelock, fsspec, jinja2, networkx, sympy, typing-extensions\n","Required-by: accelerate, peft, torchaudio, torchvision\n","---\n","Name: transformers\n","Version: 4.43.3\n","Summary: State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow\n","Home-page: https://github.com/huggingface/transformers\n","Author: The Hugging Face team (past and future) with the help of all our contributors (https://github.com/huggingface/transformers/graphs/contributors)\n","Author-email: [email protected]\n","License: Apache 2.0 License\n","Location: /Users/inflaton/anaconda3/envs/rapget/lib/python3.11/site-packages\n","Requires: filelock, huggingface-hub, numpy, packaging, pyyaml, regex, requests, safetensors, tokenizers, tqdm\n","Required-by: peft\n","CPU times: user 10.6 ms, sys: 18.7 ms, total: 29.3 ms\n","Wall time: 2.04 s\n"]}],"source":["%%time\n","os.environ[\"TOKENIZERS_PARALLELISM\"] = \"true\"\n","\n","!python --version\n","!pip show torch transformers"]},{"cell_type":"code","execution_count":10,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"elapsed":1685,"status":"ok","timestamp":1720679531591,"user":{"displayName":"HUANG DONGHAO _","userId":"00977795705617022768"},"user_tz":-480},"id":"ZuS_FsLyZBrN","outputId":"2cba0105-c505-4395-afbd-2f2fee6581d0"},"outputs":[{"name":"stdout","output_type":"stream","text":["MPS is available\n"]}],"source":["from llm_toolkit.llm_utils import *\n","from llm_toolkit.translation_utils import *\n","\n","device = check_gpu()"]},{"cell_type":"code","execution_count":11,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["<class 'pandas.core.frame.DataFrame'>\n","RangeIndex: 1133 entries, 0 to 1132\n","Data columns (total 3 columns):\n"," # Column Non-Null Count Dtype \n","--- ------ -------------- ----- \n"," 0 chinese 1133 non-null object\n"," 1 english 1133 non-null object\n"," 2 01-ai/Yi-1.5-9B-Chat/shots-00 1133 non-null object\n","dtypes: object(3)\n","memory usage: 26.7+ KB\n"]}],"source":["import pandas as pd\n","\n","df = pd.read_csv(results_path)\n","df.info()"]},{"cell_type":"code","execution_count":13,"metadata":{},"outputs":[{"data":{"text/plain":["['chinese', 'english', '01-ai/Yi-1.5-9B-Chat/shots-00']"]},"execution_count":13,"metadata":{},"output_type":"execute_result"}],"source":["columns = df.columns[2:].to_list()\n","columns.sort()\n","columns = df.columns[:2].to_list() + columns\n","columns"]},{"cell_type":"code","execution_count":14,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["01-ai/Yi-1.5-9B-Chat/shots-00: {'meteor': 0.2624042529095214, 'bleu_scores': {'bleu': 0.052402107437040435, 'precisions': [0.22591505721240246, 0.07145192172979031, 0.03123880490076664, 0.014953453710264618], 'brevity_penalty': 1.0, 'length_ratio': 1.4560781715799933, 'translation_length': 43959, 'reference_length': 30190}, 'rouge_scores': {'rouge1': 0.2671501885495249, 'rouge2': 0.09630224265269001, 'rougeL': 0.22695449752648078, 'rougeLsum': 0.2285535947405311}, 'accuracy': 0.0, 'correct_ids': []}\n"]},{"data":{"text/html":["<div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>model</th>\n"," <th>shots</th>\n"," <th>meteor</th>\n"," <th>bleu_1</th>\n"," <th>rouge_l</th>\n"," <th>ews_score</th>\n"," <th>repetition_score</th>\n"," <th>total_repetitions</th>\n"," <th>rap</th>\n"," <th>num_max_output_tokens</th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>0</th>\n"," <td>01-ai/Yi-1.5-9B-Chat</td>\n"," <td>00</td>\n"," <td>0.262404</td>\n"," <td>0.052402</td>\n"," <td>0.226954</td>\n"," <td>0.008826</td>\n"," <td>1.593116</td>\n"," <td>1.601942</td>\n"," <td>0.246498</td>\n"," <td>18</td>\n"," </tr>\n"," </tbody>\n","</table>\n","</div>"],"text/plain":[" model shots meteor bleu_1 rouge_l ews_score \\\n","0 01-ai/Yi-1.5-9B-Chat 00 0.262404 0.052402 0.226954 0.008826 \n","\n"," repetition_score total_repetitions rap num_max_output_tokens \n","0 1.593116 1.601942 0.246498 18 "]},"execution_count":14,"metadata":{},"output_type":"execute_result"}],"source":["df = df[columns]\n","metrics_df = get_metrics(df, max_output_tokens=max_new_tokens, variant=\"shots\")\n","metrics_df"]},{"cell_type":"code","execution_count":15,"metadata":{},"outputs":[{"data":{"text/plain":["array(['01-ai/Yi-1.5-9B-Chat'], dtype=object)"]},"execution_count":15,"metadata":{},"output_type":"execute_result"}],"source":["models = metrics_df[\"model\"].unique()\n","models"]},{"cell_type":"code","execution_count":16,"metadata":{},"outputs":[],"source":["# list of markers for plotting\n","markers = [\"o\", \"x\", \"^\", \"s\", \"d\", \"P\", \"X\", \"*\", \"v\", \">\", \"<\", \"p\", \"h\", \"H\", \"+\", \"|\", \"_\"]\n","markers = {model: marker for model, marker in zip(models, markers)}"]},{"cell_type":"code","execution_count":19,"metadata":{},"outputs":[{"data":{"image/png":"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uHHjNcPJjTh27JiKiork6+tr0+7r66tdu3bZNcaLL74of39/mwAXFRWlRx55RE2bNtW+ffs0ceJE9ezZU2lpaXJ2di42xt69e/XWW29d85bD6dOna8qUKcV39O8v1ahhV60AgCooPf3S7BcAoPoqLLSrm93ha8aMGVq1apV1UY2EhASNGjVKderUkSQdP35cnTt3VmZmZtmLvUEJCQlKSkpSamqq3N3dre0DBgyw/nzbbbcpJCREzZs3V2pqqrp3724zxqFDhxQVFaW//e1vGjlyZKnnmjBhgmJjY63beXl5CggIkFavlrjtEACqL247BADk5Ul2LD5o922H69evV35+vnX7tdde04kTJ6zbFy9e1O7du8tUo4+Pj5ydnZWbm2vTnpubKz8/v2seO3v2bCUkJOjLL79USEjINfs2a9ZMPj4+2rt3r0374cOHdc8996hTp0565513rjmGm5ubPD09bT4AAAAAYK8bfuarPJ4Bc3V1Vbt27ZSSkmJtM5vNSklJUceOHUs9bubMmZo2bZqSk5PVvn37657n4MGDOn78uBo2bGhtO3TokLp166Z27dpp2bJlcnIq06r7AAAAAFAmZVpqviLExsZq2LBhat++vTp06KC5c+fq7Nmzio6OliQNHTpUjRo10vTp0yVduv0xLi5OK1euVFBQkHJyciRJHh4e8vDw0JkzZzRlyhT17dtXfn5+2rdvn1544QW1aNFCkZGRkv4bvAIDAzV79mwdPXrUWs/1ZtwAAAAA4EbYHb4uv6z46rY/q3///jp69Kji4uKUk5Ojtm3bKjk52boIR1ZWls2s1MKFC1VQUKB+/frZjBMfH6/JkyfL2dlZ27dv14oVK3Tq1Cn5+/urR48emjZtmvVdX//+97+1d+9e7d27V40bN7YZpyJWdQQAAAAAu9/z5eTkpJ49e1oDzGeffaZ7771XN910k6RLS7EnJyerqKio4qr9C+E9XwAASSy4AQCwOxvYPfM1bNgwm+3BgwcX63P5JccAAAAAAFt2h69ly5ZVZB0AAAAAUKWxxB8AAAAAGMDuma/HH3/crn5Lly694WIAAAAAoKqyO3wtX75cgYGBuv3221kREAAAAADKyO7wNXr0aK1atUq//vqroqOjNXjwYNWtW7ciawMAAACAKsPuZ74SExOVnZ2tF154QZ999pkCAgL06KOPav369dVq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AAAGIHwBAAAAgAEIXwAAAABgAMIXAAAAABiA8AUAAAAABiB8AQAAAIABCF8AAAAAYADCFwAAAAAYgPAFAAAAAAYgfAEAAACAAQhfAAAAAGAAwhcAAAAAGIDwBQAAAAAGIHwBAAAAgAEIXwAAAABgAMIXAAAAABiA8AUAAAAABiB8AQAAAIABCF8AAAAAYADCFwAAAAAYgPAFAAAAAAYgfAEAAACAAQhfAAAAAGAAwhcAAAAAGIDwBQAAAAAGIHwBAAAAgAEIXwAAAABgAMIXAAAAABiA8AUAAAAABiB8AQAAAIABCF8AAAAAYADCFwAAAAAYgPAFAAAAAAYgfAEAAACAAQhfAAAAAGAAwhcAAAAAGIDwBQAAAAAGIHwBAAAAgAEIXwAAAABgAMIXAAAAABiA8AUAAAAABiB8AQAAAIABCF8AAAAAYADCFwAAAAAYgPAFAAAAAAYgfAEAAACAAQhfAAAAAGAAwhcAAAAAGIDwBQAAAAAGIHwBAAAAgAEIXwAAAABgAMIXAAAAABiA8AUAAAAABiB8AQAAAIABCF8AAAAAYADCFwAAAAAYgPAFAAAAAAYgfAEAAACAAQhfAAAAAGAAwhcAAAAAGIDwBQAAAAAGIHwBAAAAgAEIXwAAAABgAMIXAAAAABiA8AUAAAAABiB8AQAAAIABCF8AAAAAYADCFwAAAAAYgPAFAAAAAAYgfAEAAACAAQhfAAAAAGAAwhcAAAAAGIDwBQAAAAAGIHwBAAAAgAEIXwAAAABgAMIXAAAAABiA8AUAAAAABiB8AQAAAIABCF8AAAAAYADCFwAAAAAYgPAFAAAAAAYgfAEAAACAAQhfAAAAAGAAwhcAAAAAGIDwBQAAAAAGIHwBAAAAgAEIXwAAAABgAMIXAAAAABiA8AUAAAAABiB8AQAAAIABCF8AAAAAYADCFwAAAAAYgPAFAAAAAAYgfAEAAACAAQhfAAAAAGAAwhcAAAAAGIDwBQAAAAAGIHwBAAAAgAEIXwAAAABgAMIXAAAAABiA8AUAAAAABiB8AQAAAIABCF8AAAAAYADCFwAAAAAYgPAFAAAAAAYgfAEAAACAAQhfAAAAAGAAwhcAAAAAGIDwBQAAAAAGIHwBAAAAgAEIXwAAAABgAMIXAAAAABiA8AUAAAAABiB8AQAAAIABCF8AAAAAYADCFwAAAAAYgPAFAAAA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7t27V/h1AEBJCF8AUAkcO3ZMRUVFNrMDkuTr66tdu3b9qbFr1KihKVOmWLebNm2qtLQ0/etf/7pm+Pr000/1xhtvWLcDAwM1d+5c/f3vf1fjxo315Zf2BdA/a+rUqbr33ntVq1YtffnllxozZozOnDmjp556qtRjIiMj9frrr6tLly5q3ry5UlJS9PHHH6uoqMim37p16+Th4SHpUhBq2LCh1q1bJyen0m8c+eWXX9SsWTPVqFHjurWbzWYtX75ctWvXliQNGTJEKSkp1vDVt29fm/5Lly5V/fr1lZmZqTZt2qh+/fqSpHr16snPz6/U82RlZcliscjf37/E/YMHD9aECROst/599913SkpKKjF8XfmdXDZx4sQy3ep6+vTpYmN07txZX3zxhX755RdZLBbdcsstJR57yy236OTJkzp69KgaNGggSVqwYIGWLFmigoICFRYWyt3dvcRff39/f5vbGwHAaIQvAJBUs4azMqdGXrdf+q8nNHxZxnX7LY8OU4emde06r5F69uypTZs2SboUln7++WdJlxbyWLp0qbKysnT+/HkVFBRccyW+nTt36vDhw8VmEKKjozVp0iSNHTtWnp6epR5/5R+8Bw8eXOz5nLKYNGmS9efbb79dZ8+e1axZs/TUU08pKytLwcHB1v2XQ8K8efM0cuRItW7dWiaTSc2bN1d0dLTNLZySdM8992jhwoWSpJMnT2rBggXq2bOn0tPTFRgYWOL3WZZbSYOCgqzBS5IaNmxo8wzfL7/8ori4OP3www86duyYzGazpEthqk2bNnaf5/LzXKXdjlm/fn098MADWr58uSwWix544AH5+PiU2PfK7+SyunWv/+/6lWrXrq2tW7fatF09y1WW73HQoEF66aWXdPLkScXHx6tTp07W58uuPse5c+fKVCsAlCfCFwDo0jMo9tz+1/nm+mro5a6c0xdKfO7LJMnPy12db64vZ6fSb3srKx8fHzk7Oys3N9emPTc395ozHldbsmSJ9Q/il2dmkpKS9Pzzz2vOnDnq2LGjateurVmzZumHH34odZy1a9fqvvvuK/EP8y4uLnJxufZ3eeXqfNcKaTciPDxc06ZNU35+vvz9/W3OdTkk1K9fX2vWrNGFCxd0/Phx+fv7a/z48WrWrJnNWDfddJNatGhh3V6yZIm8vLy0ePFivfLKKyV+ny1bttS3336rwsLC685+Xb3fZDJZA5YkPfjggwoMDNTixYvl7+8vs9msNm3aqKCgoEzfyeUgdfLkSets2dUef/xxPfnkk5IuhfHSXP2d3AgnJ6dSx2jRooVMJpN27typhx9+uNj+nTt3ytvb2+Y6vLy8rOP961//UosWLXTnnXcqIiLC5tgTJ06oefPmf6p2APgzWHADAMrA2cmk+AcvzaRcHa0ub8c/GFyuwUu69LxKu3btlJKSYm0zm83W1d/s1ahRI7Vo0UItWrSwrnr33XffqVOnThozZoxuv/12tWjRwmZRh5J8+umn6tOnz41djGStoUWLFtZbx8rLtm3b5O3tLTc3N7m4uNic6+oZGnd3dzVq1EgXL17URx99dN1rMplMcnJysgaukr7Pxx57TGfOnNGCBQtKHMPe5f+PHz+u3bt36+WXX1b37t2tt9td6fIzXlffLnm15s2by9PTU5mZmaX2iYqKst62Fxl5/VngilKvXj3dd999WrBggc0KjNKl5fI/+OAD9e/fv9Rn+jw8PPT000/r+eefLzZ7tmPHjhIXEQEAoxC+AKCMoto01MLBd8jPy3bWx8/LXQsH36GoNg0r5LyxsbFavHixVqxYoZ07d2r06NE6e/asoqOjrX1ycnK0bds27d27V5L0v//7v9q2bds13y1188036z//+Y/Wr1+vPXv2aNKkScrIKP3WyiNHjug///mPXUuul9W2bdu0bds2nTlzRkePHtW2bdtsAsMnn3yi1q1bW7c/++wzLVmyRDt27NDevXu1cOFCvfbaaxo7duw1z/PDDz/o448/1v79+7Vp0yZFRUXJbDbrhRdesOmXn5+vnJwc5eTkaOfOnRo7dqzOnDlT4qqBl4WHh+uFF17Qc889pxdeeEFpaWn67bfflJKSor/97W9asWKFXd+Ft7e36tWrp3feeUd79+7Vhg0bFBsba9OnQYMGqlmzppKTk5Wbm6vTp0+XONblxVmutaCIs7Ozdu7cqczMTDk7l3477JXfyeXPsWPH7LqmyywWS7ExcnJyrLN+8+fPV35+viIjI/XNN9/o999/V3Jysu677z41atTI+kxcaZ544gnt2bNHH330kbXtwIEDOnToULHZMAAwErcdAsANiGrTUPcF+yn91xM68scFNajtrg5N65b7jNeV+vfvr6NHjyouLk45OTlq27atkpOTbRbhWLRokc3i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r/fvVlZWlqVGjRqW2NjYYvvefPNNiyTL999/b7FYLJZff/3VIsny448/Wvts377dIsn67/5lK1assDRu3PiaNV/z9yYAVQIzXwBwpdf8S//8a4j02+biM142LJf2L420bZ57W/HxyqCgoEBbtmxRRESEtc3JyUkRERFKS0sr01hXM5vNaty4sT788ENlZmYqLi5OEydO1L/+9a9rHrd27Vo9+OCD1luuli1bpk2bNmnx4sUaPny4BgwYoN69e/+p2uwVExMjHx8fdejQQUuXLpXFYrlm//z8fLm7u9u01axZU99++22px5w5c0bvv/++WrRooXr16pXa74MPPpCHh4fGjBlT4v4rZxD37dunNWvWaN26dVq3bp2+/vprJSQkWPefPXtWsbGx+s9//qOUlBQ5OTnp4YcfltlsliTrbaeXZ14+/vjjEs954sQJZWZmqn379qXWLUk7duzQ5s2b5erqatO+ceNGnTt3ThERERo8eLCSkpJ09uzZa45Vs2ZNSZf+3b2Wdu3aKSgoSB999JEkKSsrS998842GDBlyzeMqyv/8z/+osLCwxBmuJ554Qh4eHlq1alWJx54/f17vvvuuJBX7Djt06KCDBw/qwIED5V4zgMrDxdEFAEClcib3+n0kqaiwXE977NgxFRUVydfX16bd19dXu3bt+lNj16hRQ1OmTLFuN23aVGlpafrXv/6lRx99tNTjPv30U73xxhvW7cDAQM2dO1d///vf1bhxY3355Zd/qi57TZ06Vffee69q1aqlL7/8UmPGjNGZM2f01FNPlXpMZGSkXn/9dXXp0kXNmzdXSkqKPv74YxUV2S6asm7dOuvtb2fPnlXDhg21bt06OTmV/neXv/zyi5o1a6YaNWpct3az2azly5erdu3akqQhQ4YoJSVFr776qiSpb9++Nv2XLl2q+vXrKzMzU23atFH9+vUlSfXq1ZOfn1+p58nKypLFYpG/f/HQf/kaL168qPz8fDk5OWn+/Pk2ff75z39qwIABcnZ2Vps2bdSsWTN9+OGHGj58eInnO3funF5++WU5Ozura9eu1/0eHn/8cS1dulSDBw/W8uXLdf/991uv7WoDBw6Us7OzTVtmZqaaNGly3fNctmDBAi1ZssSm7e2339agQYO0Z88eeXl5qWHDhsWOc3V1VbNmzbRnzx6b9k6dOsnJyUnnzp2TxWJR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","text/plain":["<Figure size 1000x600 with 1 Axes>"]},"metadata":{},"output_type":"display_data"}],"source":["# plot meteor vs rpp\n","import matplotlib.pyplot as plt\n","\n","fig, ax = plt.subplots(figsize=(10, 6))\n","# set grid\n","ax.grid(True)\n","ax.set_axisbelow(True)\n","ax.minorticks_on()\n","ax.grid(which=\"major\", linestyle=\"-\", linewidth=\"0.5\", color=\"red\")\n","# ax.grid(which=\"minor\", linestyle=\":\", linewidth=\"0.5\", color=\"black\")\n","\n","for model in models:\n"," model_df = metrics_df[metrics_df[\"model\"] == model]\n"," ax.plot(\n"," model_df[\"shots\"],\n"," model_df[\"meteor\"],\n"," label=model + \" (METEOR)\",\n"," marker=markers[model],\n"," )\n"," ax.plot(\n"," model_df[\"shots\"],\n"," model_df[\"rap\"],\n"," label=model + \" (RAP-METEOR)\",\n"," linestyle=\"--\",\n"," marker=markers[model],\n"," )\n","\n","ax.set_xlabel(\"Number of Shots\")\n","ax.set_ylabel(\"METEOR & RAP-METEOR\")\n","ax.legend(loc=\"lower center\", bbox_to_anchor=(0.5, -0.85))\n","plt.show()"]},{"cell_type":"code","execution_count":33,"metadata":{},"outputs":[{"data":{"image/png":"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rFkKDQ11bisrK9PatWt1ySWXmJ8QAAAAAHyA2+XqxRdflPTHmavp06e7XAIYGBiomJgYTZ8+3fyEAAAAAOAD3C5Xubm5kqTu3btr0aJFqlu3bqWF8habzSabzaaysjJvRwEAAADgYyzGmW6icsOfu1osFtMCVQV2u11Wq1VFRUUKCwvzdhwAgDelpEgZGd5OAQDwEk+6gccPtJCkefPmqX379goJCVFISIg6dOigt95665zCAgAAAMCFwOP3XE2dOlVjxozRQw89pK5du0qSMjMz9cADD+jAgQN69NFHTQ8JAAAAAFWdx+XqlVde0euvv667777buS4lJUVt27bVU089RbkCAAAAUC15fFlgQUGBunTpUm59ly5dVFBQYEooAAAAAPA1Hperli1b6oMPPii3/v3331erVq1MCQUAAAAAvsbtywKvvfZaLVq0SOPHj1f//v21du1a5z1X69ev14oVKyosXQAAAABQHbh95mr16tU6efKkbr31Vm3atEn169fXkiVLtGTJEtWvX1+bN2/WzTffXJlZAQAAAKDKOqdHsV922WV6++23tXXrVm3dulVvv/224uPjPZ5n7dq1Sk5OVlRUlCwWi5YsWXLW8atXr5bFYin3KSwsdI4pKyvTmDFj1Lx5c4WEhOiiiy7S008/rb/xOi8AAAAA+EsePS0wJyfHpchUpEOHDm7Pd/ToUcXFxSk1NVW33HKL2/vt3LnT5QVeERERzp+nTJmi119/XW+++abatm2rLVu2aMiQIbJarRo2bJjb3wEAAAAAnvCoXF133XVnPQNksVhUVlbm9nxJSUlKSkryJIKkP8pUnTp1Kty2YcMG3XTTTerdu7ckKSYmRu+99542b97s8fcAAAAAgLs8KlebNm1SgwYNKiuL2zp27KiSkhK1a9dOTz31lPPBGtIfj4SfMWOGdu3apdatW+vrr79WZmampk6desb5SkpKVFJS4ly22+2Vmh8AAADAhcejctW0aVOXS/DOt8jISE2fPl0JCQkqKSnRrFmz1K1bN23atEmXXnqpJGnUqFGy2+265JJL5O/vr7KyMj377LMaOHDgGeedNGmSxo8fX35D//5SQEBlHQ4AwBds3iylpHg7BQDAW0pL3R5qMdx80oOfn58KCwsrrVxZLBYtXrxYffr08Wi/a665Rk2bNtVbb70lSZo/f75Gjhyp559/Xm3btlV2drYeeeQRTZ06VYMGDapwjorOXEVHR6uoqMjl3i4AQDWUkiJlZHg7BQDAS+x2u6xWq1vdwO0zV9dcc40CAwP/djizderUSZmZmc7lkSNHatSoUbr99tslSe3bt9fPP/+sSZMmnbFcBQUFKSgo6LzkBQAAAHBhcrtcrVq1qjJznLPs7GxFRkY6l48dOyY/P9cnzPv7+8vhcJzvaAAAAACqEY/uuTJbcXGxdu/e7VzOzc1Vdna2wsPD1bRpU40ePVr5+fmaN2+eJGnatGlq3ry52rZtqxMnTmjWrFlauXKlPv/8c+ccycnJevbZZ9W0aVO1bdtWX331laZOnarU1NTzfnwAAAAAqg+vlqstW7aoe/fuzuX09HRJ0qBBgzR37lwVFBQoLy/Puf3kyZN67LHHlJ+fr5o1a6pDhw764osvXOZ45ZVXNGbMGA0dOlT79+9XVFSU7r//fo0dO/b8HRgAAACAasftB1pUJ57ctAYAuMDxQAsAqNY86QZ+Z90KAAAAAHCLx5cFlpWVae7cuVqxYoX2799f7kERK1euNC0cAAAAAPgKj8vV8OHDNXfuXPXu3Vvt2rWTxWKpjFwAAAAA4FM8Llfz58/XBx98oBtvvLEy8gAAAACAT/L4nqvAwEC1bNmyMrIAAAAAgM/yuFw99thjeumll8RDBgEAAADg/3h8WWBmZqZWrVqlTz/9VG3btlVAQIDL9kWLFpkWDgAAAAB8hcflqk6dOrr55psrI4vX2Ww22Ww2lZWVeTsKAAAAAB/DS4QrwEuEAQBOvEQYAKo1XiIMAAAAAOeZx5cFStKHH36oDz74QHl5eTp58qTLtm3btpkSDAAAAAB8icdnrl5++WUNGTJEDRs21FdffaVOnTqpXr162rNnj5KSkiojIwAAAABUeR6Xq9dee00zZszQK6+8osDAQD3++ONavny5hg0bpqKiosrICAAAAABVnsflKi8vT126dJEkhYSE6MiRI5Kku+66S++995656QAAAADAR3hcrho1aqRDhw5Jkpo2baovv/xSkpSbm8uLhQEAAABUWx6Xq2uvvVYZ//tI2iFDhujRRx9Vjx491L9//wv2/VcAAAAA8Fc8flrgjBkz5HA4JElpaWmqV6+eNmzYoJSUFN1///2mBwQAAAAAX+BxufLz85Of3/+d8Lr99tt1++23mxoKAAAAAHzNOb1EeN26dbrzzjvVuXNn5efnS5LeeustZWZmmhoOAAAAAHyFx+Vq4cKF6tmzp0JCQvTVV1+ppKREklRUVKSJEyeaHhAAAAAAfIHH5eqZZ57R9OnTNXPmTAUEBDjXd+3aVdu2bTM13Plms9kUGxurxMREb0cBAAAA4GM8Llc7d+7U1VdfXW691WrV4cOHzcjkNWlpacrJyVFWVpa3owAAAADwMef0nqvdu3eXW5+ZmakWLVqYEgoAAAAAfI3H5eree+/V8OHDtWnTJlksFu3du1fvvPOORowYoQcffLAyMgIAAABAlefxo9hHjRolh8Oh6667TseOHdPVV1+toKAgjRgxQg8//HBlZAQAAACAKs9iGIZxLjuePHlSu3fvVnFxsWJjYxUaGmp2Nq+x2+2yWq0qKipSWFiYt+MAALwpJUXKyPB2CgCAl3jSDTw+c/WnwMBAxcbGnuvuAAAAAHBBcbtcpaamujVu9uzZ5xwGAAAAAHyV2+Vq7ty5atasmeLj43WOVxICAAAAwAXL7XL14IMP6r333lNubq6GDBmiO++8U+Hh4ZWZDQAAAAB8htuPYrfZbCooKNDjjz+upUuXKjo6Wv369dNnn33GmSwAAAAA1Z5H77kKCgrSHXfcoeXLlysnJ0dt27bV0KFDFRMTo+Li4srKCAAAAABVnscvEXbu6Ocni8UiwzBUVlZmZiYAAAAA8DkelauSkhK999576tGjh1q3bq1vv/1Wr776qvLy8i6I91zZbDbFxsYqMTHR21EAAAAA+Bi3XyI8dOhQzZ8/X9HR0UpNTdXAgQNVv379ys7nFbxEGADgxEuEAaBaq5SXCE+fPl1NmzZVixYttGbNGq1Zs6bCcYsWLfIsLQAAAABcANwuV3fffbcsFktlZgEAAAAAn+XRS4QBAAAAABU756cFAgAAAAD+D+UKAAAAAExAuQIAAAAAE3i1XK1du1bJycmKioqSxWLRkiVLzjp+9erVslgs5T6FhYUu4/Lz83XnnXeqXr16CgkJUfv27bVly5ZKPBIAAAAA1Z3bD7SoDEePHlVcXJxSU1N1yy23uL3fzp07XZ4xHxER4fz5999/V9euXdW9e3d9+umnatCggX744QfVrVvX1OwAAAAAcDqvlqukpCQlJSV5vF9ERITq1KlT4bYpU6YoOjpac+bMca5r3rz5uUYEAAAAALf45D1XHTt2VGRkpHr06KH169e7bMvIyFBCQoJuu+02RUREKD4+XjNnzvRSUgAAAADVhU+Vq8jISE2fPl0LFy7UwoULFR0drW7dumnbtm3OMXv27NHrr7+uVq1a6bPPPtODDz6oYcOG6c033zzjvCUlJbLb7S4fAAAAAPCExTAMw9shJMlisWjx4sXq06ePR/tdc801atq0qd566y1JUmBgoBISErRhwwbnmGHDhikrK0sbN26scI6nnnpK48ePL7e+qFcvhQUEeJQHAHCB2bxZ6tTJ2ykAAF5iLy2VddkyFRUVuTz3oSJevefKDJ06dVJmZqZzOTIyUrGxsS5j2rRpo4ULF55xjtGjRys9Pd25bLfbFR0dLb3/vvQXv0AAwAUuJUXKyPB2CgCAt9jtktXq1lCfL1fZ2dmKjIx0Lnft2lU7d+50GbNr1y41a9bsjHMEBQUpKCio0jICAAAAuPB5tVwVFxdr9+7dzuXc3FxlZ2crPDxcTZs21ejRo5Wfn6958+ZJkqZNm6bmzZurbdu2OnHihGbNmqWVK1fq888/d87x6KOPqkuXLpo4caL69eunzZs3a8aMGZoxY8Z5Pz4AAAAA1YdXy9WWLVvUvXt35/Kfl+YNGjRIc+fOVUFBgfLy8pzbT548qccee0z5+fmqWbOmOnTooC+++MJljsTERC1evFijR4/WhAkT1Lx5c02bNk0DBw48fwcGAAAAoNqpMg+0qErsdrusVqtbN60BAC5w3HMFANWaJ93Apx7FDgAAAABVFeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMQLkCAAAAABNQrk5js9kUGxurxMREb0cBAAAA4GMoV6dJS0tTTk6OsrKyvB0FAAAAgI+hXAEAAACACShXAAAAAGACyhUAAAAAmIByBQAAAAAmoFwBAAAAgAkoVwAAAABgAsoVAAAAAJiAcgUAAAAAJqBcAQAAAIAJKFcAAAAAYALKFQAAAACYgHJ1GpvNptjYWCUmJno7CgAAAAAfQ7k6TVpamnJycpSVleXtKAAAAAB8DOUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATUK4AAAAAwASUq9PYbDbFxsYqMTHR21EAAAAA+BjK1WnS0tKUk5OjrKwsb0cBAAAA4GMoVwAAAABgAsoVAAAAAJiAcgUAAAAAJqBcAQAAAIAJKFcAAAAAYALKFQAAAACYgHIFAAAAACbwarlau3atkpOTFRUVJYvFoiVLlpx1/OrVq2WxWMp9CgsLKxw/efJkWSwWPfLII+aHBwAAAIDTeLVcHT16VHFxcbLZbB7tt3PnThUUFDg/ERER5cZkZWXpP//5jzp06GBWXAAAAAA4oxre/PKkpCQlJSV5vF9ERITq1Klzxu3FxcUaOHCgZs6cqWeeeeZvJAQAAAAA9/jkPVcdO3ZUZGSkevToofXr15fbnpaWpt69e+v66693a76SkhLZ7XaXDwAAAAB4wqtnrjwVGRmp6dOnKyEhQSUlJZo1a5a6deumTZs26dJLL5UkzZ8/X9u2bVNWVpbb806aNEnjx48vv6F/fykgwKz4AABftHmzlJLi7RQAAG8pLXV7qMUwDKMSo7jNYrFo8eLF6tOnj0f7XXPNNWratKneeust/fLLL0pISNDy5cud91p169ZNHTt21LRp0844R0lJiUpKSpzLdrtd0dHRKioqUlhY2LkcDgDgQpGSImVkeDsFAMBL7Ha7rFarW93Ap85cVaRTp07KzMyUJG3dulX79+93nsWSpLKyMq1du1avvvqqSkpK5O/vX26OoKAgBQUFnbfMAAAAAC48Pl+usrOzFRkZKUm67rrr9O2337psHzJkiC655BL985//rLBYAQAAAIAZvFquiouLtXv3budybm6usrOzFR4erqZNm2r06NHKz8/XvHnzJEnTpk1T8+bN1bZtW504cUKzZs3SypUr9fnnn0uSateurXbt2rl8R61atVSvXr1y6wEAAADATF4tV1u2bFH37t2dy+np6ZKkQYMGae7cuSooKFBeXp5z+8mTJ/XYY48pPz9fNWvWVIcOHfTFF1+4zAEAAAAA3lBlHmhRlXhy0xoA4ALHAy0AoFrzpBv45HuuAAAAAKCqoVwBAAAAgAkoVwAAAABgAsoVAAAAAJiAcgUAAAAAJqBcAQAAAIAJKFensdlsio2NVWJiorejAAAAAPAxlKvTpKWlKScnR1lZWd6OAgAAAMDHUK4AAAAAwASUKwAAAAAwAeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATUK5OY7PZFBsbq8TERG9HAQAAAOBjKFenSUtLU05OjrKysrwdBQAAAICPoVwBAAAAgAkoVwAAAABgAsoVAAAAAJiAcgUAAAAAJqBcAQAAAIAJKFcAAAAAYALKFQAAAACYgHIFAAAAACagXAEAAACACShXAAAAAGACyhUAAAAAmIBydRqbzabY2FglJiZ6OwoAAAAAH0O5Ok1aWppycnKUlZXl7SgAAAAAfAzlCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATeLVcrV27VsnJyYqKipLFYtGSJUvOOn716tWyWCzlPoWFhc4xkyZNUmJiomrXrq2IiAj16dNHO3furOQjAQAAAFDdebVcHT16VHFxcbLZbB7tt3PnThUUFDg/ERERzm1r1qxRWlqavvzySy1fvlylpaW64YYbdPToUbPjAwAAAIBTDW9+eVJSkpKSkjzeLyIiQnXq1Klw27Jly1yW586dq4iICG3dulVXX331ucQEAAAAgL/kk/dcdezYUZGRkerRo4fWr19/1rFFRUWSpPDw8PMRDQAAAEA15dUzV56KjIzU9OnTlZCQoJKSEs2aNUvdunXTpk2bdOmll5Yb73A49Mgjj6hr165q167dGectKSlRSUmJc9lut1dKfgAAAAAXLp8qVxdffLEuvvhi53KXLl30448/6sUXX9Rbb71VbnxaWpq+++47ZWZmnnXeSZMmafz48eU39O8vBQT87dwAAB+2ebOUkuLtFAAAbyktdXuoT5WrinTq1KnC8vTQQw/p448/1tq1a9WkSZOzzjF69Gilp6c7l+12u6Kjo6X335fCwkzPDADwISkpUkaGt1MAALzFbpesVreG+ny5ys7OVmRkpHPZMAw9/PDDWrx4sVavXq3mzZv/5RxBQUEKCgqqzJgAAAAALnBeLVfFxcXavXu3czk3N1fZ2dkKDw9X06ZNNXr0aOXn52vevHmSpGnTpql58+Zq27atTpw4oVmzZmnlypX6/PPPnXOkpaXp3Xff1UcffaTatWs734FltVoVEhJyfg8QAAAAQLXh1XK1ZcsWde/e3bn856V5gwYN0ty5c1VQUKC8vDzn9pMnT+qxxx5Tfn6+atasqQ4dOuiLL75wmeP111+XJHXr1s3lu+bMmaPBgwdX3sEAAAAAqNYshmEY3g5R1djtdlmtVhUVFSmMe64AoHrjnisAqNY86QY++Z4rAAAAAKhqKFcAAAAAYALKFQAAAACYgHIFAAAAACagXAEAAACACShXAAAAAGACyhUAAAAAmIBydRqbzabY2FglJiZ6OwoAAAAAH0O5Ok1aWppycnKUlZXl7SgAAAAAfEwNbweoigzDkPTH25gBANVcaanE3wcAUG392Qn+7AhnQ7mqwJEjRyRJ0dHRXk4CAKgSrFZvJwAAeNmRI0dk/Yu/DyyGOxWsmnE4HNq7d69q164ti8Xi7TgAAC+x2+2Kjo7WL7/8orCwMG/HAQB4gWEYOnLkiKKiouTnd/a7qihXAACcgd1ul9VqVVFREeUKAPCXeKAFAAAAAJiAcgUAAAAAJqBcAQBwBkFBQRo3bpyCgoK8HQUA4AO45woAAAAATMCZKwAAAAAwAeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAACTZbDbFxMQoODhYl19+uTZv3uzcduLECaWlpalevXoKDQ3Vrbfeqn379nkxLQCgKqJcAQCqvffff1/p6ekaN26ctm3bpri4OPXs2VP79++XJD366KNaunSpFixYoDVr1mjv3r265ZZbvJwaAFDV8Ch2AEC1d/nllysxMVGvvvqqJMnhcCg6OloPP/ywHnzwQTVo0EDvvvuu+vbtK0nasWOH2rRpo40bN+qKK67wZnQAQBXCmSsAQLV28uRJbd26Vddff71znZ+fn66//npt3LhRW7duVWlpqcv2Sy65RE2bNtXGjRu9ERkAUEVRrgAA1dqBAwdUVlamhg0buqxv2LChCgsLVVhYqMDAQNWpU6fC7QAA/IlyBQAAAAAmoFwBAKq1+vXry9/fv9zT//bt26dGjRqpUaNGOnnypA4fPlzhdgAA/kS5AgBUa4GBgbrsssu0YsUK5zqHw6EVK1aoc+fOuuyyyxQQEOCyfefOncrLy1Pnzp29ERkAUEXV8HYAAAC8LT09XYMGDVJCQoI6deqkadOm6ejRoxoyZIisVqvuuecepaenKzw8XGFhYXr44YfVuXNnnhQIAHBBuQIAVHv9+/fXb7/9prFjx6qwsFAdO3bUsmXLnA+5ePHFF+Xn56dbb71VJSUl6tmzp1577TUvpwYAVDW85woAAAAATMA9VwAAAABgAsoVAAAAAJiAcgUAAAAAJqBcAQAAAIAJKFcAAAAAYALKFQAAAACYgHIFAAAAACagXAEAfNJPP/0ki8Wi7Oxsb0dx2rFjh6644goFBwerY8eO5zyPxWLRkiVLTMsFADg/KFcAgHMyePBgWSwWTZ482WX9kiVLZLFYvJTKu8aNG6datWpp586dWrFiRYVjfvvtNz344INq2rSpgoKC1KhRI/Xs2VPr1683NUu3bt30yCOPmDonAODsKFcAgHMWHBysKVOm6Pfff/d2FNOcPHnynPf98ccfdeWVV6pZs2aqV69ehWNuvfVWffXVV3rzzTe1a9cuZWRkqFu3bjp48OA5fy8AoGqgXAEAztn111+vRo0aadKkSWcc89RTT5W7RG7atGmKiYlxLg8ePFh9+vTRxIkT1bBhQ9WpU0cTJkzQqVOnNHLkSIWHh6tJkyaaM2dOufl37NihLl26KDg4WO3atdOaNWtctn/33XdKSkpSaGioGjZsqLvuuksHDhxwbu/WrZseeughPfLII6pfv7569uxZ4XE4HA5NmDBBTZo0UVBQkDp27Khly5Y5t1ssFm3dulUTJkyQxWLRU089VW6Ow4cPa926dZoyZYq6d++uZs2aqVOnTho9erRSUlJcxh44cEA333yzatasqVatWikjI8Nl+5o1a9SpUycFBQUpMjJSo0aN0qlTp5y/zzVr1uill16SxWKRxWLRTz/9pN9//10DBw5UgwYNFBISolatWlX4OwUAnBvKFQDgnPn7+2vixIl65ZVX9Ouvv/6tuVauXKm9e/dq7dq1mjp1qsaNG6d//OMfqlu3rjZt2qQHHnhA999/f7nvGTlypB577DF99dVX6ty5s5KTk51ngQ4fPqxrr71W8fHx2rJli5YtW6Z9+/apX79+LnO8+eabCgwM1Pr16zV9+vQK87300kt64YUX9O9//1vffPONevbsqZSUFP3www+SpIKCArVt21aPPfaYCgoKNGLEiHJzhIaGKjQ0VEuWLFFJSclZfx/jx49Xv3799M033+jGG2/UwIEDdejQIUlSfn6+brzxRiUmJurrr7/W66+/rjfeeEPPPPOMM2vnzp117733qqCgQAUFBYqOjtaYMWOUk5OjTz/9VNu3b9frr7+u+vXru/FfBwDgFgMAgHMwaNAg46abbjIMwzCuuOIKIzU11TAMw1i8eLFx+l8v48aNM+Li4lz2ffHFF41mzZq5zNWsWTOjrKzMue7iiy82rrrqKufyqVOnjFq1ahnvvfeeYRiGkZuba0gyJk+e7BxTWlpqNGnSxJgyZYphGIbx9NNPGzfccIPLd//yyy+GJGPnzp2GYRjGNddcY8THx//l8UZFRRnPPvusy7rExERj6NChzuW4uDhj3LhxZ53nww8/NOrWrWsEBwcbXbp0MUaPHm18/fXXLmMkGU8++aRzubi42JBkfPrpp4ZhGMa//vUv4+KLLzYcDodzjM1mM0JDQ52/w2uuucYYPny4y7zJycnGkCFD/vJYAQDnhjNXAIC/bcqUKXrzzTe1ffv2c56jbdu28vP7v7+WGjZsqPbt2zuX/f39Va9ePe3fv99lv86dOzt/rlGjhhISEpw5vv76a61atcp5xig0NFSXXHKJpD/uj/rTZZdddtZsdrtde/fuVdeuXV3Wd+3a1eNjvvXWW7V3715lZGSoV69eWr16tS699FLNnTvXZVyHDh2cP9eqVUthYWHOY9++fbs6d+7s8uCQrl27qri4+KxnEB988EHNnz9fHTt21OOPP64NGzZ4lB0AcHaUKwDA33b11VerZ8+eGj16dLltfn5+MgzDZV1paWm5cQEBAS7LFoulwnUOh8PtXMXFxUpOTlZ2drbL54cfftDVV1/tHFerVi235zRDcHCwevTooTFjxmjDhg0aPHiwxo0b5zLm7x57RZKSkvTzzz/r0Ucf1d69e3XddddVePkiAODcUK4AAKaYPHmyli5dqo0bN7qsb9CggQoLC10Klpnvpvryyy+dP586dUpbt25VmzZtJEmXXnqpvv/+e8XExKhly5YuH08KVVhYmKKioso9Ln39+vWKjY3928cQGxuro0ePuj2+TZs22rhxo8vvdP369apdu7aaNGkiSQoMDFRZWVm5fRs0aKBBgwbp7bff1rRp0zRjxoy/nR8A8AfKFQDAFO3bt9fAgQP18ssvu6zv1q2bfvvtNz333HP68ccfZbPZ9Omnn5r2vTabTYsXL9aOHTuUlpam33//XampqZKktLQ0HTp0SHfccYeysrL0448/6rPPPtOQIUMqLB5nM3LkSE2ZMkXvv/++du7cqVGjRik7O1vDhw93e46DBw/q2muv1dtvv61vvvlGubm5WrBggZ577jnddNNNbs8zdOhQ/fLLL3r44Ye1Y8cOffTRRxo3bpzS09Odl1bGxMRo06ZN+umnn3TgwAE5HA6NHTtWH330kXbv3q3vv/9eH3/8sbOIAgD+PsoVAMA0EyZMKHfpWps2bfTaa6/JZrMpLi5OmzdvNvVStMmTJ2vy5MmKi4tTZmamMjIynE/A+/NsU1lZmW644Qa1b99ejzzyiOrUqeNyf5c7hg0bpvT0dD322GNq3769li1bpoyMDLVq1crtOUJDQ3X55ZfrxRdf1NVXX6127dppzJgxuvfee/Xqq6+6PU/jxo31ySefaPPmzYqLi9MDDzyge+65R08++aRzzIgRI+Tv76/Y2Fg1aNBAeXl5CgwM1OjRo9WhQwddffXV8vf31/z58z36PQAAzsxi/PeF8AAAAAAAj3HmCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATUK4AAAAAwASUKwAAAAAwAeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATUK4AAAAAwASUKwAAAAAwAeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATUK4AAAAAwASUKwAAAAAwAeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATUK4AAAAAwASUKwAAAAAwAeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATUK4AAAAAwASUKwAAAAAwAeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATUK4AAAAAwASUKwAAAAAwAeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATUK4AAAAAwASUKwAAAAAwAeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATUK4AAAAAwASUKwAAAAAwAeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATUK4AAAAAwASUKwAAAAAwAeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATUK4AAAAAwASUKwAAAAAwAeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATUK4AAAAAwASUKwAAAAAwAeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATUK4AAAAAwASUKwAAAAAwAeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMQLkCAAAAABNQrgAAAADABJQrAAAAADAB5QoAAAAATEC5AgAAAAATUK4AAAAAwASUKwAAAAAwAeUKAAAAAExAuQIAAAAAE1CuAAAAAMAElCsAAAAAMAHlCgAAAABMUMPbAQAA7isrK1Npaam3YwCVKjAwUH5+/PsvAN9DuQIAH2AYhgoLC3X48GFvRwEqnZ+fn5o3b67AwEBvRwEAj1gMwzC8HQIAcHYFBQU6fPiwIiIiVLNmTVksFm9HAiqFw+HQ3r17FRAQoKZNm/JnHYBP4cwVAFRxZWVlzmJVr149b8cBKl2DBg20d+9enTp1SgEBAd6OAwBu44JmAKji/rzHqmbNml5OApwff14OWFZW5uUkAOAZyhUA+Aguj0J1wZ91AL6KcgUAAAAAJqBcAQAuSIMHD1afPn3Oef/Vq1fLYrHwhMbTPPXUU+rYsaO3YwBAlUW5AoBqpMxhaOOPB/VRdr42/nhQZY7z88BYm82mmJgYBQcH6/LLL9fmzZud22bMmKFu3bopLCzM1DLz0ksvae7cueXWDxkyRAMGDFDNmjX17rvvumxzOBzq0qWL+vbtqy5duqigoEBWq/WM31FQUKABAwaodevW8vPz0yOPPOJWNovFUu4zf/78s+5TWlqqCRMm6KKLLlJwcLDi4uK0bNkylzGDBw92mbNevXrq1auXvvnmG7dyLVy4UN26dZPValVoaKg6dOigCRMm6NChQ27t746ffvpJFotF2dnZps0JAFUF5QoAqoll3xXoyikrdcfMLzV8frbumPmlrpyyUsu+K6jU733//feVnp6ucePGadu2bYqLi1PPnj21f/9+SdKxY8fUq1cv/etf/zL1e61Wq+rUqeOyrqysTB9//LEeeeQRTZ48WQ8//LAKCv7v+F944QXt2bNH06dPV2BgoBo1anTW+39KSkrUoEEDPfnkk4qLi/Mo35w5c1RQUOD8/NVZtieffFL/+c9/9MorrygnJ0cPPPCAbr75Zn311Vcu43r16uWcc8WKFapRo4b+8Y9//GWeJ554Qv3791diYqI+/fRTfffdd3rhhRf09ddf66233vLo2ACg2jIAAFXa8ePHjZycHOP48ePnPMen3+41Yv75sdHsvz4x//v59Nu9JiZ21alTJyMtLc25XFZWZkRFRRmTJk1yGbdq1SpDkvH777//5ZynTp0yUlNTjZiYGCM4ONho3bq1MW3aNJcxgwYNMm666SaXdWvXrjUiIyMNh8NhOBwOo3v37kbv3r0NwzCM7du3G8HBwcZHH33kcR7DMIxrrrnGGD58uFtjJRmLFy92a+yfIiMjjVdffdVl3S233GIMHDjQuVzRMa9bt86QZOzfv/+Mc2/atMmQVO53+Kc/fwfjxo0z4uLijHnz5hnNmjUzwsLCjP79+xt2u9059tNPPzW6du1qWK1WIzw83Ojdu7exe/du53ZJLp9rrrmm3PeZ8WceALyBM1cA4IMMw9Cxk6fc+hw5UapxGd+rogsA/1z3VEaOjpwodWs+w4N3z588eVJbt27V9ddf71zn5+en66+/Xhs3bjzn43c4HGrSpIkWLFignJwcjR07Vv/617/0wQcfnHW/jIwMJScnOy+bmzNnjtatW6eZM2dq8ODBuv3225WSknLOuTyRlpam+vXrq1OnTpo9e/Zf/l5LSkoUHBzssi4kJESZmZln3Ke4uFhvv/22WrZsedZ3pL3zzjsKDQ3V0KFDK9x++hnAH3/8UUuWLNHHH3+sjz/+WGvWrNHkyZOd248ePar09HRt2bJFK1askJ+fn26++WY5HA5Jcl4S+sUXX6igoECLFi0663EDgC/hJcIA4IOOl5YpduxnpsxlSCq0n1D7pz53a3zOhJ6qGejeXx8HDhxQWVmZGjZs6LK+YcOG2rFjh6dRnQICAjR+/HjncvPmzbVx40Z98MEH6tev3xn3++ijj/Tiiy86l5s1a6Zp06bp//2//6cmTZro88/d+x38XRMmTNC1116rmjVr6vPPP9fQoUNVXFysYcOGnXGfnj17aurUqbr66qt10UUXacWKFVq0aFG5d0F9/PHHCg0NlfRH0YmMjNTHH38sP78z/3vqDz/8oBYtWrj1wl6Hw6G5c+eqdu3akqS77rpLK1as0LPPPitJuvXWW13Gz549Ww0aNFBOTo7atWunBg0aSJLq1aunRo0a/eX3AYAv4cwVAKBKS0pKUmhoqEJDQ9W2bVvnepvNpssuu0wNGjRQaGioZsyYoby8vDPOs337du3du1fXXXedy/ohQ4YoMjJSDz/8sMLCws64/58ZQkND9cADD/ytYxozZoy6du2q+Ph4/fOf/9Tjjz+u559/XpKUl5fn8l0TJ06U9McDOlq1aqVLLrlEgYGBeuihhzRkyJBypal79+7Kzs5Wdna2Nm/erJ49eyopKUk///yzpIp/n56cjYyJiXEWK0mKjIx03j8n/VHU7rjjDrVo0UJhYWGKiYlxHhcAXOg4cwUAPigkwF85E3q6NXZz7iENnpP1l+PmDklUp+bhbn23u+rXry9/f3/t27fPZf2+ffvcPmsxa9YsHT9+XJKcZ1bmz5+vESNG6IUXXlDnzp1Vu3ZtPf/889q0adMZ58nIyFCPHj3KXVonSTVq1FCNGmf/K/H0p9udrYSdi8svv1xPP/20SkpKFBUV5fJd4eF//Ddp0KCBlixZohMnTujgwYOKiorSqFGj1KJFC5e5atWqpZYtWzqXZ82aJavVqpkzZ+qZZ56p8PfZunVrZWZmqrS09C/PXv33dovF4rzkT5KSk5PVrFkzzZw5U1FRUXI4HGrXrp1Onjzp+S8GAHwM5QoAfJDFYnH70ryrWjVQpDVYhUUnKrzvyiKpkTVYV7VqIH+/Mz8Z71wEBgbqsssu04oVK5xPw3M4HFqxYoUeeught+Zo3LhxuXXr169Xly5dXO4R+vHHH886z0cffaT77rvP/fD/5fTCYrbs7GzVrVtXQUFBf/ldwcHBaty4sUpLS7Vw4cKzXgYp/fFnxc/Pz1moKvp9DhgwQC+//LJee+01DR8+vNz2w4cPl3vyYkUOHjyonTt3aubMmbrqqqskqdw9YYGBgZJU7nJGALgQUK4A4ALn72fRuORYPfj2Nlkkl4L1Z5UalxxrerH6U3p6ugYNGqSEhAR16tRJ06ZN09GjRzVkyBBJUmFhoQoLC7V7925J0rfffqvatWuradOmzrM2/61Vq1aaN2+ePvvsMzVv3lxvvfWWsrKy1Lx58wrH79+/X1u2bFFGRobpx/fnWabi4mL99ttvys7OVmBgoGJjYyVJixcv1ujRo533mC1dulT79u3TFVdcoeDgYC1fvlwTJ07UiBEjzvo9mzZtUn5+vjp27Kj8/Hw99dRTcjgcevzxx13GlZSUqLCwUJL0+++/69VXX1VxcbGSk5PPOPfll1+uxx9/XI899pjy8/N18803KyoqSrt379b06dN15ZVXVli6/lvdunVVr149zZgxQ5GRkcrLy9OoUaNcxkRERCgkJETLli1TkyZNFBwcfNZ3iQGAL6FcAUA10KtdpF6/81KNX5qjgqITzvWNrMEalxyrXu0iK+27+/fvr99++01jx45VYWGhOnbsqGXLljkfcjF9+nSXh1NcffXVkv54D9TgwYMrnPP+++/XV199pf79+8tiseiOO+7Q0KFD9emnn1Y4funSperUqZPq169v7sFJio+Pd/68detWvfvuu2rWrJl++uknSVJRUZF27tzpHBMQECCbzaZHH31UhmGoZcuWmjp1qu69996zfs+JEyf05JNPas+ePQoNDdWNN96ot956q9wZpWXLliky8o//nrVr19Yll1yiBQsWqFu3bmedf8qUKbrssstks9k0ffp0ORwOXXTRRerbt68GDRrk1u/Cz89P8+fP17Bhw9SuXTtdfPHFevnll12+u0aNGnr55Zc1YcIEjR07VldddZVWr17t1vwAUNVZDE/uYgUAnHcnTpxQbm6umjdvXuH9Qp4ocxjanHtI+4+cUETtYHVqHl5pZ6yqkpSUFF155ZXlzvKgajLzzzwAnE+cuQKAasTfz6LOF535fUcXqiuvvFJ33HGHt2MAAC5wlCsAwAWPM1YAgPOB91wBAAAAgAkoVwAAAABgAsoVAPgInj+E6oI/6wB8FeUKAKq4gIAASdKxY8e8nAQ4P06ePClJ8vf393ISAPAMD7QAgCrO399fderU0f79+yVJNWvWlMVy4T8+HdWTw+HQb7/9ppo1a6pGDf5vCgDfwv9qAYAPaNSokSQ5CxZwIfPz81PTpk35RwQAPoeXCAOADykrK1Npaam3YwCVKjAwUH5+3LkAwPdQrgAAAADABPyzEAAAAACYgHIFAAAAACagXAEAAACACShXAAAAAGACyhUAAAAAmIByBQAAAAAmoFwBAAAAgAn+Pw9gmr2OiDDiAAAAAElFTkSuQmCC","text/plain":["<Figure size 1000x600 with 1 Axes>"]},"metadata":{},"output_type":"display_data"}],"source":["# plot mtr vs rpp\n","import matplotlib.pyplot as plt\n","\n","fig, ax = plt.subplots(figsize=(10, 6))\n","# set grid\n","ax.grid(True)\n","ax.set_axisbelow(True)\n","ax.minorticks_on()\n","ax.grid(\n"," which=\"major\", linestyle=\"-\", linewidth=\"0.5\", color=\"red\"\n",")\n","# ax.grid(which=\"minor\", linestyle=\":\", linewidth=\"0.5\", color=\"black\")\n","\n","for model in models:\n"," model_df = metrics_df[metrics_df[\"model\"] == model]\n"," ax.plot(\n"," model_df[\"shots\"],\n"," model_df[\"total_repetitions\"],\n"," label=model,\n"," marker=markers[model],\n"," )\n","\n","# ax.set_ylim(0, 1)\n","ax.set_xlabel(\"Number of Shots\")\n","ax.set_ylabel(\"Mean Total Repetitions (MTR)\")\n","ax.legend(loc=\"lower center\", bbox_to_anchor=(0.5, -0.5))\n","plt.show()"]},{"cell_type":"code","execution_count":22,"metadata":{},"outputs":[{"data":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAA18AAALCCAYAAAAhyWlAAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/TGe4hAAAACXBIWXMAAA9hAAAPYQGoP6dpAABf7UlEQVR4nO3dfXzN9eP/8efZzEZsrtmMEaKFkUaETeSissTnk+TzyVVJTWGVohBduCgX0Snlo/BRkXIx9XFRcpHC5mIf1USkfGIjZMeGWdv794ef8+20jfPm7H3s7HG/3Xa7eV+9zvPs43bzefZ6v19vm2EYhgAAAAAARcrP2wEAAAAAoCSgfAEAAACABShfAAAAAGAByhcAAAAAWIDyBQAAAAAWoHwBAAAAgAUoXwAAAABgAcoXAAAAAFiglLcDFFd5eXk6cuSIypcvL5vN5u04AAAAALzEMAydPn1aYWFh8vMrfH6L8nWFjhw5olq1ank7BgAAAIBrxP/+9z+Fh4cXepzydYXKly8v6cIvODg42MtpAABe07u3tHixt1MAALzI4XCoVq1azo5QGMrXFbp4q2FwcDDlCwBKsoAAiX8HAADSZR9HYsENAAAAALAA5QsAAAAALED5AgAAAAALUL4AAAAAwAKULwAAAACwAOULAAAAACxA+TLJbrcrMjJS0dHR3o4CAAAAoBihfJkUHx+v1NRUJScnezsKAAAAgGKE8gUAAAAAFqB8AQAAAIAFKF8AAAAAYAHKFwAAAABYgPIFAAAAABagfAEAAACABShfAAAAAGAByhcAAAAAWIDyBQAAAAAWoHwBAAAAgAUoXybZ7XZFRkYqOjra21EAAAAAFCOUL5Pi4+OVmpqq5ORkb0cBAAAAUIxQvgAAAADAApQvAAAAALAA5QsAAAAALED5AgAAAAALUL4AAAAAwAKULwAAAACwAOULAAAAACxA+QIAAAAAC1C+AAAAAMAClC8AAAAAsADlyyS73a7IyEhFR0d7OwoAAACAYoTyZVJ8fLxSU1OVnJzs7SgAAAAAihHKFwAAAABYgPIFAAAAABagfAEAAACABShfAAAAAGAByhcAAAAAWIDyBQAAAAAWoHwBAAAAgAUoXwAAAABgAcoXAAAAAFiA8mWS3W5XZGSkoqOjvR0FAAAAQDFC+TIpPj5eqampSk5O9nYUAAAAAMUI5QsAAAAALED5AgAAAAALUL4AAAAAwAKULwAAAACwAOULAAAAACzg1fK1adMmde/eXWFhYbLZbFq+fLnL8czMTA0dOlTh4eEqU6aMIiMjNXv27EuOGRsbK5vNlu/nrrvucp7Tv3//fMe7du1aFF8RAAAAACRJpbz54VlZWYqKitLAgQPVs2fPfMcTEhL05ZdfauHChapTp47Wrl2rxx57TGFhYYqLiytwzKVLl+r8+fPO7RMnTigqKkp///vfXc7r2rWr3nvvPed2YGCgh74VAAAAAOTn1fLVrVs3devWrdDj33zzjfr166fY2FhJ0uDBg/X2228rKSmp0PJVqVIll+1FixapbNmy+cpXYGCgatSocXVfAAAAAADcdE0/89WmTRslJibq8OHDMgxD69ev1759+9S5c2e3x5g7d67uv/9+XXfddS77N2zYoGrVqqlhw4Z69NFHdeLECU/HBwAAAAAnr858Xc6sWbM0ePBghYeHq1SpUvLz89OcOXPUvn17t65PSkrSd999p7lz57rs79q1q3r27Km6devqwIEDGj16tLp166YtW7bI39+/wLGys7OVnZ3t3HY4HFf+xQAAAACUONd8+dq6dasSExMVERGhTZs2KT4+XmFhYerUqdNlr587d66aNGmili1buuy///77nX9u0qSJmjZtqnr16mnDhg3q2LFjgWNNnDhR48ePz3+gd28pIMDcFwMA+I6kJKmQW+EBACVETo5bp9kMwzCKOIpbbDabli1bph49ekiSzp49q5CQEC1btsxlpcKHHnpIv/76q1avXn3J8bKyshQWFqYJEyZo2LBhl/38qlWr6qWXXtIjjzxS4PGCZr5q1aqljIwMBQcHu/ENAQA+KS5OSkz0dgoAgBc5HA6FhIRcthtcszNfOTk5ysnJkZ+f62Np/v7+ysvLu+z1S5YsUXZ2tv7xj39c9txff/1VJ06cUGhoaKHnBAYGsiIiAAAAgCvm1fKVmZmp/fv3O7cPHjyolJQUVapUSbVr11ZMTIyefvpplSlTRhEREdq4caMWLFigadOmOa958MEHVbNmTU2cONFl7Llz56pHjx6qXLlyvs8cP368evXqpRo1aujAgQMaOXKk6tevry5duhTtFwYAAABQYnm1fG3fvl0dOnRwbickJEiS+vXrp3nz5mnRokUaNWqU+vbtq5MnTyoiIkIvv/yyhgwZ4rzm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4fIDAAAAAO4yPfOVlpamNm3a5Nvfpk0bpaWleSTURbNmzdLgwYMVHh6uUqVKyc/PT3PmzFH79u0LvaZhw4Z699131bRpU2VkZOi1115TmzZt9P333ys8PFzp6emSpOrVq7tcV716deexgkycOFHjx4/Pf6B3bykg4Mq+IACg+EtKurDiIQCg5MrJces00+Wrfv36+uijjzR69GiX/YsXL1aDBg3MDndJs2bN0tatW5WYmKiIiAht2rRJ8fHxCgsLc5m5+rPWrVurdevWzu02bdroxhtv1Ntvv60XX3zxirOMGjVKCQkJzm2Hw6FatWpJixdLLDUPACUXS80DABwOKSTksqe5Xb5uv/12LV26VOPHj1fv3r21adMm5zNfX3/9tdatW6ePPvroygP/xdmzZzV69GgtW7ZMd911lySpadOmSklJ0WuvvVZo+fqrgIAANW/eXPv375ck57NgR48eVWhoqPO8o0ePqlmzZoWOExgYqMDAwCv8NgAAAABKOref+dqwYYPOnz+vXr16adu2bapSpYqWL1+u5cuXq0qVKkpKStK9997rsWA5OTnKycmRn59rRH9/f+Xl5bk9Tm5urr799ltn0apbt65q1KihdevWOc9xOBzatm2by4wZAAAAAHiS6dsOJalFixZauHDhVX94Zmamc0ZKurAYRkpKiipVqqTatWsrJiZGTz/9tMqUKaOIiAht3LhRCxYs0LRp05zXPPjgg6pZs6YmTpwoSZowYYJuvfVW1a9fX6dOndKrr76qX375RQ899JCkCyshDh8+XC+99JIaNGigunXrasyYMQoLC1OPHj2u+jsBAAAAQEFMla/U1NRLLkohXbg10F3bt29Xhw4dnNsXn6nq16+f5s2bp0WLFmnUqFHq27evTp48qYiICL388ssaMmSI85pDhw65zI79/vvvevjhh5Wenq6KFSuqRYsW+uabbxQZGek8Z+TIkcrKytLgwYN16tQptW3bVqtXr873MmYAAAAA8BSbYRiGOyf6+fnJZrPpUqfbbDbl5uZ6LNy1zOFwKCQkRBkZGQpmwQ0AKLlYcAMASjx3u4Gpma9t27apatWqVx0OAAAAAEoaU+Wrdu3aqlatWlFlAQAAAACf5fZqhwAAAACAK+d2+YqJiVHp0qWLMgsAAAAA+Cy3bztcv359UeYAAAAAAJ/GbYcm2e12RUZGKjo6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sAAAAADg60yXr0mTJql169a644479N133ykpKUm7du1S06ZNtWXLlqLICAAAAADFnuny9frrr2v58uWaNWuWgoKC1LhxYyUlJalnz56KjY0tgogAAAAAUPyVMnvBt99+qypVqrjsCwgI0Kuvvqq7777bY8EAAAAAwJeYnvn6a/H6s5iYmKsKAwAAAAC+yvTMlyRt375dH330kQ4dOqTz58+7HFu6dKlHggEAAACALzE987Vo0SK1adNGe/bs0bJly5STk6Pvv/9eX375pUJCQooiIwAAAAAUe6bL1yuvvKLp06dr5cqVKl26tF5//XX98MMPuu+++1S7du2iyAgAAAAAxZ7p8nXgwAHdddddkqTSpUsrKytLNptNI0aM0DvvvOPxgAAAAADgC0yXr4oVK+r06dOSpJo1a+q7776TJJ06dYoXLQMAAABAIUyXr/bt2+vzzz+XJP3973/XsGHD9PDDD6tPnz7q2LGjxwNea+x2uyIjIxUdHe3tKAAAAACKEZthGIaZC06ePKlz584pLCxMeXl5mjJlir755hs1aNBAzz//vCpWrFhUWa8pDodDISEhysjIUHBwsLfjAAC8JS5OSkz0dgoAgBe52w1MLzVfqVIl55/9/Pz07LPPXllCAAAAAChBTN92CAAAAAAwz+2ZL39/f7fOy83NveIwAAAAAOCr3C5fhmEoIiJC/fr1U/PmzYsyEwAAAAD4HLfLV1JSkubOnavXX39ddevW1cCBA9W3b98Ss8AGAAAAAFwNt5/5uuWWW/TWW28pLS1NCQkJWrZsmcLDw3X//fc7l54HAAAAABTM9IIbQUFB+sc//qF169bpu+++07Fjx9S1a1edPHmyKPIBAAAAgE8wvdS8JP3666+aN2+e5s2bpzNnzujpp5/mXVcAAAAAcAlul6/z589r2bJlmjt3rr766it169ZNM2bMULdu3dxeCREAAAAASiq3y1doaKjKly+vfv366c0331S1atUkSVlZWS7nMQMGAAAAAPnZDMMw3DnRz+//Hg+z2Wz5jhuGIZvN5vPv+bLb7bLb7crNzdW+ffuUkZFB4QSAkiwuTkpM9HYKAIAXORwOhYSEXLYbuD3ztX79eo8EK+7i4+MVHx/v/AUDAAAAgDvcLl8xMTFFmQMAAAAAfJrppeYBAAAAAOZRvgAAAADAApQvAAAAALAA5QsAAAAA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fOXk5Khjx4768ccfiyoPAAAAAPgkU+UrICBAu3fvLqosAAAAAOCzTN92+I9//ENz584tiiwAAAAA4LNMv+frjz/+0LvvvqsvvvhCLVq00HXXXedyfNq0aR4LBwAAAAC+wnT5+u6773TzzTdLkvbt2+dyzGazeSYVAAAAAPgY0+Vr/fr1RZEDAAAAAHzaFS81v3//fq1Zs0Znz56VJBmG4bFQAAAAAOBrTJevEydOqGPHjrrhhht05513Ki0tTZI0aNAgPfnkkx4PeK2x2+2KjIxUdHS0t6MAAAAAKEZMl68RI0YoICBAhw4dUtmyZZ37e/furdWrV3s03LUoPj5eqampSk5O9nYUAAAAAMWI6We+1q5dqzVr1ig8PNxlf4MGDfTLL794LBgAAAAA+BLTM19ZWVkuM14XnTx5UoGBgR4JBQAAAAC+xnT5ateunRYsWODcttlsysvL05QpU9ShQwePhgMAAAAAX2H6tsMpU6aoY8eO2r59u86fP6+RI0fq+++/18mTJ/X1118XRUYAAAAAKPZMz3w1btxY+/btU9u2bXXPPfcoKytLPXv21K5du1SvXr2iyAgAAAAAxd4VvecrJCREzz33nD766CP95z//0UsvvaTQ0FDT42zatEndu3dXWFiYbDabli9f7nLcZrMV+PPqq68WOuYLL7yQ7/xGjRq5nHPu3DnFx8ercuXKKleunHr16qWjR4+azg8AAAAA7jJ926Ek/f7775o7d6727NkjSYqMjNSAAQNUqVIlU+NkZWUpKipKAwcOVM+ePfMdv/gOsYtWrVqlQYMGqVevXpcc96abbtIXX3zh3C5VyvVrjhgxQp999pmWLFmikJAQDR06VD179uS2SQAAAABFxnT5ujhbFRISoltuuUWSNHPmTE2YMEErV65U+/bt3R6rW7du6tatW6HHa9So4bK9YsUKdejQQddff/0lxy1VqlS+ay/KyMjQ3Llz9cEHH+j222+XJL333nu68cYbtXXrVt16661u5wcAAAAAd5m+7TA+Pl69e/fWwYMHtXTpUi1dulQ//fST7r//fsXHxxdFRknS0aNH9dlnn2nQoEGXPffHH39UWFiYrr/+evXt21eHDh1yHtuxY4dycnLUqVMn575GjRqpdu3a2rJlS5FkBwAAAADT5Wv//v168skn5e/v79zn7++vhIQE7d+/36Ph/mz+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1ql169Zq0aKFAgICXI7v3btXhw4dUuvWrb0RGQBwDSrl7QAAABQHCQkJ6tevn2655Ra1bNlSM2bMUFZWlgYMGKCQkBANGjRICQkJqlSpkoKDg/X444+rdevWrHQIAHCifAEA4IbevXvrt99+09ixY5Wenq5mzZpp9erVzkU4pk+fLj8/P/Xq1UvZ2dnq0qWL3nzzTS+nBgBcS3jPFwAAAABYgGe+AAAAAMAClC8AAAAAsADlCwAAAAAsQPkCAAAAAAtQvgAAAADAApQvAAAAALAA5QsAAAAALED5AgD4rJ9//lk2m00pKSnejuL0ww8/6NZbb1VQUJCaNWt2xePYbDYtX77cY7kAAEWP8gUAKDL9+/eXzWbTpEmTXPYvX75cNpvNS6m8a9y4cbruuuu0d+9erVu3rsBzfvvtNz366KOqXbu2AgMDVaNGDXXp0kVff/21R7PExsZq+PDhHh0TAFA4yhcAoEgFBQVp8uTJ+v33370dxWPOnz9/xdceOHBAbdu2VUREhCpXrlzgOb169dKuXbs0f/587du3T4mJiYqNjdWJEyeu+HMBAN5H+QIAFKlOnTqpRo0amjhxYqHnvPDCC/luwZsxY4bq1Knj3O7fv7969OihV155RdWrV1eFChU0YcIE/fHHH3r66adVqVIlhYeH67333ss3/g8//KA2bdooKChIjRs31saNG12Of/fdd+rWrZvKlSun6tWr65///KeOHz/uPB4bG6uhQ4dq+PDhqlKlirp06VLg98jLy9OECRMUHh6uwMBANWvWTKtXr3Yet9ls2rFjhyZMmCCbzaYXXngh3xinTp3SV199pcmTJ6tDhw6KiIhQy5YtNWrUKMXFxbmce/z4cd17770qW7asGjRooMTERJfjGzduVMuWLRUYGKjQ0FA9++yz+uOPP5y/z40bN+r111+XzWaTzWbTzz//rN9//119+/ZV1apVVaZMGTVo0KDA3ykAwDzKFwCgSPn7++uVV17RrFmz9Ouvv17VWF9++aWOHDmiTZs2adq0aRo3bpzuvvtuVaxYUdu2bdOQIUP0yCOP5Pucp59+Wk8++aR27dql1q1bq3v37s5ZpFOnTun2229X8+bNtX37dq1evVpHjx7Vfffd5zLG/PnzVbp0aX399deaPXt2gflef/11TZ06Va+99pp2796tLl26KC4uTj/++KMkKS0tTTfddJOefPJJpaWl6amnnso3Rrly5VSuXDktX75c2dnZl/x9jB8/Xvfdd592796tO++8U3379tXJkyclSYcPH9add96p6Oho/fe//9Vbb72luXPn6qWXXnJmbd26tR5++GGlpaUpLS1NtWrV0pgxY5SamqpVq1Zpz549euutt1SlShU3/tcBAFyWAQBAEenXr59xzz33GIZhGLfeeqsxcOBAwzAMY9myZcaf/wkaN26cERUV5XLt9OnTjYiICJexIiIijNzcXOe+hg0bGu3atXNu//HHH8Z1111nfPjhh4ZhGMbBgwcNScakSZOc5+Tk5Bjh4eHG5MmTDcMwjBdffNHo3Lmzy2f/73//MyQZe/fuNQzDMGJiYozmzZtf9vuGhYUZL7/8ssu+6Oho47HHHnNuR0VFGePGjbvkOB9//LFRsWJFIygoyGjTpo0xatQo47///a/LOZKM559/3rmdmZlpSDJWrVplGIZhjB492mjYsKGRl5fnPMdutxvlypVz/g5jYmKMYcOGuYzbvXt3Y8CAAZf9rgAA85j5AgBYYvLkyZo/f7727NlzxWPcdNNN8vP7v3+6qlevriZNmji3/f39VblyZR07dszlutatWzv/XKpUKd1yyy3OHP/973+1fv1654xTuXLl1KhRI0kXns+6qEWLFpfM5nA4dOTIEd12220u+2+77TbT37lXr146cuSIEhMT1bVrV23YsEE333yz5s2b53Je06ZNnX++7rrrFBwc7Pzue/bsUevWrV0WNrntttuUmZl5yRnIRx99VIsWLVKzZs00cuRIffPNN6ayAwAKR/kCAFiiffv26tKli0aNGpXvmJ+fnwzDcNmXk5OT77yAgACXbZvNVuC+vLw8t3NlZmaqe/fuSklJcfn58ccf1b59e+d51113ndtjekJQUJDuuOMOjRkzRt9884369++vcePGuZxztd+9IN26ddMvv/yiESNG6MiRI+rYsWOBt0cCAMyjfAEALDNp0iStXLlSW7ZscdlftWpVpaenuxQwT76ba+vWrc4///HHH9qxY4duvPFGSdLNN9+s77//XnXq1FH9+vVdfswUruDgYIWFheVbDv7rr79WZGTkVX+HyMhIZWVluX3+jTfeqC1btrj8Tr/++muVL19e4eHhkqTSpUsrNzc337VVq1ZVv379tHDhQs2YMUPvvPPOVecHAFC+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","text/plain":["<Figure size 1000x600 with 1 Axes>"]},"metadata":{},"output_type":"display_data"}],"source":["# plot mtr vs rpp\n","import matplotlib.pyplot as plt\n","\n","fig, ax = plt.subplots(figsize=(10, 6))\n","# set grid\n","ax.grid(True)\n","ax.set_axisbelow(True)\n","ax.minorticks_on()\n","ax.grid(which=\"major\", linestyle=\"-\", linewidth=\"0.5\", color=\"red\")\n","# ax.grid(which=\"minor\", linestyle=\":\", linewidth=\"0.5\", color=\"black\")\n","\n","for model in models:\n"," model_df = metrics_df[metrics_df[\"model\"] == model]\n"," ax.plot(model_df[\"shots\"], model_df[\"num_max_output_tokens\"], label=model, marker=markers[model])\n","\n","# ax.set_ylim(0, 1)\n","ax.set_xlabel(\"Number of Shots\")\n","ax.set_ylabel(\"Number of Answers with Max Output Tokens\")\n","ax.legend(loc=\"lower center\", bbox_to_anchor=(0.5, -0.5))\n","plt.show()"]},{"cell_type":"code","execution_count":23,"metadata":{},"outputs":[],"source":["def detect_repetitions_for_model_outputs(df, col, threshold=100):\n"," df[[\"ews_score\", \"repetition_score\", \"total_repetitions\"]] = df[col].apply(\n"," detect_scores\n"," )\n"," return df.query(f\"total_repetitions > {threshold}\")"]},{"cell_type":"code","execution_count":27,"metadata":{},"outputs":[{"data":{"text/html":["<div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>chinese</th>\n"," <th>english</th>\n"," <th>01-ai/Yi-1.5-9B-Chat/shots-00</th>\n"," <th>ground_truth_ews_score</th>\n"," <th>ground_truth_repetition_score</th>\n"," <th>ground_truth_total_repetitions</th>\n"," <th>ews_score</th>\n"," <th>repetition_score</th>\n"," <th>total_repetitions</th>\n"," <th>ground_truth_tokens-01-ai/Yi-1.5-9B-Chat</th>\n"," <th>output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00</th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>105</th>\n"," <td>虽然我奶奶与他已经在高粱地里凤凰和谐,在那个半是痛苦半是幸福的庄严过程中,我奶奶虽然也怀上了...</td>\n"," <td>Even though by then he and Grandma had already...</td>\n"," <td>Although my grandmother and him had already be...</td>\n"," <td>0</td>\n"," <td>0</td>\n"," <td>0</td>\n"," <td>0</td>\n"," <td>1224</td>\n"," <td>1224</td>\n"," <td>154</td>\n"," <td>309</td>\n"," </tr>\n"," <tr>\n"," <th>505</th>\n"," <td>老子叫你不许哭,就不许哭!”</td>\n"," <td>'I forbid you to cry.'</td>\n"," <td>The task is asking you to:\\n\\n1. Understand th...</td>\n"," <td>0</td>\n"," <td>0</td>\n"," <td>0</td>\n"," <td>0</td>\n"," <td>180</td>\n"," <td>180</td>\n"," <td>8</td>\n"," <td>187</td>\n"," </tr>\n"," </tbody>\n","</table>\n","</div>"],"text/plain":[" chinese \\\n","105 虽然我奶奶与他已经在高粱地里凤凰和谐,在那个半是痛苦半是幸福的庄严过程中,我奶奶虽然也怀上了... \n","505 老子叫你不许哭,就不许哭!” \n","\n"," english \\\n","105 Even though by then he and Grandma had already... \n","505 'I forbid you to cry.' \n","\n"," 01-ai/Yi-1.5-9B-Chat/shots-00 \\\n","105 Although my grandmother and him had already be... \n","505 The task is asking you to:\\n\\n1. Understand th... \n","\n"," ground_truth_ews_score ground_truth_repetition_score \\\n","105 0 0 \n","505 0 0 \n","\n"," ground_truth_total_repetitions ews_score repetition_score \\\n","105 0 0 1224 \n","505 0 0 180 \n","\n"," total_repetitions ground_truth_tokens-01-ai/Yi-1.5-9B-Chat \\\n","105 1224 154 \n","505 180 8 \n","\n"," output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00 \n","105 309 \n","505 187 "]},"execution_count":27,"metadata":{},"output_type":"execute_result"}],"source":["col = \"01-ai/Yi-1.5-9B-Chat/shots-00\"\n","rows = detect_repetitions_for_model_outputs(df, col, threshold=50)\n","rows"]},{"cell_type":"code","execution_count":28,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["虽然我奶奶与他已经在高粱地里凤凰和谐,在那个半是痛苦半是幸福的庄严过程中,我奶奶虽然也怀上了我的功罪参半但毕竟是高密东北乡一代风流的父亲,但那时奶奶是单家的明媒正娶的媳妇,爷爷与她总归是桑间濮上之合,带着相当程度的随意性偶然性不稳定性,况且我父亲也没落土,所以,写到那时候的事,我还是称呼他余占鳌更为准确。\n","================================================================================\n","Even though by then he and Grandma had already done the phoenix dance in the sorghum field, and even though, in the solemn course of suffering and joy, she had conceived my father, whose life was a mixture of achievements and sin (in the final analysis, he gained distinction among his generation of citizens of Northeast Gaomi Township), she had nonetheless been legally married into the Shan family. So she and Granddad were adulterers, their relationship marked by measures of spontaneity, chance, and uncertainty. And since Father wasn't born while they were together, accuracy demands that I refer to Granddad as Yu Zhan'ao in writing about this period.\n","================================================================================\n","Although my grandmother and him had already been in the sorghum field with Phoenix in harmony, during that process that was both painful and happy, my grandmother although also got pregnant with my father's guilt and merit being equal, but after all, she was a father of the generation who was famous in the eastern northeast of High密, but at that time, my grandmother was a bride taken in by the single family of Ming, grandfather and her belonged to the marriage of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of\n","================================================================================\n","----detect excessive whitespaces----\n","----detect text repetitions----\n","<re.Match object; span=(463, 1687), match='e of the casual and occasional nature of the casu>\n","Group 1 found at 463-1075: `e of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional natur`\n","Group 2 found at 1075-1687: `e of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional natur`\n","Group 3 found at 1075-1687: `e of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional natur`\n","(0, 1224, 1224)\n","老子叫你不许哭,就不许哭!”\n","================================================================================\n","'I forbid you to cry.'\n","================================================================================\n","The task is asking you to:\n","\n","1. Understand that you are a helpful assistant.\n","2. Recognize that your main job is to translate Chinese sentences into English.\n","3. If the given Chinese sentence is incomplete or unclear, you should copy the input text as your output without providing any additional information or explanation.\n","\n","Given Chinese sentence: 老子叫你不许哭, 就不许哭! ”\n","\n","Following the guidelines:\n","1. The sentence is complete and understandable.\n","2. There is no need to copy the input text because the sentence is clear.\n","3. Translate the sentence into English: \"The old man said you were not allowed to cry, and you were not allowed to cry!\"\n","\n","English: \"The old man said you were not allowed to cry, and you were not allowed to cry!\"\n","================================================================================\n","----detect excessive whitespaces----\n","----detect text repetitions----\n","<re.Match object; span=(544, 724), match='English: \"The old man said you were not allowed t>\n","Group 1 found at 544-633: `English: \"The old man said you were not allowed to cry, and you were not allowed to cry!\"`\n","Group 2 found at 635-724: `English: \"The old man said you were not allowed to cry, and you were not allowed to cry!\"`\n","Group 3 found at 635-724: `English: \"The old man said you were not allowed to cry, and you were not allowed to cry!\"`\n","(0, 180, 180)\n"]}],"source":["for i in range(len(rows)):\n"," row = rows.iloc[i]\n"," print(row[\"chinese\"])\n"," print(\"=\" * 80)\n"," print(row[\"english\"])\n"," print(\"=\" * 80)\n"," output = row[col]\n"," print(output)\n"," print(\"=\" * 80)\n"," detect_repetitions(output, debug=True)"]},{"cell_type":"code","execution_count":29,"metadata":{},"outputs":[{"name":"stdout","output_type":"stream","text":["--------------------------------------------------\n","chinese: 莺儿满心委屈,见姑娘说,不敢出声,只得放下钱来,口内嘟囔说:“一个做爷的,还赖我们这几个钱,连我也瞧不起!\n","--------------------------------------------------\n","english: Oriole smarted with the injustice of this, but her mistress had ordered it, so she had to pay up without arguing. She could not, however, forbear a few rebellious mutterings: 'Huh! One of the masters! Cheating a maid out of a few coppers! Even I should be ashamed!\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: Part #1: You are a helpful assistant that translates Chinese to English.\n","Usage: \"莺儿满心委屈, 见姑娘说,不敢出声, 只得放下钱来, 口内嘟囔说: “一个做爷的, 还赖我们这几个钱, 连我也瞧不起!\" translates to \"Ying'er was filled with grievances, but when the girl said something, she dare not speak up, so she had to put down the money, muttering, 'A man like you is still owed us this money, and you even look down on me!'\" This meets the criteria because it is a translation from Chinese to English.\n","\n","Part #2: If it is an incomplete sentence, or if you are unsure about the meaning, simply copy the input text as your output.\n","Usage: \"今天天气很好。\" translates to \"Today the weather is very good.\" This meets the criteria because the input text is a complete sentence, and the translation is provided accordingly.\n","\n","Part #3: Do not output any additional sentence such as explanation or reasoning.\n","Usage: \"莺儿满心委屈, 见姑娘说,不敢出声, 只得放下钱来, 口内嘟囔说: “一个做爷的, 还赖我们这几个钱, 连我也瞧不起!\" translates to \"Ying'er was filled with\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 314\n","--------------------------------------------------\n","chinese: 虽然我奶奶与他已经在高粱地里凤凰和谐,在那个半是痛苦半是幸福的庄严过程中,我奶奶虽然也怀上了我的功罪参半但毕竟是高密东北乡一代风流的父亲,但那时奶奶是单家的明媒正娶的媳妇,爷爷与她总归是桑间濮上之合,带着相当程度的随意性偶然性不稳定性,况且我父亲也没落土,所以,写到那时候的事,我还是称呼他余占鳌更为准确。\n","--------------------------------------------------\n","english: Even though by then he and Grandma had already done the phoenix dance in the sorghum field, and even though, in the solemn course of suffering and joy, she had conceived my father, whose life was a mixture of achievements and sin (in the final analysis, he gained distinction among his generation of citizens of Northeast Gaomi Township), she had nonetheless been legally married into the Shan family. So she and Granddad were adulterers, their relationship marked by measures of spontaneity, chance, and uncertainty. And since Father wasn't born while they were together, accuracy demands that I refer to Granddad as Yu Zhan'ao in writing about this period.\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: Although my grandmother and him had already been in the sorghum field with Phoenix in harmony, during that process that was both painful and happy, my grandmother although also got pregnant with my father's guilt and merit being equal, but after all, she was a father of the generation who was famous in the eastern northeast of High密, but at that time, my grandmother was a bride taken in by the single family of Ming, grandfather and her belonged to the marriage of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of the casual and occasional nature of\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 309\n","--------------------------------------------------\n","chinese: “哈,我觉得那是最不真实的!” IT副总裁说,“我用公司的上百名员工进行过一个简单的测试,即使这想法真能实现,人列计算机的运算速度可能比一个人的手工计算都慢。”\n","--------------------------------------------------\n","english: 'Ha! I thought that was the most unrealistic aspect,' the software company vice president said. 'I conducted a test with more than a hundred employees at my company. Even if the idea worked, a computer made of people would probably operate at a speed slower than manual computation.'\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: \"Ha, I think that's the least real!\" The CTO said, \"I've conducted a simple test with over a hundred employees from the company. Even if this idea could be realized, the computing speed of the system may be slower than a person's manual calculation.\" \n","\n","I used the definition of translating Chinese to English by converting the meaning of each Chinese character or phrase into its English equivalent while maintaining the structure and context of the original sentence. Since the input sentence was complete and coherent, I translated it directly into English without any issues. \n","\n","1. First, I identified the main components of the sentence: subject, verb, object, and additional information.\n","2. Then, I translated each component from Chinese to English, maintaining the original meaning and structure.\n","3. Finally, I combined the translated components to form a coherent English sentence. \n","\n","The task was to translate a given Chinese sentence into English. I followed the guidelines by translating the sentence directly without any additional explanations or reasoning. The input sentence was complete and coherent, so I translated it without any issues. \n","\n","1. Analyze the Chinese sentence structure and meaning.\n","2. Translate each Chinese word or phrase into its English equivalent.\n","3. Ensure the translated sentence maintains the original meaning and structure.\n","4. Output the translated English sentence. \n","\n","In this case, the input sentence\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 316\n","--------------------------------------------------\n","chinese: 严师母心里狐疑,嘴上却不好说,只闲扯着要重新聚一聚,可惜萨沙不在了,去西伯利亚吃苏联面包了,不过,补上那位新来的先生,也够一桌麻将了。\n","--------------------------------------------------\n","english: Madame Yan grew suspicious, but was forced to keep her thoughts to herself; instead she casually suggested that they all get together again. 'It's a pity that Sasha's no longer around. He must be off in Siberia eating his Russian bread! But that's okay, you can bring along that new friend of yours and we'll have a foursome for our mahjong games.'\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: The task is asking you to:\n","\n","1. Understand the given Chinese sentence.\n","2. Translate the Chinese sentence into English.\n","3. If the sentence is incomplete or its meaning is unclear, copy the input text as your output.\n","4. Do not add any additional sentences, such as explanations or reasoning.\n","\n","Here's how to approach the task:\n","\n","1. Read the given Chinese sentence carefully: \"严师母心里狐疑, 嘴上却不好说, 只闲扯着要重新聚一聚, 可惜萨沙不在了, 去西伯利亚吃苏联面包了, 不过, 补上那位新来的先生, 也够一桌麻将了。\"\n","2. Translate the sentence into English, ensuring that you understand the meaning of each word and phrase.\n","3. If you find any part of the sentence unclear or incomplete, simply copy the input text as your output.\n","4. Do not add any additional sentences or explanations in your translation.\n","\n","Translation: \"Yan's mother harbored doubts in her heart, but she didn't want to say it out loud; she only casually mentioned the need to get together again. It's a pity that Sasa isn't there anymore; she went to Siberia to eat Soviet bread. However, if we add the new gentleman, we would have enough for a game of mahjong\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 319\n","--------------------------------------------------\n","chinese: 周瑞家的道:“我的娘!\n","--------------------------------------------------\n","english: 'My dear good woman,' said the latter when they were out of earshot, 'whatever came over you?\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: My mother!\n","Part 1: Translate Chinese to English\n","Usage: \"周瑞家的道: “我的娘!\" translates to \"My mother!\". The given Chinese sentence is translated into English, following the instruction to provide a translation.\n","\n","Part 2: If it is an incomplete sentence\n","Usage: If the input was \"周瑞家的道: “我的娘!?\", the output would be the same as the input: \"周瑞家的道: “我的娘!?\". Since the sentence is incomplete and the meaning is unclear, the input is copied as the output, following the instruction to copy the input if it is incomplete or unclear.\n","\n","Part 3: If unsure about the meaning\n","Usage: If the input was \"周瑞家的道: “我的奇怪的东西!\", the output would be the same as the input: \"周瑞家的道: “我的奇怪的东西!\". Since the meaning of \"奇怪的东西\" is unclear, the input is copied as the output, following the instruction to copy the input if unsure about the meaning.\n","\n","Part 4: Do not output any additional sentence such as explanation or reasoning\n","Usage: For the input \"周瑞家的道: “我的娘!\", the output is \"My mother!\". There is no additional explanation or reasoning provided, as instructed.\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 304\n","--------------------------------------------------\n","chinese: 只篦了三五下儿,见晴雯忙忙走进来取钱,一见他两个,便冷笑道:“哦!\n","--------------------------------------------------\n","english: But he had not drawn it more than four or five times through her hair, when Skybright came bursting in to get some more money. Seeing the two of them together, she smiled sarcastically: 'Fancy!\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: Part #1: You are a helpful assistant that translates Chinese to English.\n","Usage: \"只篦了三五下儿,见晴雯忙忙走进来取钱,一见他两个,便冷笑道:“哦!\"\n","Explanation: This is a Chinese sentence that needs to be translated into English. The sentence is about someone who has only combed a few times and then sees Qingwen coming in quickly to take money. When she sees the two people, she coldly laughs and says \"oh!\". This meets the criteria because it is a complete Chinese sentence that needs to be translated into English.\n","\n","Part #2: If it is an incomplete sentence, or if you are unsure about the meaning, simply copy the input text as your output.\n","Usage: \"你今天怎么啦?\"\n","Explanation: This is an incomplete sentence and the meaning is not clear. So, the translation should be the same as the input: \"你今天怎么啦?\" This meets the criteria because the sentence is incomplete and the meaning is not clear, so the translation should be the same as the input.\n","\n","Part #3: Do not output any additional sentence such as explanation or reasoning.\n","Usage: \"Only combed a few times, saw Qingwen hurriedly coming in to take money, as soon as she saw the two of them, she coldly laughed and said: \"oh!\"\"\n","Explanation\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 317\n","--------------------------------------------------\n","chinese: 奶奶站在路边,听着七零八落的打击肉体的沉闷声响,对着余占鳌顿眸一瞥,然后仰面看着天边的闪电,脸上凝固着的,仍然是那种粲然的、黄金一般高贵辉煌的笑容。\n","--------------------------------------------------\n","english: Grandma stood beside the road listening to the dull cacophony of fists and feet on flesh; she glanced at Yu Zhan'ao, then looked up at the lightning-streaked sky, the radiant, golden, noble smile still frozen on her face.\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: The task is asking you to:\n","\n","1. Understand the given Chinese sentence.\n","2. Translate the Chinese sentence into English.\n","3. If the sentence is incomplete or its meaning is unclear, copy the input text as your output.\n","4. Do not add any additional sentences, such as explanations or reasoning.\n","\n","Here's how to approach the task:\n","\n","1. Read the given Chinese sentence carefully and try to understand its meaning.\n","2. If you understand the sentence and its meaning, translate it into English while maintaining the original context and meaning.\n","3. If you find the sentence incomplete or its meaning unclear, simply copy the input text without translating it.\n","4. Ensure that your translated English sentence does not include any additional information or explanations.\n","\n","For the given Chinese sentence:\n","\n","Chinese: 奶奶站在路边, 听着七零八落的打击肉体的沉闷声响, 对着余占鳌顿眸一瞥, 然后仰面看着天边的闪电, 脸上凝固着的, 仍然是那种粲然的、 黄金一般高贵辉煌的笑容。\n","\n","You can translate it into English as:\n","\n","English: The grandmother stood by the roadside, listening to the dull sounds of blows against the flesh that were scattered here and there, giving a quick glance at Yú Zhànōu with her eyes, and then looking up at the lightning in the\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 319\n","--------------------------------------------------\n","chinese: 说着,又问周瑞家的:“回了太太了没有?”\n","--------------------------------------------------\n","english: She turned to Zhou Rui's wife. 'Have you told Her Ladyship yet?'\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: Part #1: You are a helpful assistant that translates Chinese to English.\n","Usage: \"说着,又问周瑞家的:“回了太太了没有?’’\" The given input is a Chinese sentence, and the task is to translate it into English. The translation is \"Saying this, [the speaker] then asked Zhou Rui's family: \"Has the mistress been informed?\"\" This meets the criteria because it translates the given Chinese sentence into English.\n","\n","Part #2: If it is an incomplete sentence, or if you are unsure about the meaning, simply copy the input text as your output.\n","Usage: \"今天天气怎么样?\" (What's the weather like today?) The input is an incomplete sentence, and the assistant is unsure about the meaning. So, the output is simply the copied input: \"今天天气怎么样?\" This meets the criteria because it follows the instruction to copy the input text when the sentence is incomplete or the meaning is unclear.\n","\n","Part #3: Do not output any additional sentence such as explanation or reasoning.\n","Usage: \"他去了图书馆。\" (He went to the library.) The input is a complete sentence, and the translation is \"He went to the library.\" The assistant does not provide any additional explanation or reasoning. This meets the criteria because it only outputs the translated sentence without any extra information.\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 300\n","--------------------------------------------------\n","chinese: 周瑞家的听了,便已猜着几分来意。 只因他丈夫昔年争买田地一事,多得狗儿他父亲之力,今见刘姥姥如此,心中难却其意;二则也要显弄自己的体面。 便笑说:“老老你放心。\n","--------------------------------------------------\n","english: From the tone of this reply Zhou Rui's wife was already able to make a pretty good guess as to the real purpose of the old woman's visit; but because some years previously her husband had received a lot of help from Gou-er's father in a dispute over the purchase of some land, she could not very well reject Grannie Liu now, when she came to her as a suppliant. She was, in any case, anxious to demonstrate her own importance in the Jia household; and so the answer she gave her was a gracious one. 'Don't you worry, Grannie!\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: The task is asking you to translate a given Chinese sentence into English. Here are the simple steps to follow:\n","\n","1. Read the given Chinese sentence carefully.\n"," Chinese: 周瑞家的听了, 便已猜着几分来意。 只因他丈夫昔年争买田地一事, 多得狗儿他父亲之力, 今见刘姥姥如此, 心中难却其意;二则也要显弄自己的体面。 便笑说: “老老你放心。\n","\n","2. If the sentence is incomplete or you are unsure about the meaning, copy the input text as your output without adding any additional sentences or explanations.\n","\n","3. Use your knowledge of Chinese and English, or a reliable translation tool, to translate the sentence into English.\n","\n","4. Ensure that the translation is accurate and conveys the meaning of the original sentence.\n","\n","5. Write down the translated English sentence as your output.\n","\n","English: Zhou Ru's servant heard this and had already guessed part of the purpose of the visit. It was because his husband's struggle to buy land years ago was greatly helped by Dou'e's father, and now seeing Diao Hua Hua so, he found it hard to refuse their intentions; secondly, he also wanted to show off his status. With a smile, he said, \"Old Lady, don't worry.\"\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 315\n","--------------------------------------------------\n","chinese: 顾炎武道:“晚村兄豪气干云,令人好生敬佩。 怕的是见不到鞑子皇帝,却死于一般的下贱奴才手里。\n","--------------------------------------------------\n","english: 'I admire your heroic spirit,' said Gu, 'but I don't think there's much likelihood of your meeting the Tartar Emperor face to face. You would die at the hands of miserable slaves.\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: The task is asking you to:\n","\n","1. Understand the given Chinese sentence.\n","2. Translate the Chinese sentence into English.\n","3. If the sentence is incomplete or you are unsure about the meaning, copy the input text as your output.\n","4. Do not add any additional sentences, such as explanations or reasoning.\n","\n","Here's how to use this task:\n","\n","1. Read the given Chinese sentence: 顾炎武道: “晚村兄豪气干云, 令人好生敬佩。 怕的是见不到鞑子皇帝, 却死于一般的下贱奴才手里。\n","2. Translate the sentence into English, ensuring that you understand the meaning of each word and phrase.\n","3. If you are unsure about the meaning or if the sentence is incomplete, simply copy the input text: 顾炎武道: “晚村兄豪气干云, 令人好生敬佩。 怕的是见不到鞑子皇帝, 却死于一般的下贱奴才手里。\n","4. Do not add any additional sentences or explanations.\n","\n","Translation:\n","\n","\"Gǔ Yínǔ said, \"Brother Wǎn Cūn has a heroic spirit that can pierce the clouds, and it is truly admirable. What is to be feared is not being able to meet the Manchu emperor, but dying in the hands of ordinary low\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 320\n","--------------------------------------------------\n","chinese: 至脂砚斋抄阅再评,仍用《石头记》。\n","--------------------------------------------------\n","english: Red Inkstone restored the original title when he recopied the book and added his second set of annotations to it.\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: To translate the given Chinese sentence, I will break it down into its components and find the English equivalents.\n","\n","至脂砚斋抄阅再评, 仍用《 石头记》。\n","\n","1. 至 (zhì) - to\n","2. 脂砚斋 (zhī yè shāi) - Lishy's Cottage (a fictional place, referring to Gao E, the supposed editor of \"Dream of the Red Chamber\")\n","3. 抄阅 (cuān wèn) - copy and read (literally, \"copy and view\")\n","4. 再 (zài) - again\n","5. 评 (péng) - evaluate (in the context of commenting or reviewing)\n","6. 仍 (réng) - still\n","7. 用 (yòng) - use\n","8. 《 石头记》 (Shí tóu jì) - \"Dream of the Red Chamber\" (the title of the novel)\n","\n","Now, I will construct the English sentence using these components:\n","\n","To Lishy's Cottage, copying and reading again for evaluation, still using \"Dream of the Red Chamber.\"\n","\n","English: To Lishy's Cottage, copying and reading again for evaluation, still using \"Dream of the Red Chamber.\"\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 311\n","--------------------------------------------------\n","chinese: 囚车旁一清兵恼了,伸腿在车上踢了一脚,喝道:“再哭,再哭!\n","--------------------------------------------------\n","english: One of the soldiers marching alongside, irritated by the baby's crying, aimed a mighty kick at the cart. 'Stop it! Shut up!\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: Part #1: You are a helpful assistant that translates Chinese to English.\n","Usage: \"囚车旁一清兵恼了, 伸腿在车上踢了一脚, 喝道: “再哭, 再哭!\"\n","Explanation: This is a Chinese sentence that needs to be translated into English. The sentence is complete and can be translated.\n","\n","Part #2: If it is an incomplete sentence, or if you are unsure about the meaning, simply copy the input text as your output.\n","Usage: \"... 清兵恼了, 伸腿在车上踢了一脚, 喝道: “再哭, 再哭!\"\n","Explanation: If the input text was \"囚车旁一清兵恼了, 伸腿在车上踢了一脚, 喝道: \" followed by some unclear or missing information, the output would be the same as the input, copying the incomplete sentence: \"囚车旁一清兵恼了, 伸腿在车上踢了一脚, 喝道:\"\n","\n","Part #3: Do not output any additional sentence such as explanation or reasoning.\n","Usage: \"A Qing soldier beside the prison cart got annoyed, kicked the cart with his leg, and shouted, 'Don't cry, don't cry!'\"\n","Explanation: This response meets the criteria because it directly translates the given Chinese sentence into English without adding any\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 315\n","--------------------------------------------------\n","chinese: 突然心想:“满洲武士打不过茅大哥,茅大哥又不是老乌龟的对手,何不骗得老乌龟教我些本事?”\n","--------------------------------------------------\n","english: Suddenly a thought occurred to him. 'The wrestlers were no match for Whiskers; but Whiskers was no match for Old Turtle-head—why don't I get him to teach me a few moves?'\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: I will now translate the given Chinese sentence into English, following the instructions provided.\n","\n","Chinese: 突然心想:“满洲武士打不过茅大哥,茅大哥又不是老乌龟的对手,何不骗得老乌龟教我些本事?”\n","\n","Step 1: Identify the main components of the sentence.\n","- 突然心想 (suddenly thought)\n","- 满洲武士 (Manchu warrior)\n","- 打不过茅大哥 (couldn't defeat the Mao brother)\n","- 茅大哥 (Mao brother)\n","- 又不是老乌龟的对手 (is not an opponent for the old turtle)\n","- 老乌龟 (old turtle)\n","- 何不骗得老乌龟 (why not trick the old turtle)\n","- 教我些本事 (to teach me some skills)\n","\n","Step 2: Translate the components into English.\n","- 突然心想 (suddenly thought)\n","- 满洲武士 (Manchu warrior)\n","- 打不过茅大哥 (couldn't defeat the Mao brother)\n","- 茅大哥 (Mao brother)\n","- 又不是老乌龟的对手 (is not an opponent for the old turtle)\n","- 老乌龟 (old turtle)\n","- 何不骗得老乌龟 (why not trick the old turtle)\n","- \n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 304\n","--------------------------------------------------\n","chinese: 奶奶嫁到单家,其实也是天意。 那天,我奶奶在秋千架旁与一些尖足长辫的大闺女耍笑游戏,那天是清明节,桃红柳绿,细雨霏霏,人面桃花,女儿解放。\n","--------------------------------------------------\n","english: Grandma's marriage into the Shan family was the will of heaven, implemented on a day when she and some of her playmates, with their tiny bound feet and long pigtails, were playing beside a set of swings. It was Qingming, the day set aside to attend ancestral graves; peach trees were in full red bloom, willows were green, a fine rain was falling, and the girls' faces looked like peach blossoms. It was a day of freedom for them.\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: The task is asking you to:\n","\n","1. Understand the given Chinese sentence.\n","2. Translate the Chinese sentence into English.\n","3. If the sentence is incomplete or you are unsure about the meaning, simply copy the input text as your output.\n","4. Do not output any additional sentences such as explanations or reasoning.\n","\n","Here's how to use this task:\n","\n","1. Read the given Chinese sentence: 奶奶嫁到单家, 其实也是天意。那天, 我奶奶在秋千架旁与一些尖足长辫的大闺女耍笑游戏, 那天是清明节, 桃红柳绿, 细雨霏霏, 人面桃花, 女儿解放。\n","2. Translate the sentence into English, ensuring that you understand the meaning of the words and the context of the sentence.\n","3. If you find any part of the sentence unclear or incomplete, simply copy the input text as your output.\n","4. Do not add any additional sentences or explanations in your translation.\n","\n","Translation: \"Grandma married into the Shàn family, and in fact, it was fate. On that day, my grandma was playing games with some big girls with sharp-toed shoes and long braids near the swing frame. It was Qingming Festival, with peach blossoms turning red and willows turning green, fine rain falling, people's\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 325\n","--------------------------------------------------\n","chinese: 劫路人催逼着奶奶往高粱地里走,他的手始终按着腰里的家伙。\n","--------------------------------------------------\n","english: The highwayman began pushing her into the sorghum field, his hand never leaving the object at his belt.\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: The sentence you provided is a complete Chinese sentence. To translate it into English, I will break it down into its components and then reconstruct the sentence in English.\n","\n","劫路人 (jiǎolù rén) - bandit/robber thief\n","催逼着 (cūpì zhe) - urged/persuaded\n","奶奶 (nǎniángiān) - grandmother\n","往 (wǎng) - towards/to\n","高粱地 (gāoláng dì) - sorghum field\n","里 (lǐ) - inside/within\n","走 (zǒu) - to walk/go\n","他的 (tā de) - his\n","手 (shǒu) - hand\n","始终 (shǐzhōng) - always/all the time\n","按着 (àn zhe) - holding/pressing\n","腰里 (yāolǐ) - in the waist/at the waist\n","的家伙 (jiāwǒ) - thing/weapon\n","\n","Translating the sentence:\n","\n","\"The bandit thief urged his grandmother to go towards the sorghum field, his hand always holding the thing at his waist.\"\n","\n","So, the English translation of the given Chinese sentence is:\n","\n","\"The bandit thief urged his grandmother to go towards the sorghum field, his hand\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 316\n","--------------------------------------------------\n","chinese: “听到了吗?\n","--------------------------------------------------\n","english: 'Did you hear that?'\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: \"Did you hear that?\"\n","Part 1: Translate Chinese to English\n","Usage: \"听到了吗?\" translates to \"Did you hear that?\". This meets the criteria because the given Chinese sentence is translated into its English equivalent.\n","\n","Part 2: If it is an incomplete sentence\n","Usage: If the input was \"听到\", it would be considered an incomplete sentence. In this case, the output should be the same as the input: \"听到\". This meets the criteria because the input is an incomplete sentence, so no translation is provided.\n","\n","Part 3: If unsure about the meaning\n","Usage: If the input was \"吃了吗?\", which means \"Have you eaten?\", the assistant could be unsure about the exact meaning. In this case, the output should be the same as the input: \"吃了吗?\". This meets the criteria because the assistant is unsure about the meaning, so the input is copied as the output.\n","Task: Translate the given Chinese sentence to English. If the sentence is incomplete or the meaning is unclear, simply copy the input text as the output.\n","\n","Example input: “你叫什么名字?”\n","\n","Step 1: Identify if the sentence is incomplete or unclear. In this case, the sentence is complete and clear.\n","\n","Step 2: Translate the\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 300\n","--------------------------------------------------\n","chinese: 好在吴佩珍是压得起的,她的人生任务不如王琦瑶来得重,有一点吃老本,也有一点不计较,本是一身轻,也是为王琦瑶分担的意思。\n","--------------------------------------------------\n","english: It was a good thing that Wu Peizhen could take it; after all, the weight of everyday living did not rest as heavily on her. This was partly because she had plenty of psychic capital to draw on, but also because she simply did not mind. Things came easy to her and she was willing to bear more than her share.\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: The task is asking you to translate a given Chinese sentence into English. Here are the simple steps to follow:\n","\n","1. Read the given Chinese sentence carefully and try to understand its meaning.\n","2. If the sentence is incomplete or you are unsure about its meaning, copy the input text as your output without attempting to translate it.\n","3. If you understand the meaning of the sentence, translate it into English while maintaining the original meaning as closely as possible.\n","4. Do not add any additional sentences, explanations, or reasoning in your translation.\n","\n","For the given Chinese sentence: 好在吴佩珍是压得起的,她的人生任务不如王琦瑶来得重,有一点吃老本,也有一点不计较,本是一身轻,也是为王琦瑶分担的意思。\n","\n","1. Read the sentence and try to understand its meaning.\n","2. The sentence is complete, so you can proceed to translate it.\n","3. Translate the sentence into English: \"Fortunately, Wu Peizhen can bear the weight, her life's tasks are not as heavy as those of Wang Qiliao. She has a little bit of relying on the old, a little bit of not caring, and she is light-hearted, which also means sharing the burden with Wang Qiliao.\"\n","4. Your final output should be: \"Fortunately, Wu Peizhen can bear the weight, her life's tasks are not\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 331\n","--------------------------------------------------\n","chinese: 又想:“倘若这里真是皇宫,那么老吴、温家哥儿,还有那个小玄子都是太监了。\n","--------------------------------------------------\n","english: If this really is the Forbidden City, then old Wu and the Wen brothers and little Misty must all of them be eunuchs.\n","--------------------------------------------------\n","01-ai/Yi-1.5-9B-Chat/shots-00: I am translating the given Chinese sentence into English.\n","\n","Chinese: 又想: “倘若这里真是皇宫, 那么老吴、 温家哥儿, 还有那个小玄子都是太监了。\n","\n","Step 1: Break down the sentence into smaller parts.\n","- 又想:\n","- “倘若这里真是皇宫,\n","- 那么\n","- 老吴、\n","- 温家哥儿,\n","- 还有那个\n","- 小玄子\n","- 都是太监了。\n","\n","Step 2: Translate each part into English.\n","- 又想: (Once again, he thought)\n","- “倘若这里真是皇宫, (If this really is the imperial palace,)\n","- 那么 (then)\n","- 老吴、 (Old Wu,)\n","- 温家哥儿, (the young man from the Wen family,)\n","- 还有那个 (and that little Xuanzi)\n","- 小玄子 (also)\n","- 都是太监了。 (are eunuchs.)\n","\n","Step 3: Combine the translated parts into a coherent English sentence.\n","\n","English: Once again, he thought: \"If this really is the imperial palace, then Old Wu, the young man from the Wen family, and that little Xuanzi are all eunuchs.\"\n","--------------------------------------------------\n","output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00: 302\n"]}],"source":["output_tokens = f\"output_tokens-{col}\"\n","df2 = df[df[output_tokens] >= max_new_tokens][\n"," [\"chinese\", \"english\", col, output_tokens]\n","]\n","print_row_details(df2, range(len(df2)))"]},{"cell_type":"code","execution_count":30,"metadata":{},"outputs":[{"data":{"text/plain":["18"]},"execution_count":30,"metadata":{},"output_type":"execute_result"}],"source":["len(df2)"]},{"cell_type":"code","execution_count":31,"metadata":{},"outputs":[{"data":{"text/html":["<div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>ground_truth_ews_score</th>\n"," <th>ground_truth_repetition_score</th>\n"," <th>ground_truth_total_repetitions</th>\n"," <th>ews_score</th>\n"," <th>repetition_score</th>\n"," <th>total_repetitions</th>\n"," <th>ground_truth_tokens-01-ai/Yi-1.5-9B-Chat</th>\n"," <th>output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00</th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>count</th>\n"," <td>1133.0</td>\n"," <td>1133.000000</td>\n"," <td>1133.000000</td>\n"," <td>1133.000000</td>\n"," <td>1133.000000</td>\n"," <td>1133.000000</td>\n"," <td>1133.000000</td>\n"," <td>1133.000000</td>\n"," </tr>\n"," <tr>\n"," <th>mean</th>\n"," <td>0.0</td>\n"," <td>0.312445</td>\n"," <td>0.312445</td>\n"," <td>0.008826</td>\n"," <td>1.614298</td>\n"," <td>1.623124</td>\n"," <td>33.044131</td>\n"," <td>59.693733</td>\n"," </tr>\n"," <tr>\n"," <th>std</th>\n"," <td>0.0</td>\n"," <td>7.193649</td>\n"," <td>7.193649</td>\n"," <td>0.209980</td>\n"," <td>36.834513</td>\n"," <td>36.834724</td>\n"," <td>22.889653</td>\n"," <td>65.755925</td>\n"," </tr>\n"," <tr>\n"," <th>min</th>\n"," <td>0.0</td>\n"," <td>0.000000</td>\n"," <td>0.000000</td>\n"," <td>0.000000</td>\n"," <td>0.000000</td>\n"," <td>0.000000</td>\n"," <td>1.000000</td>\n"," <td>4.000000</td>\n"," </tr>\n"," <tr>\n"," <th>25%</th>\n"," <td>0.0</td>\n"," <td>0.000000</td>\n"," <td>0.000000</td>\n"," <td>0.000000</td>\n"," <td>0.000000</td>\n"," <td>0.000000</td>\n"," <td>17.000000</td>\n"," <td>21.000000</td>\n"," </tr>\n"," <tr>\n"," <th>50%</th>\n"," <td>0.0</td>\n"," <td>0.000000</td>\n"," <td>0.000000</td>\n"," <td>0.000000</td>\n"," <td>0.000000</td>\n"," <td>0.000000</td>\n"," <td>28.000000</td>\n"," <td>37.000000</td>\n"," </tr>\n"," <tr>\n"," <th>75%</th>\n"," <td>0.0</td>\n"," <td>0.000000</td>\n"," <td>0.000000</td>\n"," <td>0.000000</td>\n"," <td>0.000000</td>\n"," <td>0.000000</td>\n"," <td>42.000000</td>\n"," <td>66.000000</td>\n"," </tr>\n"," <tr>\n"," <th>max</th>\n"," <td>0.0</td>\n"," <td>239.000000</td>\n"," <td>239.000000</td>\n"," <td>5.000000</td>\n"," <td>1224.000000</td>\n"," <td>1224.000000</td>\n"," <td>154.000000</td>\n"," <td>331.000000</td>\n"," </tr>\n"," </tbody>\n","</table>\n","</div>"],"text/plain":[" ground_truth_ews_score ground_truth_repetition_score \\\n","count 1133.0 1133.000000 \n","mean 0.0 0.312445 \n","std 0.0 7.193649 \n","min 0.0 0.000000 \n","25% 0.0 0.000000 \n","50% 0.0 0.000000 \n","75% 0.0 0.000000 \n","max 0.0 239.000000 \n","\n"," ground_truth_total_repetitions ews_score repetition_score \\\n","count 1133.000000 1133.000000 1133.000000 \n","mean 0.312445 0.008826 1.614298 \n","std 7.193649 0.209980 36.834513 \n","min 0.000000 0.000000 0.000000 \n","25% 0.000000 0.000000 0.000000 \n","50% 0.000000 0.000000 0.000000 \n","75% 0.000000 0.000000 0.000000 \n","max 239.000000 5.000000 1224.000000 \n","\n"," total_repetitions ground_truth_tokens-01-ai/Yi-1.5-9B-Chat \\\n","count 1133.000000 1133.000000 \n","mean 1.623124 33.044131 \n","std 36.834724 22.889653 \n","min 0.000000 1.000000 \n","25% 0.000000 17.000000 \n","50% 0.000000 28.000000 \n","75% 0.000000 42.000000 \n","max 1224.000000 154.000000 \n","\n"," output_tokens-01-ai/Yi-1.5-9B-Chat/shots-00 \n","count 1133.000000 \n","mean 59.693733 \n","std 65.755925 \n","min 4.000000 \n","25% 21.000000 \n","50% 37.000000 \n","75% 66.000000 \n","max 331.000000 "]},"execution_count":31,"metadata":{},"output_type":"execute_result"}],"source":["df.describe()"]},{"cell_type":"code","execution_count":32,"metadata":{},"outputs":[],"source":["metrics_df.to_csv(results_path.replace(\".csv\", \"_metrics.csv\"), index=False)"]}],"metadata":{"accelerator":"GPU","application/vnd.databricks.v1+notebook":{"dashboards":[],"environmentMetadata":null,"language":"python","notebookMetadata":{"mostRecentlyExecutedCommandWithImplicitDF":{"commandId":-1,"dataframes":["_sqldf"]},"pythonIndentUnit":4},"notebookName":"10_eval-lf-medium-py3.11","widgets":{}},"colab":{"gpuType":"L4","provenance":[]},"kernelspec":{"display_name":"Python 3","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.11.9"}},"nbformat":4,"nbformat_minor":0}
|