{"cells": [{"cell_type": "markdown", "metadata": {}, "source": "# Deep Past - Inference Only\n\nLoad pre-trained model and generate translations"}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "import os\nos.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] = 'python'\n\nimport re\nimport pandas as pd\nimport torch\nfrom transformers import AutoTokenizer, AutoModelForSeq2SeqLM\nprint(f\"CUDA: {torch.cuda.is_available()}\")"}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Paths\nMODEL_PATH = \"/kaggle/input/mt5-akkadian-model\"\nDATA_DIR = \"/kaggle/input/deep-past-initiative-machine-translation\"\nMAX_LEN = 128"}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Load model\nprint(\"Loading model...\")\ntokenizer = AutoTokenizer.from_pretrained(MODEL_PATH)\nmodel = AutoModelForSeq2SeqLM.from_pretrained(MODEL_PATH)\ndevice = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\nmodel.to(device)\nmodel.eval()\nprint(f\"Model loaded on {device}\")"}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Load test data\ntest_df = pd.read_csv(f\"{DATA_DIR}/test.csv\")\nprint(f\"Test samples: {len(test_df)}\")"}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "def clean(t):\n    if pd.isna(t): return \"\"\n    return re.sub(r\"\\s+\", \" \", str(t)).strip()\n\ndef translate(text):\n    src = f\"translate Akkadian to English: {clean(text)}\"\n    inputs = tokenizer(src, return_tensors=\"pt\", max_length=MAX_LEN, truncation=True)\n    inputs = {k: v.to(device) for k, v in inputs.items()}\n    with torch.no_grad():\n        out = model.generate(\n            input_ids=inputs[\"input_ids\"],\n            attention_mask=inputs[\"attention_mask\"],\n            max_length=256,\n            num_beams=4,\n            no_repeat_ngram_size=3,\n            early_stopping=True,\n        )\n    r = tokenizer.decode(out[0], skip_special_tokens=True)\n    r = clean(r)\n    if not r: return \"No translation.\"\n    if not r.endswith(\".\"): r += \".\"\n    return r"}, {"cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": "# Generate predictions\nprint(\"Generating translations...\")\npreds = []\nfor idx, row in test_df.iterrows():\n    p = translate(row[\"transliteration\"])\n    preds.append(p)\n    print(f\"ID {row['id']}: {p[:60]}...\")\n\n# Save submission\nsub = pd.DataFrame({\"id\": test_df[\"id\"], \"translation\": preds})\nsub.to_csv(\"submission.csv\", index=False)\nprint(\"\\nSubmission saved!\")\nsub"}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}}, "nbformat": 4, "nbformat_minor": 4}