From 73d7b8503f1651b3e882abc9053c7c7caaa4229f Mon Sep 17 00:00:00 2001 From: morganmcg1 Date: Mon, 27 Jul 2020 21:28:00 +0100 Subject: [PATCH] adds best experiment from v0.2, exp4 --- ...F_paracrawl_pytorch_simplified_en-ga.ipynb | 3904 +++++++++++++++++ 1 file changed, 3904 insertions(+) create mode 100644 v0.2_exp4_HF_paracrawl_pytorch_simplified_en-ga.ipynb diff --git a/v0.2_exp4_HF_paracrawl_pytorch_simplified_en-ga.ipynb b/v0.2_exp4_HF_paracrawl_pytorch_simplified_en-ga.ipynb new file mode 100644 index 0000000..6d8322c --- /dev/null +++ b/v0.2_exp4_HF_paracrawl_pytorch_simplified_en-ga.ipynb @@ -0,0 +1,3904 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# v0.2 - Exp4\n", + "Continued 5e from Exp3" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "from fastai2.text.all import *\n", + "from fastai2.callback.all import *\n", + "from fastai2.basics import *\n", + "import seaborn as sns\n", + "\n", + "from nlp import load_dataset\n", + "\n", + "from einops import rearrange\n", + "import gc\n", + "import csv" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "path = Path('data/irish/parallel_corpora/paracrawl')\n", + "fn = 'para_crawl_huggingface_clean_v02_20200723.csv'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Experiment Number" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "exp = '4'" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Load saved dataset" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "357399\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", + "
engaclean
0Among the French PIM , in 2013, it is only 9 islands that have been chiroptérologiques inventories .I measc na PIM Fraince, i 2013, tá sé ach 9 oileáin a bhí chiroptérologiques fardail.True
1Among the French PIM, in 2013, it is only 9 islands that have been chiroptérologiques inventories.I measc na PIM Fraince , i 2013, tá sé ach 9 oileáin a bhí chiroptérologiques fardail .True
2Among the French PIM, in 2013, it is only 9 islands that have been chiroptérologiques inventories.I measc na PIM Fraince, i 2013, tá sé ach 9 oileáin a bhí chiroptérologiques fardail.True
3As you can see, so get to show off the spacious shapes in 3D (red and blue).Mar is féidir leat a fheiceáil, a fháil mar sin a thaispeáint as na cruthanna mhór i 3D (dearg agus gorm).True
4Equation Solving – Traditional, simpleLigningsløsning – Traidisiúnta, simplíTrue
\n", + "
" + ], + "text/plain": [ + " en \\\n", + "0 Among the French PIM , in 2013, it is only 9 islands that have been chiroptérologiques inventories . \n", + "1 Among the French PIM, in 2013, it is only 9 islands that have been chiroptérologiques inventories. \n", + "2 Among the French PIM, in 2013, it is only 9 islands that have been chiroptérologiques inventories. \n", + "3 As you can see, so get to show off the spacious shapes in 3D (red and blue). \n", + "4 Equation Solving – Traditional, simple \n", + "\n", + " ga \\\n", + "0 I measc na PIM Fraince, i 2013, tá sé ach 9 oileáin a bhí chiroptérologiques fardail. \n", + "1 I measc na PIM Fraince , i 2013, tá sé ach 9 oileáin a bhí chiroptérologiques fardail . \n", + "2 I measc na PIM Fraince, i 2013, tá sé ach 9 oileáin a bhí chiroptérologiques fardail. \n", + "3 Mar is féidir leat a fheiceáil, a fháil mar sin a thaispeáint as na cruthanna mhór i 3D (dearg agus gorm). \n", + "4 Ligningsløsning – Traidisiúnta, simplí \n", + "\n", + " clean \n", + "0 True \n", + "1 True \n", + "2 True \n", + "3 True \n", + "4 True " + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df=pd.read_csv(path/fn)\n", + "print(len(df))\n", + "df.head()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# RAISE BUG" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "path = Path('data/irish/parallel_corpora/paracrawl')\n", + "fn = 'para_crawl_huggingface_clean_v02_20200723.csv'" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "Using custom data configuration default\n" + ] + } + ], + "source": [ + "# ds_dict = load_dataset('csv', data_files=str(path/fn),\n", + "# description='en-ga Paracrawl data from HuggingFace, clean for suspect translations',\n", + "# download_mode='force_redownload', version='0.0.2')\n", + "ds_dict = load_dataset('csv', data_files=str(path/fn),\n", + " description='en-ga Paracrawl data from HuggingFace, clean for suspect translations',\n", + " version='0.0.2')\n", + "ds=ds_dict['train']" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Remove columns that were identified as noisy" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "357399\n", + "355837\n" + ] + } + ], + "source": [ + "def is_clean(example): return example['clean']\n", + "print(len(ds))\n", + "ds = ds.filter(is_clean)\n", + "print(len(ds))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Pre-processing\n", + "\n", + "**Remove long texts to make things easier**" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "# df['ga_len'] = df['ga'].str.split().str.len()\n", + "# df['en_len'] = df['en'].str.split().str.len()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Get sample lengths" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Dataset(schema: {'en': 'string', 'ga': 'string', 'clean': 'bool', 'ga_len': 'int64', 'en_len': 'int64'}, num_rows: 355837)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def get_lens(example, lang):\n", + " example[f'{lang}_len'] = len(example[lang].split())\n", + " return example\n", + "\n", + "ds = ds.map(partial(get_lens, lang='ga'))\n", + "ds = ds.map(partial(get_lens, lang='en'))\n", + "ds" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(49.0, 47.0)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Word count 90th percentile\n", + "np.percentile([o for o in ds['ga_len']], 90), np.percentile([o for o in ds['en_len']], 90)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(, 18.0)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "sns.distplot(ds['ga_len']), np.median(ds['ga_len'])" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(, 17.0)" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "sns.distplot(ds['en_len']), np.median(ds['en_len'])" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "355837\n", + "334244\n" + ] + } + ], + "source": [ + "def len_filter(example,col,l): \n", + " return example[col] <= l\n", + "\n", + "print(len(ds))\n", + "ds = ds.filter(partial(len_filter, col='ga_len', l=60))\n", + "ds = ds.filter(partial(len_filter, col='en_len', l=60))\n", + "print(len(ds))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [], + "source": [ + "# print(f'Removing {len(df.query(\"en_len > 60\"))} EN samples where len was > 60')\n", + "# print(len(df))\n", + "# df=df[~df.index.isin(df.query(\"en_len > 60\").index)]\n", + "# print(len(df))\n", + " \n", + "# print(f'Removing {len(df.query(\"ga_len > 60\"))} FR samples where len was > 60')\n", + "# print(len(df))\n", + "# df=df[~df.index.isin(df.query(\"ga_len > 60\").index)]\n", + "# print(len(df))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(, 17.0)" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "sns.distplot(ds['ga_len']), np.median(ds['ga_len'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Lowercase everything**\n", + "\n", + "NOT Done as it is appliced in the rules below" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "# df['en'] = df['en'].apply(lambda x:x.lower())\n", + "# df['ga'] = df['ga'].apply(lambda x:x.lower())" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "# def lowercase_all(example, lang):\n", + "# example[lang] = example[lang].lower()\n", + "# return example\n", + "\n", + "# ds = ds.map(partial(lowercase_all, lang='ga'))\n", + "# ds = ds.map(partial(lowercase_all, lang='en'))\n", + "# ds['ga'][400:420]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Rules used as part of tokenization" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ,\n", + " ,\n", + " ,\n", + " ,\n", + " ,\n", + " ,\n", + " functools.partial(, add_eos=True)]" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "proc_rules=defaults.text_proc_rules[:-1] + [partial(lowercase, add_eos=True)]\n", + "proc_rules" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Get Dataloaders" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Load vocab to speed up data loading" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "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", + " \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", + "
engacleanga_lenen_len
0Among the French PIM , in 2013, it is only 9 islands that have been chiroptérologiques inventories .I measc na PIM Fraince, i 2013, tá sé ach 9 oileáin a bhí chiroptérologiques fardail.True1618
1Among the French PIM, in 2013, it is only 9 islands that have been chiroptérologiques inventories.I measc na PIM Fraince , i 2013, tá sé ach 9 oileáin a bhí chiroptérologiques fardail .True1816
2Among the French PIM, in 2013, it is only 9 islands that have been chiroptérologiques inventories.I measc na PIM Fraince, i 2013, tá sé ach 9 oileáin a bhí chiroptérologiques fardail.True1616
3As you can see, so get to show off the spacious shapes in 3D (red and blue).Mar is féidir leat a fheiceáil, a fháil mar sin a thaispeáint as na cruthanna mhór i 3D (dearg agus gorm).True2117
4Equation Solving – Traditional, simpleLigningsløsning – Traidisiúnta, simplíTrue45
\n", + "
" + ], + "text/plain": [ + " en \\\n", + "0 Among the French PIM , in 2013, it is only 9 islands that have been chiroptérologiques inventories . \n", + "1 Among the French PIM, in 2013, it is only 9 islands that have been chiroptérologiques inventories. \n", + "2 Among the French PIM, in 2013, it is only 9 islands that have been chiroptérologiques inventories. \n", + "3 As you can see, so get to show off the spacious shapes in 3D (red and blue). \n", + "4 Equation Solving – Traditional, simple \n", + "\n", + " ga \\\n", + "0 I measc na PIM Fraince, i 2013, tá sé ach 9 oileáin a bhí chiroptérologiques fardail. \n", + "1 I measc na PIM Fraince , i 2013, tá sé ach 9 oileáin a bhí chiroptérologiques fardail . \n", + "2 I measc na PIM Fraince, i 2013, tá sé ach 9 oileáin a bhí chiroptérologiques fardail. \n", + "3 Mar is féidir leat a fheiceáil, a fháil mar sin a thaispeáint as na cruthanna mhór i 3D (dearg agus gorm). \n", + "4 Ligningsløsning – Traidisiúnta, simplí \n", + "\n", + " clean ga_len en_len \n", + "0 True 16 18 \n", + "1 True 18 16 \n", + "2 True 16 16 \n", + "3 True 21 17 \n", + "4 True 4 5 " + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df=ds.data.to_pandas()\n", + "df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "#df = df.iloc[:1000]" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hi\n" + ] + }, + { + "data": { + "text/html": [], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hi\n" + ] + } + ], + "source": [ + "# at 30k tokens per vocab sometimes this works, sometimes it doesn't\n", + "\n", + "# Couldnt process 30k tokens until I added the 'hi' below, it was getting stuck at 94.87%, no idea why\n", + "@Numericalize\n", + "def encodes(self, o): \n", + " print('hi')\n", + " return TensorText(tensor([self.o2i [o_] for o_ in o]))\n", + "\n", + "class floatify_tfm(Transform):\n", + " def encodes(self,o): return o.float()\n", + " def decodes(self,o): return o.long()\n", + "\n", + "max_vocab=30000\n", + "#splits = ColSplitter()(df) \n", + "splits = RandomSplitter(valid_pct=0.2, seed=42)(df)\n", + "\n", + "tfms = [[Tokenizer.from_df(text_cols='en' , rules=proc_rules), attrgetter(\"text\"), Numericalize(max_vocab=max_vocab)], \n", + " [Tokenizer.from_df(text_cols='ga', lang='ga', rules=proc_rules), attrgetter(\"text\"), Numericalize(max_vocab=max_vocab)]]\n", + "\n", + "dl = partial(SortedDL, shuffle=True, res=df.ga_len.values)\n", + "\n", + "dsets = Datasets(df, tfms, splits=splits, dl_type=dl)\n", + "\n", + "# remove the print from Numericalize\n", + "@Numericalize\n", + "def encodes(self, o): return TensorText(tensor([self.o2i [o_] for o_ in o]))" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [], + "source": [ + "# en_vocab=[]\n", + "# ga_vocab=[]\n", + "# with open(f'paracrawl_vocab_en_exp{exp}.csv', newline='') as csvfile:\n", + "# v_reader = csv.reader(csvfile, delimiter=',')\n", + "# for row in v_reader:\n", + "# en_vocab.append(row[0])\n", + " \n", + "# with open(f'paracrawl_vocab_ga_exp{exp}.csv', newline='') as csvfile:\n", + "# v_reader = csv.reader(csvfile, delimiter=',')\n", + "# for row in v_reader:\n", + "# ga_vocab.append(row[0])\n", + " \n", + "# len(en_vocab), len(ga_vocab), en_vocab[:10], ga_vocab[:10]" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(334244,\n", + " ((#267396) [142788,143864,71475,232172,136743,17163,145516,163557,296155,19037...],\n", + " (#66848) [255414,148963,186606,40380,28590,6799,259930,188378,286014,4807...]),\n", + " 24,\n", + " 23,\n", + " (TensorText([ 2, 8, 1018, 9, 8, 2104, 7, 7176, 11, 16,\n", + " 821, 11, 50, 23, 189, 165, 3062, 32, 60, 92,\n", + " 19526, 8919, 14, 3]),\n", + " TensorText([ 2, 17, 757, 18, 7, 9046, 8, 2425, 10, 17,\n", + " 832, 10, 58, 43, 82, 194, 4016, 9, 135, 29410,\n", + " 7653, 14, 3])))" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(dsets), splits, len(dsets[2][0]), len(dsets[2][1]), dsets[2]" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "scrolled": true + }, + "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", + " \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", + "
texttext_
0xxbos ( i ) the application of any goods of a kind specified in the xxmaj fourth xxmaj schedule by a person for the purposes of his business and treated as delivered in accordance with section 3 ( 1 ) ( e ) , xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos ( i ) le duine do bhaint úsáid chun críocha a ghnó as aon earraí de chineál a shonraítear sa xxmaj cheathrú xxmaj sceideal agus a áirítear mar earraí arna seachadadh de réir alt 3 ( 1 ) ( e ) , xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
1xxbos ( xxrep 3 i ) which is under the control of not more than 5 persons . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos ( xxrep 3 i ) ar líon daoine nach mó ná 5 dhuine a rialaíonn í . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
2xxbos xxmaj welcome to xxmaj holm new owners ! xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos xxmaj fáilte go dtí xxmaj holm úinéirí nua ! xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
3xxbos ( 5 ) xxmaj this section has effect notwithstanding — xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos ( 5 ) xxup tá éifeacht leis an alt seo d’ainneoin — xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
4xxbos xxmaj the height of risers 108 mm xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos xxup ní rachaidh airde risers 108 mm xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
5xxbos xxmaj state ownership of certain inland waters . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos xxmaj uiscí intire áirithe ar úinéireacht ag an xxmaj stát . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
6xxbos xxmaj entry year property levy . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos xxmaj tobhach maoine bliana iontrála . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
7xxbos ( e ) no councillor shall be a member of more than one group . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos ( d ) ní bheidh comhairleoir ina chomhalta de chuid is mó ná grúpa amháin . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
8xxbos xxmaj appointments by local authorities to certain committees and other bodies . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos xxmaj ceapacháin ag údaráis áitiúla chun coistí áirithe agus chun comhlachtaí eile . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bs,sl = 32, 512\n", + "dls = dsets.dataloaders(bs=bs, seq_len=sl, before_batch=partial(pad_input, pad_fields=[0,1]))\n", + "dls.show_batch()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Save vocab to speed up data loading" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [], + "source": [ + "# with open(f'models/paracrawl_vocab_en_v0.2_exp{exp}.csv', 'w', newline='') as csvfile:\n", + "# v_writer = csv.writer(csvfile, delimiter=',')\n", + "# for l in dls.vocab[0]:\n", + "# v_writer.writerow([l])\n", + " \n", + "# with open(f'models/paracrawl_vocab_ga_v0.2_exp{exp}.csv', 'w', newline='') as csvfile:\n", + "# v_writer = csv.writer(csvfile, delimiter=',')\n", + "# for l in dls.vocab[1]:\n", + "# v_writer.writerow([l])" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(334244, 8356, 2089)" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(dls.train_ds)+len(dls.valid_ds), len(dls.train), len(dls.valid)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Vocab lengths are : (22952, 30008)\n" + ] + } + ], + "source": [ + "print(f'Vocab lengths are : {len(dls.vocab[0]), len(dls.vocab[1])}')" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(torch.Size([32, 58]),\n", + " torch.Size([32, 64]),\n", + " (TensorText([[ 2, 13, 57, ..., 1, 1, 1],\n", + " [ 2, 13, 18, ..., 1, 1, 1],\n", + " [ 2, 13, 57, ..., 1, 1, 1],\n", + " ...,\n", + " [ 2, 13, 595, ..., 1, 1, 1],\n", + " [ 2, 8, 9, ..., 1, 1, 1],\n", + " [ 2, 8, 726, ..., 1, 1, 1]], device='cuda:0'),\n", + " TensorText([[ 2, 12, 17, ..., 1, 1, 1],\n", + " [ 2, 12, 9, ..., 1, 1, 1],\n", + " [ 2, 12, 17, ..., 1, 1, 1],\n", + " ...,\n", + " [ 2, 12, 602, ..., 1, 1, 1],\n", + " [ 2, 8, 2416, ..., 1, 1, 1],\n", + " [ 2, 8, 969, ..., 1, 1, 1]], device='cuda:0')))" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "o=dls.one_batch(); o[0].size(), o[1].size(), o" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Transformer model" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": {}, + "outputs": [], + "source": [ + "class PositionalEncoding(nn.Module):\n", + " \"Encode the position with a sinusoid.\"\n", + " def __init__(self, d):\n", + " super().__init__()\n", + " self.register_buffer('freq', 1 / (10000 ** (torch.arange(0., d, 2.)/d)))\n", + " \n", + " def forward(self, pos):\n", + " #inp = torch.ger(pos, self.freq)\n", + " inp = torch.ger(pos, self.freq.float())\n", + " enc = torch.cat([inp.sin(), inp.cos()], dim=-1)\n", + " return enc" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [], + "source": [ + "# tst_encoding = PositionalEncoding(20)\n", + "# res = tst_encoding(torch.arange(0,100).float())\n", + "# _, ax = plt.subplots(1,1)\n", + "# for i in range(1,5): ax.plot(res[:,i])" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [], + "source": [ + "class TransformerEmbedding(nn.Module):\n", + " \"Embedding + positional encoding + dropout\"\n", + " def __init__(self, vocab_sz, emb_sz, inp_p=0.):\n", + " super().__init__()\n", + " self.emb_sz = emb_sz\n", + " self.embed = Embedding(vocab_sz, emb_sz)\n", + " self.pos_enc = PositionalEncoding(emb_sz)\n", + " self.drop = nn.Dropout(inp_p)\n", + " \n", + " def forward(self, inp): \n", + " #pos = torch.arange(0, inp.size(1), device=inp.device).float() \n", + " pos = torch.arange(0, inp.size(1), device=inp.device).float() \n", + " return self.drop(self.embed(inp) * math.sqrt(self.emb_sz) + self.pos_enc(pos))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## PyTorch Transformer Simple" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note: [src/tgt/memory]_mask should be filled with float(‘-inf’) for the masked positions and float(0.0) else. These masks ensure that predictions for position i depend only on the unmasked positions j and are applied identically for each sequence in a batch. \n", + "\n", + "[src/tgt/memory]_key_padding_mask should be a ByteTensor where True values are positions that should be masked with float(‘-inf’) and False values will be unchanged. This mask ensures that no information will be taken from position i if it is masked, and has a separate mask for each sequence in a batch.\n", + "\n", + "attn mask with -inf\n", + "key_padding mask with True" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### pt_Transformer" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [], + "source": [ + "def to_half(b):\n", + " \"Recursively map lists of tensors in `b ` to FP16.\"\n", + " return apply(lambda x: x.half() if torch.is_floating_point(x) else x, b)" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "class pt_Transformer(Module):\n", + " def __init__(self, src_vcbsz, trg_vcbsz, n_enc_layers=6, n_dec_layers=6, n_heads=8, d_model=256, d_head=32, \n", + " d_inner=1024, p=0.1, bias=True, scale=True, double_drop=True, pad_idx=1, fp16=True):\n", + " self.pad_idx = pad_idx\n", + " self.enc_tfmr_emb = TransformerEmbedding(src_vcbsz, d_model, p)\n", + " self.dec_tfmr_emb = TransformerEmbedding(trg_vcbsz, d_model, 0.) \n", + " self.final = nn.Linear(d_model, trg_vcbsz)\n", + " self.fp16 = fp16\n", + " # !!!\n", + " #self.final.weight = self.dec_tfmr_emb.embed.weight # !! What does this do?\n", + " \n", + " self.transformer_model=torch.nn.Transformer(d_model=d_model, nhead=n_heads, num_encoder_layers=n_enc_layers, \n", + " num_decoder_layers=n_dec_layers, dim_feedforward=d_inner, dropout=p, \n", + " activation='relu', custom_encoder=None, custom_decoder=None)\n", + " \n", + " \n", + " def forward(self, src, trg, src_mask=None, tgt_mask=None, memory_mask=None, \n", + " src_key_padding_mask=None, tgt_key_padding_mask=None, memory_key_padding_mask=None):\n", + " \n", + " enc_emb, dec_emb = self.enc_tfmr_emb(src), self.dec_tfmr_emb(trg)\n", + " \n", + " # Test whether fp16 is being used or not\n", + " if not isinstance(model.transformer_model.encoder.layers[0].self_attn.out_proj.weight,\n", + " torch.cuda.FloatTensor):\n", + " enc_emb=to_half(enc_emb)\n", + " dec_emb=to_half(dec_emb)\n", + " \n", + " src_mask=self.transformer_model.generate_square_subsequent_mask(src.size(1)).cuda()\n", + " trg_mask=self.transformer_model.generate_square_subsequent_mask(trg.size(1)).cuda()\n", + " \n", + " dec_out = self.transformer_model(enc_emb.permute(1,0,2), dec_emb.permute(1,0,2),\n", + " src_mask=src_mask, tgt_mask=trg_mask, memory_mask=None, \n", + " src_key_padding_mask=None, tgt_key_padding_mask=None, memory_key_padding_mask=None)\n", + " \n", + " out=self.final(dec_out)\n", + " \n", + " return out.permute(1,0,2)" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "# for name, param in model.transformer_model.encoder.layers[0].self_attn.out_proj.named_parameters():\n", + "# print (name)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Metric" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "class CorpusBLEUMetric(Metric):\n", + " def __init__(self, vocab_sz=5000, axis=-1):\n", + " \"\"\"BLEU Metric calculated over the validation corpus\"\"\"\n", + " self.pred_len, self.targ_len, self.corrects, self.counts = 0,0,[0]*4,[0]*4\n", + " self.axis, self.vocab_sz = axis, vocab_sz\n", + " \n", + " def reset(self):\n", + " self.pred_len,self.targ_len,self.corrects,self.counts = 0,0,[0]*4,[0]*4\n", + " \n", + " class NGram():\n", + " def __init__(self, ngram, max_n=5000): self.ngram,self.max_n = ngram,max_n\n", + " def __eq__(self, other):\n", + " if len(self.ngram) != len(other.ngram): return False\n", + " return np.all(np.array(self.ngram) == np.array(other.ngram))\n", + " def __hash__(self): return int(sum([o * self.max_n**i for i,o in enumerate(self.ngram)]))\n", + " \n", + " def get_grams(self, x, n, max_n=5000):\n", + " return x if n==1 else [self.NGram(x[i:i+n], max_n=max_n) for i in range(len(x)-n+1)]\n", + " \n", + " def get_correct_ngrams(self, pred, targ, n, max_n=5000):\n", + " pred_grams,targ_grams = self.get_grams(pred, n, max_n=max_n),self.get_grams(targ, n, max_n=max_n)\n", + " pred_cnt,targ_cnt = Counter(pred_grams),Counter(targ_grams)\n", + " return sum([min(c, targ_cnt[g]) for g,c in pred_cnt.items()]),len(pred_grams)\n", + " \n", + " def accumulate(self, learn):\n", + " last_output = learn.pred.argmax(dim=self.axis)\n", + " last_target = learn.y\n", + " for pred,targ in zip(last_output.cpu().numpy(),last_target.cpu().numpy()):\n", + " self.pred_len += len(pred)\n", + " self.targ_len += len(targ)\n", + " smooth_mteval = 1\n", + " for i in range(4):\n", + " c,t = self.get_correct_ngrams(pred, targ, i+1, max_n=self.vocab_sz)\n", + "\n", + " if c == 0:\n", + " smooth_mteval *= 2\n", + " c = 1 / smooth_mteval # exp smoothing, method 3 from http://acl2014.org/acl2014/W14-33/pdf/W14-3346.pdf\n", + " \n", + " self.corrects[i] += c\n", + " self.counts[i] += t\n", + " \n", + " @property\n", + " def value(self): \n", + " if self.counts == 0: return None\n", + " elif max(self.corrects) == 0: return 0.0\n", + " else:\n", + " precs = [c/t for c,t in zip(self.corrects,self.counts)]\n", + " len_penalty = math.exp(1 - self.targ_len/self.pred_len) if self.pred_len < self.targ_len else 1\n", + " return len_penalty * ((precs[0]*precs[1]*precs[2]*precs[3]) ** 0.25)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Callbacks\n", + "\n", + "#### Present Input and Target in a single tuple" + ] + }, + { + "cell_type": "code", + "execution_count": 36, + "metadata": {}, + "outputs": [], + "source": [ + "class CombineInputOutputCallback(Callback):\n", + " '''Callback to combine the input and target text into self.xb'''\n", + " def __init__(self): pass\n", + " def begin_batch(self): \n", + " self.learn.xb = (self.xb[0], self.yb[0])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Shifting and masking of y, from [Annotated Transformer](http://nlp.seas.harvard.edu/2018/04/03/attention.html#training):\n", + "\n", + "> We also modify the self-attention sub-layer in the decoder stack to prevent positions from attending to subsequent positions. This masking, combined with fact that the output embeddings are offset by one position, ensures that the predictions for position i can depend only on the known outputs at positions less than i." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Shifting" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Target shift/offset explained\n", + "\n", + "**Taken from [@bentrevett's brilliant github repo \"pytorch-seq2seq\" tutorials](https://github.com/bentrevett/pytorch-seq2seq/blob/master/6%20-%20Attention%20is%20All%20You%20Need.ipynb):**\n", + "\n", + "As we want our model to predict the token but not have it be an input into our model we simply slice the token off the end of the sequence. Thus:\n", + "\n", + "$$\\begin{align*}\\text{trg} &= [sos, x_1, x_2, x_3, eos]\\\\\\text{trg[:-1]} &= [sos, x_1, x_2, x_3]\\end{align*}$$\n", + "\n", + "$x_i$ denotes **actual** target sequence element. We then feed this into the model to get a predicted sequence that should hopefully predict the token:\n", + "\n", + "$$\\begin{align*}\n", + "\\text{output} &= [y_1, y_2, y_3, eos]\n", + "\\end{align*}$$\n", + "\n", + "$y_i$ denotes **predicted** target sequence element. We then calculate our loss using the original trg tensor with the token sliced off the front, leaving the token:\n", + "\n", + "$$\\begin{align*} \\text{output} &= [y_1, y_2, y_3, eos]\\\\ \\text{trg[1:]} &= [x_1, x_2, x_3, eos] \\end{align*}$$\n", + "\n", + "We then calculate our losses and update our parameters as is standard.\n", + " \n", + " \n", + "We don't want to punish the model for not translating the 'sos' token, but we do need it to predict/define the end of the sentence" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**RemoveEOSCallback** \n", + "\n", + "Cut the *EOS* token token from the **output_x** presented to the model as we are trying to predict the next word. Therefore don't want to model to try anything after the *EOS* token. So the last token given to the model will be the token before *EOS*. This callback modifies the second element of our learn.xb, (which is the *copied* yb)\n", + "\n", + "But this should also ignore padding, as otherwise we'll be just cutting the last padding token and not the EOS" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": {}, + "outputs": [], + "source": [ + "class RemoveEOSCallback(Callback):\n", + " '''\n", + " Shift the target presented to the model during training to remove the \"eos\" token as \n", + " we don't want the model to learn to translate EOS when it sees EOS.\n", + " \n", + " In practice we actually mask the EOS token as due to batching the last token will often be a token,\n", + " not EOS\n", + " '''\n", + " def __init__(self, eos_idx): self.eos_idx=eos_idx\n", + " def begin_batch(self): \n", + " eos_mask=(self.learn.xb[1]!=self.eos_idx)\n", + " sz=torch.tensor(self.learn.xb[1].size())\n", + " sz[1]=sz[1]-1\n", + " self.learn.xb = (self.learn.xb[0], self.learn.xb[1][eos_mask].view((sz[0],sz[1])))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**LossTargetShiftCallback:** Shift the target shown to the loss to exclude the \"eos\" token, as translating \"bos\" is not part of our language translation objective" + ] + }, + { + "cell_type": "code", + "execution_count": 38, + "metadata": {}, + "outputs": [], + "source": [ + "class LossTargetShiftCallback(Callback):\n", + " '''\n", + " Shift the target shown to the loss to exclude the \"bos\" token as the first token we want predicted\n", + " should be an actual word, not the \"bos\" token (as we have already given the model \"bos\" )\n", + " '''\n", + " def __init__(self): pass\n", + " def after_pred(self): \n", + " self.learn.yb = (self.learn.yb[0][:,1:],)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Transformer size from Annotated Transformer:\n", + "\n", + "N=6, d_model=512, d_ff=2048, h=8" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "pad_idx=1\n", + "assert dls.vocab[1][pad_idx] == 'xxpad' \n", + "n_x_vocab, n_y_vocab = len(dls.vocab[0]), len(dls.vocab[1])\n", + "d_model=512\n", + "n_heads=8 #12\n", + "d_inner=2048 #1024\n", + "\n", + "#model = Transformer(n_x_vocab, n_y_vocab, d_model=d_model, n_heads=n_heads, pad_idx=pad_idx)\n", + "\n", + "model=pt_Transformer(src_vcbsz=n_x_vocab, trg_vcbsz=n_y_vocab, d_model=d_model, d_inner=d_inner)" + ] + }, + { + "cell_type": "code", + "execution_count": 40, + "metadata": {}, + "outputs": [], + "source": [ + "#model" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Kaiming_Normal works terrribly, at least if you apply it to everything except LayerNorm...\n", + "\n", + "DistilBERT works ok\n", + "\n", + "Could try xavier:\n", + "\n", + "```\n", + "def initialize_weights(m):\n", + " if hasattr(m, 'weight') and m.weight.dim() > 1:\n", + " nn.init.xavier_uniform_(m.weight.data)\n", + "\n", + "model.apply(initialize_weights);\n", + "```" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**DistilBERT initialisation**" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [], + "source": [ + "# DistilERT HF init weights https://github.com/huggingface/transformers/blob/31e67dd19f1b3fe2bc9a13f86d814f3f7bba48e4/src/transformers/modeling_distilbert.py\n", + "\n", + "def distil_apply_leaf(m, f):\n", + " \"Apply `f` to children of `m`.\"\n", + " c = m.children()\n", + " if isinstance(m, nn.Module): f(m)\n", + " for l in c: apply_leaf(l,f)\n", + "\n", + "\n", + "def _distilbert_init_weights(module):\n", + " \"\"\" Initialize the weights.\n", + " \"\"\"\n", + " if isinstance(module, nn.Embedding):\n", + " if module.weight.requires_grad:\n", + " module.weight.data.normal_(mean=0.0, std=0.02) #std=self.config.initializer_range)\n", + " if isinstance(module, nn.Linear):\n", + " module.weight.data.normal_(mean=0.0, std=0.02) #self.config.initializer_range)\n", + " elif isinstance(module, nn.LayerNorm):\n", + " module.bias.data.zero_()\n", + " module.weight.data.fill_(1.0)\n", + " if isinstance(module, nn.Linear) and module.bias is not None:\n", + " module.bias.data.zero_()\n", + "\n", + "distil_apply_leaf(model, _distilbert_init_weights)" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "The model has 86,650,168 trainable parameters\n" + ] + } + ], + "source": [ + "def count_parameters(model):\n", + " return sum(p.numel() for p in model.parameters() if p.requires_grad)\n", + "\n", + "print(f'The model has {count_parameters(model):,} trainable parameters')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Learner" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "cbs = [CombineInputOutputCallback, RemoveEOSCallback(eos_idx=3), LossTargetShiftCallback]\n", + "\n", + "pad_idx=1\n", + "assert dls.vocab[1][pad_idx] == 'xxpad' \n", + "loss_func = CrossEntropyLossFlat(ignore_index=pad_idx)\n", + "\n", + "learn = Learner(dls, model, metrics=[accuracy, Perplexity(), CorpusBLEUMetric(vocab_sz=n_y_vocab)], \n", + " cbs=cbs, loss_func=loss_func).to_fp16()\n", + "\n", + "# learn = Learner(dls, model, metrics=[accuracy, Perplexity()],\n", + "# cbs=cbs, loss_func=loss_func).to_fp16()" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "learn.load('paracrawl_en_ga_5e_5e-4_5e_1e-5_v0.2_exp4')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Training" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### First 5e" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "SuggestedLRs(lr_min=0.09120108485221863, lr_steep=0.7585775852203369)" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "learn.lr_find()" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": { + "scrolled": true + }, + "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", + " \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", + "
epochtrain_lossvalid_lossaccuracyperplexitycorpus_bleutime
01.5548501.5466010.5220554.6954830.35692115:13
11.1389241.2231970.5573453.3980330.41025515:13
20.8475481.0018770.5874292.7233880.45707915:20
30.6234730.8592330.6063022.3613480.48930015:22
40.5493040.8246820.6112782.2811560.49906915:13
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "learn.fit_one_cycle(20, 5e-4, div=5)" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "learn.recorder.plot_loss()" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "outputs": [], + "source": [ + "#learn.save('paracrawl_en_ga_5e_5e-4_v0.2_exp3')" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "learn.load('paracrawl_en_ga_5e_5e-4_v0.2_exp3')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Second 5e" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "SuggestedLRs(lr_min=5.754399353463669e-07, lr_steep=2.2908675418875646e-06)" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "learn.lr_find()" + ] + }, + { + "cell_type": "code", + "execution_count": 49, + "metadata": {}, + "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", + " \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", + "
epochtrain_lossvalid_lossaccuracyperplexitycorpus_bleutime
00.5461470.8194120.6120082.2691660.50056114:13
10.5478590.8174790.6124142.2647840.50171714:50
20.5297730.8154510.6127942.2601950.50266414:32
30.5337700.8138850.6130002.2566580.50324614:59
40.5286610.8137340.6130742.2563170.50338614:46
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "learn.fit_one_cycle(5, 1e-5, div=5)" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "learn.recorder.plot_loss()" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [], + "source": [ + "learn.save('paracrawl_en_ga_5e_5e-4_5e_1e-5_v0.2_exp4')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Generate and Process Translations funcs" + ] + }, + { + "cell_type": "code", + "execution_count": 165, + "metadata": {}, + "outputs": [], + "source": [ + "def generate(model, sentence, vocab): \n", + " model=model.eval()\n", + " \n", + " sentence=learn.dls.tokenizer[0][1].encodes(sentence)\n", + " sentence=learn.dls.numericalize[0].encodes(sentence)\n", + " \n", + " translated_sentence = [2] \n", + " i = 0\n", + " while int(translated_sentence[-1]) != 3 and i < 75: \n", + " output = forward_model(model, sentence, translated_sentence).cuda()\n", + " values, indices = torch.topk(output, 5)\n", + " translated_sentence.append(int(indices[-1][0]))\n", + " i+=1\n", + "\n", + " detok_translated_sentence=detokenize(translated_sentence, vocab)\n", + " #print(' '.join(detok_translated_sentence))\n", + " return ' '.join(detok_translated_sentence)\n", + " \n", + "\n", + "def forward_model(model, src, tgt):\n", + " src = torch.as_tensor(src).unsqueeze(0).long().cuda()\n", + " tgt = torch.as_tensor(tgt).unsqueeze(0).cuda()\n", + " tgt_mask = gen_nopeek_mask(tgt.shape[1]).cuda()\n", + " src = to_half(src)\n", + " tgt = to_half(tgt)\n", + " output = model.forward(src, tgt, tgt_mask=tgt_mask, src_key_padding_mask=None, tgt_key_padding_mask=None, memory_key_padding_mask=None)\n", + "\n", + " #return output.squeeze(0).to('cpu')\n", + " return output.squeeze(0).detach()\n", + "\n", + "\n", + "# def tokenize(sentence, freq_list, lang_model):\n", + "# punctuation = ['(', ')', ':', '\"', ' ']\n", + "\n", + "# sentence = sentence.lower()\n", + "# sentence = [tok.text for tok in lang_model.tokenizer(sentence) if tok.text not in punctuation]\n", + "# return [freq_list[word] if word in freq_list else freq_list['[OOV]'] for word in sentence]\n", + "\n", + "\n", + "def detokenize(sentence, vocab):\n", + " #freq_list = {v: k for k, v in freq_list.items()}\n", + " return [vocab[token] for token in sentence]\n", + " #return [freq_list[token] for token in sentence]\n", + "# def detokenize(sentence, freq_list):\n", + "# freq_list = {v: k for k, v in freq_list.items()}\n", + "# return [freq_list[token] for token in sentence]\n", + "\n", + "\n", + "def gen_nopeek_mask(length):\n", + " mask = rearrange(torch.triu(torch.ones(length, length)) == 1, 'h w -> w h')\n", + " mask = mask.float().masked_fill(mask == 0, float('-inf')).masked_fill(mask == 1, float(0.0))\n", + " return mask" + ] + }, + { + "cell_type": "code", + "execution_count": 53, + "metadata": {}, + "outputs": [], + "source": [ + "def process_trans(trans):\n", + " trans_ls=[]\n", + " for s in trans: \n", + " #print(s)\n", + " tmp = s.replace('xxbos','')\n", + " tmp = tmp.replace('xxeos','')\n", + " tmp = tmp.replace(' .','.')\n", + " tmp = tmp.replace(' ,',',')\n", + " tmp = tmp.replace(' ?','?')\n", + " tmp = tmp.replace(' !','!')\n", + " #print(tmp[0])\n", + " if tmp.endswith('. '): tmp=tmp[:-1]\n", + " if tmp.endswith('? '): tmp=tmp[:-1]\n", + " if tmp.endswith('! '): tmp=tmp[:-1]\n", + " \n", + " for spec in ['xxmaj ', 'xxup ']:\n", + " found=[]\n", + " for m in re.finditer(spec, tmp):\n", + " found.append(m.start())\n", + "\n", + " for f in found:\n", + " m = tmp.find(spec)\n", + " if m != -1: \n", + " ml = m+len(spec)\n", + " if m != 0:\n", + " tmp = tmp[:ml] + tmp[ml].upper() + tmp[ml+1:]\n", + " tmp = tmp[:m] + tmp[ml:]\n", + " else: \n", + " tmp = tmp[ml].upper() + tmp[ml+1:]\n", + " tmp = tmp[ml:]\n", + " \n", + " # Remove space at start\n", + " if tmp[0] == ' ': tmp = tmp[1:]\n", + " \n", + " # Uppercase start of sentence\n", + " #tmp = tmp[0].upper() + tmp[1:]\n", + " \n", + " trans_ls.append(tmp)\n", + " return trans_ls" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Testing" + ] + }, + { + "cell_type": "code", + "execution_count": 52, + "metadata": {}, + "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", + " \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", + "
ga_idgaen_idenga_len
0557291Cá bhfuil críochfort na mbus?35406Where is the bus terminal?5
1557299Nuair a dhúisigh mé, bhí brón orm.1361When I woke up, I was sad.7
2557533Tosaíonn an t-oideachas sa bhaile.19122Education starts at home.5
3557579Táim i ngrá leat.1434I love you.4
4934942Tá grá agam duit.1434I love you.4
\n", + "
" + ], + "text/plain": [ + " ga_id ga en_id \\\n", + "0 557291 Cá bhfuil críochfort na mbus? 35406 \n", + "1 557299 Nuair a dhúisigh mé, bhí brón orm. 1361 \n", + "2 557533 Tosaíonn an t-oideachas sa bhaile. 19122 \n", + "3 557579 Táim i ngrá leat. 1434 \n", + "4 934942 Tá grá agam duit. 1434 \n", + "\n", + " en ga_len \n", + "0 Where is the bus terminal? 5 \n", + "1 When I woke up, I was sad. 7 \n", + "2 Education starts at home. 5 \n", + "3 I love you. 4 \n", + "4 I love you. 4 " + ] + }, + "execution_count": 52, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t_path = Path('data/irish/parallel_corpora/tatoeba')\n", + "t_fn = 'tatoeba_en-ga.csv'\n", + "t_df = pd.read_csv(t_path/t_fn)\n", + "\n", + "t_df['ga_len'] = t_df.ga.str.split().str.len()\n", + "t_df.head()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# learn.dls.test_dl = t_dls.valid\n", + "# def act_fn(x): return L(F.softmax(o, dim=-1) for o in x)\n", + "# o = learn.get_preds(dl=t_dls.valid, act=act_fn)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Generate translations" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'xxbos xxup tá mé réidh don deireadh seachtaine ! xxeos'" + ] + }, + "execution_count": 56, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generate(learn.model, \"I'm ready for the weekend!\", dls.vocab[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['xxbos xxmaj an bhfuil an críochfort bus 2005 ? xxeos',\n", + " 'xxbos xxmaj nuair a xxunk mé suas , bhí mé brónach . xxeos',\n", + " 'xxbos xxmaj tosaíonn an t - oideachas sa bhaile . xxeos',\n", + " 'xxbos xxmaj grá i tú . xxeos',\n", + " 'xxbos xxmaj grá i tú . xxeos']" + ] + }, + "execution_count": 57, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "trans_ls=[]\n", + "for e in t_df.en.values:\n", + " trans_ls.append(generate(learn.model, e, dls.vocab[1])) \n", + "trans_ls[:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [], + "source": [ + "f=open('tatoeba_raw_translations_exp4_20200724.txt','w')\n", + "for ele in trans_ls:\n", + " f.write(ele+'\\n')\n", + "f.close()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Process translations" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "['An bhfuil an críochfort bus 2005?',\n", + " 'Nuair a xxunk mé suas, bhí mé brónach.',\n", + " 'Tosaíonn an t - oideachas sa bhaile.',\n", + " 'Grá i tú.',\n", + " 'Grá i tú.',\n", + " 'Tá mé i ngrá le tú.',\n", + " 'Glan ár seomra ranga tar éis na scoile.',\n", + " 'Nach bhfuil muid ag comhlíonadh roimh?']" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t_final = process_trans(trans_ls)\n", + "t_final[:8]" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "metadata": {}, + "outputs": [], + "source": [ + "f=open('tatoeba_processed_translations_exp4_20200724.txt','w')\n", + "for ele in t_final:\n", + " f.write(ele+'\\n')\n", + "f.close()" + ] + }, + { + "cell_type": "code", + "execution_count": 61, + "metadata": {}, + "outputs": [], + "source": [ + "t_df['translation'] = t_final\n", + "t_df.to_csv('tatoeba_with_translation_exp4_20200724.csv')" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "metadata": {}, + "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", + " \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", + " \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", + "
gatranslation
1796Tá mé ábalta é sin a dhéanamh anoisTá mé in ann a dhéanamh go anois
1261Is maith liom ceoldráma.Cosúil liom opera.
849Tá siad ag labhairt Gaeilge.Tá siad ag labhairt na Gaeilge.
14Ná déan dhá rud ag an am céanna.Ná déan dhá rud ag am.
323Nach ndearnadh rud ar bith faoi sin?Ná raibh aon rud déanta faoin sin?
854Tá na húlla díolta amach.Díoladh an xxunk amach.
836Labhraím duit.Labhair mé leat.
1971Cá bhfuil an t-arán?Cén áit a bhfuil an t - arán?
858Cheannaigh mé carbhat dearg.Cheannaigh mé xxunk dearg.
1321Táim ag ól an caife.Tá mé ag ól an caife.
1782Tá grá againn ar an gcailín céanna.Grá againn an cailín céanna cailín.
102Tá an leac oighir an-tiubh.Is é an oighear an - tiubh.
1611Ní mian liom ceapairí ar bith.Níl mé ag iarraidh aon xxunk.
1933Ní theastaíonn buachaill uait.Ní gá duit a xxunk.
656Táimid ag léamh.Táimid ag léamh.
1636Tá cúpla daoine uaim chun cabhair a tabhairt dom.Ní mór dom a roinnt daoine chun cabhrú liom.
1218Oibrím ag barra.Obair mé ag barra.
1120Is liomsa é sin.Is mianach é sin.
1394Cad atá sibh ag déanamh staidéir?Cad atá tú ag déanamh staidéir?
4Tá grá agam duit.Grá i tú.
\n", + "
" + ], + "text/plain": [ + " ga \\\n", + "1796 Tá mé ábalta é sin a dhéanamh anois \n", + "1261 Is maith liom ceoldráma. \n", + "849 Tá siad ag labhairt Gaeilge. \n", + "14 Ná déan dhá rud ag an am céanna. \n", + "323 Nach ndearnadh rud ar bith faoi sin? \n", + "854 Tá na húlla díolta amach. \n", + "836 Labhraím duit. \n", + "1971 Cá bhfuil an t-arán? \n", + "858 Cheannaigh mé carbhat dearg. \n", + "1321 Táim ag ól an caife. \n", + "1782 Tá grá againn ar an gcailín céanna. \n", + "102 Tá an leac oighir an-tiubh. \n", + "1611 Ní mian liom ceapairí ar bith. \n", + "1933 Ní theastaíonn buachaill uait. \n", + "656 Táimid ag léamh. \n", + "1636 Tá cúpla daoine uaim chun cabhair a tabhairt dom. \n", + "1218 Oibrím ag barra. \n", + "1120 Is liomsa é sin. \n", + "1394 Cad atá sibh ag déanamh staidéir? \n", + "4 Tá grá agam duit. \n", + "\n", + " translation \n", + "1796 Tá mé in ann a dhéanamh go anois \n", + "1261 Cosúil liom opera. \n", + "849 Tá siad ag labhairt na Gaeilge. \n", + "14 Ná déan dhá rud ag am. \n", + "323 Ná raibh aon rud déanta faoin sin? \n", + "854 Díoladh an xxunk amach. \n", + "836 Labhair mé leat. \n", + "1971 Cén áit a bhfuil an t - arán? \n", + "858 Cheannaigh mé xxunk dearg. \n", + "1321 Tá mé ag ól an caife. \n", + "1782 Grá againn an cailín céanna cailín. \n", + "102 Is é an oighear an - tiubh. \n", + "1611 Níl mé ag iarraidh aon xxunk. \n", + "1933 Ní gá duit a xxunk. \n", + "656 Táimid ag léamh. \n", + "1636 Ní mór dom a roinnt daoine chun cabhrú liom. \n", + "1218 Obair mé ag barra. \n", + "1120 Is mianach é sin. \n", + "1394 Cad atá tú ag déanamh staidéir? \n", + "4 Grá i tú. " + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "t_df[['ga','translation']].sample(20)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## SacreBLEU" + ] + }, + { + "cell_type": "code", + "execution_count": 63, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "25.141619186580616\n" + ] + } + ], + "source": [ + "import sacrebleu\n", + "\n", + "refs = [t_df.ga.values.tolist()]\n", + "sys = t_df.translation.values.tolist()\n", + "\n", + "bleu = sacrebleu.corpus_bleu(sys, refs)\n", + "print(bleu.score)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inspect top losses" + ] + }, + { + "cell_type": "code", + "execution_count": 45, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/html": [], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hi\n" + ] + }, + { + "data": { + "text/html": [], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "hi\n" + ] + } + ], + "source": [ + "# at 30k tokens per vocab sometimes this works, sometimes it doesn't\n", + "\n", + "# Couldnt process 30k tokens until I added the 'hi' below, it was getting stuck at 94.87%, no idea why\n", + "@Numericalize\n", + "def encodes(self, o): \n", + " print('hi')\n", + " return TensorText(tensor([self.o2i [o_] for o_ in o]))\n", + "\n", + "class floatify_tfm(Transform):\n", + " def encodes(self,o): return o.float()\n", + " def decodes(self,o): return o.long()\n", + "\n", + "max_vocab=30000\n", + "#splits = ColSplitter()(df) \n", + "splits = RandomSplitter(valid_pct=0.2, seed=42)(df)\n", + "splits = (splits[0], splits[1][:2000])\n", + "\n", + "tfms = [[Tokenizer.from_df(text_cols='en' , rules=proc_rules), attrgetter(\"text\"), Numericalize(max_vocab=max_vocab)], \n", + " [Tokenizer.from_df(text_cols='ga', lang='ga', rules=proc_rules), attrgetter(\"text\"), Numericalize(max_vocab=max_vocab)]]\n", + "\n", + "dl = partial(SortedDL, shuffle=True, res=df.ga_len.values)\n", + "\n", + "dsets = Datasets(df, tfms, splits=splits, dl_type=dl)\n", + "\n", + "# remove the print from Numericalize\n", + "@Numericalize\n", + "def encodes(self, o): return TensorText(tensor([self.o2i [o_] for o_ in o]))" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": { + "scrolled": true + }, + "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", + " \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", + "
texttext_
0xxbos ( i ) the application of any goods of a kind specified in the xxmaj fourth xxmaj schedule by a person for the purposes of his business and treated as delivered in accordance with section 3 ( 1 ) ( e ) , xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos ( i ) le duine do bhaint úsáid chun críocha a ghnó as aon earraí de chineál a shonraítear sa xxmaj cheathrú xxmaj sceideal agus a áirítear mar earraí arna seachadadh de réir alt 3 ( 1 ) ( e ) , xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
1xxbos xxup xxunk . xxmaj population aged one year and over , usually resident and present in the xxmaj state , whose usual residence one year previously was outside the xxmaj state , classified by former country of usual residence , sex and distinguishing those with xxmaj irish nationality or other nationality xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos › xxup xxunk . xxmaj daonra xxmaj gnáthchónaitheoirí xxmaj aon xxmaj bliain d'aois agus xxmaj níos xxmaj sine a bhí i xxmaj láthair sa xxmaj stát de réir xxmaj náisiúntacht , xxmaj inscne , xxmaj gnátháit xxmaj chónaithe xxmaj bliain xxmaj roimhe agus bliaindaonáirimh › xxup xxunk . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
2xxbos ( a ) the constituencies for the election of members to the xxmaj dáil , and xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos ( a ) na dáilcheantair chun comhaltaí a thoghadh chun na xxmaj dála , agus xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
3xxbos “ but as climate change increases the frequency and severity of droughts and floods and makes food more difficult to produce , we need innovative solutions to support communities on the frontline . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos \" ach mar a ardaíonn an t - athrú aeráide minicíocht agus déine na xxunk agus na dtuilte agus dhéanann sé bia níos deacra le táirgeadh , is gá réitigh nuálacha chun tacú le pobail ar an líne thosaigh . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
4xxbos xxmaj member xxmaj states : xxmaj germany , xxmaj france , xxmaj italy , the xxmaj netherlands , xxmaj belgium and xxmaj luxembourg . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos xxmaj ballstáit : xxmaj an xxmaj ghearmáin , an xxmaj fhrainc , an xxmaj iodáil , an ísiltír , an xxmaj bheilg agus xxmaj lucsamburg . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
5xxbos ( b ) contributions in respect of that service have been returned to him , xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos ( b ) go mbeifear tar éis ranníoca i leith na seirbhíse sin a thabhairt ar ais dó , xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
6xxbos xxmaj this website is a national shared service for the collection of the charge for xxmaj non xxmaj principal xxmaj private xxmaj residences on behalf of the local authorities . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos xxmaj is seirbhís náisiúnta chomhroinnte an láithreán gréasáin seo chun an muirear d’áiteanna xxmaj cónaithe xxmaj príobháideacha neamhphríomha ar son na n - údarás áitiúil a bhailiú . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
7xxbos ( 2 ) xxmaj the xxmaj minister may order that a person committed under section 14 be released from custody if the xxmaj minister is of the opinion that a request for the person 's surrender is not being proceeded with . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos ( 2 ) xxmaj féadfaidh an taire a ordú duine a cimíodh faoi alt 14 a scaoileadh saor ó choimeád más é tuairim an xxmaj aire nach bhfuiltear ag dul ar aghaidh le hiarraidh chun an duine a thabhairt suas . xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
8xxbos xxmaj posted on xxmaj august 28 , 2013 by xxmaj kaia xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpadxxbos by xxmaj kaia xxmaj postáilte ar 28 xxmaj lúnasa , 2013 ag xxmaj kaia xxeos xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad xxpad
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "bs,sl = 32, 512\n", + "dls = dsets.dataloaders(bs=bs, seq_len=sl, before_batch=partial(pad_input, pad_fields=[0,1]))\n", + "dls.show_batch()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "manually calculate" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "eos_idx=3\n", + "dls.valid.bs = 1\n", + "\n", + "loss_ls = []\n", + "en_ls, ga_trg_ls, ga_pred_ls = [], [], []\n", + "\n", + "for xb, yb in dls.valid:\n", + " yy = yb\n", + " eos_mask=(yb!=eos_idx)\n", + " sz=torch.tensor(yb.size())\n", + " sz[1]=sz[1]-1\n", + " yb = yb[eos_mask].view((sz[0],sz[1])) # drop the last token (\"eos\") for training \n", + " \n", + " with torch.no_grad():\n", + " y_pred_logits = model.forward(src=xb, trg=yb)\n", + " \n", + " yb_loss = yy[:,1:] # shift target to exclude xxbos\n", + " loss = learn.loss_func(y_pred_logits, yb_loss)\n", + " loss_ls.append(loss)\n", + "\n", + " y_pred_act = F.softmax(y_pred_logits, dim=-1)\n", + " \n", + " preds_ls = []\n", + " for p in y_pred_act: \n", + " preds_ls.append(p.argmax(dim=-1))\n", + " \n", + " tmp_ls = []\n", + " for i in xb[0]:\n", + " if (dls.vocab[0][i] != 'xxpad') and (dls.vocab[1][i] != 'xxbos'):\n", + " tmp_ls.append(dls.vocab[0][i])\n", + " en_ls.append(' '.join(tmp_ls))\n", + "\n", + " tmp_ls = []\n", + " for i in yb[0]:\n", + " if (dls.vocab[1][i] != 'xxpad') and (dls.vocab[1][i] != 'xxbos'):\n", + " tmp_ls.append(dls.vocab[1][i])\n", + " ga_trg_ls.append(' '.join(tmp_ls))\n", + "\n", + " tmp_ls = []\n", + " for i in preds_ls[0]:\n", + " if dls.vocab[1][i] != 'xxpad':\n", + " tmp_ls.append(dls.vocab[1][i])\n", + " ga_pred_ls.append(' '.join(tmp_ls))" + ] + }, + { + "cell_type": "code", + "execution_count": 117, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(tensor(4.8346, device='cuda:0'), tensor(0.0034, device='cuda:0'))" + ] + }, + "execution_count": 117, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "max_loss_idx = np.argmax(loss_ls)\n", + "min_loss_idx = np.argmin(loss_ls)\n", + "loss_ls[max_loss_idx], loss_ls[min_loss_idx]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Sorted indices by loss, (highest loss to lowest)" + ] + }, + { + "cell_type": "code", + "execution_count": 144, + "metadata": {}, + "outputs": [], + "source": [ + "loss_sorted_idxs = np.argsort(-np.array(loss_ls))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Show `n` top losses" + ] + }, + { + "cell_type": "code", + "execution_count": 163, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LOSS: 4.834611415863037\n", + "xxmaj we are currently experiencing technical difficulties with our subtitles on some browsers . xxeos\n", + "\n", + "xxup tá deacrachtaí le fotheidil ar roinnt ‘ xxunk ’ faoi láthair .\n", + "\n", + "xxmaj tá muid teicniúla deacrachtaí teicniúla ár brabhsálaithe brabhsálaithe faoi faoi láthair atá xxeos\n", + "\n", + "\n", + "LOSS: 4.4953813552856445\n", + "frosted green cosmetic glass bottle with silver … xxeos\n", + "\n", + "frosted buidéal dropper gloine glas do cosmaideacha …\n", + "\n", + "xxmaj cosmaideacha gloine cosmaideacha cosmaideacha cosmaideacha airgid le xxeos\n", + "\n", + "\n", + "LOSS: 4.347179412841797\n", + "xxmaj not even all the end of compulsory schooling despite compulsory schooling . xxeos\n", + "\n", + "xxup ní fiú go léir a chuaigh amach bhunscoil ainneoin scolaíocht éigeantach .\n", + "\n", + "xxmaj ní fiú amháin léir deireadh deireadh deireadh dheireadh éigeantach in éigeantach in xxeos\n", + "\n", + "\n", + "LOSS: 4.304743766784668\n", + "p - xxmaj depth of xxmaj foundation xxeos\n", + "\n", + "p - xxmaj fondúireacht doimhneacht\n", + "\n", + "p - xxmaj doimhneacht na na\n", + "\n", + "\n", + "LOSS: 4.188599586486816\n", + "xxmaj open 7 days including bank holidays xxeos\n", + "\n", + "xxmaj samhradh : xxmaj oscailte 7 lá , laethanta saoire bainc san áireamh\n", + "\n", + "7 laethanta 7 laethanta laethanta 7 lá lena laethanta saoire bainc lena áireamh laethanta\n", + "\n", + "\n", + "LOSS: 4.172364234924316\n", + "xxmaj ok . xxmaj then i reboot and cross the border . xxeos\n", + "\n", + "xxmaj ansin leithroinnte agus dtrasnaíonn an teorainn .\n", + "\n", + "xxup ok i mé tras an teorainn . xxeos\n", + "\n", + "\n", + "LOSS: 4.111687660217285\n", + "xxmaj this was equivalent to a 4.5 % unemployment rate , up slightly from 4.4 % in 2002 but still well below the xxup eu average of 8.0 % . xxeos\n", + "\n", + "xxmaj b’ionann sin agus 4.5 % ráta dífhostaíochta ardú beagán ó 4.4 % in 2002 ach go maith faoi leibhéal an mheán xxup ae ag 8.0 % . xxmaj d’ardaigh an líon daoine ar dhífhostaíocht fhadtéarmach 1,200 .\n", + "\n", + "xxmaj bhí seo agus ráta % xxunk dífhostaíochta , , ón 4.4 % i 2002 ach fós maith faoi bhun an xxup an ae de brath % . xxeos bhí % ráta tí is an % . % xxeos\n", + "\n", + "\n", + "LOSS: 4.084066390991211\n", + "( i ) substitute “ the actuary to or trustees of ” for “ the trustees of ” , xxeos\n", + "\n", + "( i ) “ déanfaidh achtúire nó iontaobhaithe scéime nó iontaobhais xxup cbs ” a chur in ionad “ déanfaidh iontaobhaithe scéime nó iontaobhais xxup cbs ” ,\n", + "\n", + "( i ) “ an achtúire do iontaobhaithe ” ” iontaobhaithe ” xxunk iontaobhais a chur in ionad “ iontaobhaithe iontaobhaithe ” ” , ” na ” , xxeos\n", + "\n", + "\n", + "LOSS: 3.9471380710601807\n", + "xxmaj ensure national mail services packages are posted either without a cover or in a cover which can be easily removed for the purpose of examination . xxeos\n", + "\n", + "xxmaj déan cinnte de go seoltar pacáistí gan chlúdach nó i gclúdach atá furasta a bhaint le haghaidh scrúdúcháin sa chóras náisiúnta poist .\n", + "\n", + "xxmaj cuirtear pacáistí go pacáistí gcuirfear pacáistí seirbhísí chlúdach nó i xxunk ar féidir a aistriú go go an a phost seirbhísí a a xxeos\n", + "\n", + "\n", + "LOSS: 3.885239362716675\n", + "a sea change in xxmaj europe 's innovation performance is the only way to create lasting and well - paid jobs that withstand the pressures of globalisation . \" xxeos\n", + "\n", + "xxmaj beidh gá le feabhas ó bhonn a dhéanamh ar fheidhmíocht nuálaíochta na heorpa má táthar chun poist bhuana ar phá maith a chruthú , poist a bheidh in ann brú an domhandaithe a sheasamh . \"\n", + "\n", + "xxmaj is athrú le hathrú farraige thaobh na xxunk ar fheidhmíocht na san heorpa ar tá chun poist buan buan aghaidh agus agus chruthú a go atá sheasamh sheasamh aice a an domhandú . chur . \" xxeos\n", + "\n", + "\n", + "LOSS: 3.8690526485443115\n", + "xxmaj heat loss or gains from pipes , xxunk and vessels is to be limited and energy efficient lighting systems provided . xxeos\n", + "\n", + "xxup ní mór caillteanas nó gnóthachain teasa trí phíopaí , xxunk agus soithigh a mhaolú agus córas éifeachtach soilse a fheistiú .\n", + "\n", + "xxup tá mór córas teasa gnóchain ó ó phíopaí , xxunk agus soithí a bhfuil a a fuinnimh fuinnimh fuinnimh sholáthar ar xxeos\n", + "\n", + "\n", + "LOSS: 3.851304292678833\n", + "xxmaj provisions in relation to reserve values , transfer values and transfers of insurance . xxeos\n", + "\n", + "xxmaj forálacha maidir le cúl - luacha , luacha aistriúcháin agus aistrithe árachais .\n", + "\n", + "xxmaj forálacha maidir le luachanna - luachanna , luachanna aistrithe d'aistriú aistrithe luachanna d'aistriú xxeos\n", + "\n", + "\n", + "LOSS: 3.835312604904175\n", + "xxmaj article xxunk in attack xxeos\n", + "\n", + "xxmaj airteagal xxunk i gcás ionsaithe\n", + "\n", + "xxmaj airteagal xxunk ionsaí ionsaí ionsaí ionsaí\n", + "\n", + "\n", + "LOSS: 3.74434494972229\n", + "xxmaj xxunk and licences - construction - road safety - traffic xxmaj management and xxmaj parking xxeos\n", + "\n", + "xxmaj xxunk xxmaj tógáil bóthair - sábháilteacht bóthair - bainistíocht xxmaj tráchta\n", + "\n", + "xxmaj xxunk agus xxunk agus agus sábháilteacht agus agus agus agus tráchta agus\n", + "\n", + "\n", + "LOSS: 3.710318088531494\n", + "xxmaj standard link building sources xxeos\n", + "\n", + "xxmaj foinsí xxmaj standard tógáil nasc\n", + "\n", + "xxmaj foinsí nasc caighdeánach nasc xxmaj tógála\n", + "\n", + "\n", + "LOSS: 3.7060744762420654\n", + "xxmaj after this the delegates late xxmaj louis xxup xvi to the death , by a majority vote of one vote . xxeos\n", + "\n", + "xxmaj tar éis seo an xxmaj toscairí déanach xxmaj louis xxup xvi xxmaj chun an xxmaj bás , xxmaj de a xxmaj formhór na xxmaj vóta haon .\n", + "\n", + "xxmaj tar éis na na xxmaj louis xxmaj xxmaj louis xxup xvi le louis an bháis bháis , trí vóta vóta vóta vóta vóta vóta vóta amháin vóta xxeos\n", + "\n", + "\n", + "LOSS: 3.6944961547851562\n", + "17 . a sensible housing policy in xxmaj xxunk . xxeos\n", + "\n", + "17 . xxmaj polasaí ceart tithíochta i mbearna .\n", + "\n", + "17 . xxmaj polasaí tithíochta tithíochta ciallmhar xxmaj xxmaj xxeos\n", + "\n", + "\n", + "LOSS: 3.6918556690216064\n", + "xxup eu budget 2014 by financial framework heading xxeos\n", + "\n", + "xxmaj buiséad 2014 de réir na gceannteideal atá sa chreat airgeadais\n", + "\n", + "xxmaj buiséad an ag réir réigiúin creat airgeadais ann xxup airgeadais xxup\n", + "\n", + "\n", + "LOSS: 3.656128406524658\n", + "3.1 xxmaj the purpose of this chapter is to give a brief review of the more important or interesting decisions and developments in the area of criminal law in 2007 . xxeos\n", + "\n", + "3.1 xxmaj is é cuspóir atá leis an gcaibidil seo cuntas gairid a thabhairt ar chinntí agus ar chora xxunk eile den tábhacht maidir le réimse dhlí na coireachta i rith na bliana 2007 .\n", + "\n", + "3.1 xxmaj is é is na leis an gcaibidil seo athbhreithniú gearr ar thabhairt ar na níos forbairtí na is nó nó dlí níos le forbairtí an coiriúil coiriúil in 2007 2007 bliana 2007 . xxeos\n", + "\n", + "\n", + "LOSS: 3.5991711616516113\n", + "( 5 ) fire or water hose fittings of the following descriptions : xxeos\n", + "\n", + "( 5 ) feistisí feadán tóiteáin no feadán uisce de sna xxunk so leanas :\n", + "\n", + "( 5 ) xxup xxunk dóiteáin nó uisce uisce de sna saghsanna seo a : xxeos\n", + "\n", + "\n", + "LOSS: 3.5880415439605713\n", + "xxmaj this play was first performed in 1979 and is a xxunk look at xxmaj irish society , still relevant today . xxeos\n", + "\n", + "xxmaj tugann an dráma seo , a léiríodh ar dtús i 1979 , léargas xxunk ar shochaí na héireann , léargas atá fós suntasach inniu .\n", + "\n", + "xxmaj an an spraoi seo an ar bhí i dtús i 1979 , agus xxunk ar chumann na héireann , agus ábhartha ábhartha ar sa . xxeos\n", + "\n", + "\n", + "LOSS: 3.5831832885742188\n", + "xxmaj first elections of members of certain public assistance authorities . xxeos\n", + "\n", + "xxmaj céad - toghcháin chomhaltaí údarásanna conganta xxunk áirithe .\n", + "\n", + "xxmaj na toghcháin toghcháin do údarás cúnaimh phuiblí áirithe . xxeos\n", + "\n", + "\n", + "LOSS: 3.514817714691162\n", + "xxmaj withdrawal xxmaj date of v 1 xxmaj assessments xxeos\n", + "\n", + "xxmaj dáta xxmaj xxunk xxmaj measúnaithe l 1\n", + "\n", + "xxmaj dáta xxmaj siar v measúnachtaí xxup xxeos xxmaj\n", + "\n", + "\n", + "LOSS: 3.4614880084991455\n", + "( ii ) certifies that the person , although the person ’s condition is not such as to require the person ’s hospitalisation , is unfit for any questioning for the purpose of the investigation for a specified period , xxeos\n", + "\n", + "( ii ) go ndeimhníonn sé nach xxunk an duine chun críche an imscrúdaithe go ceann tréimhse sonraithe , d’ainneoin nach gá an duine a chur isteach in ospidéal de dheasca na baile atá air ,\n", + "\n", + "( ii ) go ndeimhneoidh an nó bhfuil an duine , a aon imscrúdaithe ar bhfuil tréimhse sonraithe , cé nach amhlaidh don duine chun cheangal i ar imthosca an shórt xxunk xxunk a sheachaint , xxeos\n", + "\n", + "\n", + "LOSS: 3.3972277641296387\n", + "xxmaj shoot 2 : xxmaj cruise xxmaj control xxeos\n", + "\n", + "xxmaj shoot 2 : cúrsála rialaithe\n", + "\n", + "xxmaj shoot 2 : xxmaj xxmaj xxmaj\n", + "\n", + "\n", + "LOSS: 3.344511032104492\n", + "xxmaj the blue flag campaign today flies in 13 different countries having started life in xxmaj france in 1987 . xxeos\n", + "\n", + "xxmaj san xxmaj fhrainc a thosaigh an feachtas seo i 1987 agus anois tá an brat gorm ar foluain i 13 thír éagsúla .\n", + "\n", + "xxmaj déanann fheachtas eoraip i cuireadh an feachtas bratach caite 1987 , cuileoga i na feachtas gorm i xxmaj i 13 thír éagsúla a xxmaj\n", + "\n", + "\n", + "LOSS: 3.3257603645324707\n", + "xxmaj contingency allowances given to compensate for the time required by the workers to perform all necessary additional and periodic activities , e.g. reading drawings , cleaning machinery etc . xxeos\n", + "\n", + "liúntais teagmhasacha a tugadh mar chúiteamh ar an am is gá ag na hoibrithe chun gach gníomhaíocht breise agus tréimhsiúla gá , m.sh. líníochtaí léamh , glanadh innealra srl\n", + "\n", + "xxmaj teagmhais na thabhairt mar chúiteamh don an am a gá de na hoibrithe chun gach gníomhaíocht bhreise agus thréimhsiúil a a m.sh. ag , , innealra etc etc .\n", + "\n", + "\n", + "LOSS: 3.311084747314453\n", + "relationship , and supply chain processes . xxeos\n", + "\n", + "caidreamh , agus slabhra soláthair próisis .\n", + "\n", + "le , próisis próisis soláthair próisis slabhra xxeos\n", + "\n", + "\n", + "LOSS: 3.306642532348633\n", + "xxmaj in 1963 introduced the first helicopters into service in the xxmaj state and within one year provided a daytime xxmaj search and xxmaj rescue service and within a further year established an inter - hospital air ambulance service , the first of its kind in xxmaj europe . xxeos\n", + "\n", + "xxmaj na chéad héileacaptair a thionscnamh i mbun seirbhíse sa xxmaj stát sa bhliain 1963 : soláthraíodh seirbhís xxmaj chuardaigh agus xxmaj tarrthála lae faoi cheann bliana agus bunaíodh seirbhís aerárthaigh othar idir - ospidéil faoi cheann bliana eile , an chéad seirbhís dá leithéid san xxmaj eoraip .\n", + "\n", + "i thug chéad uair a tugadh i seirbhís seirbhíse sa xxmaj stát agus bhliain 1963 agus xxmaj an xxmaj cuardaigh agus xxmaj tarrthála agus agus cheann bliana agus laistigh seirbhís ospidéil idir idir - ospidéil bhreise láthair dá breise , an chéad cheann dá chineál san xxmaj eoraip . xxeos\n", + "\n", + "\n", + "LOSS: 3.2318711280822754\n", + "“ in the 25 years since our previous logo was developed , the world has moved from the printed page to an open fluid digital environment where more and more people have access to data . xxeos\n", + "\n", + "“ le linn an 25 bliana ó forbraíodh ár sean - lógó , tá an saol mór tar éis bogadh ar aghaidh ó cháipéisí clóite go timpeallacht oscailte solúbtha digiteach ina bhfuil rochtain ar sonraí ag líon méadaithe daoine .\n", + "\n", + "“ sa linn an 25 bliana ó rinneadh ár lógó - lógó , tá an domhan bhog ar éis a ón an ar leathanach clóite go dtí digiteach digiteach i i bhfuil rochtain níos níos agus níos daoine agus agus xxeos\n", + "\n", + "\n", + "LOSS: 3.222780704498291\n", + "xxmaj it takes into account the extent to which individual students ’ characteristics such as gender , age , socio - economic background and prior educational attainment , have an impact on progression . xxeos\n", + "\n", + "xxmaj cuireann sé san áireamh an tionchar atá ag éagsúlacht thréithe na mac léinn ar an xxunk , leithéidí inscne , aois , cúlra socheacnamaíoch agus xxunk oideachasúil .\n", + "\n", + "xxmaj cuirtear sí san áireamh a méid ar ag mic na na mic léinn aonair leith xxunk , ar , , aois , cúlra eacnamaíoch agus roimh oideachais roimh sula\n", + "\n", + "\n", + "LOSS: 3.1986210346221924\n", + "xxmaj look at some other items of cutlery . xxmaj can you make drawings of them ? xxeos\n", + "\n", + "xxmaj an féidir leat cur síos a dhéanamh air ? xxmaj déan líníocht de . xxmaj amharc ar roinnt míreanna eile sceanra .\n", + "\n", + "xxmaj féach féidir leat líníochtaí isteach ar dhéanamh ar ? xxmaj féachaint tú ar roinnt xxmaj is ar roinnt míreanna eile de ? xxeos\n", + "\n", + "\n", + "LOSS: 3.1934149265289307\n", + "but does not include — xxeos\n", + "\n", + "ach ní fholuíonn sí —\n", + "\n", + "ach ní fholaíonn sé — ní\n", + "\n", + "\n", + "LOSS: 3.170163154602051\n", + "xxmaj in all places that were affected by lightning discharges electricity . xxeos\n", + "\n", + "i ngach áit xxmaj bhí tionchar ag go tintreach leictreachas sceitheadh .\n", + "\n", + "i ngach áiteanna go go tionchar ag scaoileadh raibh scaoileadh scaoilte leictreachais xxeos\n", + "\n", + "\n", + "LOSS: 3.164721727371216\n", + "xxmaj since 2004 the works programme has focused on preserving the extensive structural remains on the xxmaj south xxmaj peak . xxeos\n", + "\n", + "á “ 2004 , xxunk clár na n - oibreacha ar xxunk fairsinge na struchtúr ar an xxunk xxmaj theas a chaomhnú .\n", + "\n", + "ó xxup tá tá tá an oibreacha n - oibreacha ar an an atá n mór an xxmaj xxmaj theas a chaomhnú . xxeos\n", + "\n", + "\n", + "LOSS: 3.1545069217681885\n", + "xxmaj please ensure that you provide complete and accurate information ( e.g. on dates of birth and xxup pps numbers ) as failure to do this will delay processing of your application . xxeos\n", + "\n", + "xxmaj cinntigh , le do thoil , go soláthraíonn tú faisnéis shoiléir agus chruinn ( dátaí breithe , uimhreacha xxup psp agus sonraí bainc go háirithe ) . xxup má theipeann ort é seo a dhéanamh , beidh moill ar phróiseáil d’iarratais .\n", + "\n", + "xxmaj déan go go do thoil go go xxunk tú faisnéis iomlán ( cruinn ( e.g breithe agus agus xxup psp ) uimhreacha xxup xxup mbeidh ) mar xxmaj má dhéantar ar an seo a dhéanamh tuilleadh xxunk tú ar d’iarratas d . xxeos\n", + "\n", + "\n", + "LOSS: 3.147977828979492\n", + "xxmaj fan circulation xxunk optimized for higher efficient heat transfer in the low - temperature application . xxeos\n", + "\n", + "xxunk le haghaidh níos airde aistriú teasa éifeachtach i gcur i bhfeidhm íseal\n", + "\n", + "xxmaj xxmaj scaipeadh aistriú airde aistriú teasa níos ó bhfeidhm i bhfeidhm teocht –\n", + "\n", + "\n", + "LOSS: 3.143120765686035\n", + "xxmaj but xxmaj plague knocked people from all those different stalls , but not as many suffered by those of them poor . xxeos\n", + "\n", + "xxmaj ach leag plague daoine ó siúd go léir stallaí éagsúla , ach bhí tionchar nach mar go leor acu siúd acu bochta .\n", + "\n", + "xxmaj ach tá xxmaj daoine ó gach go léir stallaí éagsúla , ach ní nach ag bhfuil chuid leor ag siúd iad bochta . xxeos\n", + "\n", + "\n", + "LOSS: 3.1297659873962402\n", + "xxmaj poor standards of communication and documentation xxeos\n", + "\n", + "droch - chaighdeáin cumarsáide agus doiciméadú\n", + "\n", + "xxmaj - caighdeáin na agus doiciméid cumarsáide\n", + "\n", + "\n", + "LOSS: 3.117694139480591\n", + "xxmaj those who look to achieve the physique of their dreams can look no further than these xxunk , time - tested brands . xxeos\n", + "\n", + "xxmaj is féidir leo siúd a thugann aire a bhaint amach an physique a n - aisling breathnú níos faide ná seo xxunk , ama de réir tástála acmhainne brandaí .\n", + "\n", + "xxmaj iad féidir leo siúd a breathnú chun a bhaint amach ar dá a bhaint - aisling a a mó ná na xxunk , am - na na - . ama xxeos\n", + "\n", + "\n", + "LOSS: 3.1128244400024414\n", + "xxmaj this progression is part of the developmental process for the young sailor . xxeos\n", + "\n", + "xxmaj is cuid de phróiseas forbartha an mhairnéalaigh óig an dul chun cinn seo .\n", + "\n", + "xxmaj is dul den phróiseas forbartha an xxunk do do ea chun cinn seo . xxeos\n", + "\n", + "\n", + "LOSS: 3.0744216442108154\n", + "xxmaj are another generation of xxmaj xxunk children to miss out on the benefits of an all - irish education or will the xxmaj department of xxmaj education and xxmaj skills do the right thing and support xxmaj gaelscoil xxmaj ráth xxup xxunk by giving it official recognition ? ” xxeos\n", + "\n", + "“ an bhfuil glúin eile de pháistí xxmaj ráth xxup tó chun an deis sin a chailliúint arís , nó bhfuil an xxmaj roinn xxmaj oideachais agus xxmaj scileanna chun an rud cheart a dhéanamh agus tacú le xxmaj gaelscoil xxmaj ráth xxup tó trí aitheantas a thabhairt di ?\n", + "\n", + "xxmaj tá bhfuil glúin eile de leanaí xxmaj xxunk xxmaj xxunk chun aitheantas t a a chailleann as ar ar go an xxmaj roinn xxmaj oideachais agus xxmaj scileanna ag an ceart ceart agus chur agus tacaíocht le xxmaj creidiúnaithe xxmaj ráth xxup xxunk trí aithint oifigiúil thabhairt dó oifigiúil ”\n", + "\n", + "\n", + "LOSS: 3.034301996231079\n", + "xxmaj the marathon cycle will take place on 28 xxmaj april , so there 's plenty of time to train for the event . xxeos\n", + "\n", + "xxmaj beidh an rothaíocht ar siúl ar 28 xxmaj aibreán ; mar sin tá xxunk ama agat le haghaidh traenála chuige .\n", + "\n", + "xxmaj beidh an timthriall xxunk siúl an an xxmaj aibreán , agus sin , neart am go chun haghaidh oiliúint ar . xxeos\n", + "\n", + "\n", + "LOSS: 3.0320944786071777\n", + "xxmaj of the farmers needed more days to erect large structures , such as temple pyramids . xxeos\n", + "\n", + "xxmaj as na feirmeoirí ag teastáil níos mó agus níos mó lá gnó le struchtúir mhóra , ar nós pirimidí teampall in airde .\n", + "\n", + "xxmaj as na feirmeoirí a teastáil níos mó lá struchtúir mó struchtúir a a struchtúir móra a mar nós na teampall . áirithe . xxeos\n", + "\n", + "\n", + "LOSS: 2.9994633197784424\n", + "xxmaj undergraduate , xxmaj master 's or phd students xxeos\n", + "\n", + "xxmaj mic léinn bunchéime , xxmaj máistreachta nó phd\n", + "\n", + "xxmaj mic léinn xxmaj , xxmaj máistir nó mic ,\n", + "\n", + "\n", + "LOSS: 2.971003532409668\n", + "xxmaj located in the heart of xxmaj europe , several other xxmaj european capitals are only a couple of hours away ( amsterdam , xxmaj paris , xxmaj london ) . xxeos\n", + "\n", + "xxmaj is i gcroílár na heorpa atá siad suite , agus níl roinnt príomhchathracha eile ( amstardam , xxmaj páras , xxmaj londain ) ach cúpla uair an chloig taistil uathu .\n", + "\n", + "xxmaj suite lánúin gcroílár na heorpa , roinnt , ach agus tá cúpla xxmaj xxmaj xxmaj xxmaj ) xxmaj amstardam , xxmaj londain ) . cúpla uair an chloig de ar . xxeos\n", + "\n", + "\n", + "LOSS: 2.9318175315856934\n", + "a key work - stream in this unit relates to assessing the xxmaj irish economic implications of xxmaj brexit . xxeos\n", + "\n", + "xxmaj ceann de xxunk oibre an aonaid seo ná na himpleachtaí eacnamaíocha a bheidh ag xxmaj imeacht na xxmaj breataine as an xxmaj aontas xxmaj eorpach do éirinn a mheas .\n", + "\n", + "xxmaj baineann de na oibre - t seo , baineann xxunk eacnamaíochta na bhaineann ag xxmaj xxunk xxmaj héireann gaeilge - xxmaj xxmaj aontas xxmaj eorpach a bhaint a mheasúnú . xxeos\n", + "\n", + "\n", + "LOSS: 2.9126083850860596\n", + "xxmaj home page » xxmaj games » xxmaj mutually xxmaj assured xxmaj destruction ( mad ) xxeos\n", + "\n", + "xxmaj leathanach xxmaj baile » xxmaj cluichí » xxmaj scrios roicéad\n", + "\n", + "xxmaj leathanach xxmaj baile » xxmaj cluichí » xxmaj cinnte xxmaj xxmaj\n", + "\n", + "\n", + "LOSS: 2.9069716930389404\n", + "xxmaj automatic recording of sickness and absence . xxeos\n", + "\n", + "xxmaj breoiteacht agus as láthair taifeadadh go huathoibríoch .\n", + "\n", + "xxmaj taifeadadh xxunk taifeadadh láthair a uathoibríoch huathoibríoch . xxeos\n", + "\n", + "\n", + "LOSS: 2.895787239074707\n", + "xxmaj it shall be embossed with the stamp of the military authority . xxeos\n", + "\n", + "xxmaj beidh stampa an údaráis mhíleata múnlaithe air .\n", + "\n", + "xxmaj beidh sé ar údaráis mhíleata uirthi . . xxeos\n", + "\n", + "\n" + ] + } + ], + "source": [ + "n_losses = 50\n", + "top_losses = loss_sorted_idxs[:n_losses]\n", + "\n", + "for i in top_losses:\n", + " print(f'LOSS: {float(loss_ls[i])}')\n", + " print(en_ls[i])\n", + " print()\n", + " print(ga_trg_ls[i])\n", + " print()\n", + " print(ga_pred_ls[i])\n", + " print()\n", + " print()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Show smallest `n` losses" + ] + }, + { + "cell_type": "code", + "execution_count": 167, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LOSS: 0.012944857589900494\n", + "( 2 ) xxmaj this xxmaj act shall come into operation on the 1st day of xxmaj january , 1937 . xxeos\n", + "\n", + "( 2 ) xxmaj tiocfaidh an tacht so i ngníomh an 1adh lá d'eanar , 1937 .\n", + "\n", + "( 2 ) xxmaj tiocfaidh an tacht so i ngníomh an 1adh lá d'eanar , 1937 . xxeos\n", + "\n", + "\n", + "LOSS: 0.012784866616129875\n", + "( f ) by substituting the following for paragraph 2 of xxmaj schedule 3 : xxeos\n", + "\n", + "( f ) tríd an méid seo a leanas a chur in ionad mhír 2 de xxmaj sceideal 3 :\n", + "\n", + "( f ) tríd an méid seo a leanas a chur in ionad mhír 2 de xxmaj sceideal 3 : xxeos\n", + "\n", + "\n", + "LOSS: 0.012429873459041119\n", + "xxmaj amendment of section 96 of xxmaj act of 2001 . xxeos\n", + "\n", + "xxmaj leasú ar alt 96 d’acht 2001 .\n", + "\n", + "xxmaj leasú ar alt 96 d’acht 2001 . xxeos\n", + "\n", + "\n", + "LOSS: 0.012094180099666119\n", + "11 . — this xxmaj act may be cited as the xxmaj transport ( miscellaneous xxmaj provisions ) xxmaj act , 1979 . xxeos\n", + "\n", + "11 . — féadfar an tacht xxmaj iompair ( forálacha xxmaj ilghnéitheacha ) , 1979 , a ghairm den xxmaj acht seo .\n", + "\n", + "11 . — féadfar an tacht xxmaj iompair ( forálacha xxmaj ilghnéitheacha ) , 1979 , a ghairm den xxmaj acht seo . xxeos\n", + "\n", + "\n", + "LOSS: 0.01209115982055664\n", + "93 . xxmaj amendment of section 1 ( interpretation ) of xxmaj principal xxmaj act . xxeos\n", + "\n", + "93 . xxmaj leasú ar alt 1 ( léiriú ) den phríomh - acht .\n", + "\n", + "93 . xxmaj leasú ar alt 1 ( léiriú ) den phríomh - acht . xxeos\n", + "\n", + "\n", + "LOSS: 0.011882972903549671\n", + "[ ga ] ( xxrep 3 i ) by inserting the following after paragraph 2 : xxeos\n", + "\n", + "( xxrep 3 i ) tríd an méid seo a leanas a chur isteach i ndiaidh mhír 2 :\n", + "\n", + "( xxrep 3 i ) tríd an méid seo a leanas a chur isteach i ndiaidh mhír 2 : xxeos\n", + "\n", + "\n", + "LOSS: 0.011682409793138504\n", + "xxmaj number 32 / 2009 : xxmaj criminal xxmaj justice ( amendment ) xxmaj act 2009 xxmaj home xxeos\n", + "\n", + "xxmaj uimhir 32 / 2009 : xxmaj an tacht um xxmaj cheartas xxmaj coiriúil ( leasú ) 2009\n", + "\n", + "xxmaj uimhir 32 / 2009 : xxmaj an tacht um xxmaj cheartas xxmaj coiriúil ( leasú ) 2009 xxeos\n", + "\n", + "\n", + "LOSS: 0.011207898147404194\n", + "xxmaj amendment to section 20 of xxmaj act of 2003 . xxeos\n", + "\n", + "xxmaj leasú ar alt 20 d’acht 2003 .\n", + "\n", + "xxmaj leasú ar alt 20 d’acht 2003 . xxeos\n", + "\n", + "\n", + "LOSS: 0.01114108320325613\n", + "xxmaj central xxmaj bank xxmaj act , 1971 . xxeos\n", + "\n", + "xxmaj acht an xxmaj bhainc xxmaj ceannais , 1971 .\n", + "\n", + "xxmaj acht an xxmaj bhainc xxmaj ceannais , 1971 . xxeos\n", + "\n", + "\n", + "LOSS: 0.01099395751953125\n", + "“ the xxmaj act of 1995 ” means the xxmaj industrial xxmaj development xxmaj act , 1995 ; xxeos\n", + "\n", + "ciallaíonn “ acht 1995 ” an tacht um xxmaj fhorbairt xxmaj tionscail , 1995 ;\n", + "\n", + "ciallaíonn “ acht 1995 ” an tacht um xxmaj fhorbairt xxmaj tionscail , 1995 ; xxeos\n", + "\n", + "\n", + "LOSS: 0.010816644877195358\n", + "45 . — ( 1 ) xxmaj the xxmaj principal xxmaj act is amended by inserting the following section after section 611 : xxeos\n", + "\n", + "45 . — ( 1 ) xxmaj leasaítear an príomh - acht tríd an alt seo a leanas a chur isteach i ndiaidh alt 611 :\n", + "\n", + "45 . — ( 1 ) xxmaj leasaítear an príomh - acht tríd an alt seo a leanas a chur isteach i ndiaidh alt 611 : xxeos\n", + "\n", + "\n", + "LOSS: 0.010740697383880615\n", + "( xxrep 3 i ) which is not a scheduled ( part xxup i ) pension , and xxeos\n", + "\n", + "( xxrep 3 i ) nach pinsean sceidealta ( cuid xxup i ) , agus\n", + "\n", + "( xxrep 3 i ) nach pinsean sceidealta ( cuid xxup i ) , agus xxeos\n", + "\n", + "\n", + "LOSS: 0.010490857996046543\n", + "( 2 ) xxmaj section 11 of the xxmaj act of 1997 is hereby repealed . xxeos\n", + "\n", + "( 2 ) xxmaj aisghairtear leis seo alt 11 d'acht 1997 .\n", + "\n", + "( 2 ) xxmaj aisghairtear leis seo alt 11 d'acht 1997 . xxeos\n", + "\n", + "\n", + "LOSS: 0.010299509391188622\n", + "22 . — xxmaj the xxmaj second xxmaj schedule to the xxmaj courts and xxmaj court xxmaj officers xxmaj act 1995 is amended by the addition of the following paragraph : xxeos\n", + "\n", + "22 . — xxmaj leasaítear an xxmaj dara xxmaj sceideal a ghabhann le hacht na gcúirteanna agus na noifigeach xxmaj cúirte 1995 tríd an mír seo a leanas a chur leis :\n", + "\n", + "22 . — xxmaj leasaítear an xxmaj dara xxmaj sceideal a ghabhann le hacht na gcúirteanna agus na noifigeach xxmaj cúirte 1995 tríd an mír seo a leanas a chur leis : xxeos\n", + "\n", + "\n", + "LOSS: 0.010137557983398438\n", + "xxmaj sex ( 3 ) xxmaj general xxmaj health ( 7 ) xxmaj field of xxmaj study ( 45 ) xxeos\n", + "\n", + "xxmaj inscne ( 3 ) xxmaj sláinte xxmaj ginearálta ( 7 ) xxmaj réimse xxmaj staidéir ( 45 )\n", + "\n", + "xxmaj inscne ( 3 ) xxmaj sláinte xxmaj ginearálta ( 7 ) xxmaj réimse xxmaj staidéir ( 45 ) xxeos\n", + "\n", + "\n", + "LOSS: 0.010010609403252602\n", + "( b ) by the insertion of the following subsection after subsection ( 1 ) of section 5 : xxeos\n", + "\n", + "( b ) tríd an bhfo - alt seo a leanas a chur isteach i ndiaidh fho - alt ( 1 ) d'alt 5 :\n", + "\n", + "( b ) tríd an bhfo - alt seo a leanas a chur isteach i ndiaidh fho - alt ( 1 ) d'alt 5 : xxeos\n", + "\n", + "\n", + "LOSS: 0.009908217005431652\n", + "( g ) in subsection ( 9 ) , by substituting for paragraph ( a ) the following : xxeos\n", + "\n", + "( g ) i bhfo - alt ( 9 ) , tríd an méid seo a leanas a chur in ionad mhír ( a ) :\n", + "\n", + "( g ) i bhfo - alt ( 9 ) , tríd an méid seo a leanas a chur in ionad mhír ( a ) : xxeos\n", + "\n", + "\n", + "LOSS: 0.009814311750233173\n", + "( a ) in paragraph 1 of xxmaj part xxup i , “ £ 158 10s . ” shall be substituted for “ £ 132 ” ( inserted by section 16 of the xxmaj increase xxmaj act of 1961 ) , xxeos\n", + "\n", + "( a ) i mír 1 de xxmaj chuid xxup i , cuirfear “ £ 158 10s . ” in ionad “ £ 132 ” ( a cuireadh isteach le halt 16 d'acht xxmaj mhéadú 1961 ) ,\n", + "\n", + "( a ) i mír 1 de xxmaj chuid xxup i , cuirfear “ £ 158 10s . ” in ionad “ £ 132 ” ( a cuireadh isteach le halt 16 d'acht xxmaj mhéadú 1961 ) , xxeos\n", + "\n", + "\n", + "LOSS: 0.00944268237799406\n", + "48 . — xxmaj the xxmaj taxes xxmaj consolidation xxmaj act 1997 is amended by the insertion of the following section after section xxunk : xxeos\n", + "\n", + "48 . — xxmaj leasaítear an tacht xxmaj comhdhlúite xxmaj cánacha 1997 tríd an alt seo a leanas a chur isteach i ndiaidh alt xxunk :\n", + "\n", + "48 . — xxmaj leasaítear an tacht xxmaj comhdhlúite xxmaj cánacha 1997 tríd an alt seo a leanas a chur isteach i ndiaidh alt xxunk : xxeos\n", + "\n", + "\n", + "LOSS: 0.009387349709868431\n", + "( ii ) on conviction on indictment , to a fine not exceeding £ 100 , xxrep 3 0 or to imprisonment for a term not exceeding five years , or both . xxeos\n", + "\n", + "( ii ) ar é a chiontú ar díotáil , fíneáil nach mó ná £ 100 , xxrep 3 0 nó príosúnacht ar feadh téarma nach faide ná cúig bliana , nó iad araon , a chur air .\n", + "\n", + "( ii ) ar é a chiontú ar díotáil , fíneáil nach mó ná £ 100 , xxrep 3 0 nó príosúnacht ar feadh téarma nach faide ná cúig bliana , nó iad araon , a chur air . xxeos\n", + "\n", + "\n", + "LOSS: 0.009340242482721806\n", + "( xxrep 3 i ) by inserting the following after paragraph ( c ) : xxeos\n", + "\n", + "( xxrep 3 i ) tríd an méid seo a leanas a chur isteach i ndiaidh mhír ( c ) :\n", + "\n", + "( xxrep 3 i ) tríd an méid seo a leanas a chur isteach i ndiaidh mhír ( c ) : xxeos\n", + "\n", + "\n", + "LOSS: 0.009309934452176094\n", + "( e ) the substitution of the following subsection for subsection ( 12 ) : xxeos\n", + "\n", + "( e ) tríd an bhfo - alt seo a leanas a chur in ionad fho - alt ( 12 ) :\n", + "\n", + "( e ) tríd an bhfo - alt seo a leanas a chur in ionad fho - alt ( 12 ) : xxeos\n", + "\n", + "\n", + "LOSS: 0.009225739166140556\n", + "( a ) in subsection ( 1 ) , by substituting for paragraph ( a ) the following : xxeos\n", + "\n", + "( a ) i bhfo - alt ( 1 ) , tríd an méid seo a leanas a chur in ionad mhír ( a ) :\n", + "\n", + "( a ) i bhfo - alt ( 1 ) , tríd an méid seo a leanas a chur in ionad mhír ( a ) : xxeos\n", + "\n", + "\n", + "LOSS: 0.00919419713318348\n", + "1 . — this xxmaj act may be cited as the xxmaj petroleum and xxmaj other xxmaj minerals xxmaj development xxmaj act , 1960 . xxeos\n", + "\n", + "1 . — féadfar an tacht um xxmaj fhorbairt xxmaj pheitriliaim agus xxmaj mianraí xxmaj eile , 1960 , a ghairm den xxmaj acht seo .\n", + "\n", + "1 . — féadfar an tacht um xxmaj fhorbairt xxmaj pheitriliaim agus xxmaj mianraí xxmaj eile , 1960 , a ghairm den xxmaj acht seo . xxeos\n", + "\n", + "\n", + "LOSS: 0.00910924281924963\n", + "“ contractor ” has the meaning assigned to it by section 5 ; xxeos\n", + "\n", + "tá le “ conraitheoir ” an bhrí a shanntar dó le halt 5 ;\n", + "\n", + "tá le “ conraitheoir ” an bhrí a shanntar dó le halt 5 ; xxeos\n", + "\n", + "\n", + "LOSS: 0.008987490087747574\n", + "xxmaj number 30 / 2007 : xxup part 1 xxmaj preliminary and xxmaj general xxmaj home xxeos\n", + "\n", + "xxmaj uimhir 30 / 2007 : xxup cuid 1 xxmaj réamhráiteach agus xxmaj ginearálta\n", + "\n", + "xxmaj uimhir 30 / 2007 : xxup cuid 1 xxmaj réamhráiteach agus xxmaj ginearálta xxeos\n", + "\n", + "\n", + "LOSS: 0.008874460123479366\n", + "“ the xxmaj act of 1952 ” means the xxmaj housing ( amendment ) xxmaj act , 1952 ( no . 16 of 1952 ) ; xxeos\n", + "\n", + "ciallaíonn “ acht 1952 ” xxmaj acht na dtithe ( leasú ) , 1952 ( uimh. 16 de 1952 ) ;\n", + "\n", + "ciallaíonn “ acht 1952 ” xxmaj acht na dtithe ( leasú ) , 1952 ( uimh. 16 de 1952 ) ; xxeos\n", + "\n", + "\n", + "LOSS: 0.008825826458632946\n", + "( 2 ) xxmaj this section shall come into operation on the 6th day of xxmaj april , 1983 . xxeos\n", + "\n", + "( 2 ) xxmaj tiocfaidh an t - alt seo i ngníomh an 6ú lá d'aibreán , 1983 .\n", + "\n", + "( 2 ) xxmaj tiocfaidh an t - alt seo i ngníomh an 6ú lá d'aibreán , 1983 . xxeos\n", + "\n", + "\n", + "LOSS: 0.008588433265686035\n", + "66 . — ( 1 ) xxmaj section 766 of the xxmaj principal xxmaj act is amended — xxeos\n", + "\n", + "66 . — ( 1 ) xxmaj leasaítear alt 766 den phríomh - acht —\n", + "\n", + "66 . — ( 1 ) xxmaj leasaítear alt 766 den phríomh - acht — xxeos\n", + "\n", + "\n", + "LOSS: 0.008027076721191406\n", + "“ the xxmaj act of 1976 ” means the xxmaj finance xxmaj act , 1976 ; xxeos\n", + "\n", + "ciallaíonn “ acht 1976 ” an tacht xxmaj airgeadais , 1976 ;\n", + "\n", + "ciallaíonn “ acht 1976 ” an tacht xxmaj airgeadais , 1976 ; xxeos\n", + "\n", + "\n", + "LOSS: 0.007852774113416672\n", + "xxmaj type of xxmaj household ( 8) xxmaj religion ( 11 ) censusyear xxeos\n", + "\n", + "xxmaj cineál xxmaj teaghlaigh ( 8) xxmaj creideamh ( 11 ) bliaindaonáirimh\n", + "\n", + "xxmaj cineál xxmaj teaghlaigh ( 8) xxmaj creideamh ( 11 ) bliaindaonáirimh xxeos\n", + "\n", + "\n", + "LOSS: 0.007078517694026232\n", + "“ ( xxrep 3 i ) in the case of a person — xxeos\n", + "\n", + "“ ( xxrep 3 i ) i gcás duine —\n", + "\n", + "“ ( xxrep 3 i ) i gcás duine — xxeos\n", + "\n", + "\n", + "LOSS: 0.007061743643134832\n", + "28 . — ( 1 ) xxmaj section 224 of the xxmaj principal xxmaj act is hereby amended by the substitution for subsections ( 1 ) and ( 2 ) of the following subsections : xxeos\n", + "\n", + "28 . — ( 1 ) xxmaj leasaítear leis seo alt 224 den phríomh - acht trí na fo - ailt seo a leanas a chur in ionad fho - ailt ( 1 ) agus ( 2 ) :\n", + "\n", + "28 . — ( 1 ) xxmaj leasaítear leis seo alt 224 den phríomh - acht trí na fo - ailt seo a leanas a chur in ionad fho - ailt ( 1 ) agus ( 2 ) : xxeos\n", + "\n", + "\n", + "LOSS: 0.007009965367615223\n", + "xxmaj the xxmaj finance ( customs xxmaj duties ) ( no . 4 ) xxmaj act , 1932 ( no . 34 of 1932 ) , section 3 . xxeos\n", + "\n", + "xxmaj an tacht xxmaj airgid ( diúitéthe xxmaj custum ) ( uimh. 4 ) , 1932 ( uimh. 34 de 1932 ) , alt 3 .\n", + "\n", + "xxmaj an tacht xxmaj airgid ( diúitéthe xxmaj custum ) ( uimh. 4 ) , 1932 ( uimh. 34 de 1932 ) , alt 3 . xxeos\n", + "\n", + "\n", + "LOSS: 0.006748199462890625\n", + "( xxrep 3 i ) in subsection ( 5 ) — xxeos\n", + "\n", + "( xxrep 3 i ) i bhfo - alt ( 5 ) —\n", + "\n", + "( xxrep 3 i ) i bhfo - alt ( 5 ) — xxeos\n", + "\n", + "\n", + "LOSS: 0.006730107590556145\n", + "2 . — this xxmaj act may be cited as the xxmaj restrictive xxmaj trade xxmaj practices ( confirmation of xxmaj order ) ( no . 3 ) xxmaj act , 1956 . xxeos\n", + "\n", + "2 . — féadfar an tacht um xxmaj chleachtais xxmaj srianta xxmaj trádála ( ordú a xxmaj dhaingniú ) ( uimh. 3 ) , 1956 , a ghairm den xxmaj acht seo .\n", + "\n", + "2 . — féadfar an tacht um xxmaj chleachtais xxmaj srianta xxmaj trádála ( ordú a xxmaj dhaingniú ) ( uimh. 3 ) , 1956 , a ghairm den xxmaj acht seo . xxeos\n", + "\n", + "\n", + "LOSS: 0.006541644688695669\n", + "xxmaj nature of xxmaj occupancy ( 8) xxmaj towns by xxmaj size ( 205 ) censusyear xxeos\n", + "\n", + "xxmaj cineál xxmaj seilbhe ( 8) xxmaj bailte de réir xxmaj méide ( 205 ) bliaindaonáirimh\n", + "\n", + "xxmaj cineál xxmaj seilbhe ( 8) xxmaj bailte de réir xxmaj méide ( 205 ) bliaindaonáirimh xxeos\n", + "\n", + "\n", + "LOSS: 0.006427327636629343\n", + "( a ) by the substitution of “ £ 150 ” for “ twenty pounds ” in paragraph ( a ) , and xxeos\n", + "\n", + "( a ) trí “ £ 150 ” a chur in ionad “ fiche punt ” i mír ( a ) , agus\n", + "\n", + "( a ) trí “ £ 150 ” a chur in ionad “ fiche punt ” i mír ( a ) , agus xxeos\n", + "\n", + "\n", + "LOSS: 0.005883284844458103\n", + "35 . — xxmaj section 90 of the xxmaj corporation xxmaj tax xxmaj act , 1976 , is hereby amended by the addition to subsection ( 4 ) ( as amended by the xxmaj act of 1978 ) of the following proviso : xxeos\n", + "\n", + "35 . — leasaítear leis seo alt 90 den xxmaj acht xxmaj cánach xxmaj corparáide , 1976 , tríd an gcoinníoll seo a leanas a chur le fo - alt ( 4 ) ( arna leasú le hacht 1978 ) :\n", + "\n", + "35 . — leasaítear leis seo alt 90 den xxmaj acht xxmaj cánach xxmaj corparáide , 1976 , tríd an gcoinníoll seo a leanas a chur le fo - alt ( 4 ) ( arna leasú le hacht 1978 ) : xxeos\n", + "\n", + "\n", + "LOSS: 0.005392891820520163\n", + "81 . — section 12 of the xxmaj principal xxmaj act is hereby amended — xxeos\n", + "\n", + "81 . — leasaítear leis seo alt 12 den phríomh - acht —\n", + "\n", + "81 . — leasaítear leis seo alt 12 den phríomh - acht — xxeos\n", + "\n", + "\n", + "LOSS: 0.005264571402221918\n", + "2 . — ( 1 ) xxmaj this xxmaj act may be cited as the xxmaj rent xxmaj restrictions ( temporary xxmaj provisions ) ( continuance ) xxmaj act , 1981 . xxeos\n", + "\n", + "2 . — ( 1 ) xxmaj féadfar an tacht xxmaj srianta xxmaj cíosa ( forálacha xxmaj sealadacha ) ( buanú ) , 1981 , a ghairm den xxmaj acht seo .\n", + "\n", + "2 . — ( 1 ) xxmaj féadfar an tacht xxmaj srianta xxmaj cíosa ( forálacha xxmaj sealadacha ) ( buanú ) , 1981 , a ghairm den xxmaj acht seo . xxeos\n", + "\n", + "\n", + "LOSS: 0.004902585409581661\n", + "xxmaj sex ( 3 ) xxmaj disability xxmaj type ( 14 ) censusyear xxeos\n", + "\n", + "xxmaj inscne ( 3 ) xxmaj cineál an xxmaj mhàchumais ( 14 ) bliaindaonáirimh\n", + "\n", + "xxmaj inscne ( 3 ) xxmaj cineál an xxmaj mhàchumais ( 14 ) bliaindaonáirimh xxeos\n", + "\n", + "\n", + "LOSS: 0.004811659920960665\n", + "4 . — the xxmaj act of 1976 is hereby amended by the substitution of the following section for section 29 : xxeos\n", + "\n", + "4 . — leasaítear leis seo xxmaj acht 1976 tríd an alt seo a leanas a chur in ionad alt 29 :\n", + "\n", + "4 . — leasaítear leis seo xxmaj acht 1976 tríd an alt seo a leanas a chur in ionad alt 29 : xxeos\n", + "\n", + "\n", + "LOSS: 0.004624366760253906\n", + "7 . — ( 1 ) xxmaj this xxmaj act may be cited as the xxmaj postal and xxmaj telecommunications xxmaj services ( amendment ) xxmaj act , 1984 . xxeos\n", + "\n", + "7 . — ( 1 ) xxmaj féadfar an tacht xxmaj seirbhísí xxmaj poist agus xxmaj teileachumarsáide ( leasú ) , 1984 , a ghairm den xxmaj acht seo .\n", + "\n", + "7 . — ( 1 ) xxmaj féadfar an tacht xxmaj seirbhísí xxmaj poist agus xxmaj teileachumarsáide ( leasú ) , 1984 , a ghairm den xxmaj acht seo . xxeos\n", + "\n", + "\n", + "LOSS: 0.00429901946336031\n", + "xxmaj sex ( 3 ) xxmaj aggregate xxmaj town or xxmaj rural xxmaj area ( 3 ) xxmaj province xxmaj county or xxmaj city ( 44 ) xxeos\n", + "\n", + "xxmaj inscne ( 3 ) xxmaj ceantar xxmaj iomlán xxmaj bhaile nó xxmaj ceantar xxmaj iomlán xxmaj tuaithe ( 3 ) xxmaj cúige , xxmaj contae nó xxmaj cathair ( 44 )\n", + "\n", + "xxmaj inscne ( 3 ) xxmaj ceantar xxmaj iomlán xxmaj bhaile nó xxmaj ceantar xxmaj iomlán xxmaj tuaithe ( 3 ) xxmaj cúige , xxmaj contae nó xxmaj cathair ( 44 ) xxeos\n", + "\n", + "\n", + "LOSS: 0.0040727341547608376\n", + "101 . — ( 1 ) xxmaj the xxmaj principal xxmaj act is amended — xxeos\n", + "\n", + "101 . — ( 1 ) xxmaj leasaítear an príomh - acht —\n", + "\n", + "101 . — ( 1 ) xxmaj leasaítear an príomh - acht — xxeos\n", + "\n", + "\n", + "LOSS: 0.0039478447288274765\n", + "56 . — xxmaj section 208 of the xxmaj principal xxmaj act is amended — xxeos\n", + "\n", + "56 . — xxmaj leasaítear alt 208 den phríomh - acht —\n", + "\n", + "56 . — xxmaj leasaítear alt 208 den phríomh - acht — xxeos\n", + "\n", + "\n", + "LOSS: 0.003833770751953125\n", + "xxmaj number 5 / 2005 : xxup part 5 xxmaj capital xxmaj acquisitions xxmaj tax xxmaj home xxeos\n", + "\n", + "xxmaj uimhir 5 / 2005 : xxup cuid 5 xxmaj cáin xxmaj fháltas xxmaj caipitiúil\n", + "\n", + "xxmaj uimhir 5 / 2005 : xxup cuid 5 xxmaj cáin xxmaj fháltas xxmaj caipitiúil xxeos\n", + "\n", + "\n", + "LOSS: 0.0036608653608709574\n", + "12 . — ( 1 ) xxmaj this xxmaj act may be cited as the xxmaj adoption xxmaj act , 1964 . xxeos\n", + "\n", + "12 . — ( 1 ) xxmaj féadfar an tacht xxmaj uchtála , 1964 , a ghairm den xxmaj acht seo .\n", + "\n", + "12 . — ( 1 ) xxmaj féadfar an tacht xxmaj uchtála , 1964 , a ghairm den xxmaj acht seo . xxeos\n", + "\n", + "\n", + "LOSS: 0.0034489380195736885\n", + "xxmaj number 2 / 1 xxrep 3 9 : xxup part 5 xxmaj residential xxmaj property xxmaj tax xxmaj home xxeos\n", + "\n", + "xxmaj uimhir 2 / 1 xxrep 3 9 : xxup cuid 5 xxmaj cáin xxmaj mhaoine xxmaj cónaithe\n", + "\n", + "xxmaj uimhir 2 / 1 xxrep 3 9 : xxup cuid 5 xxmaj cáin xxmaj mhaoine xxmaj cónaithe xxeos\n", + "\n", + "\n" + ] + } + ], + "source": [ + "n_losses = 50\n", + "top_losses = loss_sorted_idxs[-n_losses:]\n", + "\n", + "for i in top_losses:\n", + " print(f'LOSS: {float(loss_ls[i])}')\n", + " print(en_ls[i])\n", + " print()\n", + " print(ga_trg_ls[i])\n", + " print()\n", + " print(ga_pred_ls[i])\n", + " print()\n", + " print()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Manual results" + ] + }, + { + "cell_type": "code", + "execution_count": 65, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'xxbos dia dia duit , conas atá tú ? xxeos'" + ] + }, + "execution_count": 65, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generate(learn.model, \"hello, how are you?\", dls.vocab[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'xxbos xxmaj an féidir leat a insint dúinn i gcás go bhfuil an stáisiún bus le do thoil ? xxeos'" + ] + }, + "execution_count": 66, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generate(learn.model, \"Can you tell we where the bus station is please?\", dls.vocab[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'xxbos xxmaj inné xxunk sé , ach amárach beidh amárach a bheith an - xxunk xxeos'" + ] + }, + "execution_count": 67, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generate(learn.model, \"Yesterday it rained, but tomorrow will be very sunny\", dls.vocab[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'xxbos xxmaj bhí mé lá mór , xxmaj is é mo aistritheoir ag obair xxeos'" + ] + }, + "execution_count": 68, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generate(learn.model, \"I had a great day, my translator is working\", dls.vocab[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 166, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'xxbos xxmaj mar sin , tá sé seo scéal ar fad faoi conas mo shaol fuair smeach xxunk síos , mar sin mhaith liom a ghlacadh nóiméad díreach suí ceart go bhfuil , beidh mé go léir faoi conas a tháinig mé an xxunk úr xxeos'" + ] + }, + "execution_count": 166, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generate(learn.model, \"So this is a story all about how my life got flip turned \\\n", + "upside down, so I'd like to take a minute just sit right there, I'll you all about how I became the fresh prince\\\n", + "of belair\", dls.vocab[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'xxbos madra xxeos'" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generate(learn.model, \"dog\", dls.vocab[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'xxbos cat cat cat xxeos'" + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generate(learn.model, \"cat\", dls.vocab[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'xxbos crann crann xxeos'" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generate(learn.model, \"tree\", dls.vocab[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'xxbos foirgneamh tógála xxeos'" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generate(learn.model, \"building\", dls.vocab[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'xxbos xxmaj cathair cathair cathair xxeos'" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generate(learn.model, \"city\", dls.vocab[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'xxbos bean xxeos'" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generate(learn.model, \"woman\", dls.vocab[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'xxbos fear xxeos'" + ] + }, + "execution_count": 76, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generate(learn.model, \"man\", dls.vocab[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'xxbos seacláide xxeos'" + ] + }, + "execution_count": 77, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generate(learn.model, \"chocolate\", dls.vocab[1])" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'xxbos spásárthach spásárthach xxeos'" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generate(learn.model, \"spaceship\", dls.vocab[1])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# https://forums.fast.ai/t/fastai-v2-text/53529/334\n", + "from fastai2.text.all import *\n", + "\n", + "defaults.device = torch.device('cpu')\n", + "path = Path('.')\n", + "learner = load_learner(\"./export.pkl\")\n", + "\n", + "f = open(\"/tmp/test.txt\", \"r\")\n", + "test_file_contents = f.read()\n", + "\n", + "_, _, losses = learner.predict(test_file_contents)\n", + "cats = [learner.dls.categorize.decode(i) for i in range(len(losses))]\n", + "\n", + "predictions = sorted(\n", + " zip(cats, map(float, losses)),\n", + " key=lambda p: p[1],\n", + " reverse=True\n", + ")\n", + "print(predictions)\n", + "\n", + "# OR\n", + "\n", + "items = pd.read_csv(\"/tmp/test.txt\", sep = '\\t')\n", + "test_dl = learner.dls.test_dl(items.values)\n", + "\n", + "learner.get_preds(dl=test_dl, with_decoded=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "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.7.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}