{ "cells": [ { "cell_type": "code", "execution_count": 1, "id": "601b739b", "metadata": { "_cell_guid": "f3fb334d-43c6-4fae-93a0-4b6783397ad9", "_uuid": "da9ddfdf-832b-4d7d-bb6a-942f879f6447", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:06:50.055739Z", "iopub.status.busy": "2024-11-11T01:06:50.055346Z", "iopub.status.idle": "2024-11-11T01:06:50.059890Z", "shell.execute_reply": "2024-11-11T01:06:50.059090Z" }, "id": "gYpPYG55PDy0", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.02954, "end_time": "2024-11-11T01:06:50.061890", "exception": false, "start_time": "2024-11-11T01:06:50.032350", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "## Try reverse input string (will increase the performance)\n", "## adopt beam search" ] }, { "cell_type": "code", "execution_count": 2, "id": "ee5d0131", "metadata": { "_cell_guid": "53f3ea36-80e9-4eed-9b09-11fa0490ae70", "_uuid": "2075d24a-41ad-4336-b551-a0909866836c", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:06:50.103209Z", "iopub.status.busy": "2024-11-11T01:06:50.102887Z", "iopub.status.idle": "2024-11-11T01:07:30.253102Z", "shell.execute_reply": "2024-11-11T01:07:30.251825Z" }, "executionInfo": { "elapsed": 12078, "status": "ok", "timestamp": 1731233836806, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "sRPtnzMJ5DEN", "jupyter": { "outputs_hidden": false }, "outputId": "7a2d1eaf-ddb8-4082-b260-dd52ed452c9b", "papermill": { "duration": 40.174693, "end_time": "2024-11-11T01:07:30.256024", "exception": false, "start_time": "2024-11-11T01:06:50.081331", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "## Turn around camel-kenlm wheel error\n", "!pip install -q future six docopt cachetools numpy scipy pandas scikit-learn torch transformers editdistance requests emoji pyrsistent muddler\n", "!pip install -q camel-tools --no-deps\n", "!pip install -q contractions datasets\n", "\n", "!pip install -q kaggle" ] }, { "cell_type": "code", "execution_count": 3, "id": "d453e83f", "metadata": { "_cell_guid": "8aa266b9-fd1e-4344-8d1a-5a7fab478b63", "_uuid": "426a4f4a-d536-4eb3-a9d7-15e0b265fb63", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:07:30.296516Z", "iopub.status.busy": "2024-11-11T01:07:30.296121Z", "iopub.status.idle": "2024-11-11T01:07:43.286183Z", "shell.execute_reply": "2024-11-11T01:07:43.284925Z" }, "executionInfo": { "elapsed": 264, "status": "ok", "timestamp": 1731240458903, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "oKlf2c2DFqoS", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 13.013489, "end_time": "2024-11-11T01:07:43.288838", "exception": false, "start_time": "2024-11-11T01:07:30.275349", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "from tqdm import tqdm\n", "import time\n", "from camel_tools.tokenizers.word import simple_word_tokenize\n", "import numpy as np\n", "import pandas as pd\n", "import seaborn as sns\n", "import matplotlib.pyplot as plt\n", "from sklearn.model_selection import train_test_split\n", "from zipfile import ZipFile\n", "import torch\n", "from torch import nn\n", "from torch.nn import functional as F\n", "from torch.utils.data import DataLoader, Dataset\n", "import spacy\n", "from collections import Counter\n", "import random\n", "import unicodedata\n", "import pyarabic.araby as araby\n", "import contractions\n", "import nltk\n", "from datasets import load_dataset\n", "import re" ] }, { "cell_type": "code", "execution_count": 4, "id": "83ec4bc2", "metadata": { "_cell_guid": "9b098a3a-f196-4d86-85e8-4918c3edbab4", "_uuid": "eec15a85-e283-4d85-97f5-cb6d80ab078a", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:07:43.328761Z", "iopub.status.busy": "2024-11-11T01:07:43.328171Z", "iopub.status.idle": "2024-11-11T01:07:43.333426Z", "shell.execute_reply": "2024-11-11T01:07:43.332598Z" }, "executionInfo": { "elapsed": 272, "status": "ok", "timestamp": 1731234205580, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "DlvMCmdIWudl", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.027077, "end_time": "2024-11-11T01:07:43.335287", "exception": false, "start_time": "2024-11-11T01:07:43.308210", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "lr = 1e-3\n", "epochs = 50\n", "valid_test_size = 0.3\n", "# maxlen = 100 # length of one training sample by words\n", "embd_features = 128 # length of embedding vectors for each word (input_size) (=1000 in paper)\n", "batch_size = 64\n", "max_freq = 2 # to add all words to the vocabulary that seen more than one time\n", "lstm_hidden_size = 128 # The number of features in the hidden state (=1000 in paper)\n", "lstm_layers = 4 # Number of stacked recurrent layers\n", "dropout_p = 0.5" ] }, { "cell_type": "code", "execution_count": 5, "id": "fc2b096a", "metadata": { "_cell_guid": "a421e16e-78a1-45f1-a185-5ede26629408", "_uuid": "3eb4f197-592d-4d39-8a09-79cc7b939b10", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:07:43.375090Z", "iopub.status.busy": "2024-11-11T01:07:43.374478Z", "iopub.status.idle": "2024-11-11T01:07:43.379619Z", "shell.execute_reply": "2024-11-11T01:07:43.378747Z" }, "executionInfo": { "elapsed": 4, "status": "ok", "timestamp": 1731233855441, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "SPMCS8ajW1jK", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.027399, "end_time": "2024-11-11T01:07:43.381624", "exception": false, "start_time": "2024-11-11T01:07:43.354225", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "seed = 42\n", "g = torch.Generator().manual_seed(seed)\n", "\n", "device = 'cuda' if torch.cuda.is_available() else 'cpu'\n", "\n", "isKaggle = True\n", "base_dir = '/kaggle/working' if isKaggle else '/content'" ] }, { "cell_type": "markdown", "id": "510bed3e", "metadata": { "_cell_guid": "2823160c-9473-4388-b059-a8f97ecebc30", "_uuid": "fee9820e-a6f6-414c-b042-b320f067a2e8", "collapsed": false, "id": "jKW1NUp9XA9S", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.018429, "end_time": "2024-11-11T01:07:43.418685", "exception": false, "start_time": "2024-11-11T01:07:43.400256", "status": "completed" }, "tags": [] }, "source": [ "## Data" ] }, { "cell_type": "markdown", "id": "02c1cc46", "metadata": { "_cell_guid": "304718a6-ce41-4489-870f-cd7241f2ebdf", "_uuid": "2872f338-182c-484e-9be4-c3d7322a3e40", "collapsed": false, "id": "TFfKvsudXDMI", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.018401, "end_time": "2024-11-11T01:07:43.455689", "exception": false, "start_time": "2024-11-11T01:07:43.437288", "status": "completed" }, "tags": [] }, "source": [ "### Downloading" ] }, { "cell_type": "code", "execution_count": 6, "id": "4d155cf0", "metadata": { "_cell_guid": "eb367fb7-e526-4d7d-8b1e-e576bdaa58a2", "_uuid": "cd81eef9-90f5-466c-94dd-56c123e5ffda", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:07:43.494855Z", "iopub.status.busy": "2024-11-11T01:07:43.494145Z", "iopub.status.idle": "2024-11-11T01:07:57.356235Z", "shell.execute_reply": "2024-11-11T01:07:57.355391Z" }, "executionInfo": { "elapsed": 6154, "status": "ok", "timestamp": 1731233861591, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "y7jys3D2W2rf", "jupyter": { "outputs_hidden": false }, "outputId": "7eaed1e1-0941-4575-8482-e7f8d328c531", "papermill": { "duration": 13.883923, "end_time": "2024-11-11T01:07:57.358298", "exception": false, "start_time": "2024-11-11T01:07:43.474375", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dataset URL: https://www.kaggle.com/datasets/samirmoustafa/arabic-to-english-translation-sentences\r\n", "License(s): copyright-authors\r\n", "Archive: /kaggle/working/arabic-to-english-translation-sentences.zip\r\n", " inflating: ara_eng.txt \r\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "b5839b51ee1d4222b48ff200fa2aac6f", "version_major": 2, "version_minor": 0 }, "text/plain": [ "tatoeba_mt.py: 0%| | 0.00/15.5k [00:00\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EN_sentenceAR_sentence
0Hi.مرحبًا.
1Run!اركض!
2Help!النجدة!
\n", "" ], "text/plain": [ " EN_sentence AR_sentence\n", "0 Hi. مرحبًا.\n", "1 Run! اركض!\n", "2 Help! النجدة!" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_data.head(3)" ] }, { "cell_type": "code", "execution_count": 9, "id": "f9c198b5", "metadata": { "_cell_guid": "f4aa1236-9a0d-4404-a567-99b74ce5cd62", "_uuid": "2bdd8195-553f-420f-bacd-34f14fc7a122", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:07:59.485375Z", "iopub.status.busy": "2024-11-11T01:07:59.485061Z", "iopub.status.idle": "2024-11-11T01:07:59.493835Z", "shell.execute_reply": "2024-11-11T01:07:59.492990Z" }, "executionInfo": { "elapsed": 8, "status": "ok", "timestamp": 1731233862004, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "Q6_5CpqeR1WZ", "jupyter": { "outputs_hidden": false }, "outputId": "dafe43f3-f344-4d77-b589-e3dde59226e9", "papermill": { "duration": 0.031971, "end_time": "2024-11-11T01:07:59.495776", "exception": false, "start_time": "2024-11-11T01:07:59.463805", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EN_sentenceAR_sentence
101406You'd better go.يستحسن انك تروح.
101407You should not talk here.يستحسن إنك ما تتكلمش هنا.
101408Make your choice.يلا اختار.
\n", "
" ], "text/plain": [ " EN_sentence AR_sentence\n", "101406 You'd better go. يستحسن انك تروح.\n", "101407 You should not talk here. يستحسن إنك ما تتكلمش هنا.\n", "101408 Make your choice. يلا اختار." ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_data.tail(3)" ] }, { "cell_type": "code", "execution_count": 10, "id": "ddd88e87", "metadata": { "_cell_guid": "82791955-ac05-4454-a04d-79ff1445e6b5", "_uuid": "eb3335c0-e8c8-458d-97a9-cb5521fd4594", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:07:59.539311Z", "iopub.status.busy": "2024-11-11T01:07:59.538539Z", "iopub.status.idle": "2024-11-11T01:07:59.783825Z", "shell.execute_reply": "2024-11-11T01:07:59.782983Z" }, "executionInfo": { "elapsed": 312, "status": "ok", "timestamp": 1731233862309, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "lkehEZmETpS3", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.269515, "end_time": "2024-11-11T01:07:59.786005", "exception": false, "start_time": "2024-11-11T01:07:59.516490", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "df_data['EN_sentence_length'] = df_data['EN_sentence'].apply(lambda x: len(x.split(' ')))\n", "df_data['AR_sentence_length'] = df_data['AR_sentence'].apply(lambda x: len(x.split(' ')))" ] }, { "cell_type": "code", "execution_count": 11, "id": "c2512e94", "metadata": { "_cell_guid": "2ce3e90d-84aa-4528-b3b8-ebb69e124bee", "_uuid": "c0db62ea-a6e2-4884-8cb9-459b90c5d335", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:07:59.829149Z", "iopub.status.busy": "2024-11-11T01:07:59.828349Z", "iopub.status.idle": "2024-11-11T01:08:00.536692Z", "shell.execute_reply": "2024-11-11T01:08:00.535734Z" }, "executionInfo": { "elapsed": 922, "status": "ok", "timestamp": 1731233863229, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "yYMZjHJsaUBK", "jupyter": { "outputs_hidden": false }, "outputId": "0ba341d8-f865-496b-9920-fb489d215d61", "papermill": { "duration": 0.732373, "end_time": "2024-11-11T01:08:00.539150", "exception": false, "start_time": "2024-11-11T01:07:59.806777", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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1FOaMWOGLl++rP79+1v9t7B792717t1bZ86c0WuvvaawsDBNnTo13zwTn3zyiZycnNS5c2fzfL/wwgtWMU8++aTOnz+v6dOn68knn1RMTMxt/QonAAClbenSperXr58cHR01cOBAHT58WDt27CjWe9PT03Xu3DnVrFnzprENGzZUTk6OPvnkk5vG3mp9cbPP46I+01NSUtSpUyetX79eERERmjt3rho3bqywsDDNmTMn37HefPNNffbZZ3r55Zc1YcIEbd26VYMGDbKKiYuLU5cuXbR//36NHj1aM2fOVPfu3bVmzRoz5lZrt5J44YUXNG7cON1///2aO3euhg4dqqVLlyokJERXrlyxij1y5Igef/xxPfjgg5o5c6Zq1qypIUOGWP0x9bffflP37t21b98+TZgwQWPHjtXSpUvzNdvmzJmjevXqqXnz5ub5/r//+z+rmOLUokCFZQC4YyxevNiQVODi5ORkFSvJCA8PNwzDMLp37274+voaFy9etNrPjh07ijze3r17DRcXF0OS0a5dO2P06NHG6tWrjczMTKu48+fPGx4eHsbw4cOt1lssFsPd3d1q/eDBgw1JxtSpU61i77nnHiMgIMB8ferUKUOSMXny5Hx59ezZ02jdurVx+fJlc11ubq5x3333GU2aNMl3voKDg43c3Fxz/dixYw0HBwcjLS3NMAzDSEtLM2rUqGEEBgYaly5dsjpW3vtyc3ONJk2aGCEhIVb7unjxouHn52c8+OCDBZ/E/+/YsWOGJOPtt98uNOaTTz4x7O3tjW+//dZqfXR0tCHJ+P777811kgxHR0fjyJEj5roffvjBkGS899575rpHHnnEcHV1NX777Tdz3eHDh40qVaoYN36EVKtWzRg8eHC+vCZPnmxIMoYNG2a1/rHHHjNq1apV5LgBACgvdu7caUgy4uLiDMP4/bO9Xr16xujRo/PFSjLCwsKMU6dOGampqcbOnTuN3r173/SzPI/FYjFq165tSDKaN29ujBw50li2bJlZe+S5lfriVj6PC/tMDwsLM+rUqWOcPn3aav1TTz1luLu7m7Xixo0bDUlGixYtjKysLDNu7ty5hiRjz549hmEYxtWrVw0/Pz+jYcOGxrlz5/KNLU9xa7fCXF/XFuTbb781JBlLly61Wh8bG5tvfcOGDQ1JxjfffGOuS01NNZycnIyXXnrJXPfi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yo0xbm5uqlKlitX68PBweXl5qWPHjlq0aJF+r7NQ2VSW+kmq+DUU9VP5Rw1VPj6nC1MZa6iKVD9J1FB5bFFDVbl5CGzt9OnTysnJsfqPWZJ8fHx08ODBMsrq1uTm5mrMmDG6//771apVK3P9008/rYYNG6pu3br68ccf9corr+jQoUP69NNPyzDbggUGBiomJkbNmjXTyZMn9dprr6lz587au3evLBaLHB0d833Q+fj4yGKxlE3CxbR69WqlpaVpyJAh5rqKdF2ul3euC/pZydtmsVjk7e1ttb1KlSry9PQs19fq8uXLeuWVVzRw4EC5ubmZ6//617+qffv28vT01JYtWzRhwgSdPHlSs2bNKsNs8+vdu7f69esnPz8/HT16VH//+9/Vp08fJSQkyMHBocJeF0lasmSJatSoke/rJuXt2hT0e7g4v7ssFkuBP1N528pCYZ8p1zt9+rSmTZuW7+sLU6dOVY8ePeTq6qqvv/5af/nLX3ThwgX99a9/tUXqsKHKUD9JFb+Gon4qf9ekINRQZf85XZjKWkNVlPpJoobKY6saiqYUbovw8HDt3bvXag4BSVb/obdu3Vp16tRRz549dfToUd199922TrNIffr0Mf/dpk0bBQYGqmHDhlq5cqVcXFzKMLM/ZuHCherTp4/q1q1rrqtI1+VOcOXKFT355JMyDEMLFiyw2hYZGWn+u02bNnJ0dNQLL7yg6dOny8nJydapFuqpp54y/926dWu1adNGd999tzZt2qSePXuWYWZ/3KJFizRo0CA5OztbrS9v16aw38MV0c3GkpGRodDQUPn7+2vKlClW21599VXz3/fcc48yMzP19ttv05RCuVXRayjqp/J3Te4k1FDlV0WpnyRqqDy2qqH4+l455OXlJQcHh3wz+aekpMjX17eMsiq+iIgIrVmzRhs3blS9evWKjA0MDJQkHTlyxBap/SEeHh5q2rSpjhw5Il9fX2VnZystLc0qprxfo19++UXr16/X888/X2RcRbkueee6qJ8VX1/ffBPcXr16VWfPni2X1yqvmPrll18UFxdn9Re+ggQGBurq1av6+eefbZNgCd11113y8vIy/5uqaNclz7fffqtDhw7d9GdIKttrU9jv4eL87vL19S3wZypvm63d7DPl/Pnz6t27t2rUqKHPPvtMVatWLXJ/gYGB+vXXX5WVlXW7UkYZqej1k1Q5ayjqp/KJGooaypYqSv0kUUMV5XbVUDSlyiFHR0cFBAQoPj7eXJebm6v4+HgFBQWVYWZFMwxDERER+uyzz7Rhwwb5+fnd9D1JSUmSpDp16tzm7P64Cxcu6OjRo6pTp44CAgJUtWpVq2t06NAhJScnl+trtHjxYnl7eys0NLTIuIpyXfz8/OTr62t1HTIyMrRt2zbzOgQFBSktLU2JiYlmzIYNG5Sbm2sWj+VFXjF1+PBhrV+/XrVq1brpe5KSkmRvb5/vNu7y5tdff9WZM2fM/6Yq0nW53sKFCxUQEKC2bdveNLYsrs3Nfg8X53dXUFCQ9uzZY1Xw5hX3/v7+thmIiveZkpGRoV69esnR0VGff/55vr++FiQpKUk1a9YsV38VR+moqPWTVLlrKOqn8okaihrKlsp7/SRRQ5VpDXXbp1JHiSxfvtxwcnIyYmJijP379xsjRowwPDw8rGbyL29GjRpluLu7G5s2bTJOnjxpLhcvXjQMwzCOHDliTJ061di5c6dx7Ngx47///a9x1113GV26dCnjzAv20ksvGZs2bTKOHTtmfP/990ZwcLDh5eVlpKamGoZhGCNHjjQaNGhgbNiwwdi5c6cRFBRkBAUFlXHWhcvJyTEaNGhgvPLKK1bry/t1OX/+vLF7925j9+7dhiRj1qxZxu7du82nqbz55puGh4eH8d///tf48ccfjUcffdTw8/MzLl26ZO6jd+/exj333GNs27bN+O6774wmTZoYAwcOLFdjyc7ONv785z8b9erVM5KSkqx+hvKe1rFlyxZj9uzZRlJSknH06FHjn//8p1G7dm3jueeeK1djOX/+vPHyyy8bCQkJxrFjx4z169cb7du3N5o0aWJcvnzZ3Ed5uS43G0+e9PR0w9XV1ViwYEG+95eXa3Oz38OGcfPfXVevXjVatWpl9OrVy0hKSjJiY2ON2rVrGxMmTChXY0lPTzcCAwON1q1bG0eOHLGKuXr1qmEYhvH5558bH374obFnzx7j8OHDxvz58w1XV1dj0qRJNh0LbKci1k+GUblqKOqn8nNNqKGoocpyLHkqQv1kGNRQZVlD0ZQqx9577z2jQYMGhqOjo9GxY0dj69atZZ1SkSQVuCxevNgwDMNITk42unTpYnh6ehpOTk5G48aNjXHjxhnp6ellm3ghBgwYYNSpU8dwdHQ0/vSnPxkDBgwwjhw5Ym6/dOmS8Ze//MWoWbOm4erqajz22GPGyZMnyzDjoq1bt86QZBw6dMhqfXm/Lhs3bizwv6vBgwcbhvH7I41fffVVw8fHx3BycjJ69uyZb4xnzpwxBg4caFSvXt1wc3Mzhg4dapw/f75cjeXYsWOF/gxt3LjRMAzDSExMNAIDAw13d3fD2dnZaNGihfHGG29YFSnlYSwXL140evXqZdSuXduoWrWq0bBhQ2P48OH5/qewvFyXm40nz/vvv2+4uLgYaWlp+d5fXq7NzX4PG0bxfnf9/PPPRp8+fQwXFxfDy8vLeOmll6weEVwexlLYNZNkHDt2zDCM3x+R3a5dO6N69epGtWrVjLZt2xrR0dFGTk6OTccC26po9ZNhVK4aivqp/FwTaihqqLIcS56KUD8ZBjVUWdZQdv8/aQAAAAAAAMBmmFMKAAAAAAAANkdTCgAAAAAAADZHUwoAAAAAAAA2R1MKAAAAAAAANkdTCgAAAAAAADZHUwoAAAAAAAA2R1MKAAAAAAAANkdTCgAAAAAAADZHUwoAysCQIUPUt2/fsk4DAACgwqB+AiofmlIAKrWyLl5+/vln2dnZKSkpqcxyAAAAuBXUTwBshaYUAAAAAAAAbI6mFIA71t69e9WnTx9Vr15dPj4+evbZZ3X69Glze7du3fTXv/5V48ePl6enp3x9fTVlyhSrfRw8eFAPPPCAnJ2d5e/vr/Xr18vOzk6rV6+WJPn5+UmS7rnnHtnZ2albt25W73/nnXdUp04d1apVS+Hh4bpy5crtHDIAAMAfQv0EoDTRlAJwR0pLS1OPHj10zz33aOfOnYqNjVVKSoqefPJJq7glS5aoWrVq2rZtm2bMmKGpU6cqLi5OkpSTk6O+ffvK1dVV27Zt0wcffKD/+7//s3r/9u3bJUnr16/XyZMn9emnn5rbNm7cqKNHj2rjxo1asmSJYmJiFBMTc3sHDgAAUELUTwBKW5WyTgAAysK8efN0zz336I033jDXLVq0SPXr19f//vc/NW3aVJLUpk0bTZ48WZLUpEkTzZs3T/Hx8XrwwQcVFxeno0ePatOmTfL19ZUk/eMf/9CDDz5o7rN27dqSpFq1apkxeWrWrKl58+bJwcFBzZs3V2hoqOLj4zV8+PDbOnYAAICSoH4CUNpoSgG4I/3www/auHGjqlevnm/b0aNHrYqq69WpU0epqamSpEOHDql+/fpWxVLHjh2LnUPLli3l4OBgte89e/bc0jgAAABshfoJQGmjKQXgjnThwgU98sgjeuutt/Jtq1OnjvnvqlWrWm2zs7NTbm5uqeRwO/cNAABQ2qifAJQ2mlIA7kjt27fXf/7zHzVq1EhVqpTsV2GzZs10/PhxpaSkyMfHR5K0Y8cOqxhHR0dJv8+fAAAAUJFRPwEobUx0DqDSS09PV1JSktUyYsQInT17VgMHDtSOHTt09OhRrVu3TkOHDi12AfTggw/q7rvv1uDBg/Xjjz/q+++/18SJEyX9/lc7SfL29paLi4s5EWh6evptGycAAEBpoX4CYAs0pQBUeps2bdI999xjtUybNk3ff/+9cnJy1KtXL7Vu3VpjxoyRh4eH7O2L96vRwcFBq1ev1oULF3Tvvffq+eefN58e4+zsLEmqUqWK3n33Xb3//vuqW7euHn300ds2TgAAgNJC/QTAFuwMwzDKOgkAqCy+//57PfDAAzpy5Ijuvvvusk4HAACg3KN+Au5cNKUA4A/47LPPVL16dTVp0kRHjhzR6NGjVbNmTX333XdlnRoAAEC5RP0EIA8TnQPAH3D+/Hm98sorSk5OlpeXl4KDgzVz5syyTgsAAKDcon4CkIc7pQAAAAAAAGBzTHQOAAAAAAAAm6MpBQAAAAAAAJujKQUAAAAAAACboykFAAAAAAAAm6MpBQAAAAAAAJujKQUAAAAAAACboykFAAAAAAAAm6MpBQAAAAAAAJujKQUAAAAAAACb+38TIvLSTdCuYwAAAABJRU5ErkJggg==", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create a figure and two subplots\n", "fig, axes = plt.subplots(1, 2, figsize=(12, 5))\n", "\n", "# Define custom tick range based on your data range\n", "EN_x_ticks = np.arange(0, df_data['EN_sentence_length'].max()+1, 25)\n", "AR_x_ticks = np.arange(0, df_data['AR_sentence_length'].max()+1, 25)\n", "\n", "# Plot histogram for EN_sentence_length\n", "axes[0].hist(df_data['EN_sentence_length'], bins=50, color='skyblue', edgecolor='black')\n", "axes[0].set_title('EN Sentence Length')\n", "axes[0].set_xlabel('Length')\n", "axes[0].set_ylabel('Frequency')\n", "axes[0].set_xticks(EN_x_ticks) # Add more x-axis ticks\n", "\n", "# Plot histogram for AR_sentence_length\n", "axes[1].hist(df_data['AR_sentence_length'], bins=50, color='salmon', edgecolor='black')\n", "axes[1].set_title('AR Sentence Length')\n", "axes[1].set_xlabel('Length')\n", "axes[1].set_ylabel('Frequency')\n", "axes[1].set_xticks(AR_x_ticks) # Add more x-axis ticks\n", "\n", "# Display the plots\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "d9a20ed6", "metadata": { "_cell_guid": "93840f23-72fc-4a14-afab-a7d0bb3cbdec", "_uuid": "e1d2150a-bbdd-4a97-987f-3c5c348cf946", "collapsed": false, "id": "JnYOEPnJSK1I", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.02095, "end_time": "2024-11-11T01:08:00.581884", "exception": false, "start_time": "2024-11-11T01:08:00.560934", "status": "completed" }, "tags": [] }, "source": [ "As we see there are long and too short sentences.\n", "\n", "Short sentences will suffer from vanishing Gradients, As we will do post-padding (right-padding), so we will dorp short sentences." ] }, { "cell_type": "markdown", "id": "016a024c", "metadata": { "_cell_guid": "5401299b-ecd8-4433-8818-2dde942b8f1c", "_uuid": "7993eb62-7c1c-4400-a2cc-488985cda970", "collapsed": false, "id": "yk9hgqksU9_W", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.020897, "end_time": "2024-11-11T01:08:00.623676", "exception": false, "start_time": "2024-11-11T01:08:00.602779", "status": "completed" }, "tags": [] }, "source": [ "### Cleaning" ] }, { "cell_type": "code", "execution_count": 12, "id": "32c51041", "metadata": { "_cell_guid": "de16e1a4-e20e-4ec4-b24f-b05db3f151dd", "_uuid": "c68e2832-2b45-4638-96d4-9bbd6c10231c", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:08:00.667588Z", "iopub.status.busy": "2024-11-11T01:08:00.666834Z", "iopub.status.idle": "2024-11-11T01:08:00.724816Z", "shell.execute_reply": "2024-11-11T01:08:00.723725Z" }, "executionInfo": { "elapsed": 9, "status": "ok", "timestamp": 1731233863229, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "D7-HJg_PVBWV", "jupyter": { "outputs_hidden": false }, "outputId": "882a3d1e-ea75-4afb-a6ff-e976d037e084", "papermill": { "duration": 0.08227, "end_time": "2024-11-11T01:08:00.726872", "exception": false, "start_time": "2024-11-11T01:08:00.644602", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "RangeIndex: 101409 entries, 0 to 101408\n", "Data columns (total 4 columns):\n", " # Column Non-Null Count Dtype \n", "--- ------ -------------- ----- \n", " 0 EN_sentence 101409 non-null object\n", " 1 AR_sentence 101409 non-null object\n", " 2 EN_sentence_length 101409 non-null int64 \n", " 3 AR_sentence_length 101409 non-null int64 \n", "dtypes: int64(2), object(2)\n", "memory usage: 3.1+ MB\n", "None\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
EN_sentence_lengthAR_sentence_length
count101409.000000101409.000000
mean8.8230537.350225
std11.48724210.119463
min1.0000001.000000
25%4.0000003.000000
50%6.0000005.000000
75%8.0000007.000000
max225.000000225.000000
\n", "
" ], "text/plain": [ " EN_sentence_length AR_sentence_length\n", "count 101409.000000 101409.000000\n", "mean 8.823053 7.350225\n", "std 11.487242 10.119463\n", "min 1.000000 1.000000\n", "25% 4.000000 3.000000\n", "50% 6.000000 5.000000\n", "75% 8.000000 7.000000\n", "max 225.000000 225.000000" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "print(df_data.info())\n", "df_data.describe()\n", "## so Q3 at 8" ] }, { "cell_type": "code", "execution_count": 13, "id": "dbf84937", "metadata": { "execution": { "iopub.execute_input": "2024-11-11T01:08:00.771935Z", "iopub.status.busy": "2024-11-11T01:08:00.771264Z", "iopub.status.idle": "2024-11-11T01:08:00.779175Z", "shell.execute_reply": "2024-11-11T01:08:00.778295Z" }, "papermill": { "duration": 0.032529, "end_time": "2024-11-11T01:08:00.781173", "exception": false, "start_time": "2024-11-11T01:08:00.748644", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# https://stackoverflow.com/a/518232/2809427\n", "def unicodeToAscii(s):\n", " return ''.join(c for c in unicodedata.normalize('NFD', s) if unicodedata.category(c) != 'Mn')\n", "\n", "def preprocess_ar(text):\n", " text = araby.strip_diacritics(text).strip() # Remove diacritics \"التشكيل\"\n", " text = re.sub(r'[a-zA-Z]', '', text) # Remove English letters\n", " text = re.sub(r'\\s+', ' ', text).strip() # Trim multiple whitespaces to one\n", " text = re.sub(r'[_|\\d+|\\\\|\\-|؛|،|,|\\[|\\]|\\(|\\)|\\\"|/|%|!|,|.|:|♪|«|»|}|{|*|#]+', '', text) # Remove special characters and digits\n", " text = unicodeToAscii(text)\n", " return text\n", "\n", "def preprocess_en(text):\n", " text = text.lower()\n", " text = contractions.fix(text) # Fix contractions \"it's\" -> \"it is\"\n", " text = re.sub(r'[\\u0600-\\u06FF]', '', text) # Remove Arabic letters\n", " text = re.sub(r'\\s+', ' ', text).strip() # Trim multiple whitespaces to one\n", " text = re.sub(r'[_|\\d+|\\\\|\\-|؛|،|,|\\[|\\]|\\(|\\)|\\\"|/|%|!|,|.|:|♪|«|»|}|{|*|#]+', '', text) # Remove special characters and digits\n", " text = unicodeToAscii(text)\n", " return text" ] }, { "cell_type": "code", "execution_count": 14, "id": "65970704", "metadata": { "execution": { "iopub.execute_input": "2024-11-11T01:08:00.826388Z", "iopub.status.busy": "2024-11-11T01:08:00.825773Z", "iopub.status.idle": "2024-11-11T01:08:07.840714Z", "shell.execute_reply": "2024-11-11T01:08:07.839840Z" }, "papermill": { "duration": 7.040131, "end_time": "2024-11-11T01:08:07.842951", "exception": false, "start_time": "2024-11-11T01:08:00.802820", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "df_data['EN_sentence'] = df_data['EN_sentence'].apply(preprocess_en)\n", "df_data['AR_sentence'] = df_data['AR_sentence'].apply(preprocess_ar)" ] }, { "cell_type": "code", "execution_count": 15, "id": "975eb354", "metadata": { "_cell_guid": "504b87d4-4ae2-4546-b20d-bd8a5a11a003", "_uuid": "048c8e25-6fc4-4724-ba6d-0ec33961d904", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:08:07.888010Z", "iopub.status.busy": "2024-11-11T01:08:07.887209Z", "iopub.status.idle": "2024-11-11T01:08:07.896071Z", "shell.execute_reply": "2024-11-11T01:08:07.895194Z" }, "executionInfo": { "elapsed": 8, "status": "ok", "timestamp": 1731233863230, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "E8ApzqfrVHw9", "jupyter": { "outputs_hidden": false }, "outputId": "9e86fcd0-9677-4d6f-ef58-5d347f82f4be", "papermill": { "duration": 0.033156, "end_time": "2024-11-11T01:08:07.897900", "exception": false, "start_time": "2024-11-11T01:08:07.864744", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "(101409, 7383, 3334)" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "arr_len = df_data['EN_sentence_length']\n", "len(arr_len), len(arr_len[arr_len>20]), len(arr_len[arr_len<3])" ] }, { "cell_type": "markdown", "id": "141b4830", "metadata": { "_cell_guid": "dbce33c5-d4b9-4569-bc38-057f5714efdc", "_uuid": "19ce86d4-32d0-43ba-bac0-d5cc75013a9b", "collapsed": false, "id": "qHIb_lTkXmd_", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.022359, "end_time": "2024-11-11T01:08:07.941762", "exception": false, "start_time": "2024-11-11T01:08:07.919403", "status": "completed" }, "tags": [] }, "source": [ "We will drop sentences that > 20 words or < 3 words for source language." ] }, { "cell_type": "code", "execution_count": 16, "id": "77fa809d", "metadata": { "_cell_guid": "6b37401f-f687-4f7c-aca0-c9acd2bf4664", "_uuid": "4ac3524d-109b-4e79-a6b2-8f63d3643f9f", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:08:07.987137Z", "iopub.status.busy": "2024-11-11T01:08:07.986287Z", "iopub.status.idle": "2024-11-11T01:08:08.112139Z", "shell.execute_reply": "2024-11-11T01:08:08.111095Z" }, "executionInfo": { "elapsed": 6, "status": "ok", "timestamp": 1731233863230, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "1XTCKT3nXxOD", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.150953, "end_time": "2024-11-11T01:08:08.114259", "exception": false, "start_time": "2024-11-11T01:08:07.963306", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "EN_sentence 0\n", "AR_sentence 0\n", "EN_sentence_length 0\n", "AR_sentence_length 0\n", "dtype: int64" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_data = df_data[(df_data['EN_sentence_length'] <= 20)]\n", "df_data = df_data[(df_data['EN_sentence_length'] >= 3)]\n", "\n", "df_data = df_data[(df_data['AR_sentence_length'] <= 20)]\n", "df_data = df_data[(df_data['AR_sentence_length'] >= 3)]\n", "\n", "df_data = df_data.drop_duplicates(keep='first', subset='AR_sentence')\n", "df_data = df_data.drop_duplicates(keep='first', subset='EN_sentence')\n", "\n", "df_data = df_data.replace('', pd.NA).dropna()\n", "df_data = df_data.replace(' ', pd.NA).dropna()\n", "df_data.isna().sum()" ] }, { "cell_type": "code", "execution_count": 17, "id": "8bcf0f96", "metadata": { "_cell_guid": "e6d0a9ee-0f33-4fd3-9d10-3b26815ec3fe", "_uuid": "06c813f4-6881-4566-a2df-485bdfac9520", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:08:08.159726Z", "iopub.status.busy": "2024-11-11T01:08:08.159108Z", "iopub.status.idle": "2024-11-11T01:08:08.841666Z", "shell.execute_reply": "2024-11-11T01:08:08.840716Z" }, "executionInfo": { "elapsed": 759, "status": "ok", "timestamp": 1731233863984, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "JYQ1JaoEfw9F", "jupyter": { "outputs_hidden": false }, "outputId": "4c7856f2-a45b-4a0b-b5a2-ccdbc377cb25", "papermill": { "duration": 0.707615, "end_time": "2024-11-11T01:08:08.844017", "exception": false, "start_time": "2024-11-11T01:08:08.136402", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABKUAAAHqCAYAAADVi/1VAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABzaElEQVR4nO3de1hVdfr//xfKURQUCZAUIjXBU55KyXOSZOSk0pRlnst0sPFQan5TMzVNy7MmOZlUg1P6mXRMS0U8peIhPKWiaVnbUqCdIimICOv3Rz92bgFFxL0Bn4/rWtfVXu97r3W/QWbfc++13svBMAxDAAAAAAAAgA1VsHcCAAAAAAAAuPvQlAIAAAAAAIDN0ZQCAAAAAACAzdGUAgAAAAAAgM3RlAIAAAAAAIDN0ZQCAAAAAACAzdGUAgAAAAAAgM3RlAIAAAAAAIDN0ZQCAAAAAACAzdGUAgCUqIkTJ8rBwUFms9neqQAAAJQJMTExcnBw0LfffmvvVACboikFlGN5H26Fbbt27bLE5u2bOXNmoccpyofkTz/9pP79+6t27dpydXWVn5+f2rVrpzfffLNE53a9jIwMTZw4UVu2bLmj57GVn376SQ4ODnrvvffsnUqhpk6dqlWrVtk7DQAA7pj3339fDg4OatmyZaEx19dXHh4eat++vdauXVvk8/z2228aNmyYgoOD5ebmJh8fHz388MMaM2aMLl68WBJTKVR5+zx3cHDQ0KFD7Z1God5//33FxMTYOw2g1HC0dwIA7rxJkyYpKCgo3/46derk2/fuu+9qyJAhqlSp0i2f5+TJk3rooYfk5uamAQMG6L777tPZs2e1b98+TZ8+XW+99Vax8i+KjIwMy/E7dOhwx86Dv0ydOlVPP/20unXrZu9UAAC4I2JjY3Xfffdpz549OnnyZIG1kyQ99thj6tOnjwzD0M8//6xFixapa9eu+vrrrxUeHn7Dc5w7d04tWrRQenq6BgwYoODgYP3+++86dOiQFi1apCFDhqhy5cp3YnqS+Dy3tffff1/e3t7q16+fvVMBSgWaUsBdoEuXLmrRosVN45o0aaIDBw4oOjpaI0eOvOXzzJ49WxcvXtSBAwcUGBhoNZaamnrLxwMAALCXU6dOaefOnfriiy/08ssvKzY2ttArvx944AG98MILlteRkZGqX7++5s6de9Om1JIlS2QymbRjxw498sgjVmPp6elydna+/ckAQCnF7XsALFq3bq1HH31UM2bMUGZm5i2//4cfflDNmjXzNaQkycfHJ9++r7/+Wm3btpW7u7uqVKmiiIgIHTlyxCqmX79+qly5sn799Vd169ZNlStX1j333KPXXntNOTk5kv681e2ee+6RJL311luWy+cnTpxoOc6xY8f09NNPy8vLS66urmrRooVWr15tda682xR37NihkSNH6p577pG7u7u6d++u3377rcD827dvrypVqsjDw0MPPfSQli1bZhWze/duPf744/L09FSlSpXUvn177dixo2g/0CLIysrSm2++qTp16sjFxUW1atXS6NGjlZWVZRWXdyn7qlWr1LBhQ7m4uKhBgwZat25dvmNu2bJFLVq0kKurq2rXrq0PPvjAsk7Utce7dOmSPv74Y8vP+/pv/NLS0tSvXz9VrVpVnp6e6t+/vzIyMkps7gAA3EmxsbGqVq2aIiIi9PTTTys2NrbI7w0JCZG3t7d++OGHm8b+8MMPqlixolq1apVvzMPDQ66urlb7ilJb5H1unzx58oafxTf7PP/11181YMAA+fr6WmqHjz76yOpcW7ZskYODg5YvX663335bNWvWlKurqzp16qSTJ0/mm9Pu3bv1xBNPqFq1anJ3d1fjxo01d+5cq5ii1G23Izc3V3PmzFGDBg3k6uoqX19fvfzyyzp//rxV3H333acnn3xS27dv18MPPyxXV1fdf//9+uSTT/Id89ChQ2rfvr3c3NxUs2ZNTZkyRUuXLpWDg4N++ukny/GOHDmirVu3Wn7e11/hn5WVVaQ6FCgvaEoBd4ELFy7IbDZbbb///nuBsRMnTlRKSooWLVp0y+cJDAzU6dOntWnTppvGfvrpp4qIiFDlypU1ffp0jR8/XkePHlWbNm0sH9x5cnJyFB4erurVq+u9995T+/btNXPmTC1evFiSdM8991jy7d69uz799FN9+umn6tGjhyTpyJEjatWqlZKSkvT6669r5syZcnd3V7du3bRy5cp8ub3yyis6ePCg3nzzTQ0ZMkRffvllvrUJYmJiFBERoXPnzmns2LF655131KRJE6smz6ZNm9SuXTulp6frzTff1NSpU5WWlqZHH31Ue/bsuaWfbUFyc3P1t7/9Te+99566du2q+fPnq1u3bpo9e7aeffbZfPHbt2/XP/7xD/Xs2VMz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X59//rkeeOABeXl5qWHDhmrYsKEWLlyoNm3aqFGjRnrppZd0//33KyUlRQkJCfrll1908ODBWzqXh4eHZs+erRdffFEPPfSQnn/+eVWrVk0HDx5URkaGPv74Y1WoUEEffvihunTpogYNGqh///6699579euvv2rz5s3y8PDQl19+edNzxcfH52t8SVK3bt3Uu3dvLV++XIMHD9bmzZvVunVr5eTk6NixY1q+fLnWr19/S2uJSX82Ijds2KDWrVtryJAhysnJ0YIFC9SwYUOrQkv6szjeuHGjZs2aJX9/fwUFBally5a3dD4AAEqT1atX648//tDf/va3AsdbtWqle+65R7GxsXr22WdveKx+/fppwoQJmj59urp161Zo3KeffqrY2Fh1795dzZs3l7Ozs5KSkvTRRx/J1dVV/+///T9JKrHa4nqFfZ6/88472rx5s1q2bKmXXnpJ9evX17lz57Rv3z5t3LhR586du6XzVKhQQYsWLVLXrl3VpEkT9e/fXzVq1NCxY8d05MgRrV+/XpJKpG779ttvNWXKlHz7O3TooPbt2+vll1/WtGnTdODAAXXu3FlOTk46ceKEVqxYoblz5+rpp5++pbmNHj1a//73v/XYY4/plVdekbu7uz788EMFBATo3LlzVldHNW/eXIsWLdKUKVNUp04d+fj4FLrOKnBXsMcj/wDYRt6jZQvbli5daolVIY/PzXvMryRj7969Nzzfjh07jKioKKNhw4aGp6en4eTkZAQEBBj9+vUzfvjhhwKPHR4ebnh6ehqurq5G7dq1jX79+hnffvutJaZv376Gu7t7vvfmPer4Wjt37jSaN29uODs7G5KMN9980zL2ww8/GH369DH8/PwMJycn49577zWefPJJ4//+7//y/byun2fez2Dz5s1W+1evXm088sgjhpubm+Hh4WE8/PDDxn/+8x+rmP379xs9evQwqlevbri4uBiBgYHGM888Y8THx9/wZ3nq1Kkb/u4+/fRTwzAM48qVK8b06dONBg0aGC4uLka1atWM5s2bG2+99ZZx4cIFy/EK+/0GBgbmewx0fHy80bRpU8PZ2dmoXbu28eGHHxqvvvqq4erqahV37Ngxo127doabm5shyXKcvN/Nb7/9ZhWf9/O99rHIAACUJl27djVcXV2NS5cuFRrTr18/w8nJyTCbzYZhFP4ZaxiGMXHi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Bg0apLS0NLVp00br1q2Tq6urJSY2NlZDhw5Vp06dVKFCBUVGRmrevHmWcU9PT23YsEFRUVFq3ry5vL29NWHCBA0aNMim8wUAAOVXqWpKXbx4UT/88IN69+6t5s2by8nJSfHx8YqMjJQkHT9+XCaTSaGhoZL+vKz87bffVmpqquUJMnFxcfLw8LCstRAaGqqvvvrK6jxxcXGWYwBlnU9QXd0b8qC90wAA2NCTTz6pJ598stBxBwcHTZo0SZMmTSo0xsvLS8uWLbvheRo3bqxvvvmm2HkCAADciF0XOn/ttde0detW/fTTT9q5c6e6d++uihUr6rnnnpOnp6cGDhyokSNHavPmzUpMTFT//v0VGhqqVq1aSZI6d+6s+vXrq3fv3jp48KDWr1+vcePGKSoqynKl0+DBg/Xjjz9q9OjROnbsmN5//30tX75cI0aMsOfUAQAAAAAA7mrFakr9+OOPJXLyX375Rc8995zq1aunZ555RtWrV9euXbt0zz33SJJmz56tJ598UpGRkWrXrp38/Pz0xRdfWN5fsWJFrVmzRhUrVlRoaKheeOEF9enTx+pbwaCgIK1du1ZxcXF68MEHNXPmTH344YcKDw8vkTkAAAAUVUnVUAAAAOVBsW7fq1Onjtq3b6+BAwfq6aeftlqf4FZ89tlnNxx3dXXVwoULtXDhwkJjAgMD892ed70OHTpo//79xcoRAACgpJRUDQUAAFAeFOtKqX379qlx48YaOXKk/Pz89PLLL+dbcBwAAADWqKEAAAD+UqymVJMmTTR37lydOXNGH330kc6ePas2bdqoYcOGmjVrln777beSzhMAAKDMo4YCAAD4y20tdO7o6KgePXpoxYoVmj59uk6ePKnXXntNtWrVUp8+fXT27NmSyhMAAKDcoIYCAAC4zabUt99+q3/84x+qUaOGZs2apddee00//PCD4uLidObMGT311FMllScAAEC5QQ0FAABQzIXOZ82apaVLl+r48eN64okn9Mknn+iJJ55QhQp/9riCgoIUExOj++67ryRzBQAAKNOooQAAAP5SrKbUokWLNGDAAPXr1081atQoMMbHx0dLliy5reQAAADKE2ooAACAvxSrKXXixImbxjg7O6tv377FOTwAAEC5RA0FAADwl2KtKbV06VKtWLEi3/4VK1bo448/vu2kAAAAyiNqKAAAgL8Uqyk1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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create a figure and two subplots\n", "fig, axes = plt.subplots(1, 2, figsize=(12, 5))\n", "\n", "# Define custom tick range based on your data range\n", "EN_x_ticks = np.arange(0, df_data['EN_sentence_length'].max()+1, 2)\n", "AR_x_ticks = np.arange(0, df_data['AR_sentence_length'].max()+1, 2)\n", "\n", "# Plot histogram for EN_sentence_length\n", "axes[0].hist(df_data['EN_sentence_length'], bins=50, color='skyblue', edgecolor='black')\n", "axes[0].set_title('EN Sentence Length')\n", "axes[0].set_xlabel('Length')\n", "axes[0].set_ylabel('Frequency')\n", "axes[0].set_xticks(EN_x_ticks) # Add more x-axis ticks\n", "\n", "# Plot histogram for AR_sentence_length\n", "axes[1].hist(df_data['AR_sentence_length'], bins=50, color='salmon', edgecolor='black')\n", "axes[1].set_title('AR Sentence Length')\n", "axes[1].set_xlabel('Length')\n", "axes[1].set_ylabel('Frequency')\n", "axes[1].set_xticks(AR_x_ticks) # Add more x-axis ticks\n", "\n", "# Display the plots\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "d3e4a1da", "metadata": { "_cell_guid": "2ded56c1-f0e8-4a28-aa06-266e70ba1746", "_uuid": "724377a6-b9a8-4e18-ad30-8907bbc42b5d", "collapsed": false, "id": "0qY-VQnsX6Uz", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.022022, "end_time": "2024-11-11T01:08:08.888808", "exception": false, "start_time": "2024-11-11T01:08:08.866786", "status": "completed" }, "tags": [] }, "source": [ "### Spliting" ] }, { "cell_type": "code", "execution_count": 18, "id": "d47f79cd", "metadata": { "_cell_guid": "4827dfe0-5cac-4a5f-b16e-f4a0f12275f3", "_uuid": "e27f0b2f-b122-4bf6-97cb-9fee19db02ca", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:08:08.934766Z", "iopub.status.busy": "2024-11-11T01:08:08.934343Z", "iopub.status.idle": "2024-11-11T01:08:08.953662Z", "shell.execute_reply": "2024-11-11T01:08:08.952610Z" }, "executionInfo": { "elapsed": 5, "status": "ok", "timestamp": 1731233863984, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "YVmnp4vwW1e5", "jupyter": { "outputs_hidden": false }, "outputId": "7eaa09bf-7ac0-4dea-9ea4-3596f29d47c9", "papermill": { "duration": 0.044679, "end_time": "2024-11-11T01:08:08.955719", "exception": false, "start_time": "2024-11-11T01:08:08.911040", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(30129, 4), (6457, 4), (6456, 4)\n" ] } ], "source": [ "df_train, df_test = train_test_split(df_data, test_size=valid_test_size, shuffle=True, random_state=seed)\n", "df_valid, df_test = train_test_split(df_test, test_size=0.5, shuffle=True, random_state=seed)\n", "\n", "print(df_train.shape, df_test.shape, df_valid.shape, sep=', ')" ] }, { "cell_type": "markdown", "id": "4d6cd36a", "metadata": { "_cell_guid": "d2b96602-f2d3-42d4-9354-5d03cd34567f", "_uuid": "52c29e11-bff0-4ac1-9277-988f3a67f908", "collapsed": false, "id": "x_tK_7w7X9k7", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.022027, "end_time": "2024-11-11T01:08:09.000136", "exception": false, "start_time": "2024-11-11T01:08:08.978109", "status": "completed" }, "tags": [] }, "source": [ "### Loading and preprocessing (DataPipeline)" ] }, { "cell_type": "code", "execution_count": 19, "id": "d1d417fb", "metadata": { "_cell_guid": "304de1ba-2dde-45d3-abf2-66f83bb0395e", "_uuid": "64b75afc-3ad0-4d82-8c0a-08f1b12a8d5e", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:08:09.046341Z", "iopub.status.busy": "2024-11-11T01:08:09.045959Z", "iopub.status.idle": "2024-11-11T01:08:09.050816Z", "shell.execute_reply": "2024-11-11T01:08:09.049774Z" }, "executionInfo": { "elapsed": 4, "status": "ok", "timestamp": 1731233863984, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "l71HUAXhW1c2", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.030357, "end_time": "2024-11-11T01:08:09.052761", "exception": false, "start_time": "2024-11-11T01:08:09.022404", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# Arabic Tokenizer\n", "class camel_tokenizer():\n", " def __call__(self, text):\n", " return simple_word_tokenize(text.lower())\n", " # return [tok.text.lower() for tok in simple_word_tokenize(text)]" ] }, { "cell_type": "code", "execution_count": 20, "id": "00fc9c7b", "metadata": { "_cell_guid": "51223be9-dc37-4e76-b718-64a53cff204e", "_uuid": "5efa6e4e-b322-4cbc-9012-593d1981505e", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:08:09.099090Z", "iopub.status.busy": "2024-11-11T01:08:09.098713Z", "iopub.status.idle": "2024-11-11T01:08:09.104140Z", "shell.execute_reply": "2024-11-11T01:08:09.103258Z" }, "executionInfo": { "elapsed": 3, "status": "ok", "timestamp": 1731233863984, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "WcmKh1fRakye", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.031054, "end_time": "2024-11-11T01:08:09.106114", "exception": false, "start_time": "2024-11-11T01:08:09.075060", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# English Tokenizer\n", "class spacy_tokenizer():\n", " def __init__(self):\n", " self.spacy_eng = spacy.load(\"en_core_web_sm\")\n", "\n", " def __call__(self, text):\n", " return [tok.text.lower() for tok in self.spacy_eng.tokenizer(text)]" ] }, { "cell_type": "code", "execution_count": 21, "id": "859880fc", "metadata": { "_cell_guid": "68d52d75-d185-413e-ac51-d783a1674441", "_uuid": "9c54045e-9bee-4006-a808-96c86b15256b", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:08:09.152951Z", "iopub.status.busy": "2024-11-11T01:08:09.152130Z", "iopub.status.idle": "2024-11-11T01:08:09.166297Z", "shell.execute_reply": "2024-11-11T01:08:09.165398Z" }, "executionInfo": { "elapsed": 3, "status": "ok", "timestamp": 1731233863984, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "46MfvfOhYA5E", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.039344, "end_time": "2024-11-11T01:08:09.168072", "exception": false, "start_time": "2024-11-11T01:08:09.128728", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "class Vocabulary():\n", " def __init__(self, callable_tokenizer, max_freq=3, unk=True, sos=False, eos=False):\n", "\n", " self.sos = sos\n", " self.eos = eos\n", " self.unk = unk\n", " self.callable_tokenizer = callable_tokenizer\n", " self.max_freq = max_freq\n", "\n", " self.stoi = {\"\": 0}\n", " if self.unk:\n", " self.stoi[''] = len(self.stoi)\n", " if self.sos:\n", " self.stoi[''] = len(self.stoi)\n", " if self.eos:\n", " self.stoi[''] = len(self.stoi)\n", "\n", " def __len__(self):\n", " return len(self.stoi)\n", "\n", " def get_vocabulary(self):\n", " return self.stoi\n", "\n", " def add_token(self, token_name: str):\n", " if token_name not in self.stoi:\n", " self.stoi[token_name] = len(self.stoi)\n", "\n", " def build_vocabulary(self, sentences_list):\n", " if type(sentences_list[0]) != str:\n", " ## ex: [['eating', 'apples'], ['eating', 'oranges']]\n", " sentences_list = [' '.join(sen) for sen in sentences_list]\n", "\n", " word_counts = Counter()\n", " for sentence in sentences_list:\n", " tokens = self.callable_tokenizer(sentence)\n", " word_counts.update(tokens)\n", "\n", " # Filter words with mox_freq or more occurrences\n", " filtered_words = [word for word, count in word_counts.items() if count >= self.max_freq]\n", " for word in filtered_words:\n", " if word not in self.stoi:\n", " self.stoi[word] = len(self.stoi)\n", "\n", " def get_numerical_tokens(self, text: str):\n", " tokens = self.callable_tokenizer(text)\n", " tokens.insert(0, '') if self.sos else None\n", " tokens.append('') if self.eos else None\n", " unk_id = self.stoi.get('', None)\n", " return [self.stoi.get(word, unk_id) for word in tokens]\n", "\n", " def __call__(self, text: str):\n", " return self.get_numerical_tokens(text)\n", "\n", " def tokens_to_text(self, tokens_list):\n", " keys = list(self.stoi.keys())\n", " values = list(self.stoi.values())\n", "\n", " return ' '.join([keys[values.index(token)] for token in tokens_list])" ] }, { "cell_type": "code", "execution_count": 22, "id": "c875f624", "metadata": { "_cell_guid": "d751258b-c525-4b89-a196-5c12b044fed3", "_uuid": "935e104d-c674-4f0b-b13a-d31914cd1d05", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:08:09.214919Z", "iopub.status.busy": "2024-11-11T01:08:09.213969Z", "iopub.status.idle": "2024-11-11T01:08:09.221143Z", "shell.execute_reply": "2024-11-11T01:08:09.220415Z" }, "executionInfo": { "elapsed": 3, "status": "ok", "timestamp": 1731233863984, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "77CoJfh-e0xT", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.032558, "end_time": "2024-11-11T01:08:09.223075", "exception": false, "start_time": "2024-11-11T01:08:09.190517", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "class MT_Dataset(Dataset):\n", "\n", " def __init__(self, en_sentences_list, ar_sentences_list, en_vocabulary:Vocabulary, ar_vocabulary:Vocabulary):\n", "\n", " super(MT_Dataset, self).__init__()\n", " self.ar_sentences_list = ar_sentences_list\n", " self.en_sentences_list = en_sentences_list\n", " self.ar_vocabulary = ar_vocabulary\n", " self.en_vocabulary = en_vocabulary\n", " # self.maxlen = maxlen\n", "\n", " def __len__(self):\n", " return len(self.en_sentences_list)\n", "\n", " def __getitem__(self, index):\n", " en_sentence, ar_sentence = self.en_sentences_list[index], self.ar_sentences_list[index]\n", "\n", " en_numrical_tokens = self.en_vocabulary(en_sentence)\n", " ar_numrical_tokens = self.ar_vocabulary(ar_sentence)\n", "\n", " return torch.tensor(en_numrical_tokens), torch.tensor(ar_numrical_tokens)" ] }, { "cell_type": "code", "execution_count": 23, "id": "001d01e2", "metadata": { "_cell_guid": "47c0900b-d167-4818-ba8e-e1147ed613b9", "_uuid": "a54656ee-11dc-4c06-ab78-3899410b45a9", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:08:09.269083Z", "iopub.status.busy": "2024-11-11T01:08:09.268475Z", "iopub.status.idle": "2024-11-11T01:08:09.275337Z", "shell.execute_reply": "2024-11-11T01:08:09.274439Z" }, "executionInfo": { "elapsed": 4, "status": "ok", "timestamp": 1731233863985, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "u4xNdej7gDiO", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.031982, "end_time": "2024-11-11T01:08:09.277244", "exception": false, "start_time": "2024-11-11T01:08:09.245262", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "class MYCollate():\n", " def __init__(self, batch_first=True, pad_value=0):\n", " self.pad_value = pad_value\n", " self.batch_first = batch_first\n", "\n", " def __call__(self, data):\n", " en_stentences = [ex[0] for ex in data]\n", " ar_stentences = [ex[1] for ex in data]\n", "\n", " padded_en_stentences = nn.utils.rnn.pad_sequence(en_stentences, batch_first=self.batch_first,\n", " padding_value=self.pad_value)\n", " padded_ar_stentences = nn.utils.rnn.pad_sequence(ar_stentences, batch_first=self.batch_first,\n", " padding_value=self.pad_value)\n", " return padded_en_stentences, padded_ar_stentences" ] }, { "cell_type": "code", "execution_count": 24, "id": "bff46f11", "metadata": { "_cell_guid": "14b402fa-17df-4017-a7da-365181a14479", "_uuid": "18c8ef64-8c8e-4c81-8b84-441d37feafcc", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:08:09.323293Z", "iopub.status.busy": "2024-11-11T01:08:09.322931Z", "iopub.status.idle": "2024-11-11T01:08:57.424135Z", "shell.execute_reply": "2024-11-11T01:08:57.423129Z" }, "executionInfo": { "elapsed": 67228, "status": "ok", "timestamp": 1731233931209, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "oV00SOQbYA3N", "jupyter": { "outputs_hidden": false }, "outputId": "2aa5864a-a73c-4f7c-816b-194564811a21", "papermill": { "duration": 48.148695, "end_time": "2024-11-11T01:08:57.448170", "exception": false, "start_time": "2024-11-11T01:08:09.299475", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "len(ar_vocab) = 12378, len(en_vocab) = 7254\n" ] } ], "source": [ "ar_tokenizer = camel_tokenizer()\n", "ar_vocab = Vocabulary(ar_tokenizer, max_freq=max_freq, unk=True, sos=True, eos=True)\n", "ar_vocab.build_vocabulary(df_train['AR_sentence'].values)\n", "\n", "en_tokenizer = spacy_tokenizer()\n", "en_vocab = Vocabulary(en_tokenizer, max_freq=max_freq, unk=True, sos=True, eos=True)\n", "en_vocab.build_vocabulary(df_train['EN_sentence'].values)\n", "\n", "print(f'{len(ar_vocab) = }, {len(en_vocab) = }')" ] }, { "cell_type": "code", "execution_count": 25, "id": "72ed39a2", "metadata": { "_cell_guid": "4789d166-345f-43a8-b385-17f80b65e83b", "_uuid": "44ef404a-9854-43c5-925c-8a34e31ccc49", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:08:57.494221Z", "iopub.status.busy": "2024-11-11T01:08:57.493852Z", "iopub.status.idle": "2024-11-11T01:08:57.499789Z", "shell.execute_reply": "2024-11-11T01:08:57.498912Z" }, "executionInfo": { "elapsed": 6, "status": "ok", "timestamp": 1731233931210, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "jENeERnqgomm", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.031231, "end_time": "2024-11-11T01:08:57.501731", "exception": false, "start_time": "2024-11-11T01:08:57.470500", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "train_ds = MT_Dataset(df_train['EN_sentence'].values, df_train['AR_sentence'].values,\n", " en_vocabulary=en_vocab, ar_vocabulary=ar_vocab)\n", "\n", "valid_ds = MT_Dataset(df_valid['EN_sentence'].values, df_valid['AR_sentence'].values,\n", " en_vocabulary=en_vocab, ar_vocabulary=ar_vocab)\n", "\n", "test_ds = MT_Dataset(df_test['EN_sentence'].values, df_train['AR_sentence'].values,\n", " en_vocabulary=en_vocab, ar_vocabulary=ar_vocab)" ] }, { "cell_type": "code", "execution_count": 26, "id": "98262ce7", "metadata": { "_cell_guid": "a10ccc79-3902-471a-928f-cba34ca00282", "_uuid": "06399323-d0b3-4af8-9019-3430895769e8", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:08:57.547519Z", "iopub.status.busy": "2024-11-11T01:08:57.547185Z", "iopub.status.idle": "2024-11-11T01:08:57.600479Z", "shell.execute_reply": "2024-11-11T01:08:57.599545Z" }, "executionInfo": { "elapsed": 5, "status": "ok", "timestamp": 1731233931210, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "HT8HBMCKh_Sx", "jupyter": { "outputs_hidden": false }, "outputId": "50cdbe43-dce1-4945-b870-ccc8cdeaa8ab", "papermill": { "duration": 0.078699, "end_time": "2024-11-11T01:08:57.602616", "exception": false, "start_time": "2024-11-11T01:08:57.523917", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "(' how old is ? ', ' كم عمر بلاد القبايل ؟ ')" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "en_vocab.tokens_to_text(train_ds[4][0]), ar_vocab.tokens_to_text(train_ds[4][1])" ] }, { "cell_type": "code", "execution_count": 27, "id": "87f401fa", "metadata": { "_cell_guid": "ece9c447-29db-41df-bf0f-b99dfd019872", "_uuid": "3b59c099-2c91-40b2-a7f1-e2b8a51c34e6", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:08:57.648998Z", "iopub.status.busy": "2024-11-11T01:08:57.648637Z", "iopub.status.idle": "2024-11-11T01:08:59.723232Z", "shell.execute_reply": "2024-11-11T01:08:59.721945Z" }, "executionInfo": { "elapsed": 828, "status": "ok", "timestamp": 1731233932034, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "YnL7lnOQiJeM", "jupyter": { "outputs_hidden": false }, "outputId": "e94a9318-e02a-47a9-b1fe-3af145637ae6", "papermill": { "duration": 2.100321, "end_time": "2024-11-11T01:08:59.725450", "exception": false, "start_time": "2024-11-11T01:08:57.625129", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "torch.Size([64, 19])\n", "torch.Size([64, 18])\n" ] } ], "source": [ "mycollate = MYCollate(batch_first=True, pad_value=0)\n", "pin_memory = True if device == 'cuda' else False\n", "num_workers = 4 if isKaggle else 2\n", "\n", "train_loader = DataLoader(train_ds, batch_size=batch_size, shuffle=True,\n", " collate_fn=mycollate, num_workers=num_workers,\n", " generator=g, pin_memory=pin_memory)\n", "\n", "valid_loader = DataLoader(valid_ds, batch_size=batch_size, shuffle=False,\n", " collate_fn=mycollate, num_workers=num_workers,\n", " generator=g, pin_memory=pin_memory)\n", "\n", "test_loader = DataLoader(test_ds, batch_size=batch_size, shuffle=False,\n", " collate_fn=mycollate, num_workers=num_workers,\n", " generator=g, pin_memory=pin_memory)\n", "\n", "for x, y in train_loader:\n", " print(x.shape)\n", " print(y.shape)\n", " break" ] }, { "cell_type": "markdown", "id": "adbd7977", "metadata": { "_cell_guid": "a817db50-1bc3-42ff-81bc-1a9344854d0a", "_uuid": "eb280099-6497-412f-bd28-dce39f6172ef", "collapsed": false, "id": "AHHg7lo7ioRi", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.022273, "end_time": "2024-11-11T01:08:59.770703", "exception": false, "start_time": "2024-11-11T01:08:59.748430", "status": "completed" }, "tags": [] }, "source": [ "## Form Embedding matrices" ] }, { "cell_type": "markdown", "id": "0ee89422", "metadata": { "_cell_guid": "5cc6b90b-3f42-4ec1-9929-e11cab7728dc", "_uuid": "d75f3d3e-6988-4a11-8ffc-f95dabab89b7", "collapsed": false, "id": "19wgB5jtiwmR", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.022131, "end_time": "2024-11-11T01:08:59.815123", "exception": false, "start_time": "2024-11-11T01:08:59.792992", "status": "completed" }, "tags": [] }, "source": [ "### Ar." ] }, { "cell_type": "code", "execution_count": 28, "id": "a6284ec3", "metadata": { "_cell_guid": "57659a37-f1a4-4d5b-8dc3-fcb0dcc17062", "_uuid": "c05ba1a3-c973-4e3f-beaf-6b33de3d1b03", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:08:59.862377Z", "iopub.status.busy": "2024-11-11T01:08:59.861445Z", "iopub.status.idle": "2024-11-11T01:08:59.887720Z", "shell.execute_reply": "2024-11-11T01:08:59.886941Z" }, "executionInfo": { "elapsed": 5, "status": "ok", "timestamp": 1731233932034, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "B2KiRkeUioIm", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.052234, "end_time": "2024-11-11T01:08:59.889752", "exception": false, "start_time": "2024-11-11T01:08:59.837518", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "ar_embedding_matrix = torch.rand((len(ar_vocab), embd_features))*0.1" ] }, { "cell_type": "markdown", "id": "a3c6413b", "metadata": { "_cell_guid": "dc32ef97-4bdf-4326-9c1e-041d530de0ff", "_uuid": "c7b73bf9-ecda-4be5-882c-7ed91a0a6bdf", "collapsed": false, "id": "HTLciTVMiyiC", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.022308, "end_time": "2024-11-11T01:08:59.934896", "exception": false, "start_time": "2024-11-11T01:08:59.912588", "status": "completed" }, "tags": [] }, "source": [ "### En." ] }, { "cell_type": "code", "execution_count": 29, "id": "74ee5a8c", "metadata": { "execution": { "iopub.execute_input": "2024-11-11T01:08:59.982378Z", "iopub.status.busy": "2024-11-11T01:08:59.981513Z", "iopub.status.idle": "2024-11-11T01:08:59.992360Z", "shell.execute_reply": "2024-11-11T01:08:59.991610Z" }, "papermill": { "duration": 0.037074, "end_time": "2024-11-11T01:08:59.994510", "exception": false, "start_time": "2024-11-11T01:08:59.957436", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "en_embedding_matrix = torch.rand((len(en_vocab), embd_features))" ] }, { "cell_type": "code", "execution_count": 30, "id": "da92aeb6", "metadata": { "_cell_guid": "7a924a18-13e3-4032-9643-de520b116fd9", "_uuid": "02e9e880-3a98-46a7-946a-d23d8567728e", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:09:00.043552Z", "iopub.status.busy": "2024-11-11T01:09:00.042887Z", "iopub.status.idle": "2024-11-11T01:09:00.047745Z", "shell.execute_reply": "2024-11-11T01:09:00.046435Z" }, "executionInfo": { "elapsed": 163275, "status": "ok", "timestamp": 1731234095305, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "uNLla5SVin7S", "jupyter": { "outputs_hidden": false }, "outputId": "bba535e6-a616-46fa-caee-cfe9697bb9c0", "papermill": { "duration": 0.032874, "end_time": "2024-11-11T01:09:00.050056", "exception": false, "start_time": "2024-11-11T01:09:00.017182", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# !wget https://nlp.stanford.edu/data/glove.6B.zip\n", "\n", "# with ZipFile(f'{base_dir}/glove.6B.zip') as file:\n", "# file.extract('glove.6B.100d.txt')" ] }, { "cell_type": "code", "execution_count": 31, "id": "86bcc5a8", "metadata": { "_cell_guid": "35254387-29e7-4d9a-8df1-b487dbb8a5cb", "_uuid": "4cf53f0b-d2c3-43a8-b4b2-2773ecce4169", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:09:00.097396Z", "iopub.status.busy": "2024-11-11T01:09:00.096704Z", "iopub.status.idle": "2024-11-11T01:09:00.101405Z", "shell.execute_reply": "2024-11-11T01:09:00.100538Z" }, "executionInfo": { "elapsed": 4732, "status": "ok", "timestamp": 1731234100034, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "er-PzgMCin4-", "jupyter": { "outputs_hidden": false }, "outputId": "c586fe92-fe2b-4175-d356-1f6a92071b75", "papermill": { "duration": 0.030074, "end_time": "2024-11-11T01:09:00.103374", "exception": false, "start_time": "2024-11-11T01:09:00.073300", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# # form an embedding matrix form glove pre-trained embedding weights for my vocab\n", "# glove_embeddings_index = dict()\n", "# en_embedding_matrix = torch.rand((len(en_vocab), embd_features))*0.1\n", "# vocab_dict = en_vocab.get_vocabulary()\n", "# found = 0\n", "\n", "# with open('glove.6B.100d.txt') as f:\n", "# for line in f:\n", "# values = line.split()\n", "# word = values[0]\n", "\n", "# # token = word_tokenizer.word_tokenizing(word, stemming=False)\n", "# token = word\n", "# if token:\n", "# # print(word)\n", "# idx = vocab_dict.get(token, 0)\n", "# if idx:\n", "# found += 1\n", "# coefs = torch.tensor([float(value) for value in values[1:]])\n", "# en_embedding_matrix[idx] = coefs\n", "# # glove_embeddings_index[word] = coefs\n", "\n", "# print('Found %s words.' % found)\n", "# print(\"Embedding matrix shape: \", en_embedding_matrix.shape)\n" ] }, { "cell_type": "code", "execution_count": 32, "id": "d75d4bb4", "metadata": { "_cell_guid": "5e0d0e86-e19b-4437-9688-ea151c2e7a91", "_uuid": "ecda150d-f859-41d6-9ebc-059ea8634b68", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:09:00.149757Z", "iopub.status.busy": "2024-11-11T01:09:00.149101Z", "iopub.status.idle": "2024-11-11T01:09:01.682289Z", "shell.execute_reply": "2024-11-11T01:09:01.681077Z" }, "executionInfo": { "elapsed": 261, "status": "ok", "timestamp": 1731234100289, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "5A4dFwe6inte", "jupyter": { "outputs_hidden": false }, "outputId": "edeceb73-d326-4ce3-dfef-80d0764bb5e4", "papermill": { "duration": 1.558894, "end_time": "2024-11-11T01:09:01.684578", "exception": false, "start_time": "2024-11-11T01:09:00.125684", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Before Embedding layer\t\ttorch.Size([64, 19])\t\ttorch.Size([64, 18])\n", "After Embedding layer\t\ttorch.Size([64, 19, 128])\ttorch.Size([64, 18, 128])\n" ] } ], "source": [ "for x, y in test_loader:\n", " print('Before Embedding layer', x.shape, y.shape, sep='\\t\\t')\n", " en_emb = en_embedding_matrix[x]\n", " ar_emb = ar_embedding_matrix[y]\n", " print('After Embedding layer\\t', en_emb.shape, ar_emb.shape, sep='\\t')\n", " break" ] }, { "cell_type": "markdown", "id": "0b13b3f7", "metadata": { "_cell_guid": "8934e170-4176-41b6-922d-c7b143f173fd", "_uuid": "c5dfbf25-e82c-4d5a-9e2d-fb1a3c08fa5c", "collapsed": false, "id": "jdDsKs2rne2H", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.022639, "end_time": "2024-11-11T01:09:01.730088", "exception": false, "start_time": "2024-11-11T01:09:01.707449", "status": "completed" }, "tags": [] }, "source": [ "## Models: Defining, Training and Evaluation" ] }, { "cell_type": "code", "execution_count": 33, "id": "e2ee4bd6", "metadata": { "_cell_guid": "0e1ca778-cb8c-42ac-9d11-6e79543ca0cf", "_uuid": "c5f7431f-fb18-4a2b-9bda-edadbab27db2", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:09:01.777291Z", "iopub.status.busy": "2024-11-11T01:09:01.776908Z", "iopub.status.idle": "2024-11-11T01:09:01.797446Z", "shell.execute_reply": "2024-11-11T01:09:01.796516Z" }, "executionInfo": { "elapsed": 282, "status": "ok", "timestamp": 1731243010208, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "7Ongp0CUnzNG", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.046575, "end_time": "2024-11-11T01:09:01.799369", "exception": false, "start_time": "2024-11-11T01:09:01.752794", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "class Encoder(nn.Module):\n", " def __init__(self, embd_matrix:torch.Tensor, pretrained:bool, lstm_hidden_size, lstm_layers=1, dropout_probability=0.1):\n", " super().__init__()\n", " self.hidden_size = lstm_hidden_size\n", " self.lstm_layers = lstm_layers\n", " self.input_size = embd_matrix.size(-1)\n", " self.embd_layer = nn.Embedding.from_pretrained(embd_matrix, freeze=False) if pretrained else nn.Embedding(embd_matrix.size(0), embd_matrix.size(1))\n", "\n", " self.dropout = nn.Dropout(dropout_probability)\n", " self.lstm = nn.LSTM(self.input_size, self.hidden_size, self.lstm_layers, dropout=dropout_probability, batch_first=True)\n", "\n", " def forward(self, x):\n", " embds = self.dropout(self.embd_layer(x))\n", " output, (hidden, cell) = self.lstm(embds)\n", " return hidden, cell\n", "\n", "\n", "class Decoder(nn.Module):\n", " def __init__(self, embd_matrix:torch.Tensor, pretrained:bool, lstm_hidden_size, lstm_layers=1, dropout_probability=0.1):\n", " super().__init__()\n", " self.hidden_size = lstm_hidden_size\n", " self.lstm_layers = lstm_layers\n", " self.input_size = embd_matrix.size(-1)\n", " self.embd_layer = nn.Embedding.from_pretrained(embd_matrix, freeze=False) if pretrained else nn.Embedding(embd_matrix.size(0), embd_matrix.size(1))\n", "\n", " self.dropout = nn.Dropout(dropout_probability)\n", " self.lstm = nn.LSTM(self.input_size, self.hidden_size, self.lstm_layers, dropout=dropout_probability, batch_first=True)\n", " self.fc = nn.Linear(self.hidden_size, embd_matrix.size(0))\n", " \n", " def forward(self, x, hidden_t_1, cell_t_1):\n", " embds = self.dropout(self.embd_layer(x))\n", " output, (hidden_t, cell_t) = self.lstm(embds, (hidden_t_1, cell_t_1))\n", " needed_hidden = hidden_t[-1]\n", " logits = self.fc(needed_hidden)\n", " return logits, hidden_t, cell_t\n", "\n", "\n", "class Seq2seq_no_attention(nn.Module):\n", " def __init__(self, encoder:Encoder, decoder:Decoder):\n", " super(Seq2seq_no_attention, self).__init__()\n", "\n", " self.decoder_vocab_size = decoder.embd_layer.weight.size(0)\n", " self.encoder = encoder\n", " self.decoder = decoder\n", "\n", " def forward(self, source, target, teacher_force_ratio=0.5):\n", "\n", " batch_size, seq_len = target.size()\n", " x = target[:, [0]]\n", " total_outputs = torch.zeros(batch_size, seq_len, self.decoder_vocab_size, device=source.device)\n", "\n", " context = self.encoder(source)\n", "\n", " for step in range(1, seq_len):\n", " logits, *context = self.decoder(x, *context)\n", " \n", " total_outputs[:, step] = logits\n", " top1 = logits.argmax(1, keepdim=True)\n", " x = target[:, [step]] if teacher_force_ratio > random.random() else top1\n", "\n", " return total_outputs\n", "\n", " def translate(self, source:torch.Tensor, max_tries=50):\n", " \n", " source.unsqueeze(0)\n", " targets_hat = [2]\n", "\n", " context = self.encoder(source)\n", "\n", " for step in range(1, max_tries):\n", " x = torch.tensor([targets_hat[-1]]).to(source.device)\n", " logits, *context = self.decoder(x, *context)\n", " top1 = logits.argmax(0)\n", " targets_hat.append(top1.item())\n", " if top1 == 3:\n", " return targets_hat\n", "\n", " return targets_hat\n" ] }, { "cell_type": "code", "execution_count": 34, "id": "b03c237c", "metadata": { "_cell_guid": "83ff9ba2-424f-4099-aa64-3fe48dfc6371", "_uuid": "54389c38-3b2c-4856-9950-25cf7b27fcdb", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:09:01.846284Z", "iopub.status.busy": "2024-11-11T01:09:01.845958Z", "iopub.status.idle": "2024-11-11T01:09:01.856131Z", "shell.execute_reply": "2024-11-11T01:09:01.855239Z" }, "executionInfo": { "elapsed": 266, "status": "ok", "timestamp": 1731242572842, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "ofJbaxvAnqlm", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.035844, "end_time": "2024-11-11T01:09:01.858008", "exception": false, "start_time": "2024-11-11T01:09:01.822164", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "## Helper\n", "@torch.no_grad()\n", "def loss_acc_loader(model, data_loader, device, force=0.5):\n", " model.eval()\n", "\n", " total_predicts = []\n", " total_targets = []\n", " total_class_loss = 0\n", "\n", " for data, labels in data_loader:\n", " data = data.to(device)\n", " labels = labels.to(device)\n", "\n", " class_logits = model(data, labels, force)\n", " class_logits_flat = class_logits[:, 1:, :].reshape(-1, class_logits.size(-1))\n", " labels_flat = labels[:, 1:].reshape(-1)\n", "\n", " total_class_loss += class_criterion(class_logits_flat, labels_flat).item()\n", "\n", " predictions = class_logits_flat.argmax(-1)\n", " non_pad_mask = labels_flat != 0\n", " filtered_predictions = predictions[non_pad_mask]\n", " filtered_labels = labels_flat[non_pad_mask]\n", "\n", " total_predicts.append(filtered_predictions)\n", " total_targets.append(filtered_labels)\n", "\n", " total_predicts = torch.concat(total_predicts)\n", " total_targets = torch.concat(total_targets)\n", "\n", " avg_class_loss = total_class_loss / len(data_loader)\n", " accuracy = (total_predicts == total_targets).float().mean().item()\n", "\n", " return avg_class_loss, accuracy, total_predicts, total_targets\n", "\n", "\n", "def get_parameters_info(model):\n", " trainable = sum(p.numel() for p in model.parameters() if p.requires_grad==True)\n", " nontrainable = sum(p.numel() for p in model.parameters() if p.requires_grad==False)\n", "\n", " return trainable, nontrainable" ] }, { "cell_type": "code", "execution_count": 35, "id": "5e711cca", "metadata": { "_cell_guid": "9ce859d3-2a47-4e02-b39c-49f7e4620838", "_uuid": "f76d300d-abc8-40eb-a742-2705933799de", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:09:01.904906Z", "iopub.status.busy": "2024-11-11T01:09:01.904575Z", "iopub.status.idle": "2024-11-11T01:09:03.177673Z", "shell.execute_reply": "2024-11-11T01:09:03.176842Z" }, "executionInfo": { "elapsed": 373, "status": "ok", "timestamp": 1731244140261, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "LqquDrUDoVzF", "jupyter": { "outputs_hidden": false }, "outputId": "7159acf6-c1be-4cc4-c261-d8f7a8e00259", "papermill": { "duration": 1.299418, "end_time": "2024-11-11T01:09:03.180156", "exception": false, "start_time": "2024-11-11T01:09:01.880738", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total trainable parameters = 5166426\n", "Total non-trainable parameters = 0\n" ] } ], "source": [ "encoder = Encoder(en_embedding_matrix, False, lstm_hidden_size, lstm_layers, dropout_p).to(device)\n", "decoder = Decoder(ar_embedding_matrix, False, lstm_hidden_size, lstm_layers, dropout_p).to(device)\n", "seq2seq = Seq2seq_no_attention(encoder, decoder).to(device)\n", "\n", "tr, nontr = get_parameters_info(seq2seq)\n", "print(f\"Total trainable parameters = {tr}\\nTotal non-trainable parameters = {nontr}\")\n", "\n", "class_criterion = nn.CrossEntropyLoss(ignore_index=0) # Classification loss\n", "\n", "optim = torch.optim.Adam(seq2seq.parameters(), lr)\n", "scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer=optim, mode='min', factor=0.5,\n", " patience=4, min_lr=1e-5, threshold=0.001)\n" ] }, { "cell_type": "markdown", "id": "da896026", "metadata": { "_cell_guid": "9b1b9af2-f4b6-475a-9344-52ac5c090f8c", "_uuid": "a26a7d97-7db7-4da3-a904-13ca126d615a", "collapsed": false, "id": "W2Fux31-Lqbc", "jupyter": { "outputs_hidden": false }, "papermill": { "duration": 0.022404, "end_time": "2024-11-11T01:09:03.225919", "exception": false, "start_time": "2024-11-11T01:09:03.203515", "status": "completed" }, "tags": [] }, "source": [ "### Training loop" ] }, { "cell_type": "code", "execution_count": 36, "id": "dbb089ff", "metadata": { "_cell_guid": "bb8befcd-46a7-4d65-b6f1-131765ca660e", "_uuid": "61512162-89c4-405b-ae55-98b944027795", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:09:03.272905Z", "iopub.status.busy": "2024-11-11T01:09:03.272192Z", "iopub.status.idle": "2024-11-11T01:09:03.277532Z", "shell.execute_reply": "2024-11-11T01:09:03.276524Z" }, "id": "hkLo26GQLs-h", "jupyter": { "outputs_hidden": false }, "outputId": "b260f65b-7cd0-40ce-962c-792fe01b847f", "papermill": { "duration": 0.031216, "end_time": "2024-11-11T01:09:03.279502", "exception": false, "start_time": "2024-11-11T01:09:03.248286", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# ## overfit one-batch\n", "\n", "# x_batch, y_batch = next(iter(train_loader))\n", "# data = x_batch.to(device)\n", "# labels = y_batch.to(device)\n", "# epochs = 2000\n", "# for epoch in range(epochs):\n", "\n", "# class_logits = seq2seq(data, labels)\n", "\n", "# class_logits_flat = class_logits[:, 1:, :].reshape(-1, class_logits.size(-1))\n", "# labels_flat = labels[:, 1:].reshape(-1)\n", "# loss = class_criterion(class_logits_flat, labels_flat)\n", "\n", "\n", "# optim.zero_grad()\n", "# loss.backward()\n", "# optim.step()\n", "\n", "# predictions = class_logits_flat.argmax(-1)\n", "\n", "# non_pad_mask = labels_flat != 0\n", "# filtered_predictions = predictions[non_pad_mask]\n", "# filtered_labels = labels_flat[non_pad_mask]\n", "\n", "# if (epoch+1) % 100 == 0:\n", "# print(f'Epoch {epoch+1}/{epochs}: ', end='\\t')\n", "# print(f'Loss = {loss.item():.2f}', f'Accuracy = {(filtered_predictions==filtered_labels).sum()}/{filtered_predictions.size(0)}')\n" ] }, { "cell_type": "code", "execution_count": 37, "id": "e2d4f657", "metadata": { "_cell_guid": "2259b2ba-27bd-456f-8306-452d326903a9", "_uuid": "cc50041b-b460-4312-9afd-57997d737e8b", "collapsed": false, "execution": { "iopub.execute_input": "2024-11-11T01:09:03.326421Z", "iopub.status.busy": "2024-11-11T01:09:03.326051Z", "iopub.status.idle": "2024-11-11T01:46:49.101159Z", "shell.execute_reply": "2024-11-11T01:46:49.099821Z" }, "executionInfo": { "elapsed": 48635, "status": "error", "timestamp": 1731243891889, "user": { "displayName": "Abdelrhman Ashraf", "userId": "11249532378747886614" }, "user_tz": -120 }, "id": "O5-7kPlBo0fQ", "jupyter": { "outputs_hidden": false }, "outputId": "9a36329a-8f7f-4817-d054-29ab0a23d74a", "papermill": { "duration": 2265.801013, "end_time": "2024-11-11T01:46:49.103299", "exception": false, "start_time": "2024-11-11T01:09:03.302286", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Epoch [1/50]: 100%|██████████| 471/471 [00:40<00:00, 11.77it/s, loss = 6.4592]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 5.7168, Accuracy 23.62%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [2/50]: 100%|██████████| 471/471 [00:39<00:00, 11.83it/s, loss = 6.0609]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 5.6238, Accuracy 23.53%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [3/50]: 100%|██████████| 471/471 [00:39<00:00, 11.83it/s, loss = 5.8814]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 5.3845, Accuracy 26.77%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [4/50]: 100%|██████████| 471/471 [00:39<00:00, 11.90it/s, loss = 5.6264]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 5.2063, Accuracy 29.15%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [5/50]: 100%|██████████| 471/471 [00:40<00:00, 11.76it/s, loss = 5.4464]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 5.1234, Accuracy 29.82%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [6/50]: 100%|██████████| 471/471 [00:39<00:00, 11.88it/s, loss = 5.3096]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 5.0456, Accuracy 30.42%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [7/50]: 100%|██████████| 471/471 [00:40<00:00, 11.75it/s, loss = 5.2016]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 5.0097, Accuracy 30.64%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [8/50]: 100%|██████████| 471/471 [00:40<00:00, 11.67it/s, loss = 5.1055]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.9509, Accuracy 31.39%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [9/50]: 100%|██████████| 471/471 [00:40<00:00, 11.68it/s, loss = 5.0176]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.9131, Accuracy 31.51%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [10/50]: 100%|██████████| 471/471 [00:40<00:00, 11.63it/s, loss = 4.9369]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.8733, Accuracy 32.09%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [11/50]: 100%|██████████| 471/471 [00:39<00:00, 11.85it/s, loss = 4.8611]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.8501, Accuracy 32.30%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [12/50]: 100%|██████████| 471/471 [00:40<00:00, 11.60it/s, loss = 4.7879]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.8298, Accuracy 32.63%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [13/50]: 100%|██████████| 471/471 [00:39<00:00, 11.82it/s, loss = 4.7194]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.8121, Accuracy 32.77%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [14/50]: 100%|██████████| 471/471 [00:40<00:00, 11.67it/s, loss = 4.6513]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7804, Accuracy 33.13%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [15/50]: 100%|██████████| 471/471 [00:39<00:00, 11.78it/s, loss = 4.5977]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7882, Accuracy 33.15%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [16/50]: 100%|██████████| 471/471 [00:40<00:00, 11.74it/s, loss = 4.5431]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7742, Accuracy 33.23%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [17/50]: 100%|██████████| 471/471 [00:40<00:00, 11.62it/s, loss = 4.4842]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7753, Accuracy 33.38%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [18/50]: 100%|██████████| 471/471 [00:39<00:00, 11.80it/s, loss = 4.4343]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7556, Accuracy 33.61%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [19/50]: 100%|██████████| 471/471 [00:40<00:00, 11.66it/s, loss = 4.3848]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7498, Accuracy 33.89%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [20/50]: 100%|██████████| 471/471 [00:39<00:00, 11.78it/s, loss = 4.3307]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7472, Accuracy 33.93%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [21/50]: 100%|██████████| 471/471 [00:39<00:00, 11.87it/s, loss = 4.2856]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7475, Accuracy 34.14%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [22/50]: 100%|██████████| 471/471 [00:40<00:00, 11.51it/s, loss = 4.2378]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7519, Accuracy 34.11%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [23/50]: 100%|██████████| 471/471 [00:40<00:00, 11.75it/s, loss = 4.1954]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7465, Accuracy 34.43%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [24/50]: 100%|██████████| 471/471 [00:39<00:00, 11.86it/s, loss = 4.1571]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7485, Accuracy 34.14%\n", "Epoch 24: Reducing learning rate from 0.001000 to 0.000500\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [25/50]: 100%|██████████| 471/471 [00:40<00:00, 11.66it/s, loss = 4.0588]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7330, Accuracy 34.68%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [26/50]: 100%|██████████| 471/471 [00:40<00:00, 11.67it/s, loss = 4.0317]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7418, Accuracy 34.63%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [27/50]: 100%|██████████| 471/471 [00:40<00:00, 11.59it/s, loss = 4.0065]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7302, Accuracy 34.81%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [28/50]: 100%|██████████| 471/471 [00:40<00:00, 11.55it/s, loss = 3.9884]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7486, Accuracy 34.57%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [29/50]: 100%|██████████| 471/471 [00:40<00:00, 11.68it/s, loss = 3.9701]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7332, Accuracy 34.94%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [30/50]: 100%|██████████| 471/471 [00:40<00:00, 11.66it/s, loss = 3.9443]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7443, Accuracy 34.81%\n", "Epoch 30: Reducing learning rate from 0.000500 to 0.000250\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [31/50]: 100%|██████████| 471/471 [00:41<00:00, 11.45it/s, loss = 3.8933]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7394, Accuracy 34.99%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [32/50]: 100%|██████████| 471/471 [00:40<00:00, 11.70it/s, loss = 3.8777]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7291, Accuracy 35.20%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [33/50]: 100%|██████████| 471/471 [00:40<00:00, 11.64it/s, loss = 3.8656]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7376, Accuracy 34.94%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [34/50]: 100%|██████████| 471/471 [00:41<00:00, 11.37it/s, loss = 3.8499]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7490, Accuracy 34.96%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [35/50]: 100%|██████████| 471/471 [00:40<00:00, 11.72it/s, loss = 3.8447]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7392, Accuracy 35.16%\n", "Epoch 35: Reducing learning rate from 0.000250 to 0.000125\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [36/50]: 100%|██████████| 471/471 [00:40<00:00, 11.65it/s, loss = 3.8158]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7406, Accuracy 35.12%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [37/50]: 100%|██████████| 471/471 [00:41<00:00, 11.47it/s, loss = 3.812]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7404, Accuracy 34.95%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [38/50]: 100%|██████████| 471/471 [00:40<00:00, 11.65it/s, loss = 3.8081]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7574, Accuracy 34.94%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [39/50]: 100%|██████████| 471/471 [00:41<00:00, 11.49it/s, loss = 3.7999]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7548, Accuracy 34.99%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [40/50]: 100%|██████████| 471/471 [00:40<00:00, 11.67it/s, loss = 3.7986]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7505, Accuracy 35.15%\n", "Epoch 40: Reducing learning rate from 0.000125 to 0.000063\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [41/50]: 100%|██████████| 471/471 [00:40<00:00, 11.56it/s, loss = 3.7804]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7394, Accuracy 35.19%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [42/50]: 100%|██████████| 471/471 [00:40<00:00, 11.76it/s, loss = 3.7724]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7561, Accuracy 35.01%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [43/50]: 100%|██████████| 471/471 [00:40<00:00, 11.68it/s, loss = 3.774]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7509, Accuracy 35.22%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [44/50]: 100%|██████████| 471/471 [00:40<00:00, 11.53it/s, loss = 3.7687]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7498, Accuracy 35.14%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [45/50]: 100%|██████████| 471/471 [00:40<00:00, 11.68it/s, loss = 3.7644]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7486, Accuracy 35.11%\n", "Epoch 45: Reducing learning rate from 0.000063 to 0.000031\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [46/50]: 100%|██████████| 471/471 [00:41<00:00, 11.48it/s, loss = 3.7604]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7420, Accuracy 35.20%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [47/50]: 100%|██████████| 471/471 [00:40<00:00, 11.63it/s, loss = 3.758]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7525, Accuracy 35.03%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [48/50]: 100%|██████████| 471/471 [00:42<00:00, 11.13it/s, loss = 3.7641]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7503, Accuracy 35.09%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [49/50]: 100%|██████████| 471/471 [00:40<00:00, 11.54it/s, loss = 3.7553]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7557, Accuracy 35.02%\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Epoch [50/50]: 100%|██████████| 471/471 [00:40<00:00, 11.61it/s, loss = 3.757]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Validation: Class Loss 4.7532, Accuracy 35.05%\n", "Epoch 50: Reducing learning rate from 0.000031 to 0.000016\n" ] } ], "source": [ "total_batches = len(train_loader)\n", "train_class_losses = []\n", "val_class_losses = []\n", "teacher_force = 0.5\n", "\n", "for epoch in range(epochs):\n", " seq2seq.train() # Set the model to training mode\n", " epoch_losses = []\n", "\n", " tqdm_loop = tqdm(enumerate(train_loader), total=total_batches, position=0)\n", " for batch_idx, (data, labels) in tqdm_loop:\n", " # Get data\n", " data = data.to(device)\n", " labels = labels.to(device)\n", " # Forward\n", " class_logits = seq2seq(data, labels, teacher_force)\n", "\n", " class_logits_flat = class_logits[:, 1:, :].reshape(-1, class_logits.size(-1))\n", " labels_flat = labels[:, 1:].reshape(-1)\n", " loss = class_criterion(class_logits_flat, labels_flat)\n", "\n", " epoch_losses.append(loss.item())\n", " mean_epoch_loss = sum(epoch_losses)/len(epoch_losses)\n", " \n", " # Backward\n", " optim.zero_grad()\n", " loss.backward()\n", " nn.utils.clip_grad_norm_(seq2seq.parameters(), max_norm=1)\n", " optim.step()\n", " # Update progress bar\n", " tqdm_loop.set_description(f\"Epoch [{epoch+1}/{epochs}]\")\n", " tqdm_loop.set_postfix_str(f'loss = {round(mean_epoch_loss, 4)}')\n", "\n", " train_class_losses.append(mean_epoch_loss)\n", "\n", " val_class_loss, val_accuracy, _, _ = loss_acc_loader(seq2seq, valid_loader, device, force=teacher_force)\n", " val_class_losses.append(val_class_loss)\n", " print(f'Validation: Class Loss {val_class_loss:.4f}, Accuracy {val_accuracy*100:.2f}%')\n", "\n", " # Get the current learning rate from the optimizer\n", " current_lr = optim.param_groups[0]['lr']\n", " \n", " # Step the scheduler with the validation loss\n", " scheduler.step(val_class_loss)\n", " \n", " # Check if the learning rate has changed\n", " new_lr = optim.param_groups[0]['lr']\n", " if new_lr < current_lr:\n", " print(f\"Epoch {epoch + 1}: Reducing learning rate from {current_lr:.6f} to {new_lr:.6f}\")" ] }, { "cell_type": "code", "execution_count": 38, "id": "19bc881b", "metadata": { "execution": { "iopub.execute_input": "2024-11-11T01:46:58.846786Z", "iopub.status.busy": "2024-11-11T01:46:58.846315Z", "iopub.status.idle": "2024-11-11T01:46:58.851486Z", "shell.execute_reply": "2024-11-11T01:46:58.850615Z" }, "papermill": { "duration": 4.880185, "end_time": "2024-11-11T01:46:58.853401", "exception": false, "start_time": "2024-11-11T01:46:53.973216", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "# if valid_loss < best_loss:\n", "# best_loss, best_epoch = valid_loss, epoch\n", "# torch.save(model.state_dict(), 'model.pt')\n", "# early_stop_counter = 0\n", "# else:\n", "# early_stop_counter += 1\n", "# if early_stop_counter >= PATIENCE:\n", "# print(f'Early stopping after epoch {epoch+1}: no improvement for {PATIENCE} epochs.')\n", "# break\n", "\n", "# if early_stop_counter < PATIENCE:\n", "# print(f'Best validation loss of {best_loss:.3f} at epoch {best_epoch+1}.')" ] }, { "cell_type": "code", "execution_count": 39, "id": "ff243f30", "metadata": { "execution": { "iopub.execute_input": "2024-11-11T01:47:08.655183Z", "iopub.status.busy": "2024-11-11T01:47:08.654796Z", "iopub.status.idle": "2024-11-11T01:47:08.880763Z", "shell.execute_reply": "2024-11-11T01:47:08.879807Z" }, "papermill": { "duration": 5.170037, "end_time": "2024-11-11T01:47:08.882916", "exception": false, "start_time": "2024-11-11T01:47:03.712879", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "image/png": "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sQXMCT0ROYOdSF4zvWV22rRpTJgwgbFjx/LII4/Uu+/y5cu5++6766wbP34877333nGf43a7cbvd/mWXy3VK9YqIBJvosBCGdoxlaMdY/zqP18eegyVsyy5iS3YR23KK2JpdxJ6DJeSXVrJi9yFW7D5U53WsFkiODiM1JozWMWG0jgmvfgyjdctwklsq7IpI0zM1zM6bN481a9awcuXKBu2fnZ1NYmJinXWJiYlkZ2cf9zmzZs1i5syZp1SniMiZxma10Cm+BZ3iW3BB72T/+vJKDztyi9maXcTW6oCbfqiUjIIyKqq8/u4KP+w++jWtFkiKchoht1XdsNsmJpzkaCd2hV0ROc1MC7Pp6enccccdLF68GKfT2WjvM3369DqtuS6XizZt2jTa+4mIBDNniI1eqdH0So2us97r9ZFX7CY9v4yM/FL2F5SRkV8zlZKRb4TdzMJyMgvL+WHP0a9ts1qqw64RdNu2CqdbUgu6JUXRrlU4Vqv66YrIiTMtzK5evZrc3FwGDBjgX+fxePj666955plncLvd2Gy2Os9JSkoiJyenzrqcnBySkpKO+z4OhwOHw3F6ixcRaWasVgsJUU4SopwMbBdz1PaasJtRcDjgph+qDr7VobfCc7hl98guDGEhNromRZKWGElasnExWvekKGIiQpvqI4pIkDLtArCioiL27t1bZ931119PWloa99577zFHJ7jqqqsoLS3lww8/9K8bPnw4ffr00QVgIiIBzOv1caDY7W/FTT9Uyu68UrbmuNieU4z7OBejJUQ6SEuOontSJKO6xjOkYyw2teCKnPGC4gKwyMjIowJrREQEsbGx/vXXXnstqampzJo1C4A77riDUaNG8cQTTzBhwgTmzZvHqlWreP7555u8fhERaTir1UJilJPEKCcD29XdVuXxsudgKVuzi9iS7WJL9WP6oTJyi9zkFh3g620HeO7rXSREOri4bwqX9kuhd2q0hhATEfNHM6jPvn37sFoPXywwfPhw3njjDe6//37uu+8+unTpwnvvvacxZkVEgpjdZqVzQgs6J7RgQp/DF6MVu6v8AXftvgIWbcwmt8jNS9/u5qVvd9MhLoJL+qZwSb8UOsW3MPETiIiZTB9ntqmpm4GISHByV3n4else76/dz+ebcyivPNw1oXdqNJf2S+GiPikkRTfeRcUi0jROJK8pzIqISNAp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Jy688EKmTp3KoUOH/O+/adMmPvnkEzZv3szs2bOJi4trui+AiMgJsvh8Pp/ZRYiINAe//vWvef3113E6nXXW33fffdx3331YLBZuvvlmZs+e7d82dOhQBgwYwLPPPssLL7zAvffeS3p6OhEREQAsXLiQiy++mMzMTBITE0lNTeX666/nkUceOWYNFouF+++/n4cffhgwAnKLFi345JNPOP/887nkkkuIi4vj5ZdfbqSvgojI6aU+syIiTeicc86pE1YBWrVq5Z8fNmxYnW3Dhg1j7dq1AGzevJm+ffv6gyzAiBEj8Hq9bN26FYvFQmZmJmPGjKm3hj59+vjnIyIiiIqKIjc3F4BbbrmFyy67jDVr1jBu3DgmTpzI8OHDT+qziog0BYVZEZEmFBERcdRp/9MlLCysQfuFhITUWbZYLHi9XgAuuOAC9u7dy8KFC1m8eDFjxoxh2rRp/P3vfz/t9YqInA7qMysiEkC+//77o5a7d+8OQPfu3Vm3bh0lJSX+7d999x1Wq5Vu3boRGRlJ+/bt+eKLL06phvj4eK677jpef/11nnrqKZ5//vlTej0RkcakllkRkSbkdrvJzs6us85ut/svspo/fz6DBg3i7LPP5r///S8//PADL730EgBTp07lwQcf5LrrrmPGjBkcOHCA2267jV/96lckJiYCMGPGDG6++WYSEhK44IILKCoq4rvvvuO2225rUH1/+ctfGDhwID179sTtdvPRRx/5w7SISCBSmBURaUKffvopycnJddZ169aNLVu2AMZIA/PmzePWW28lOTmZN998kx49egAQHh7OokWLuOOOOzjrrLMIDw/nsssu48knn/S/1nXXXUd5eTn/+Mc/uOeee4iLi+Pyyy9vcH2hoaFMnz6dPXv2EBYWxsiRI5k3b95p+OQiIo1DoxmIiAQIi8XCggULmDhxotmliIgEDfWZFREREZGgpTArIiIiIkFLfWZFRAKEen2JiJw4tcyKiIiISNBSmBURERGRoKUwKyIiIiJBS2FWRERERIKWwqyIiIiIBC2FWREREREJWgqzIiIiIhK0FGZFREREJGgpzIqIiIhI0Pr/ys2g+KK7iKsAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(8, 3))\n", "plt.plot(\n", " [ep + 1 for ep in range(len(train_class_losses))],\n", " train_class_losses, val_class_losses,)\n", "plt.xlabel(\"Epochs\")\n", "plt.ylabel(\"Loss\")\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "18c74f36", "metadata": { "papermill": { "duration": 4.90533, "end_time": "2024-11-11T01:47:18.576864", "exception": false, "start_time": "2024-11-11T01:47:13.671534", "status": "completed" }, "tags": [] }, "source": [ "### Evaluation" ] }, { "cell_type": "code", "execution_count": 40, "id": "6117fd27", "metadata": { "execution": { "iopub.execute_input": "2024-11-11T01:47:28.307799Z", "iopub.status.busy": "2024-11-11T01:47:28.307151Z", "iopub.status.idle": "2024-11-11T01:47:33.044286Z", "shell.execute_reply": "2024-11-11T01:47:33.042989Z" }, "papermill": { "duration": 9.615093, "end_time": "2024-11-11T01:47:33.046353", "exception": false, "start_time": "2024-11-11T01:47:23.431260", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test: Class Loss 8.5770, Accuracy 12.84%\n" ] } ], "source": [ "test_class_loss, test_accuracy, _, _ = loss_acc_loader(seq2seq, test_loader, device, force=0.5)\n", "\n", "print(f\"Test: Class Loss {test_class_loss:.4f}, Accuracy {test_accuracy*100:.2f}%\")" ] }, { "cell_type": "code", "execution_count": 41, "id": "33c197d0", "metadata": { "execution": { "iopub.execute_input": "2024-11-11T01:47:42.781774Z", "iopub.status.busy": "2024-11-11T01:47:42.781329Z", "iopub.status.idle": "2024-11-11T01:47:47.368858Z", "shell.execute_reply": "2024-11-11T01:47:47.367498Z" }, "papermill": { "duration": 9.460011, "end_time": "2024-11-11T01:47:47.371036", "exception": false, "start_time": "2024-11-11T01:47:37.911025", "status": "completed" }, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Test: Class Loss 8.7582, Accuracy 13.08%\n" ] } ], "source": [ "## With zero teacher_force\n", "test_class_loss, test_accuracy, _, _ = loss_acc_loader(seq2seq, test_loader, device, force=0.0)\n", "\n", "print(f\"Test: Class Loss {test_class_loss:.4f}, Accuracy {test_accuracy*100:.2f}%\")" ] }, { "cell_type": "code", "execution_count": 42, "id": "ae8364b8", "metadata": { "execution": { "iopub.execute_input": "2024-11-11T01:47:57.106807Z", "iopub.status.busy": "2024-11-11T01:47:57.105844Z", "iopub.status.idle": "2024-11-11T01:47:57.152764Z", "shell.execute_reply": "2024-11-11T01:47:57.151831Z" }, "papermill": { "duration": 4.923818, "end_time": "2024-11-11T01:47:57.154755", "exception": false, "start_time": "2024-11-11T01:47:52.230937", "status": "completed" }, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "' هو '" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "custom_test = \"He's writing a letter to his brother.\"\n", "preprocessed = preprocess_en(custom_test)\n", "en_tokens = torch.tensor(en_vocab(preprocessed)).to(device)\n", "targets_hat = seq2seq.translate(en_tokens, 30)\n", "ar_vocab.tokens_to_text(targets_hat)" ] }, { "cell_type": "markdown", "id": "7b041b82", "metadata": { "papermill": { "duration": 4.915677, "end_time": "2024-11-11T01:48:06.885959", "exception": false, "start_time": "2024-11-11T01:48:01.970282", "status": "completed" }, "tags": [] }, "source": [ "### Saving" ] }, { "cell_type": "code", "execution_count": 43, "id": "979c9dcf", "metadata": { "execution": { "iopub.execute_input": "2024-11-11T01:48:16.464274Z", "iopub.status.busy": "2024-11-11T01:48:16.463867Z", "iopub.status.idle": "2024-11-11T01:48:16.542721Z", "shell.execute_reply": "2024-11-11T01:48:16.541886Z" }, "papermill": { "duration": 4.934126, "end_time": "2024-11-11T01:48:16.544850", "exception": false, "start_time": "2024-11-11T01:48:11.610724", "status": "completed" }, "tags": [] }, "outputs": [], "source": [ "model_states = {\n", " \"en_vocabulary\": en_vocab.get_vocabulary(),\n", " \"ar_vocabulary\": ar_vocab.get_vocabulary()\n", "}\n", "\n", "torch.save(model_states, f\"{base_dir}/seq2seq_no_attention_states.pt\")\n", "\n", "## Save Entire Model\n", "torch.save(seq2seq, f\"{base_dir}/seq2seq_no_attention.bin\")" ] } ], "metadata": { "kaggle": { "accelerator": "gpu", "dataSources": [], "dockerImageVersionId": 30787, "isGpuEnabled": true, "isInternetEnabled": true, "language": "python", "sourceType": "notebook" }, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.14" }, "papermill": { "default_parameters": {}, "duration": 2496.643123, "end_time": "2024-11-11T01:48:23.779139", "environment_variables": {}, "exception": null, "input_path": "__notebook__.ipynb", "output_path": "__notebook__.ipynb", "parameters": {}, "start_time": "2024-11-11T01:06:47.136016", "version": "2.6.0" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { "0135941924744f8d89297029f73f081e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "0c9ca1d5768741f6912ddf425e4b23ef": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_9ac847c8021a47318d6b5168e9f9c462", "placeholder": "​", "style": "IPY_MODEL_33df2f043f7a436ea99d9ca996c5937f", "value": " 2/2 [00:00<00:00, 225.11it/s]" } }, "0dfdb91685064ca483671e9b44f8bb1d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_0eeafbe2f53f41fcbfe974132518cd2e", "placeholder": "​", "style": "IPY_MODEL_b0abe16cc7fa4110baab79812481994d", "value": "tatoeba_mt.py: 100%" } }, "0e876d0679d4416fa418f66ba4c93080": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "0eeafbe2f53f41fcbfe974132518cd2e": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "0f9db9d9776340c684a3a8085832fb84": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_c0816d08d0aa4abab53a947498fa5042", "placeholder": "​", "style": "IPY_MODEL_ccf9e9a854204f26945d7c5e4b44d5d3", "value": "Computing checksums: 100%" } }, "1111e12346ca472e8a761b34b6039984": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_96da51b31f4a400597dbed64e9d72060", "placeholder": "​", "style": "IPY_MODEL_bc3b20060f5849e798869ed3bb941188", "value": "tatoeba-dev.ara-eng.tsv: 100%" } }, "11b5dc344966490782350c44b15ec364": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_0e876d0679d4416fa418f66ba4c93080", "placeholder": "​", "style": "IPY_MODEL_cab0d5d32bd04132bdcc5e8d0c7a3d3f", "value": " 1.96M/1.96M [00:00<00:00, 8.12MB/s]" } }, "132bbe8e2c1e488ba4b8a148ba24f460": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_ea4f088430bd4b00a5301589218bd06d", "IPY_MODEL_aed3969a63ea408f97d4ec661584a6a4", "IPY_MODEL_11b5dc344966490782350c44b15ec364" ], "layout": "IPY_MODEL_31c93f3c77e04d87af853c5a37930094" } }, "152236340fdc4377877824989e647435": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "194b0511cc384f92b3cffc8343f13d04": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_c90d0b0fb2564e04af5888246ad7975b", "placeholder": "​", "style": "IPY_MODEL_fb3ae7f0e2474cbabe473d047dec9f8e", "value": " 1.78M/1.78M [00:00<00:00, 30.1MB/s]" } }, "1a800a2434f6435e8bbeadbc58a75a6d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_1111e12346ca472e8a761b34b6039984", "IPY_MODEL_c66eb5169efb426d96d16afed017685a", "IPY_MODEL_194b0511cc384f92b3cffc8343f13d04" ], "layout": "IPY_MODEL_d9a91d5ebdc34305b291ec883256bf84" } }, "1cfc1d8893454daba58af61a5c4ab548": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "1d7dae618dc44c0a8cc5333c0dd50426": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "2cf432f0ac954dd9a3eaccf838f1e8c3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_f114804ff9b84ec39200c1de4369cdf0", "placeholder": "​", "style": "IPY_MODEL_8ffd706864094cb98336319a129ebab8", "value": " 12.1k/12.1k [00:00<00:00, 953kB/s]" } }, "31c93f3c77e04d87af853c5a37930094": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "33df2f043f7a436ea99d9ca996c5937f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "350b123f18974e51b5a36f237e2542ff": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "3660064a7c494900b6e4a883e54ffa4b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "39b031adbefa42068d67741f468191b9": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "43ab77d982ee46649281940590ae1c80": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_5b6cab41f8e0484d8d616c599a18a8d5", "placeholder": "​", "style": "IPY_MODEL_750afffa61e84afe844fc875d1f68cef", "value": "README.md: 100%" } }, "46a289e79c1044d2b9a363e3f87a3a75": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "51a54868553d49d7ba71109e741de712": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "51f24fcebc1d46e788b3e9d655f58ca0": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "53ca5f02ab1d4a9c9b0a26f206959de2": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_43ab77d982ee46649281940590ae1c80", "IPY_MODEL_d98252660e3549348bf3fc15a831ade7", "IPY_MODEL_2cf432f0ac954dd9a3eaccf838f1e8c3" ], "layout": "IPY_MODEL_787b0acbb6094978bf4db4e04efbc52b" } }, "5627dee200cf4f398bad6b0be953b174": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "5798ab828a134621b0b4b2ea3df3a106": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "5b6cab41f8e0484d8d616c599a18a8d5": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "5d61661e28e141f3a5d8b370c5e85138": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "5d9384b309824f6198f2332cd4f3066b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "64e511e57e8f40df999965906fa427d4": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_5627dee200cf4f398bad6b0be953b174", "max": 15499.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_941bb2536d4b4e4d8434ea1db82be185", "value": 15499.0 } }, "69378ccb7f8b4b4ab41dfb2a6c4057c0": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "6e9e325a30ff47e5914c761a10714a4d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_78d6b09826c5461498fe1c0a311d1df6", "placeholder": "​", "style": "IPY_MODEL_8692eb659ea540209cd49b676b904bd4", "value": "Generating validation split: 100%" } }, "706a03d7ff3c429a81ea84f8d572b4d9": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "71791f01fec14bbea3ff9401bd47fa99": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "71f9cef1c6d445cf8d97525ec07313b7": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "735f4c43661f4376a02d0513643015f2": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_f910b86651b44dcb8edb2dcffe5380e8", "placeholder": "​", "style": "IPY_MODEL_a07e552a7b274de6804fbfc918955985", "value": " 938k/938k [00:00<00:00, 10.9MB/s]" } }, "750afffa61e84afe844fc875d1f68cef": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "787b0acbb6094978bf4db4e04efbc52b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "78d6b09826c5461498fe1c0a311d1df6": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "81a984dbbfa54e8b8f64fbae745422cb": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_6e9e325a30ff47e5914c761a10714a4d", "IPY_MODEL_daee3b9a084c4cc59aa01b073235c3a1", "IPY_MODEL_9529afb656dd450785fd9c7f3b777e65" ], "layout": "IPY_MODEL_152236340fdc4377877824989e647435" } }, "8277b17c63014d99af9e02de45ec3a3d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "8692eb659ea540209cd49b676b904bd4": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "874cff55a1b549bea7b6d2c04b7300ac": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "8ffd706864094cb98336319a129ebab8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "924a299ee90d417e8898f2aa95211e4f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_0f9db9d9776340c684a3a8085832fb84", "IPY_MODEL_d092dd4ad34f4581ba7d1e381983350e", "IPY_MODEL_0c9ca1d5768741f6912ddf425e4b23ef" ], "layout": "IPY_MODEL_caf51498261e47d686e0d68df9e9f102" } }, "941bb2536d4b4e4d8434ea1db82be185": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "9529afb656dd450785fd9c7f3b777e65": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_51a54868553d49d7ba71109e741de712", "placeholder": "​", "style": "IPY_MODEL_8277b17c63014d99af9e02de45ec3a3d", "value": " 19528/19528 [00:01<00:00, 18879.69 examples/s]" } }, "96da51b31f4a400597dbed64e9d72060": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "994f439033d64619b17ba0cc308e9375": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "99f9f5bf99804243be6219a6e9758668": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_ac2789dd97054daba193938f0ff05ee6", "max": 938171.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_706a03d7ff3c429a81ea84f8d572b4d9", "value": 938171.0 } }, "9ac847c8021a47318d6b5168e9f9c462": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "a07e552a7b274de6804fbfc918955985": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "a4984fc8b5e74b97add3f5c878645643": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_994f439033d64619b17ba0cc308e9375", "placeholder": "​", "style": "IPY_MODEL_1cfc1d8893454daba58af61a5c4ab548", "value": " 10304/10304 [00:00<00:00, 18241.26 examples/s]" } }, "ac2789dd97054daba193938f0ff05ee6": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "aed3969a63ea408f97d4ec661584a6a4": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_c09759f969294433ad6df3fc12801f7d", "max": 1958806.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_e64042d87c684fd3b35dcf603f8b369e", "value": 1958806.0 } }, "b0abe16cc7fa4110baab79812481994d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "b5839b51ee1d4222b48ff200fa2aac6f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_0dfdb91685064ca483671e9b44f8bb1d", "IPY_MODEL_64e511e57e8f40df999965906fa427d4", "IPY_MODEL_bcccf22d48a341a293f99d55c51fc8f5" ], "layout": "IPY_MODEL_5d61661e28e141f3a5d8b370c5e85138" } }, "b9df24865a844c93932c9f1123c38cb9": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "bc3b20060f5849e798869ed3bb941188": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "bcccf22d48a341a293f99d55c51fc8f5": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_e7170e52f13e4556891ebd418718ed52", "placeholder": "​", "style": "IPY_MODEL_d9d52968afce4226842e2f621065c3f6", "value": " 15.5k/15.5k [00:00<00:00, 1.03MB/s]" } }, "c0816d08d0aa4abab53a947498fa5042": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "c09759f969294433ad6df3fc12801f7d": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "c66eb5169efb426d96d16afed017685a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_5d9384b309824f6198f2332cd4f3066b", "max": 1778245.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_51f24fcebc1d46e788b3e9d655f58ca0", "value": 1778245.0 } }, "c90d0b0fb2564e04af5888246ad7975b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "cab0d5d32bd04132bdcc5e8d0c7a3d3f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "caf51498261e47d686e0d68df9e9f102": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "ccf9e9a854204f26945d7c5e4b44d5d3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "d092dd4ad34f4581ba7d1e381983350e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_b9df24865a844c93932c9f1123c38cb9", "max": 2.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_69378ccb7f8b4b4ab41dfb2a6c4057c0", "value": 2.0 } }, "d5ae93a7aff144f0b65353474a1ae76d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_3660064a7c494900b6e4a883e54ffa4b", "placeholder": "​", "style": "IPY_MODEL_71f9cef1c6d445cf8d97525ec07313b7", "value": "Generating test split: 100%" } }, "d6ba2d7e268b43edbf5af4ce7d61f0b7": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "d7945159d4774b6b8cb2554077b49b41": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_f4379135f11747968ba20aba5f859d26", "IPY_MODEL_99f9f5bf99804243be6219a6e9758668", "IPY_MODEL_735f4c43661f4376a02d0513643015f2" ], "layout": "IPY_MODEL_46a289e79c1044d2b9a363e3f87a3a75" } }, "d86fc9f3f15348638c4221c7a586e096": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "d98252660e3549348bf3fc15a831ade7": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_5798ab828a134621b0b4b2ea3df3a106", "max": 12098.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_d86fc9f3f15348638c4221c7a586e096", "value": 12098.0 } }, "d9a91d5ebdc34305b291ec883256bf84": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "d9d52968afce4226842e2f621065c3f6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "daee3b9a084c4cc59aa01b073235c3a1": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_e387d353bfc94d13878bdcd835966d6d", "max": 19528.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_0135941924744f8d89297029f73f081e", "value": 19528.0 } }, "e387d353bfc94d13878bdcd835966d6d": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "e64042d87c684fd3b35dcf603f8b369e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ProgressStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "ProgressStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "bar_color": null, "description_width": "" } }, "e7170e52f13e4556891ebd418718ed52": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "e87fe085d45c4fa0a0ff2a7f9d3cbf0e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HBoxModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HBoxView", "box_style": "", "children": [ "IPY_MODEL_d5ae93a7aff144f0b65353474a1ae76d", "IPY_MODEL_f01d46c635ab47fe9fe0c2eaa573b901", "IPY_MODEL_a4984fc8b5e74b97add3f5c878645643" ], "layout": "IPY_MODEL_1d7dae618dc44c0a8cc5333c0dd50426" } }, "e9674af7143f4dc7884f63bafb3a453d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } }, "ea4f088430bd4b00a5301589218bd06d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_d6ba2d7e268b43edbf5af4ce7d61f0b7", "placeholder": "​", "style": "IPY_MODEL_e9674af7143f4dc7884f63bafb3a453d", "value": "dataset_infos.json: 100%" } }, "f01d46c635ab47fe9fe0c2eaa573b901": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "FloatProgressModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "FloatProgressModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "ProgressView", "bar_style": "success", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_39b031adbefa42068d67741f468191b9", "max": 10304.0, "min": 0.0, "orientation": "horizontal", "style": "IPY_MODEL_350b123f18974e51b5a36f237e2542ff", "value": 10304.0 } }, "f114804ff9b84ec39200c1de4369cdf0": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "f4379135f11747968ba20aba5f859d26": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HTMLModel", "state": { "_dom_classes": [], "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "HTMLModel", "_view_count": null, "_view_module": "@jupyter-widgets/controls", "_view_module_version": "1.5.0", "_view_name": "HTMLView", "description": "", "description_tooltip": null, "layout": "IPY_MODEL_874cff55a1b549bea7b6d2c04b7300ac", "placeholder": "​", "style": "IPY_MODEL_71791f01fec14bbea3ff9401bd47fa99", "value": "tatoeba-test.ara-eng.tsv: 100%" } }, "f910b86651b44dcb8edb2dcffe5380e8": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": { "_model_module": "@jupyter-widgets/base", "_model_module_version": "1.2.0", "_model_name": "LayoutModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "LayoutView", "align_content": null, "align_items": null, "align_self": null, "border": null, "bottom": null, "display": null, "flex": null, "flex_flow": null, "grid_area": null, "grid_auto_columns": null, "grid_auto_flow": null, "grid_auto_rows": null, "grid_column": null, "grid_gap": null, "grid_row": null, "grid_template_areas": null, "grid_template_columns": null, "grid_template_rows": null, "height": null, "justify_content": null, "justify_items": null, "left": null, "margin": null, "max_height": null, "max_width": null, "min_height": null, "min_width": null, "object_fit": null, "object_position": null, "order": null, "overflow": null, "overflow_x": null, "overflow_y": null, "padding": null, "right": null, "top": null, "visibility": null, "width": null } }, "fb3ae7f0e2474cbabe473d047dec9f8e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", "state": { "_model_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_model_name": "DescriptionStyleModel", "_view_count": null, "_view_module": "@jupyter-widgets/base", "_view_module_version": "1.2.0", "_view_name": "StyleView", "description_width": "" } } }, "version_major": 2, "version_minor": 0 } } }, "nbformat": 4, "nbformat_minor": 5 }