{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceType":"competition","sourceId":121150,"databundleVersionId":15833391},{"sourceType":"datasetVersion","sourceId":14410665,"datasetId":9203761,"databundleVersionId":15226414},{"sourceType":"datasetVersion","sourceId":14899351,"datasetId":9366631,"databundleVersionId":15763950},{"sourceType":"datasetVersion","sourceId":14929273,"datasetId":9553164,"databundleVersionId":15796698}],"dockerImageVersionId":31287,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nimport gc\nimport math\nimport warnings\nimport pandas as pd\nimport torch\nfrom pathlib import Path\nfrom tqdm.auto import tqdm\nfrom transformers import AutoTokenizer, AutoModelForSeq2SeqLM\n\nwarnings.filterwarnings(\"ignore\")\n\ndevice = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n\nprint(\"GPU:\", torch.cuda.is_available())","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-08T00:06:31.198108Z","iopub.execute_input":"2026-03-08T00:06:31.198724Z","iopub.status.idle":"2026-03-08T00:06:51.757672Z","shell.execute_reply.started":"2026-03-08T00:06:31.198692Z","shell.execute_reply":"2026-03-08T00:06:51.757030Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test_df = pd.read_csv(\"/kaggle/input/competitions/deep-past-initiative-machine-translation/test.csv\")\n\nprint(\"Test rows:\", len(test_df))\n\ntest_df.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-08T00:06:51.758508Z","iopub.execute_input":"2026-03-08T00:06:51.759046Z","iopub.status.idle":"2026-03-08T00:06:51.796047Z","shell.execute_reply.started":"2026-03-08T00:06:51.759022Z","shell.execute_reply":"2026-03-08T00:06:51.795487Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model_paths = [\n\"/kaggle/input/datasets/assiaben/final-byt5/byt5-akkadian-optimized-34x\",\n\"/kaggle/input/datasets/llkh0a/byt5-akkadian-model\",\n\"/kaggle/input/datasets/spencevanasperdt/mattiaangelibyt5-akkadian-mbrpytorchdefault6\"\n]\n\nmodels = []\ntokenizers = []\n\nfor path in model_paths:\n    \n    print(\"Loading:\", path)\n    \n    tokenizer = AutoTokenizer.from_pretrained(path)\n    model = AutoModelForSeq2SeqLM.from_pretrained(path).to(device)\n    \n    models.append(model)\n    tokenizers.append(tokenizer)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-08T00:06:51.796909Z","iopub.execute_input":"2026-03-08T00:06:51.797168Z","iopub.status.idle":"2026-03-08T00:07:54.494393Z","shell.execute_reply.started":"2026-03-08T00:06:51.797148Z","shell.execute_reply":"2026-03-08T00:07:54.493717Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def generate_candidates(text, model, tokenizer):\n\n    text = \"translate Akkadian to English: \" + str(text)\n\n    inputs = tokenizer(\n        text,\n        return_tensors=\"pt\",\n        truncation=True,\n        max_length=512\n    ).to(device)\n\n    outputs = model.generate(\n        **inputs,\n        num_beams=12,\n        num_return_sequences=5,\n        max_new_tokens=256,\n        length_penalty=1.1\n    )\n\n    translations = tokenizer.batch_decode(outputs, skip_special_tokens=True)\n\n    return translations","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-08T00:07:54.495388Z","iopub.execute_input":"2026-03-08T00:07:54.495636Z","iopub.status.idle":"2026-03-08T00:07:54.500643Z","shell.execute_reply.started":"2026-03-08T00:07:54.495615Z","shell.execute_reply":"2026-03-08T00:07:54.499861Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def select_best(candidates):\n    \n    best = candidates[0]\n    best_len = 0\n    \n    for c in candidates:\n        length = len(c.split())\n        \n        if length > best_len:\n            best = c\n            best_len = length\n            \n    return best","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-08T00:07:54.501609Z","iopub.execute_input":"2026-03-08T00:07:54.501909Z","iopub.status.idle":"2026-03-08T00:07:54.515421Z","shell.execute_reply.started":"2026-03-08T00:07:54.501883Z","shell.execute_reply":"2026-03-08T00:07:54.514891Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import random\n\npredictions = []\n\nfor text in tqdm(test_df[\"transliteration\"]):\n\n    all_candidates = []\n\n    for model,tokenizer in zip(models,tokenizers):\n\n        cands = generate_candidates(text,model,tokenizer)\n\n        all_candidates += cands\n\n    random.shuffle(all_candidates)\n\n    best = select_best(all_candidates)\n\n    predictions.append(best)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-08T00:07:54.517248Z","iopub.execute_input":"2026-03-08T00:07:54.517559Z","iopub.status.idle":"2026-03-08T00:08:27.270794Z","shell.execute_reply.started":"2026-03-08T00:07:54.517527Z","shell.execute_reply":"2026-03-08T00:08:27.270238Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission = pd.DataFrame({\n\"id\":test_df[\"id\"],\n\"translation\":predictions\n})\n\nsubmission.to_csv(\"/kaggle/working/submission.csv\",index=False)\n\nprint(\"Submission saved!\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-08T00:08:27.271698Z","iopub.execute_input":"2026-03-08T00:08:27.271917Z","iopub.status.idle":"2026-03-08T00:08:27.282170Z","shell.execute_reply.started":"2026-03-08T00:08:27.271898Z","shell.execute_reply":"2026-03-08T00:08:27.281614Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission.head()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-03-08T00:08:27.283065Z","iopub.execute_input":"2026-03-08T00:08:27.283662Z","iopub.status.idle":"2026-03-08T00:08:27.293033Z","shell.execute_reply.started":"2026-03-08T00:08:27.283642Z","shell.execute_reply":"2026-03-08T00:08:27.292420Z"}},"outputs":[],"execution_count":null}]}