diff --git a/notebooks/TP5_m2LiTL_learningWithNN_CORRECT_2425.ipynb b/notebooks/TP5_m2LiTL_learningWithNN_CORRECT_2425.ipynb new file mode 100644 index 0000000000000000000000000000000000000000..05bdee42d2398543d4e4f42336fd49f9f57e5d89 --- /dev/null +++ b/notebooks/TP5_m2LiTL_learningWithNN_CORRECT_2425.ipynb @@ -0,0 +1,3203 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + }, + "accelerator": "GPU" + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# TP 5 : machine learning using neural network for text data\n", + "\n", + "In this practical session, we are going to build simple neural models able to classify reviews as positive or negative. The dataset used comes from AlloCine.\n", + "The goals are to understand how to use pretrained embeddings, and to correctly tune a neural model.\n", + "\n", + "you need to load:\n", + "- Allocine: Train, dev and test sets\n", + "- Embeddings: cc.fr.300.10000.vec (10,000 first lines of the original file)\n", + "\n", + "## Part 1- Pre-trained word embeddings\n", + "Define a neural network that takes as input pre-trained word embeddings (here FastText embeddings). Words are represented by real-valued vectors from FastText. A review is represented by a vector that is the average or the sum of the word vectors.\n", + "\n", + "So instead of having an input vector of size 5000, we now have an input vector of size e.g. 300, that represents the ‘average’, combined meaning of all the words in the document taken together.\n", + "\n", + "## Part 2- Tuning report\n", + "Tune the model built on pre-trained word embeddings by testing several values for the different hyper-parameters, and by testing the addition on an hidden layer.\n", + "\n", + "Describe the performance obtained by reporting the scores for each setting on the development set, printing the loss function against the hyper-parameter values, and reporting the score of the best model on the test set.\n", + "\n", + "-------------------------------------" + ], + "metadata": { + "id": "jShhTl5Mftkw" + } + }, + { + "cell_type": "markdown", + "source": [ + "## Useful imports\n", + "\n", + "Here we also:\n", + "* Look at the availability of a GPU. Reminder: in Collab, you have to go to Edit/Notebook settings to set the use of a GPU\n", + "* Setting a seed, for reproducibility: https://pytorch.org/docs/stable/notes/randomness.html\n" + ], + "metadata": { + "id": "mT2uF3G6HXko" + } + }, + { + "cell_type": "code", + "source": [ + "!pip install -q torchtext==0.14.1 torchdata==0.5.1" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "KNlmj1qBZ_Kp", + "outputId": "ded38526-72ad-4262-eb55-68fb4348c62a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\u001b[?25l \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m0.0/2.0 MB\u001b[0m \u001b[31m?\u001b[0m eta \u001b[36m-:--:--\u001b[0m\r\u001b[2K \u001b[91m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[90m╺\u001b[0m\u001b[90m━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.0/2.0 MB\u001b[0m \u001b[31m29.7 MB/s\u001b[0m eta \u001b[36m0:00:01\u001b[0m\r\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.0/2.0 MB\u001b[0m \u001b[31m33.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m4.6/4.6 MB\u001b[0m \u001b[31m94.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m887.5/887.5 MB\u001b[0m \u001b[31m1.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m317.1/317.1 MB\u001b[0m \u001b[31m5.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.0/21.0 MB\u001b[0m \u001b[31m88.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m849.3/849.3 kB\u001b[0m \u001b[31m50.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m557.1/557.1 MB\u001b[0m \u001b[31m1.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n", + "\u001b[?25h\u001b[31mERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.\n", + "torchaudio 2.5.1+cu121 requires torch==2.5.1, but you have torch 1.13.1 which is incompatible.\n", + "torchvision 0.20.1+cu121 requires torch==2.5.1, but you have torch 1.13.1 which is incompatible.\u001b[0m\u001b[31m\n", + "\u001b[0m" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "import time\n", + "import pandas as pd\n", + "import numpy as np\n", + "# torch and torch modules to deal with text data\n", + "import torch\n", + "import torch.nn as nn\n", + "import torchtext\n", + "from torchtext.data import get_tokenizer\n", + "#from torchtext.data.utils import get_tokenizer\n", + "from torchtext.vocab import build_vocab_from_iterator\n", + "from torch.utils.data import DataLoader\n", + "# you can use scikit to print scores\n", + "from sklearn.metrics import classification_report\n", + "\n", + "# For reproducibility, set a seed\n", + "torch.manual_seed(0)\n", + "\n", + "# Check for GPU\n", + "device = \"cuda\" if torch.cuda.is_available() else \"cpu\"\n", + "print(device)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "nB_k89m8xAOt", + "outputId": "14e0cbe8-711d-4f99-dabb-467723031fc8" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "cuda\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "Paths to data:" + ], + "metadata": { + "id": "taGY9N-PJvWS" + } + }, + { + "cell_type": "code", + "source": [ + "# Data files\n", + "train_file = \"allocine_train.tsv\"\n", + "dev_file = \"allocine_dev.tsv\"\n", + "test_file = \"allocine_test.tsv\"\n", + "# embeddings\n", + "embed_file='cc.fr.300.10000.vec'" + ], + "metadata": { + "id": "kGty4hWCJurB" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## 1- Read and load the data\n" + ], + "metadata": { + "id": "Wv6H41YoFycw" + } + }, + { + "cell_type": "markdown", + "source": [ + "### 1.1- The class Dataset (code given)" + ], + "metadata": { + "id": "eXiJRrw_zsFD" + } + }, + { + "cell_type": "markdown", + "source": [ + "Reminder from TP1, the simplest solution is to use the DataLoader from PyTorch:\n", + "\n", + "* the doc here https://pytorch.org/docs/stable/data.html and here https://pytorch.org/tutorials/beginner/basics/data_tutorial.html\n", + "* an example of use, with numpy array: https://www.kaggle.com/arunmohan003/sentiment-analysis-using-lstm-pytorch\n", + "\n", + "Here, we are going to define our own Dataset class instead of using numpy arrays. It allows for a finer definition of the behavior of our dataset, and it's easy to reuse.\n", + "\n", + "* Dataset is an abstract class in PyTorch, meaning it can't be used as is, it has to be redefined using inheritance https://pytorch.org/docs/stable/data.html#torch.utils.data.Dataset\n", + "* you must at least overwrite the __getitem__() method, supporting fetching a data sample for a given key.\n", + "* in practice, you also overwrite the __init__() to explain how to initialize the dataset, and the __len__ to return the right size for the dataset\n", + "\n", + "You can also find many datasets for text ready to load in pytorch on: https://pytorch.org/text/stable/datasets.html" + ], + "metadata": { + "id": "HaDS9RXBRWdQ" + } + }, + { + "cell_type": "markdown", + "source": [ + "#### Read and load data (code given)\n", + "\n", + "Read the code below that allows to load the data, note that:\n", + "- we tokenize the text (here a simple tokenization based on spaces)\n", + "- we build the vocabulary corresponding to the training data:\n", + " - the vocabulary corresponds to the set of unique tokens\n", + " - only tokens in the training data are known by the system\n", + " - the vocabulary here is a Torch specific object, more details in section 0.4 below\n", + "\n", + "▶▶ **Question:** why do we use only tokens in the training set to build the vocabulary? What do we do with the dev and test sets?" + ], + "metadata": { + "id": "pswfJ-YER4Qx" + } + }, + { + "cell_type": "code", + "source": [ + "# Here we create a custom Dataset class that inherits from the Dataset class in PyTorch\n", + "# A custom Dataset class must implement three functions: __init__, __len__, and __getitem__\n", + "\n", + "\n", + "class Dataset(torch.utils.data.Dataset):\n", + "\n", + " def __init__(self, tsv_file, vocab=None ):\n", + " \"\"\" (REQUIRED) Here we save the location of our input file,\n", + " load the data, i.e. retrieve the list of texts and associated labels,\n", + " build the vocabulary if none is given,\n", + " and define the pipelines used to prepare the data \"\"\"\n", + " self.tsv_file = tsv_file\n", + " self.data, self.label_list = self.load_data( )\n", + " # splits the string sentence by space, can t make the fr tokenzer work\n", + " self.tokenizer = get_tokenizer( None )\n", + " self.vocab = vocab\n", + " if not vocab:\n", + " self.build_vocab()\n", + " # pipelines for text and label\n", + " self.text_pipeline = lambda x: self.vocab(self.tokenizer(x)) #return a list of indices from a text\n", + " self.label_pipeline = lambda x: int(x) #simple mapping to self\n", + "\n", + " def load_data( self ):\n", + " \"\"\" Read a tsv file and return the list of texts and associated labels\"\"\"\n", + " data = pd.read_csv( self.tsv_file, header=0, delimiter=\"\\t\", quoting=3)\n", + " instances = []\n", + " label_list = []\n", + " for i in data.index:\n", + " label_list.append( data[\"sentiment\"][i] )\n", + " instances.append( data[\"review\"][i] )\n", + " return instances, label_list\n", + "\n", + " def build_vocab(self):\n", + " \"\"\" Build the vocabulary, i.e. retrieve the list of unique tokens\n", + " appearing in the corpus (= training set). Se also add a specific index\n", + " corresponding to unknown words. \"\"\"\n", + " self.vocab = build_vocab_from_iterator(self.yield_tokens(), specials=[\"<unk>\"])\n", + " self.vocab.set_default_index(self.vocab[\"<unk>\"])\n", + "\n", + " def yield_tokens(self):\n", + " \"\"\" Iterator on tokens \"\"\"\n", + " for text in self.data:\n", + " yield self.tokenizer(text)\n", + "\n", + " def __len__(self):\n", + " \"\"\" (REQUIRED) Return the len of the data,\n", + " i.e. the total number of instances \"\"\"\n", + " return len(self.data)\n", + "\n", + " def __getitem__(self, index):\n", + " \"\"\" (REQUIRED) Return a specific instance in a format that can be\n", + " processed by Pytorch, i.e. torch tensors \"\"\"\n", + " return (\n", + " tuple( [torch.tensor(self.text_pipeline( self.data[index] ), dtype=torch.int64),\n", + " torch.tensor( self.label_pipeline( self.label_list[index] ), dtype=torch.int64) ] )\n", + " )" + ], + "metadata": { + "id": "GdK1WAmcFYHS" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### 1.2- Generate data batches and iterator (code given)\n", + "\n", + "Then, we use *torch.utils.data.DataLoader* with a Dataset object as built by the code above. DataLoader has an argument to set the size of the batches, but since we have variable-size input sequences, we need to specify how to build the batches. This is done by redefining the function *collate_fn* used by *DataLoader*.\n", + "\n", + "```\n", + "dataloader = DataLoader(dataset, batch_size=8, shuffle=False, collate_fn=collate_fn)\n", + "```\n", + "\n", + "Below:\n", + "* the text entries in the original data batch input are packed into a list and concatenated as a single tensor.\n", + "* the offset is a tensor of delimiters to represent the beginning index of the individual sequence in the text tensor\n", + "* Label is a tensor saving the labels of individual text entries.\n", + "\n", + "The offsets are used to retrieve the individual sequences in each batch (the sequences are concatenated).\n" + ], + "metadata": { + "id": "bG3T9LQFTD73" + } + }, + { + "cell_type": "code", + "source": [ + "# This function explains how we process data to make batches of instances\n", + "# - The list of texts / reviews that is returned is similar to a list of list:\n", + "# each element is a batch, ie. a ensemble of BATCH_SIZE texts. But instead of\n", + "# creating sublists, PyTorch concatenates all the tensors corresponding to\n", + "# each text sequence into one tensor.\n", + "# - The list of labels is the list of list of labels for each batch\n", + "# - The offsets are used to save the position of each individual instance\n", + "# within the big tensor\n", + "def collate_fn(batch):\n", + " label_list, text_list, offsets = [], [], [0]\n", + " for ( _text, _label) in batch:\n", + " text_list.append( _text )\n", + " label_list.append( _label )\n", + " offsets.append(_text.size(0))\n", + " label = torch.tensor(label_list, dtype=torch.int64) #tensor of labels for a batch\n", + " offsets = torch.tensor(offsets[:-1]).cumsum(dim=0) #tensor of offset indices for a batch\n", + " text_list = torch.cat(text_list) # <--- here we concatenate the reviews in the batch\n", + " return text_list.to(device), label.to(device), offsets.to(device) #move the data to GPU" + ], + "metadata": { + "id": "oG0ZEYvYccBr" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### 1.3- ▶ Exercise: Load the data\n", + "\n", + "#### ▶ (a) Load the training data\n", + "* Use the code above to load the training and dev data with a batch size of 2:\n", + " * First create an instance of the Dataset class\n", + " * Then use this instance to create an instance of the DataLoader class with a batch size of 2, with NO shuffling of the samples, and using the *collate_fn* function defined above. Recall that the DataLoader class has the following parameters:\n", + " ```\n", + " torch.utils.data.DataLoader(dataset, batch_size=1, shuffle=None, collate_fn=None)\n", + " ```\n", + "\n", + "#### ▶ (b) Print first training instances\n", + "\n", + "* Print the first two elements in the Dataset object built on the train set, and the first element in the DataLoader object built on the train. Print also the associated labels. Does it seem coherent?\n", + "\n", + "#### ▶ (c) Shuffling the data\n", + "\n", + "Once you checked that is seems ok, reload the data but this time, shuffle the data during loading.\n", + "\n", + "#### ▶ (d) Load the dev data\n", + "\n", + "Now load the dev data, remembering that you need to give the training vocabulary." + ], + "metadata": { + "id": "U0ueXxdpZcqx" + } + }, + { + "cell_type": "markdown", + "source": [ + "------------------------------------\n", + "SOLUTION" + ], + "metadata": { + "id": "Yda4YXlFUKKn" + } + }, + { + "cell_type": "code", + "source": [ + "# Load the training and development data\n", + "train = Dataset( train_file )\n", + "dev = Dataset( dev_file, vocab=train.vocab )\n", + "\n", + "train_loader = DataLoader(train, batch_size=2, shuffle=False, collate_fn=collate_fn) #<-- use shuffle = True instead\n", + "dev_loader = DataLoader(dev, batch_size=2, shuffle=False, collate_fn=collate_fn)\n", + "\n", + "\n", + "print(train[0])\n", + "print(train[1])\n", + "for input, label, offset in train_loader:\n", + " print( input, label, input.size(), offset )\n", + " break" + ], + "metadata": { + "id": "sGAiiL2rY7hD", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "1e5d5ca0-a27b-4130-c2a7-791b8c58eb34" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "(tensor([ 2281, 2675, 374, 28, 13940, 15, 11282, 18, 3936, 203,\n", + " 1, 7998, 4, 307, 1114, 9134, 4495, 1, 92, 8752,\n", + " 24, 104, 28, 117, 53, 638, 8, 418, 23, 23816,\n", + " 904, 1378, 1, 126, 8, 1, 86, 108, 46, 4622,\n", + " 34, 2719, 91, 203, 49, 121, 2, 49, 1179, 113,\n", + " 111, 50, 136, 70, 3190, 19, 11708, 5, 12735, 91,\n", + " 7, 47, 431, 1498, 177, 4, 2738, 4, 550, 2,\n", + " 4, 46, 7858, 49, 1244, 5, 6791, 1220, 2, 6,\n", + " 376, 34, 345, 9, 593, 1158, 233, 2191, 31216, 33258,\n", + " 2822, 1486, 23, 219, 1, 3, 7, 2187, 112, 17,\n", + " 129, 37130, 1, 2845, 93, 95, 8111]), tensor(0))\n", + "(tensor([18487, 54, 7, 5, 8463, 159, 6042, 2, 12809, 12,\n", + " 30, 1385, 107, 14, 397, 8726, 1, 4654, 1, 6883,\n", + " 1, 12997, 43, 333, 22, 37, 149, 33, 532, 25,\n", + " 134, 4031, 31, 13, 283, 2584, 19, 4850, 12, 5501,\n", + " 270, 14, 6159, 5, 3, 121, 1, 3, 48, 2651]), tensor(1))\n", + "tensor([ 2281, 2675, 374, 28, 13940, 15, 11282, 18, 3936, 203,\n", + " 1, 7998, 4, 307, 1114, 9134, 4495, 1, 92, 8752,\n", + " 24, 104, 28, 117, 53, 638, 8, 418, 23, 23816,\n", + " 904, 1378, 1, 126, 8, 1, 86, 108, 46, 4622,\n", + " 34, 2719, 91, 203, 49, 121, 2, 49, 1179, 113,\n", + " 111, 50, 136, 70, 3190, 19, 11708, 5, 12735, 91,\n", + " 7, 47, 431, 1498, 177, 4, 2738, 4, 550, 2,\n", + " 4, 46, 7858, 49, 1244, 5, 6791, 1220, 2, 6,\n", + " 376, 34, 345, 9, 593, 1158, 233, 2191, 31216, 33258,\n", + " 2822, 1486, 23, 219, 1, 3, 7, 2187, 112, 17,\n", + " 129, 37130, 1, 2845, 93, 95, 8111, 18487, 54, 7,\n", + " 5, 8463, 159, 6042, 2, 12809, 12, 30, 1385, 107,\n", + " 14, 397, 8726, 1, 4654, 1, 6883, 1, 12997, 43,\n", + " 333, 22, 37, 149, 33, 532, 25, 134, 4031, 31,\n", + " 13, 283, 2584, 19, 4850, 12, 5501, 270, 14, 6159,\n", + " 5, 3, 121, 1, 3, 48, 2651], device='cuda:0') tensor([0, 1], device='cuda:0') torch.Size([157]) tensor([ 0, 107], device='cuda:0')\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### 1.4- ▶ Exercise: understand the Vocab object\n", + "\n", + "Here the **vocabulary** is a specific object in Pytorch: https://pytorch.org/text/stable/vocab.html\n", + "\n", + "For example, the vocabulary directly converts a list of tokens into integers, see below.\n", + "\n", + "Now try to:\n", + "* Retrieve the indices of a specific word, e.g. 'mauvais'\n", + "* Retrieve a word from its index, e.g. 368\n", + "* You can also directly convert a sentence to a list of indices, using the *text_pipeline* defined in the *Dataset* class, try with:\n", + " * 'Avant cette série, je ne connaissais que Urgence'\n", + " * 'Avant cette gibberish, je ne connaissais que Urgence'\n", + " * what happened when you use a word that is unknown?" + ], + "metadata": { + "id": "Tus9Kedas5dq" + } + }, + { + "cell_type": "markdown", + "source": [ + "Hints: look at these functions\n", + "* lookup_indices(tokens: List[str]) → List[int]\n", + "* lookup_token(index: int) → str" + ], + "metadata": { + "id": "BR-hQMJlUfPR" + } + }, + { + "cell_type": "code", + "source": [ + "train.vocab(['Avant', 'cette', 'série', ','])" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "tb6TYA9Is5v6", + "outputId": "0a5c72db-70c0-4fbe-cefa-4a344013d056" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[2910, 18, 7, 144]" + ] + }, + "metadata": {}, + "execution_count": 7 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "------------------------------------\n", + "SOLUTION\n", + "\n", + "You can use it to retrieve the indice of a specific word, e.g. 'mauvais'." + ], + "metadata": { + "id": "3aAwvzFavjIY" + } + }, + { + "cell_type": "code", + "source": [ + "print( train.vocab.lookup_indices( ['mauvais'] ))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "k9cKqyj3vjT8", + "outputId": "08ea1bd3-42df-4b6f-c71e-e56dcc21e66c" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "[246]\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "print( train.vocab.lookup_token( 368 ) )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ATxVspC0bBO1", + "outputId": "d812cf48-e487-4da0-aae3-6d260bee3f89" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "pas,\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "train.text_pipeline('Avant cette série, je ne connaissais que Urgence')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "6i4C4sdmbN7N", + "outputId": "f2449564-05dc-4efc-cb6e-003b5ec20e97" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[2910, 18, 89, 16, 17, 6120, 8, 10529]" + ] + }, + "metadata": {}, + "execution_count": 10 + } + ] + }, + { + "cell_type": "code", + "source": [ + "train.text_pipeline('Avant cette gibberish, je ne connaissais que Urgence')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8x32L7mVbN8p", + "outputId": "d82115d2-20b7-4ea8-d1d6-bc4d330fe74a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "[2910, 18, 0, 16, 17, 6120, 8, 10529]" + ] + }, + "metadata": {}, + "execution_count": 11 + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## 2- Using pre-trained embeddings (code given)\n", + "\n", + "The first option would be to use randomly initialized word embeddings.\n", + "It allows the use of dense, real-valued input, that could be updated during training.\n", + "However, we probably don't have enough data to build good representations for our problem during training.\n", + "One solution is to use pre-trained word embeddings, built over very big corpora with the aim of building good generic representations of the meaning of words.\n", + "\n", + "Upload the file *cc.fr.300.10000.vec': first 10,000 lines of the FastText embeddings for French, https://fasttext.cc/docs/en/crawl-vectors.html.\n", + "\n", + "* **Each word is associated to a real-valued and low-dimensional vector** (e.g. 300 dimensions). Crucially, the neural network will also learn / update the embeddings during training (if not freezed): the embeddings of the network are also parameters that are optimized according to the loss function, allowing the model to learn a better representation of the words.\n", + "\n", + "* And **each review is represented by a vector** that should represent all the words it contains. One way to do that is to use **the average of the word vectors** (another typical option is to sum them). Instead of a bag-of-words representation of thousands of dimensions (the size of the vocabulary), we will thus end with an input vector of size e.g. 300, that represents the ‘average’, combined meaning of all the words in the document taken together.\n", + "\n", + "The functions to load the embeddings vectors and build the weight matrix are defined below." + ], + "metadata": { + "id": "RX2DkAqws1gU" + } + }, + { + "cell_type": "markdown", + "source": [ + "#### 2.1 Load the vectors (code given)\n", + "\n", + "The function below loads the pre-trained embeddings, returning a dictionary mapping a word to its vector, as defined in the fasttext file.\n", + "\n", + "Note that the first line of the file gives the number of unique tokens (in the original file, here we only have 9,999 tokens) and the size of the embeddings.\n", + "\n", + "At the end, we print the vocabulary and the vector for a specific token." + ], + "metadata": { + "id": "uqzj4HrjUkpc" + } + }, + { + "cell_type": "code", + "source": [ + "import io\n", + "\n", + "def load_vectors(fname):\n", + " fin = io.open(fname, 'r', encoding='utf-8', newline='\\n', errors='ignore')\n", + " n, d = map(int, fin.readline().split())\n", + " print(\"Originally we have: \", n, 'tokens, and vectors of',d, 'dimensions') #here in fact only 10000 words\n", + " data = {}\n", + " for line in fin:\n", + " tokens = line.rstrip().split(' ')\n", + " data[tokens[0]] = [float(t) for t in tokens[1:]]\n", + " return data\n", + "\n", + "vectors = load_vectors( embed_file )\n", + "print( 'Version with', len( vectors), 'tokens')\n", + "print(vectors.keys() )\n", + "print( vectors['de'] )\n", + "\n" + ], + "metadata": { + "id": "yd2EEjECv4vk", + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "23ae1dfd-7772-44c3-f5df-033f5d5419d3" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Originally we have: 2000000 tokens, and vectors of 300 dimensions\n", + "Version with 9999 tokens\n", + "dict_keys([',', 'de', '.', '</s>', 'la', 'et', ':', 'à', 'le', '\"', 'en', '’', 'les', 'des', ')', '(', 'du', 'est', 'un', \"l'\", \"d'\", 'une', 'pour', '/', '|', 'dans', 'sur', 'que', 'par', 'au', 'a', 'l', 'qui', '-', 'd', 'il', 'pas', '!', 'avec', '_', 'plus', \"'\", 'Le', 'ce', 'ou', 'La', 'ne', 'se', '»', '...', '?', 'vous', 'sont', 'son', '«', 'je', 'Les', 'Il', 'aux', '1', ';', 'mais', \"qu'\", 'on', \"n'\", 'comme', '2', 'sa', 'cette', 'y', 'nous', 'été', 'tout', 'fait', 'En', \"s'\", 'bien', 'ses', 'très', 'ont', 's', 'être', 'votre', 'ai', 'elle', 'n', '3', 'même', \"L'\", 'deux', 'faire', \"c'\", 'aussi', '>', 'leur', '%', 'si', 'entre', 'qu', '€', '&', '4', 'sans', 'Je', \"j'\", 'était', '10', 'autres', 'tous', 'peut', 'France', 'ces', '…', '5', 'lui', 'me', ']', '[', 'où', 'ans', '6', '#', 'après', '+', 'ils', 'dont', 'Pour', '°', '–', 'temps', '*', 'sous', 'Un', 'avoir', 'L', 'A', '}', 'site', 'peu', 'mon', 'encore', '12', 'depuis', '0', 'ça', 'fois', '2017', 'ainsi', 'alors', 'donc', 'notre', 'Ce', '20', '11', 'autre', 'monde', 'non', 'Paris', 'avant', 'Une', 'Elle', '15', 'également', 'Re', 'contre', 'Vous', 'c', 'moins', 'tu', 'suis', '7', 'ville', 'avait', 'vos', 'vers', 'premier', 'vie', 'Et', '2016', '2014', 'jour', '00', '2013', 'leurs', 'Dans', 'soit', '2012', 'toutes', 'nom', '2015', '14', 'De', 'On', '8', 'prix', '18', \"C'\", 'Mais', 'partie', '•', 'nos', 'voir', 'article', '16', 'Plus', '13', 'of', 'chez', 'inscription', 'première', 'quelques', 'toujours', '17', 'Nous', 'plusieurs', 'mai', 'place', 'français', '2011', 'cas', 'puis', 'Cette', 'année', 'ma', 'toute', '2010', 'the', '30', 'suite', 'pays', 'The', 'années', 'lors', 'fin', 'bon', '19', 'À', '21', 'dit', 'trois', 'grand', 'quand', 'partir', 'car', 'sera', '22', 'cet', 'jours', 'C', '2009', 'petit', '=', \"J'\", 'Si', 'maison', 'fut', 'ligne', 'faut', '9', 'nouveau', 'moi', 'lieu', 'mois', '23', 'cours', 'personnes', 'va', 'déjà', 'cela', '2008', 'beaucoup', 'juin', 'groupe', 'mars', 'travail', 'nouvelle', 'compte', '24', 'page', 'messages', '25', 'and', 'janvier', 'hui', 'film', 'commune', 'j', 'grande', 'ici', 'Au', 'avril', \"m'\", 'histoire', '2007', 'détail', 'famille', 'savoir', 'doit', 'avis', 'chaque', 'trop', 'enfants', 'eau', 'm', 'part', \"jusqu'\", 'septembre', 'mes', 'homme', 'rien', 'avons', 'octobre', 'décembre', 'forum', 'jeu', 'produits', 'trouve', 'juillet', 'produit', 'équipe', 'CEST', 'politique', 'là', 'novembre', 'permet', 'in', 'titre', 'pendant', 'notamment', 'recherche', 'nombre', '·', 'dire', 'http', 'service', 'pouvez', 'février', 'point', 'dernier', '05', 'moment', 'selon', 'mort', 'droit', '2006', 'DE', 'afin', 'jamais', 'effet', 'mise', 'Des', '—', '26', 'région', 'projet', '\\\\', 'saison', 'août', 'niveau', '28', 'reste', 'bonne', 'ensemble', '27', 'peuvent', 'exemple', 'Voir', '01', 'série', 'souvent', 'centre', 'Après', 'écrit', 'pouvoir', '--', 'mettre', 'km', 'général', 'Page', 'forme', 'début', '09', 'ceux', 'personne', 'eu', 'française', 'vraiment', 'services', 'demande', '29', 'question', 'Par', 'près', 'Merci', 'celui', 'qualité', 'vue', 'tant', 'petite', 'système', '©', 'Ils', 'ailleurs', 'Europe', 'avez', 'mieux', 'société', '^', 'informations', 'données', 'prendre', 'elles', 'guerre', 'surtout', 'to', 'Jean', 'né', 'CET', '08', 'certains', '06', 'village', 'membres', 'rapport', 'an', 'face', 'étaient', 'mot', 'femme', 'possible', '50', 'seul', '@', 'Prix', '04', 'rue', '07', 'te', 'celle', 'mal', 'articles', 'aide', 'nombreux', 'base', 'ayant', '<', '03', '2005', 'entreprise', 'Catégorie', '..', 'ni', 'liste', '02', 'livre', 'passe', 'https', 'mis', 'seulement', 'côté', 'public', 'utilisation', 'ton', 'développement', '31', 'vu', '100', 'D', 'chose', 'dès', 'quatre', 'situé', 'Ces', 'devant', 'photos', 'hommes', 'trouver', 'Son', 'image', '\\xad', 'fr', 'plan', 'étant', 'type', 'tour', '$', 'grâce', 'cadre', 'juste', 'musique', 'président', 'version', 'aime', 'points', 'simple', 'Avec', 'formation', 'jeune', 'assez', 'quoi', 'offre', 'origine', 'sens', 'serait', 'gratuit', 'Pierre', 'heures', 'Nombre', 'corps', 'salle', 'tête', 'sujet', 'adresse', 'carte', 'minutes', 'date', 'font', 'fils', 'création', 'donne', 'e', 'choix', 'album', 'dernière', 'agit', 'loi', 'passé', 'propre', 'coup', 'propose', 'environ', 'chambre', 'accès', 'devient', '....', \"D'\", 'semaine', 'sécurité', 'parce', 'vidéo', 'ensuite', 'porte', 'h', 'lien', 'haut', 'comment', 'femmes', 'façon', 'nationale', 'état', 'présente', 'long', 'nouvelles', 'tard', 'besoin', 'raison', 'club', 'gouvernement', 'retour', 'genre', 'problème', 'x', 'ancien', 'époque', 'séjour', 'Sur', 'Forum', 'passer', 'information', '40', 'auteur', 'belle', '�', 'autour', 'eux', 'rôle', 'bois', '2004', 'meilleur', 'jeux', 'marché', 'deuxième', 'population', 'État', 'manière', 'santé', 'photo', 'J', 'particulier', 'semble', 'pense', 'merci', 'proche', 'N', 'air', 'Tous', 'aurait', 'fonction', 'Tout', 'différents', 'Mar', 'entreprises', 'statistiques', 'plutôt', 'nuit', 'accueil', 'située', 'ordre', 'aller', '--Les', 'êtes', 'école', 'père', 'droits', 'as', 'petits', 'utiliser', 'édition', \"aujourd'\", 'occasion', 'maintenant', 'États-Unis', 'période', 'Grand', 'Saint', 'donner', 'fille', 'Lire', 'jeunes', 'millions', 'activités', 'sommes', 'aucun', 'enfant', 'seule', 'production', '000', 'autant', 'M.', 'II', 'anglais', 'hôtel', 'œuvre', 'habitants', 'espace', '“', 'art', 'nouveaux', 'Ajouter', 'réseau', 'gestion', 'modèle', 'but', 'prend', '2000', 'parfois', 'I', 'département', 'national', 'marque', 'New', 'veut', 'activité', 'quelque', 'église', 'avais', 'propos', '”', 'gauche', 'cause', 'texte', 'idée', 'pris', 'nombreuses', 'chef', 'existe', 'mots', 'main', 'scène', 'grands', 'route', 'gens', 'style', 'sites', 'durant', 'programme', 'pu', 'études', 'mesure', 'calme', 'Comment', 'conditions', 'ministre', 'seront', 'terme', 'laquelle', 'vient', 'mode', 'or', 'Comme', 'jardin', 'www.insee.fr', 'situation', 'travaux', 'vacances', 'journée', 'vrai', 'membre', 'plein', 'code', 'sein', 'web', 'rencontre', 'lire', 'mer', 'Du', 'numéro', 'pages', 'action', 'euros', 'Mai', 'loin', 'lorsque', 'sais', 'agréable', 'domaine', '2003', 'pourrait', 'nature', 'travers', 'Conseil', 'disponible', 'expérience', 'fond', 'François', 'roi', 'siècle', 'oui', 'sud', 'etc.', 'choses', 'heure', 'LA', 'Accueil', 'milieu', 'cuisine', 'pratique', 'terre', 'grandes', 'blog', 'américain', '~', 'questions', 'vente', 'construction', 'pourquoi', 'peux', 'différentes', 'toi', 'répondre', 'jusqu', 'Mon', 'emploi', 'abord', 'sortie', 'intérieur', 'droite', 'bas', 'cinq', 'Louis', 'aucune', 'plaisir', 'premiers', 'message', 'pièces', 'suivant', 'donné', 'enfin', 'proximité', 'logement', 'Alors', 'prise', 'voiture', 'objet', 'Nord', 'accord', 'section', 'âge', 'gros', 'nord', 'découvrir', 'technique', 'présent', 'République', 'soir', 'Depuis', 'créer', 'S', 'concernant', 'jouer', 'Paul', 'important', '2002', '1er', 'succès', 'appartement', 'Jeu', 'chambres', 'met', 'campagne', 'discuter', 'peut-être', 'territoire', 'Bonjour', 'certaines', 'argent', 'langue', 'rapide', 'parmi', 'geo', 'Internet', 'John', 'vais', 'Charles', 'résultats', 'Dieu', 'direction', 'moyen', '²', 'Français', 'Canada', 'couleur', 'Jeux', 'rendre', 'poste', 'fort', 'Sa', 'auprès', 'départ', 'armée', 'Michel', 'Centre', 'entrée', 'valeur', '2001', 'avaient', 'charge', 'zone', 'min', 'cœur', 'mère', 'match', 'taille', 'Allemagne', 'amour', 'noir', \"t'\", 'Sud', 'clients', 'aura', 'naissance', 'annonce', 'quartier', 'Québec', 'économique', 'frais', 'Afrique', 'mm', 'voyage', 'Pas', 'Selon', 'réponse', 'pied', 'Maison', 'international', 'culture', 'troisième', 'Mer', 'beau', 'connu', 'affaires', 'blanc', 'voix', 'doivent', 'directement', 'plupart', 'rouge', 'compris', 'amis', 'conseil', 'classe', 'Université', 'sujets', 't', 'Jacques', 'presse', 'protection', 'parti', 'arrivée', '35', 'rapidement', 'obtenir', 'application', 'parler', 'p.', 'association', 'doute', 'Sujets', 'mondiale', 'château', 'communauté', 'appel', 'images', 'panier', 'lequel', 'projets', 'étude', 'football', '60', 'générale', 'vite', 'libre', 'commentaire', 'arrive', 'Cet', 'ta', 'matière', 'aider', 'contrôle', 'risque', 'cm', 'commande', 'trouvé', '45', 'quel', 'unique', 'politiques', 'voit', 'Quand', 'intérêt', 'source', 'communes', 'contenu', 'internet', '1999', 'organisation', 'Date', 'utilisé', 'Robert', 'secteur', 'for', 'présence', 'B', 'mouvement', 'référence', 'is', 'villes', 'double', 'catégorie', 'techniques', 'force', 'lettres', 'ancienne', 'simplement', 'yeux', 'éléments', 'île', 'carrière', 'Coupe', 'vont', 'joueur', 'livres', 'passage', 'ET', 'historique', 'commence', 'petites', 'Italie', 'Cela', 'presque', 'Sam', 'sociale', 'parle', '32', 'moyenne', 'épisode', 'réalisé', 'particulièrement', 'problèmes', 'environnement', 'terrain', 'taux', 'films', 'tel', 'roman', 'David', 'chacun', '80', 'Bien', 'téléphone', 'pièce', 'Messages', 'actuellement', 'Tu', 'divers', 'super', 'dernières', 'Recherche', 'Histoire', 'similaires', 'second', 'couleurs', 'publié', 'parc', 'esprit', 'Votre', '33', 'derniers', 'énergie', 'publique', 'créé', 'cinéma', 'Union', 'lit', 'moteur', 'seconde', 'York', 'aujourd', 'disponibles', 'Philippe', 'sûr', 'US', 'Posté', 'TV', 'es', 'Non', 'facile', 'social', 'large', 'Google', 'siège', 'Lun', 'longtemps', 'communication', 'nécessaire', 'bord', 'Site', 'Ainsi', 'permis', 'liens', 'matin', 'directeur', 'mètres', 'Belgique', 'durée', 'vivre', 'Oui', 'Dim', 'table', 'Que', 'principal', 'solution', 'joue', 'devrait', 'idées', 'suivre', 'dimanche', 'personnel', 'ouverture', 'total', 'sait', 'envie', 'meilleure', 'six', 'fais', 'fil', 'collection', 'Liste', 'Marie', 'premières', 'semaines', 'groupes', 'désormais', 'parents', 'malgré', 'hôtels', '1998', 'Espagne', 'Guerre', 'Tour', '1990', 'ami', 'manque', 'lettre', 'position', 'hors', 'finale', 'via', 'cependant', 'nommé', 'conseils', 'haute', 'laisser', 'Notre', 'lieux', 'professionnels', 'difficile', 'militaire', 'venir', 'celles', 'bout', 'visite', 'Ven', 'évolution', 'coeur', 'internationale', 'veux', 'comprendre', 'université', 'voie', 'Rechercher', 'permettant', 'contrat', 'LE', 'Société', 'cher', 'Club', 'économie', 'soleil', 'partager', 'professionnel', 'chemin', 'devenir', 'permettre', 'Chine', 'bar', 'commentaires', 'établissement', 'traitement', 'réalité', 'utilise', 'retrouve', 'sélection', 'train', 'élèves', 'usage', 'port', 'tels', 'Bon', 'Etat', 'tes', 'européenne', 'Wikipédia', 'objectif', 'espèce', '{', 'faisant', 'concours', 'feu', 'lecture', 'location', 'suivi', 'certain', 'ca', '200', 'joueurs', 'vendredi', 'mariage', 'écran', 'propriété', '36', 'endroit', 'résultat', 'possède', 'samedi', 'disposition', 'décision', 'Facebook', 'analyse', 'mission', 'Très', 'etc', 'marche', '1997', 'from', '│', 'Lyon', 'Toutes', '34', 'soient', 'bâtiment', 'DU', 'moyens', 'province', 'Art', 'suivante', 'compagnie', 'longue', 'Fichier', 'américaine', 'puisque', 'inscrit', 'sorti', 'at', 'lundi', 'publics', 'pourtant', 'éviter', 'Suisse', 'finalement', 'Cependant', 'achat', 'personnage', 'parcours', 'Nouveau', 'enseignement', 'Commentaires', 'reçu', 'animaux', 'meilleurs', 'complet', 'parties', 'sources', '1996', '70', 'musée', 'chanson', 'Article', 'montre', 'Nos', 'Image', 'devez', 'importe', 'contact', 'officiel', 'outils', '1995', 'lui-même', 'DES', 'actions', 'peine', 'Juin', 'allemand', 'note', 'affaire', 'Église', 'bureau', 'processus', 'sol', 'matériel', 'Qui', 'changer', 'ait', '38', 'Nicolas', 'pratiques', 'importante', 'ouvrage', 'Pays', 'document', 'San', 'comprend', 'parfait', 'bain', 'furent', 'attention', 'liberté', 'possibilité', 'uniquement', 'Jan', 'M', 'by', 'X', 'sort', 'théâtre', 'frère', 'équipes', 'Ses', 'championnat', 'relation', 'police', 'mémoire', 'est-ce', \"S'\", 'Enfin', 'salon', 'Musée', 'laisse', 'commerce', 'armes', '44', 'personnages', '48', 'Henri', 'soutien', 'client', 'quelle', 'vitesse', 'Articles', 'lumière', 'extérieur', 'utilisateur', 'victoire', 'hôtes', 'Lors', 'course', '42', 'réaliser', 'choisir', 'objets', 'III', 'administration', 'véritable', 'bons', 'éducation', 'ouest', 'derrière', 'Ligue', 'tandis', 'généralement', 'Deux', 'annonces', 'peuple', 'acheter', 'règles', 'titres', '39', 'besoins', 'gamme', 'combat', 'huile', 'Wish', 'sociaux', 'honneur', 'critique', 'sorte', 'gare', 'continue', 'crise', 'papier', 'hiver', 'bataille', 'piscine', 'réseaux', 'sport', 'Japon', 'commun', 'retrouver', '41', '1994', 'permettent', 'puissance', 'modèles', 'thème', 'sciences', '37', 'mêmes', 'appelle', 'moderne', 'Ne', 'with', 'responsable', 'exposition', 'neuf', 'anciens', 'ajouter', 'court', 'classique', 'Petit', 'principe', 'ouvert', 'ouvre', 'forte', 'crois', 'précédent', 'sauf', 'stock', 'Publié', 'principale', '43', 'professeur', 'dispose', 'navigation', 'Londres', 'Amérique', 'régime', 'forces', '55', '90', 'garde', 'rend', 'buts', 'Elles', 'vol', 'appelé', '500', 'couple', 'livraison', 'celui-ci', 'Association', 'demander', 'avance', 'Accessoires', 'électrique', 'mains', '1992', 'connaître', 'transport', 'telle', 'connaissance', 'ressources', '--Le', 'changement', 'peau', 'dix', 'filles', 'i', 'offres', 'Chambre', 'Informations', 'Institut', 'Noël', 'impression', 'Voici', 'Angleterre', 'étape', 'magnifique', 'physique', '1980', 'vois', 'textes', 'cookies', 'numérique', 'présentation', 'utilisateurs', 'œuvres', 'Signaler', 'documents', 'majorité', 'fer', 'télévision', 'étudiants', 'artistes', 'recevoir', '52', 'relations', 'étais', 'élections', 'professionnelle', 'Russie', 'Festival', 'bande', 'poids', 'privée', 'principalement', 'St', 'émission', 'bonnes', '1993', 'familles', 'Ma', 'britannique', 'lignes', 'caractère', 'assurer', 'Thomas', 'participe', 'découverte', 'E', 'proposer', 'cartes', 'souhaite', 'Or', 'Salle', 'recherches', 'partenaires', 'chance', 'maire', 'peur', 'rivière', 'vignette', 'Ville', 'acteur', 'explique', 'univers', 'direct', '49', 'surface', 'soirée', 'confiance', 'journal', 'facilement', 'Windows', 'bientôt', 'Est', 'dessus', 'Mes', 'arrière', 'lac', 'Présentation', 'nouvel', 'Montréal', 'logiciel', 'abus', 'Répondre', 'devenu', 'installation', 'courant', 'faible', 'travailler', 'Service', 'Rome', 'profiter', 'langues', 'capacité', 'André', 'systèmes', 'auteurs', 'maisons', 'née', 'attaque', 'accessoires', 'Martin', 'actuelle', 'soins', 'Hotel', 'capitale', 'tableau', '1991', 'pieds', 'artiste', 'fête', 'fonds', 'concerne', 'est-à-dire', '46', 'classement', 'hauteur', 'plage', 'original', 'sept', 'mesures', 'coin', 'centrale', 'diverses', 'faite', 'dossier', 'cité', 'Pourquoi', 'ci-dessous', 'marques', 'EN', 'justice', 'Bernard', 'gratuitement', 'types', 'station', 'Sans', 'formes', 'célèbre', 'Joseph', 'éditions', 'fonctions', 'adore', 'dis', 'jeudi', 'paix', 'limite', 'sortir', 'LES', 'vote', 'Web', 'pleine', 'Championnat', 'mercredi', 'acteurs', 'principaux', 'plans', 'exploitation', 'épouse', 'supérieur', 'James', 'Georges', 'Parti', 'médias', 'confort', 'Claude', 'cherche', 'format', 'signe', 'propres', 'composé', 'R', 'mardi', 'V', '47', 'communale', 'naturel', 'FC', 'faites', 'di', 'lutte', '51', 'entièrement', 'peinture', 'actuel', 'écrire', 'structure', 'vieux', 'Premier', 'Vue', 'situe', 'pose', 'Monde', 'quotidien', 'espère', '´', 'Avr', 'espèces', '1970', 'risques', 'o', '59', 'populaire', 'prochain', 'infos', 'distance', 'étoiles', 'proches', 'latitude', 'moitié', 'détails', 'termes', 'Richard', 'immédiatement', 'solutions', 'contraire', 'sociales', 'importance', 'idéal', 'effets', 'représente', 'parfaitement', '¤', '56', 'Alain', 'locaux', 'entretien', '54', 'partout', 'penser', '1989', 'chaîne', 'top', 'pierre', 'patrimoine', 'voire', '57', 'choisi', 'réponses', 'g', 'rester', 'informatique', 'maladie', 'totalement', 'e-mail', 'Michael', 'discussion', 'complète', 'Guide', 'studio', 'pourra', 'Location', 'saint', 'Avis', 'défense', 'Carte', 'vidéos', 'réalisation', 'scientifique', 'Plan', 'Grande', 'rendez-vous', 'erreur', 'pourrez', 'Contact', 'décidé', 'gaz', 'opération', 'industrie', 'raisons', 'générales', 'H', 'Sujet', 'longitude', 'assurance', 'contacter', 'privé', 'améliorer', 'align', 'Hôtel', 'belles', 'valeurs', 'enquête', 'atteint', 'croissance', 'perdu', 'avenir', 'traduction', 'suffit', 'bébé', 'faits', 'participation', 'russe', 'régulièrement', 'zones', 'Président', 'appareil', 'goût', 'Groupe', 'El', 'terrasse', 'p', 'maximum', 'tellement', 'formé', 'Lycée', 'local', 'fonctionnement', 'Terre', 'dos', 'remporte', 'portes', '53', 'canton', 'ordinateur', 'gratuite', 'restaurant', 'machine', 'sexe', 'utilisant', 'fichier', 'construit', 'cour', 'division', 'mobile', 'approche', 'Bruxelles', 'recette', 'F', 'absence', 'écoles', 'vis', 'pouvait', \"lorsqu'\", 'unité', 'dû', 'sert', 'voyageurs', 'actualité', 'Rue', 'noms', 'volonté', 'existence', 'expression', 'ministère', 'méthode', 'italien', 'propriétaire', 'sociétés', 'Code', 'partage', 'cheveux', 'tient', 'décide', 'Marseille', '1988', 'International', 'Nov', 'bleu', 'consommation', 'entraide', 'élu', 'Autres', 'matchs', 'confortable', 'revient', 'européen', 'mondial', 'National', 'électronique', 'participer', 'régions', 'identité', 'Daniel', 'DH', 'Pendant', 'PC', 'minimum', 'Fév', 'faisait', 'ventes', 'quant', 'trouverez', 'apos', 'revue', 'probablement', 'Donc', 'apparaît', 'Oct', 'Chaque', 'fenêtre', 'voici', 'Aucun', 'demandes', 'recommande', 'ferme', 'outre', 'futur', 'morts', 'pression', 'maître', 'événements', 'réserve', 'attendre', '58', 'équipements', 'William', 'acte', 'viens', 'L.', 'regard', 'vert', 'publication', 'belge', 'différence', 'magasin', 'vent', 'kilomètres', 'étranger', 'reçoit', 'A.', 'manger', 'présenter', 'champ', '→', 'contexte', 'suivants', 'déjeuner', '300', 'École', 'chien', 'compétition', 'Services', 'Première', 'outil', 'commencé', 'porter', 'P', 'coupe', 'Bordeaux', 'statut', 'George', '́', 'montagne', 'chercher', 'responsabilité', 'Santé', 'description', 'Même', 'écriture', 'Empire', \"Aujourd'\", 'Partager', '1986', 'signifie', 'repas', 'immobilier', 'gagner', 'conception', 'travaille', 'bras', 'Bretagne', 'Avant', 'Dès', 'visage', 'fera', 'guide', 'efficace', 'rendu', 'puisse', 'id', 'épisodes', 'créée', '1987', 'hier', 'longueur', '†', 'Livraison', 'revenir', 'sinon', 'Titre', 'écrivain', 'correspond', 'élection', 'obtient', '1960', 'emplacement', 'design', 'celle-ci', 'tendance', 'Laurent', \"quelqu'\", 'voilà', 'Sciences', 'développer', 'réduction', 'domicile', 'applications', 'décès', '--La', 'jeunesse', 'réel', 'fit', '1982', 'retraite', 'contient', 'places', 'devait', 'radio', 'peintre', 'littérature', 'Déc', 'mises', 'Moi', 'forêt', 'figure', 'toutefois', 'beauté', 'clair', 'Commission', 'prochaine', 'Contenu', 'largement', '1984', 'cul', 'change', 'constitue', 'Sep', 'économiques', 'entier', 'ouverte', 'respect', 'disque', 'payer', 'Lorsque', 'vin', 'Connexion', '1985', 'Toulouse', 'café', 'milliards', 'bonheur', 'rejoint', 'programmes', 'vaut', 'médecin', 'oeuvre', 'pont', 'représentant', 'del', 'intérêts', 'Sélectionner', 'visiter', 'Entre', 'ciel', 'Retour', 'pétrole', 'verre', 'plantes', 'véhicule', 'preuve', 'chargé', 'suivantes', 'Patrick', 'Marc', 'joué', 'Homme', 'anniversaire', 'modifier', 'conseiller', 'Aoû', 'fruits', 'discours', 'débat', 'atteindre', 'altitude', 'phase', 'instant', 'historiques', 'Bonne', 'prévu', 'b', 'agence', '‘', 'vit', 'passant', 'Juil', 'regarder', 'Culture', 'final', 'certaine', 'Loire', 'inscrire', 'architecture', 'Nom', 'atelier', 'J.', 'critères', 'Maroc', 'issue', 'Disponible', 'vision', 'fleurs', 'spectacle', 'évaluation', 'huit', 'basse', 'prêt', 'complètement', 'louer', 'centres', 'volume', 'utilisés', 'sympa', 'Air', 'essayer', 'température', 'opérations', 'collaboration', 'fiche', 'souhaitez', '75', 'offrir', 'Ouest', 'demandé', 'Puis', 'dollars', 'distribution', 'Cliquez', 'tres', 'DVD', 'lu', 'supérieure', 'liés', 'montant', 'intervention', 'boutique', 'influence', 'Monsieur', 'diffusion', 'Conditions', 'troupes', 'sang', 'nécessaires', 'utilisée', 'Éditions', 'rejoindre', 'tenu', 'lance', 'véhicules', 'compter', 'objectifs', 'arrêt', 'Découvrez', 'Assemblée', 'construire', 'apprendre', \"N'\", 'présenté', 'Super', 'élevé', 'Mme', 'Certains', 'scolaire', 'publiques', 'compétences', 'éditeur', 'connecté', 'cliquez', 'Anne', 'excellent', 'écoute', 'budget', 'françaises', 'opposition', 'concept', 'étage', '150', 'équipé', 'événement', 'Tags', '1983', 'test', 'niveaux', 'commencer', 'avion', 'échange', 'caractéristiques', 'servir', 'envoyer', 'T', 'voulez', 'Château', 'tenue', 'fichiers', 'City', 'Sport', 'côtés', 'totale', 'poser', 'stade', 'eaux', 'entendu', 'Théâtre', 'conscience', 'humain', 'vallée', 'militaires', 'Christian', 'no', 'réussi', 'humaine', 'coordonnées', 'mauvais', 'touche', 'riche', 'Musique', 'associations', 'Twitter', 'suit', 'protéger', 'Top', 'Quelques', 'ouvrages', 'mari', 'portant', '×', 'remise', 'soi', 'candidat', 'Guillaume', 'Age', 'comte', 'utile', 'dur', 'aéroport', 'meilleures', 'IV', 'stratégie', 'hésitez', 'Algérie', 'promotion', 'Afficher', 'Créer', 'vide', '1975', 'autorités', 'Vie', '1981', 'telles', 'you', 'préparation', 'élève', 'technologie', 'théorie', 'Total', 'arrêté', '1978', 'Peter', 'paiement', 'journaliste', 'prises', 'tente', 'indique', 'locale', 'ouvrir', 'principales', 'Ben', 'traité', 'festival', 'espaces', 'von', 'loisirs', 'naturelle', 'défaut', 'support', 'baisse', 'Israël', 'phpBB', 'rencontres', 'O', 'Cour', '1968', 'Résultats', 'découvert', 'comptes', 'plat', 'Antoine', 'jolie', 'crée', 'Modèle', 'annoncé', 'victimes', 'avions', 'recettes', 'installer', 'lait', 'dehors', 'biens', 'légales', 'impossible', 'croire', 'email', 'Alexandre', 'municipalité', 'établissements', 'Asie', 'domaines', 'tombe', 'week-end', 'intéressant', 'noire', 'arts', 'conférence', 'Car', 'considéré', 'allez', 'champion', 'magazine', 'clubs', 'Olivier', 'coups', 'Parc', 'arriver', 'Parmi', 'commercial', 'pouvant', 'World', 'post', 'Disney', 'Académie', 'salles', 'fortement', 'résidence', 'artistique', 'champs', 'tourisme', 'proposé', 'In', 'CD', 'davantage', 'lancer', 'conflit', 'aventure', 'séries', 'serveur', 'rêve', 'civile', 'faveur', 'enregistrer', 'connue', '1979', 'Ça', 'tenir', 'japonais', 'perte', 'fonctionne', 'Albert', 'mairie', 'termine', 'espagnol', 'lesquels', 'garder', 'Jouer', 'allemande', 'précise', 'montrer', 'déclaré', 'exercice', 'quatrième', 'vérité', 'basée', 'scientifiques', 'trouvent', 'importants', 'right', 'capable', 'prison', 'villages', 'catégories', 'Maurice', 'soin', 'actes', 'aurais', 'métier', 'C.', 'veulent', 'foi', 'quantité', 'chinois', 'masse', 'expédition', 'récemment', 'charme', 'revanche', 'stage', 'concert', 'complexe', 'milliers', 'was', 'accéder', 'tôt', 'van', 'pop', 'pensée', '1976', 'Comité', 'secrétaire', 'der', 'superbe', 'clé', 'particuliers', 'fini', 'printemps', 'demain', 'commission', 'originale', 'camp', 'Permalien', 'dessin', 'marchés', 'envers', 'réception', 'lois', 'Dr', 'religion', 'chansons', 'lycée', 'ambiance', 'Mars', 'Quel', 'dois', 'vivant', 'engagement', '›', 'juridique', 'mur', 'noter', 'ski', 'consulter', 'central', 'option', '1977', 'juge', 'Sous', 'absolument', 'entrer', 'viennent', 'meme', 'Type', 'jaune', 'élément', 'r', 'chaleureux', 'catholique', 'Note', 'vendre', 'invite', 'menu', 'rose', 'essentiel', '1950', 'tarifs', 'couverture', 'Archives', 'Saison', 'Se', 'évêque', 'Pologne', 'Livre', 'Berlin', 'difficultés', 'blanche', '400', 'chapelle', 'olympiques', 'organisé', '1972', 'procédure', 'présents', 'frères', 'performance', 'perdre', '1973', 'Message', 'notes', 'génération', 'Journal', 'voitures', 'au-dessus', 'médecine', 'bâtiments', 'condition', '®', 'Photo', '1974', 'rappelle', 'importantes', 'glace', 'cheval', 'durable', 'connaît', 'effectuer', 'quitte', 'contenant', 'pro', 'continuer', 'tradition', 'candidats', 'beaux', 'lancé', 'automobile', 'Trois', 'Malgré', 'coût', 'réunion', 'Ca', 'primaire', 'réduire', 'chat', 'obtenu', 'définition', 'Produits', 'résumé', 'chasse', 'apporter', 'Jésus', 'sucre', 'Espace', 'Général', 'Vincent', 'laissé', 'vérifier', 'lendemain', 'député', 'Salon', 'traduit', 'froid', 'actrice', 'clés', 'terres', 'reprises', 'reprise', 'chiffres', 'résistance', 'publiée', 'surprise', 'chocolat', 'alimentation', 'Nuit', 'Nouvelle', 'échelle', 'autorité', 'ceci', 'Fiche', 'capital', 'Etats-Unis', 'chaud', 'comité', 'Plusieurs', 'M2', 'licence', 'échanges', 'interne', 'épreuve', 'collège', 'joli', 'liées', 'âme', 'tiers', 'critiques', 'enfance', 'vélo', 'Arts', 'télévisée', 'envoyé', 'pourraient', 'côte', 'Royaume-Uni', 'murs', '65', 'bus', 'fabrication', 'Black', 'réalisateur', 'demeure', 'prince', 'piste', 'conduit', 'soldats', 'lecteur', 'États', 'hôte', 'Fédération', 'douche', 'batterie', 'salariés', 'cadeau', 'Gestion', 'aspect', 'home', 'sommet', 'connaissances', 'Alpes', 'Projet', 'essentiellement', 'oublier', 'Politique', 'philosophie', 'René', 'seuls', 'district', 'Grâce', 'religieux', 'sac', 'IP', 'occupe', 'Nantes', 'locales', 'duc', 'documentaire', 'Toutefois', 'chute', 'méthodes', 'scénario', 'planète', 'parking', 'sympathique', 'héros', '2007Sujet', 'garantie', 'label', 'pêche', 'comportement', 'renseignements', 'cycle', 'humaines', 'crédit', 'mélange', 'consiste', 'précédente', 'accueille', 'logiciels', 'ajouté', 'Me', '.....', 'visiteurs', 'boîte', 'forcément', 'Van', 'grave', 'Australie', 'tournée', 'exception', 'multiples', 'chiffre', 'Film', 'connexion', 'logique', 'restauration', 'somme', '64', 'préparer', 'mail', 'comté', 'équipée', '1962', 'eut', 'édité', 'moindre', 'réflexion', 'portail', 'accessible', 'Actualités', 'vraie', 'anciennes', 'proposition', 'Mise', 'Inde', 'technologies', 'Leur', '1940', 'Bienvenue', 'financement', 'mouvements', 'modification', 'royaume', 'évidemment', 'acceptez', 'spécialiste', 'crème', 'Seconde', '1945', 'Voilà', 'File', 'etre', 'gérer', 'îles', 'découvre', 'affiche', 'Formation', 'équipement', 'Vos', '1967', 'augmentation', 'banque', 'règle', 'feuilles', 'agriculture', 'langage', 'Los', 'automatiquement', '3D', 'secret', 'simples', 'impact', 'Star', 'Ou', 'Description', 'till', 'certainement', 'régional', 'citer', 'info', 'rapports', 'portée', 'démarche', \"Qu'\", 'arrondissement', 'profil', 'hôpital', '1971', 'accueillir', 'suisse', 'expliquer', 'officielle', 'appareils', 'révolution', 'restaurants', 'violence', 'secondes', 'a-t-il', 'Durant', 'néanmoins', 'voulu', 'Pro', 'Brésil', 'veille', 'normal', 'animation', 'connais', 'Frédéric', \"--L'\", 'Roger', 'comporte', 'danse', '1969', 'inclus', 'Marine', 'apparition', 'bibliothèque', 'record', 'G', 'décrit', 'Strasbourg', 'score', 'Catherine', 'Bref', 'indépendance', 'archives', 'Henry', 'destination', 'Auteur', 'Genève', 'this', 'humains', 'composée', 'revenu', 'clairement', 'moments', 'f', 'VF', 'Dominique', 'faux', 'apprentissage', 'Aide', 'donnée', 'passion', 'achats', 'mauvaise', 'Attention', 'devoir', 'Royal', 'pilote', 'tome', 'Femme', 'chapitre', 'chaleur', 'faudra', 'permettra', 'USA', 'fournir', 'féminin', 'assure', 'reprend', 'thèmes', 'Radio', 'superficie', 'élus', 'séance', 'PS', 'investissement', 'commerces', 'producteur', 'citoyens', 'financière', 'Direction', 'indiqué', 'connecter', 'exactement', '1944', 'architecte', 'capitaine', 'Appartement', 'fondée', 'pire', 'publie', 'effectivement', 'science', 'meurt', 'heureux', 'initiative', 'météo', 'Maria', 'Révolution', 'conforme', 'entendre', 'arrivé', 'réforme', 'saisons', 'actif', 'accident', 'réalisée', 'matières', 'dessous', 'adultes', 'placé', 'rock', 'guitare', 'faudrait', 'truc', 'Place', 'text', 'Nice', 'bouche', 'nucléaire', 'réalise', 'hommage', 'acheté', 'essai', 'aimé', 'urgence', 'présidentielle', 'cuir', 'utiles', 'Collection', 'Var', 'reprendre', 'appartient', 'voyages', 'fondé', 'partenaire', 'tournoi', 'appelée', 'grosse', 'Banque', '1000', 'culturel', 'chômage', 'délai', 'principes', 'Quelle', 'pâte', 'eacute', 'piano', 'Sécurité', 'tours', 'décoration', '2008Sujet', 'WP', 'Y', 'frontière', 'difficulté', 'développé', 'étrangers', 'catalogue', 'faute', 'matériaux', 'spécial', 'missions', 'arabe', 'Anglais', 'circuit', 'four', 'Victor', 'permanent', 'réservation', 'étrangères', 'yoga', 'douce', 'auraient', 'Christophe', 'Jack', 'avantage', 'palais', 'responsables', 'Médecine', 'kg', 'classé', 'Park', 'pointe', 'supplémentaires', '\\ufeff', 'rares', 'bassin', 'Lille', 'Cours', 'sexy', 'avocat', 'pain', 'prennent', 'vêtements', '120', 'victime', 'pouvons', 'précis', 'One', 'Christ', 'profit', 'vouloir', 'disponibilité', 'parole', 'Eric', 'sent', 'marketing', 'arrêter', 'légèrement', 'signé', 'hausse', 'participé', 'Aux', 'robe', 'aurez', 'neige', 'Source', 'Catégories', 'Gérard', 'dynamique', 'transports', 'composition', 'classes', 'Guy', 'Générale', 'lesquelles', 'essais', 'produire', 'reconnaissance', 'devenue', 'propriétaires', 'visites', 'net', 'références', 'bains', 'vaste', 'spécifique', '1965', 'auquel', 'américains', 'conséquences', 'légende', 'convient', 'marine', 'elle-même', 'attend', 'restent', 'abbaye', 'Côte', 'empereur', '1966', '™', 'adapté', 'dessins', 'Max', 'Jules', 'efficacité', 'very', 'Pascal', 'entraîneur', 'environs', '250', 'institutions', 'parfaite', 'bref', 'décret', 'déclaration', 'conduite', 'Agence', 'machines', 'Sinon', '1964', 'rubrique', 'monuments', 'seraient', 'performances', 'single', 'au-delà', 'mandat', 'italienne', 'indépendant', 'You', 'partenariat', 'offert', 'portable', 'R.', 'souvenir', 'rédaction', 'Ceci', 'siècles', 'spécifiques', 'changements', 'porté', 'center', 'relativement', 'Simon', 'extension', 'organisations', 'électricité', 'limites', 'Microsoft', '1930', 'Manuel', 'Vidéo', 'collectif', 'Toute', 'représentation', 'plateau', 'possibles', 'réduit', 'recours', 'participants', 'centaines', 'dispositions', 'finir', 'Adresse', 'majeur', 'populations', 'agent', 'habitude', 'géographique', 'automatique', 'Ah', 'graphique', 'animal', 'sportif', 'Tourisme', 'emplois', 'Parlement', 'arbre', 'chefs', 'donnant', 'Tom', 'revenus', 'opinion', 'S.', 'fondateur', 'bilan', 'unités', 'Madame', 'estime', 'axe', 'Grèce', 'formule', 'littéraire', 'dépend', 'collections', 'dispositif', 'venu', 'bénéficier', 'fixe', 'phénomène', 'bouton', 'Blog', 'pape', 'rencontrer', 'rythme', 'préféré', 'notion', 'amoureux', 'répond', 'chant', 'dite', 'rare', 'gris', 'P.', 'remplacer', 'réellement', 'Accès', 'basé', 'fêtes', 'formations', 'und', 'usine', 'Ordre', 'bases', 'adaptation', 'financiers', 're', 'expériences', 'oiseaux', 'européens', 'pouvoirs', 'Marcel', 'procès', 'Est-ce', 'agents', 'apporte', 'étapes', 'Mentions', 'toile', 'rang', 'voies', 'ajoute', 'consacré', 'donnent', 'moto', 'tenter', 'finit', 'chacune', 'Région', 'longues', 'arbres', 'vues', 'versions', 'su', 'règne', 'Quant', 'liésPortail', 'copie', 'reconnu', '─', 'ex', 'actifs', 'Docteur', 'clip', 'circulation', 'remettre', 'iPhone', 'intitulé', 'fallait', 'Cuisine', 'courte', 'est-il', 'rues', 'dirigeants', 'métiers', 'Ensuite', 'climat', 'particulière', 'chiens', 'efforts', 'officiellement', 'récit', 'supprimer', 'bel', 'standard', 'experts', 'automne', 'courage', 'relative', '1963', 'attente', 'Pays-Bas', 'internautes', 'monter', 'Pièces', 'marqué', '1958', 'publicité', 'changé', 'partis', 'Stade', 'Jean-Pierre', 'Al', 'extrêmement', 'croix', 'Photos', 'bruit', 'Envoyer', 'tomber', 'conçu', 'Portail', 'commandes', 'latin', 'sable', '72', 'minute', 'left', 'former', 'télécharger', 'Thierry', 'enregistré', 'perd', 'Chambres', 'options', 'transfert', 'Palais', 'bateau', 'internationales', 'Bureau', 'justement', 'Blanc', 'pluie', 'territoires', 'titulaire', 'avancée', 'Office', 'obligatoire', 'angle', 'réservés', 'Love', 'horaires', 'structures', '1961', 'Petite', 'Afin', 'oublié', 'spécialisé', 'ci-dessus', 'examen', 'Divers', 'Galerie', 'pourront', 'personnelle', 'chanteur', \"puisqu'\", 'contenus', 'correspondant', 'Création', 'compositeur', 'interdit', 'histoires', 'sœur', 'Hollande', 'municipal', 'Communauté', 'Livres', 'sérieux', 'réussite', 'lecteurs', 'agricole', 'Bois', 'normes', 'mille', 'FAQ', 'Julien', 'quitter', 'avantages', 'Directeur', 'phrase', 'F.', 'augmenter', 'lorsqu', 'Rien', 'upright', '1920', 'logements', 'Washington', 'José', 'cabinet', 'enregistrement', 'Loi', 'B.', 'acier', 'Discussion', 'installé', 'précision', 'représentants', 'Dernière', 'Roi', 'intéresse', 'Bruno', 'classiques', 'exécution', 'listes', 'aménagement', 'œil', 'soumis', 'My', 'définir', 'billet', 'Lien', 'organisme', 'vigueur', 'logo', 'espoir', 'Autriche', 'raconte', 'utilisent', 'danger', 'v', 'prestations', 'Évaluation', 'paroles', 'Champion', 'Tunisie', 'Portugal', 'associé', 'attendant', 'avenue', 'allant', 'combien', 'Encore', 'organiser', 'Emmanuel', 'Faire', 'destiné', 'rayon', 'Vienne', 'Yves', 'vendu', 'démocratie', 'Chez', '♥', 'plastique', 'patients', 'impose', 'réaction', 'bronze', 'Âge', 'spéciale', 'extrait', 'potentiel', 'Montpellier', 'Apple', 'anglaise', 'vainqueur', 'constitué', 'allait', 'Ici', 'Table', 'canal', 'sel', 'midi', '1954', '95', 'Revue', 'Aucune', 'interprétation', 'doux', 'seigneur', 'limitée', 'camping', 'Système', 'TTC', 'dédié', 'chevaux', 'surveillance', 'intégration', 'maladies', 'appartements', 'pierres', 'issus', 'lancement', '85', 'session', 'légumes', 'hockey', 'supplémentaire', 'personnelles', 'Bibliothèque', 'Parce', 'musicale', 'individus', '1936', 'différent', 'organise', 'financier', 'ateliers', 'Affaires', 'Nationale', 'Nations', 'Jardin', 'Moscou', 'quels', 'Noir', 'montage', 'construite', 'rouges', 'numéros', 'Où', 'défaite', 'front', 'Père', 'culturelle', 'auront', 'armées', 'auto', 'commerciale', 'POUR', '1956', '1946', '1959', 'humour', 'postes', 'accepte', 'reine', 'autorisation', 'métro', 'remplacé', 'charges', 'Cannes', 'No', 'agir', 'métal', 'arme', 'Droit', 'règlement', 'poète', 'Entreprises', 'sports', 'Suite', 'Gilles', 'Pourtant', 'innovation', 'barre', 'vise', 'sorties', 'débuts', '62', 'Android', 'exemplaires', 'identifier', 'Big', 'Mr', 'alimentaire', 'garçon', 'hébergement', 'Normandie', 'rire', '600', 'employés', 'dates', 'Travaux', 'établir', 'écrits', 'vivement', 'pistes', 'flux', 'Série', 'socialiste', 'secondaire', 'Protection', 'apprend', 'dimension', 'égard', 'poissons', 'présentes', 'solo', 'don', 'tirer', 'vols', 'mécanique', 'poursuit', 'tourne', 'amélioration', 'annuaire', 'gagne', 'ceinture', 'électriques', 'Rennes', 'Californie', 'équilibre', 'secteurs', 'nuits', 'allons', 'nécessité', 'Infos', 'chercheurs', 'Belle', 'paysage', 'active', 'blancs', 'médaille', 'concurrence', 'Durée', 'Aller', 'erreurs', 'bac', 'joie', 'USB', 'ben', 'repris', 'travailleurs', 'préfère', 'royale', 'invités', 'respecter', 'Madrid', 'Demande', 'appeler', '1939', '2006Sujet', 'indispensable', '\\u200b', 'suppression', 'orchestre', 'Réponse', 'émissions', 'morceaux', 'luxe', 'précisément', 'trafic', 'léger', 'alentours', 'prénom', 'tué', 'Fondation', 'tennis', 'solaire', 'Denis', 'voulait', 'travaillé', 'Sports', 'cadeaux', 'Partagez', 'intention', 'naturelles', 'Famille', 'considère', 'Red', 'modernes', 'favoris', 'engage', 'hasard', 'vécu', 'sentiment', 'courses', 'Arthur', 'poursuivant', 'cesse', 'auparavant', 'Z', 'Vers', 'grec', 'Détails', 'urbaine', 'extrême', 'voulais', 'bio', 'live', 'rupture', 'soutenir', 'Programme', 'humanité', 'photographie', 'calcul', 'modifications', 'visant', 'faciliter', 'Santa', 'signature', 'plages', 'maintenir', 'déco', 'tissu', 'amie', 'affirme', 'Retrouvez', 'title', 'universitaire', 'Angeles', 'cathédrale', 'vingt', 'demi', '78', 'mettant', 'familiale', '77', 'Produit', 'personnalité', 'Offres', 'menace', 'mention', 'Mode', 'apprécié', 'Salut', 'scolaires', 'U', 'aimerais', 'écrite', 'quartiers', 'Sarkozy', 'calendrier', 'thé', 'rayons', 'News', 'All', 'exemples', 'conserver', 'échec', 'libres', 'vieille', 'SUR', '1957', 'décisions', 'plaque', 'dure', 'tribunal', 'alt', 'organisée', 'Qu', 'Constitution', 'conséquence', 'personnalités', 'Hôtels', 'Organisation', 'li', 'Emploi', 'semblent', 'fondation', 'maîtrise', 'essence', 'w', '68', 'leader', 'amateurs', 'magasins', 'bureaux', 'désigne', 'boite', 'coopération', 'retourner', 'propositions', 'Information', 'Music', 'issu', 'défendre', 'populaires', 'prévue', 'rugby', 'mettent', 'lié', 'installations', 'coté', 'King', 'maman', 'bonjour', 'Introduction', 'monument', 'ombre', 'Stéphane', 'Frais', 'remporté', 'journalistes', 'vins', 'D.', 'Moyen', 'Haute', 'it', 'civil', 'révèle', 'couples', 'fins', '1942', 'albums', 'souvenirs', 'Mark', 'transformation', 'tests', 'tourner', 'profondeur', 'Suède', 'ingénieur', 'fans', 'regarde', 'poésie', 'Q', 'touristique', 'terrains', '1955', 'HD', 'dialogue', 'nationales', 'scènes', 'Soins', 'dommage', 'Bourgogne', 'branche', 'après-midi', 'tir', 'ci', 'Seigneur', 'attaques', 'refuse', 'déroule', 'étudiant', 'profession', 'video', 'aimez', '800', 'régionale', 'autonomie', 'navigateur', 'G.', '66', '1943', 'éd.', 'plateforme', 'Veuillez', 'Provence', 'Milan', 'Turquie', 'Edition', 'Irlande', 'chaussures', 'empêcher', 'démocratique', 'HT', '1948', 'effort', 'instruments', 'façade', 'effectué', 'prévention', 'uns', 'Questions', 'rencontré', 'connus', 'accompagné', 'montagnes', 'canadien', 'Compagnie', 'jardins', 'sommes-nous', 'English', 'cent', 'commandant', 'Football', 'débute', 'source1', 'chemins', '1914', 'viande', 'enjeux', 'beurre', 'paraît', 'ul', 'servi', 'européennes', 'spécialisée', 'Mexique', 'WC', 'moteurs', 'intérieure', 'Isabelle', 'Télécharger', 'cinquième', 'utilisées', 'situations', 'Francis', 'devraient', 'Macron', 'Frank', 'capacités', 'personnels', 'visible', 'combats', 'devra', 'fan', 'Jeanne', 'K', 'invité', 'retard', 'réservé', 'galerie', 'Syrie', 'évolue', 'tester', 'acquis', '67', 'Concours', 'footballeur', 'légère', 'Avril', 'successeur', 'interface', 'serez', 'industriel', 'enceinte', 'accepter', 'contemporain', 'Annonce', 'entière', 'Développement', 'réelle', 'parlé', 'associés', 'Version', 'obligation', 'nul', 'déchets', 'appui', 'étudier', 'résolution', 'décédé', 'villa', 'envoie', 'comprenant', '1947', 'banques', 'poisson', 'députés', 'directe', 'excellente', 'établi', 'entend', '84', 'massif', 'suffisamment', 'Aujourd', 'u', 'sauver', 'silence', 'Chris', 'organismes', 'traditionnelle', '69', 'ordres', 'Raymond', 'déclare', 'cliquant', 'billets', 'enseignants', 'routes', 'malheureusement', 'EUR', 'concerts', 'Studio', 'possibilités', 'égalité', 'audio', 'Go', 'Home', 'we', 'stockage', 'assemblée', 'Division', 'prenant', 'mérite', 'effectue', 'thermique', 'énorme', 'Smith', 'propriétés', 'tuer', 'alimentaires', 'judiciaire', 'dimensions', 'devint', 'décor', 'Aussi', 'puissant', 'appartenant', 'récupérer', 'Point', 'Fin', 'naturels', 'sourire', 'couche', 'terminé', 'Lee', 'thèse', 'romans', 'paru', 'Haut', 'ennemi', 'secours', 'installe', 'accueilli', 'fermeture', 'nez', 'désigner', 'tarif', 'intermédiaire', 'Barcelone', 'assistance', 'dossiers', 'Autre', 'Maître', 'rappeler', 'Villa', 'oeil', 'cancer', 'arrête', 'Matériel', 'progrès', 'Records', 'poursuivre', 'Sainte', '1953', 'United', 'Master', 'cache', 'appliquer', 'morceau', 'aspects', 'entraînement', 'océan', 'Rose', 'fou', 'Informatique', 'navire', 'chauffage', 'développe', 'industrielle', '1952', 'confirme', 'fleuve', 'cuisson', 'remis', 'gouverneur', 'meteo', 'douze', 'aimer', '63', 'poche', 'are', 'Congrès', 'constituent', 'exprimer', 'Française', '1941', 'fusion', 'Là', 'Vente', 'Open', 'E.', 'peuples', 'Val', 'plante', 'Croix', 'musulmans', 'Live', 'votes', 'comprends', 'cellules', 'soviétique', 'internationaux', 'disparu', 'tableaux', 'étoile', 'Orange', 'audience', 'globale', 'médecins', 'lits', 'coûts', 'souci', 'transmission', 'Janvier', 'appris', 'orientation', 'ressemble', 'cimetière', 'rentrée', 'synthèse', 'gratuits', 'pensé', 'discussions', 'origines', 'docteur', 'Caroline', 'indépendante', 'recensement', 'cérémonie', 'Eglise', 'passée', 'Luxembourg', 'législatives', 'col', 'Cinéma', 'détachées', 'certes', 'do', 'ère', 'Dernier', 'proposons', 'relève', 'communautés', 'immense', 'Actualité', 'diplôme', 'acquisition', 'We', 'American', 'manifestations', 'chantier', 'déterminer', 'chers', 'télé', '--Autres', 'contribution', 'culte', 'convention', 'voisins', 'Notre-Dame', 'victoires', 'patron', 'montré', 'Alsace', 'tension', 'Ministère', 'définitivement', '1949', 'diversité', 'Man', 'troubles', 'm2', 'endroits', 'adresses', 'Ancien', '61', 'rive', 'Corée', 'mener', 'lol', 'riches', 'Atelier', 'consommateurs', 'montée', 'facteurs', 'adulte', 'UN', 'navires', '↑', 'mobilité', 'originaire', 'majeure', '76', 'formulaire', 'autonome', 'conduire', 'inverse', 'dépenses', 'touristiques', '1938', 'house', 'Tome', 'House', 'plats', 'symbole', 'sportive', 'Design', 'liée', 'privés', 'mathématiques', 'Championnats', 'déplacement', 'Sophie', 'intégrer', 'vol.', 'da', 'immeuble', '1951', 'kmEntre', '00ZNous', 'incendie', 'Serge', 'devis', 'relatives', 'religieuse', 'évidence', 'désir', 'aiment', 'Chicago', 'conséquent', 'regroupe', 'officier', 'fr.wikipedia.org', '99', 'Rock', 'Don', 'union', 'agricoles', 'Armée', 'disent', '74', 'color', 'repos', 'autrement', 'Grenoble', 'créations', 'traiter', 'frontières', 'poudre', 'énergétique', 'aluminium', 'Harry', 'généraux', 'introduction', 'musical', 'cercle', 'accompagner', 'Street', 'liquide', 'voile', 'Iran', 'essayé', 'index.php', 'envoi', 'parvient', 'BD', 'caractères', 'industriels', 'Gîte', 'portrait', 'cultures', 'orange', 'Maintenant', 'comptait', 'empêche', 'débit', 'écouter', 'Copyright', 'administrative', 'nommée', 'Rouge', 'régiment', 'contrats', 'traces', 'soucis', 'gagné', 'Gare', 'gîte', 'Mont', 'maintien', 'XV', 'mène', 'talent', 'Chapitre', 'courrier', 'nourriture', 'pauvres', 'vivent', 'office', 'guerres', 'comédie', 'laissant', 'expositions', 'équivalent', 'perspective', 'dessinée', 'biais', 'communiqué', 'conférences', 'provient', 'assuré', 'traditionnel', 'Fort', 'portent', 'paroisse', 'Beaucoup', 'Ministre', 'intégré', 'diffusée', 'tiens', 'occupation', 'représentent', 'différente', 'H.', 'degré', 'Ecole', 'chanteuse', 'temple', 'journaux', 'retrait', 'contrairement', 'remplir', 'infanterie', 'alcool', 'qualités', 'monte', 'Lettres', 'administrateur', 'modifié', 'AU', 'Education', 'University', 'dizaine', 'Juan', 'Pièce', 'Mot', 'inspiré', '1937', 'limité', 'amitié', 'adapter', 'optique', 'étend', 'Nancy', 'Couleur', 'remplacement', 'jus', 'fédéral', 'Commander', 'motif', 'diffusé', 'morale', 'Laisser', 'modes', 'nationaux', 'max', 'remarque', 'Léon', 'Nature', 'Florence', 'présentent', 'commandement', 'mets', 'Front', 'Antonio', 'Pont', 'individu', 'sentir', 'Action', 'Conseils', 'Presse', 'élevage', 'retrouvé', 'répondu', 'solidarité', 'progressivement', 'enseigne', '2ème', 'paramètres', '1ère', 'Mario', 'coton', 'Team', 'West', 'collectivités', '--Vos', '92', 'toucher', 'Inscription', 'conseillers', 'Hugo', 'Menu', 'Loisirs', 'codes', 'Seine', 'Alex', 'Communication', 'Porte', 'paysages', 'sud-ouest', 'Prince', 'collective', 'accompagnement', 'tentative', 'stations', 'posé', 'parallèle', 'démarches', 'déposé', 'million', 'Demandé', 'privées', 'verte', 'Base', 'Joe', 'réparation', 'publications', 'Force', 'médicaments', 'garantir', 'laboratoire', 'extérieure', 'dirigé', 'proposés', 'candidature', 'consultation', 'consulté', 'conseille', '83', 'race', 'monnaie', 'destruction', 'spécialistes', 'cible', 'astuces', 'administratif', 'bien-être', 'venue', 'Égypte', '1931', 'Miss', 'reproduction', 'compose', 'intelligence', 'Outils', 'deviennent', '93', 'TVA', 'Toujours', 'Octobre', 'signes', 'randonnée', 'dangereux', 'fruit', '2009Sujet', 'boulot', 'Corse', 'Savoie', 'libération', 'édifice', 'numériques', 'spécialement', 'Of', 'offrent', 'contemporaine', 'informatiques', 'occuper', 'manifestation', 'disparition', 'revoir', 'gras', 'communiste', 'Mac', 'défi', 'renforcer', 'conservation', 'informer', 'Travail', 'patient', 'mini', 'motifs', 'com', 'pseudo', 'romaine', 'wiki', 'liaison', 'avoue', '1935', '71', 'Mots', 'provenant', 'ceux-ci', 'venus', 'nécessite', 'envies', 'relais', 'Françoise', 'densité', '1918', 'Juillet', 'maintenance', 'repose', 'voter', 'débats', 'recueil', 'pommes', 'Express', 'Lorraine', 'solide', 'Peu', 'disant', 'profite', '180', 'dépôt', 'attentes', '79', 'imposer', 'fameux', 'Monaco', 'nettoyage', 'Wi-Fi', 'sols', 'Mike', 'Rio', 'attitude', 'fasse', 'retirer', 'éclairage', 'Réunion', 'Fils', 'PDF', 'nomme', 'dédiée', 'mesurer', '82', 'circonscription', 'jugement', 'sud-est', 'It', 'Meilleur', 'fonctionnalités', 'configuration', 'Scott', 'musiciens', 'Production', 'parcs', 'nord-est', 'souris', 'historien', 'colis', 'art.', 'dizaines', 'destinée', 'oreilles', 'Rapport', '00ZTrès', 'Celui-ci', 'voudrais', 'conflits', 'secondaires', '1933', 'toit', 'Classement', 'passent', 'venant', '73', 'Membre', 'béton', 'norme', '81', 'Partie', 'Francisco', 'programmation', 'cru', 'Village', 'annuel', '2018', 'duo', 'doigts', 'épreuves', 'Permission', 'euro', 'magique', 'dents', 'applique', 'oiseau', 'Juifs', 'respectivement', 'quotidienne', 'Temps', 'disques', 'constitution', 'feuille', 'championnats', 'This', 'correctement', 'condamné', 'rentrer', 'Enfant', 'Museum', 'Septembre', 'mourir', 'Versailles', 'Adam', '1934', '140', 'Napoléon', 'Soleil', 'Qualité', 'ministres', 'Commande', 'diamètre', 'Caractéristiques', 'variété', 'interview', 'librairie', 'Certaines', 'aient', 'Département', 'volumes', 'contributions', 'préalable', 'rarement', 'virus', 'considérée', 'retourne', 'Vacances', 'Chef', 'con', 'Port', 'Mary', 'dirige', 'afficher', 'Argentine', 'aventures', 'Défense', 'savent', '1900', 'baie', 'eux-mêmes', 'japonaise', 'VI', 'ajoutant', 'Lettre', 'instrument', 'idéale', 'mobiles', 'abbé', 'génie', 'tablette', 'UE', '88', 'cerveau', 'inconnu', 'reconnaître', 'Bill', 'expédié', 'W', 'lumineux', 'ennemis', 'déplacer', 'Vêtements', 'savez', '......', 'Didier', 'physiques', 'Province', 'rénovation', 'appelés', 'Situé', 'Achat', 'be', 'constructeur', 'compatible', 'linge', 'masculin', '1932', 'stratégique', 'fournisseurs', 'exercices', 'détente', 'bancaire', 'Renault', 'forêts', 'producteurs', '2e', 'exigences', 'lot', 'normale', 'évènements', 'Justice', 'réalisés', 'richesse', 'GPS', 'vas', 'prêts', 'situés', 'olympique', 'dites', 'queue', 'Press', 'blessés', 'Tokyo', 'publier', 'élevée', 'exclusivement', 'Anna', 'polonais', 'chrétiens', 'médical', 'contraintes', 'existent', 'transition', 'roues', 'placer', 'Cité', 'fleur', 'amateur', 'Gabriel', 'relatif', 'tenant', 'us', 'Awards', 'secrets', 'spéciales', 'Vendredi', 'tâches', 'financières', \"O'\", 'centre-ville', 'sportifs', 'chaude', 'éventuellement', 'reçuesAnnonce', 'récente', 'Commerce', 'champions', 'atmosphère', 'présidence', 'accompagne', 'messagerie', 'Novembre', 'Tableau', 'positions', 'urbain', 'Référence', 'bienvenue', 'intègre', 'Gouvernement', '--Divers', 'Épisode', 'sièges', 'Faites', 'Jones', 'Collège', '1926', \"Jusqu'\", 'proposent', 'esthétique', 'évoque', 'croit', 'externe', 'empire', 'datant', 'nouveautés', 'Face', 'Conférence', 'tâche', 'noirs', 'opérateur', 'Orléans', 'recrutement', 'carré', 'pneus', 'Canal', 'salaire', 'offrant', 'Alfred', 'Acheter', 'institution', 'fine', 'pauvre', 'professionnelles', 'étrange', 'courants', 'fermé', 'adaptée', 'arrivent', 'compréhension', 'quasiment', 'Benoît', 'francophone', 'féminine', 'nations', 'V.', 'prête', 'Sébastien', 'hypothèse', '91', 'adaptés', 'statue', 'douleur', 'look', 'Vierge', 'fenêtres', 'sauce', 'Beach', 'forts', 'apparence', 'bénéficie', 'appels', 'encre', 'Rouen', 'infrastructures', 'romain', 'inspiration', 'difficiles', 'inscrits', 'réputation', 'Cordialement', 'suivent', 'Samedi', 'Steve', '►', 'espagnole', 'Année', 'similaire', '86', 'dieu', 'morte', 'fonctionnel', 'régionales', 'prédécesseur', 'conserve', 'câble', 'blocage', 'Quantité', 'médicale', 'résoudre', 'LNH', 'vapeur', 'transformer', 'départements', 'publiés', 'exceptionnelle', 'quelles', 'finances', 'Amour', '1921', 'sombre', 'Bataille', 'scénariste', 'présentée', 'compagnies', 'procédé', 'Blue', 'Jérôme', 'forment', 'courriel', 'tendances', 'nord-ouest', '125', 'normalement', 'quart', 'pur', 'traverse', 'chaînes', 'préciser', 'Zone', 'Oh', 'chœur', 'Téléphone', 'fidèle', 'Venise', 'commandé', '★', '1929', 'Benjamin', 'dame', 'hotel', 'fortes', 'satellite', 'colère', 'trains', 'traite', 'Poste', 'occidentale', 'favorable', 'princesse', 'salut', 'américaines', 'Mairie', 'claire', 'prévisions', 'indiquer', 'battre', 'collègues', 'Environnement', 'Réseau', 'rôles', 'White', 'scrabble', 'menée', 'écart', 'répartition', 'bloc', 'autoroute', 'malade', 'prêtre', 'aérienne', 'discipline', '110', 'Hongrie', 'témoignage', 'sortes', 'lutter', 'évident', 'alliance', 'mn', 'mines', 'bat', 'apparaissent', 'global', 'fournit', 'variable', 'Etats', 'League', 'royal', 'fréquence', 'filtre', 'Intérieur', 'Février', 'remarquable', 'périodes', 'Bob', 'dette', 'sponsorisé', 'Eau', 'adjoint', 'grille', 'adopté', 'quête', 'Néanmoins', 'Vidéos', 'Calendrier', 'congrès', '1919', 'culturelles', 'Bertrand', 'trente', '89', 'C3', 'choc', 'totalité', 'fourni', 'Ã', 'Liège', 'Luc', 'fromage', 'distingue', 'fuite', 'affichage', 'commerciaux', 'commerciales', 'Convention', 'Rhône', 'effectif', 'engagé', 'sauvage', 'Quatre', 'bienvenusCadre', 'arc', 'valide', 'employé', 'URL', 'chats', 'détruit', 'kit', 'Tours', 'Ali', 'recommandons', '160', 'incroyable', 'chargée', '360', 'prévoit', 'adaptées', 'encyclopédie', 'impôt', 'positif', 'campagnes', '--LES', 'rêves', '1917', 'journées', 'Commentaire', 'prépare', 'Dictionnaire', 'expertise', 'Ligne', 'fidèles', 'communiquer', 'tire', 'photographe', 'Samsung', 'montrent', 'Xavier', 'musées', 'prends', 'modalités', 'individuelle', 'adversaire', 'Jeunesse', 'Trump', 'islam', 'OK', 'sec', 'Donald', 'promouvoir', 'module', 'tournage', 'refus', 'réussir', 'présentant', 'end', 'Business', 'Invité', 'disait', 'Management', 'locations', 'Films', 'contacts', 'Jean-Paul', 'vocation', 'Alice', 'bandes', 'news', 'your', 'réussit', 'remercie', 'observation', 'Tony', 'états', 'religieuses', 'prit', 'trucs', 'Localisation', 'fournisseur', 'perso', 'sensible', 'entraîne', 'consacrée', 'Arnaud', 'canadienne', 'municipale', 'quinze', 'localité', 'délais', 'prière', 'Méditerranée', 'Center', 'pensez', 'Activités', 'agglomération', 'cadres', 'smartphone', 'compléter', 'inférieur', 'policiers', 'trouvait', 'Fête', 'aides', 'Grande-Bretagne', 'Vol', 'aire', '1928', 'hectares', 'Julie', 'pédagogique', 'Collectif', 'couvert', 'écologique', 'prestation', 'Sénégal', 'vague', 'Christine', 'réserver', 'impôts', 'garage', 'Route', 'détaillée', 'juridiques', 'due', '1911', 'chevalier', 'naturellement', '98', '2.0', 'pilotes', 'Groupes', 'découvertes', \"y'\", 'av.', 'magie', 'lourd', 'Peut-être', 'êtres', 'complexes', 'analyses', 'aliments', '1901', 'proposées', 'Hélène', 'sixième', 'prisonniers', 'allemands', 'expliqué', 'future', 'console', 'économies', 'isbn', 'comparer', 'pouces', 'Vainqueur', 'étrangère', 'accords', '87', '1910', 'Hors', '94', 'connait', 'Edward', 'comparaison', 'pleinement', 'engager', '96', 'augmente', 'Restaurant', 'pub', 'expert', 'Lac', 'hautes', 'Royaume', 'voisin', 'management', 'régulière', 'jazz', 'essaie', 'spectacles', 'Congo', 'créateur', 'poster', 'exceptionnel', 'shift', 'couper', 'tiré', 'localisation', 'Die', 'concentration', 'Pen', 'paire', 'Animaux', 'commencent', 'contributeurs', 'clientèle', 'registre', 'clôture', 'implique', 'largeur', 'Science', 'farine', 'Inn', 'Hotels.com', 'Fonds', 'longs', 'juifs', 'url', 'RC', 'bijoux', 'contrôler', 'sommeil', 'mit', 'obligations', 'grève', 'sécurisé', 'notice', 'crime', 'initialement', 'clavier', 'soupe', 'UMP', 'répertoire', 'streaming', 'complémentaires', 'Life', 'Disponibilité', 'remonte', 'Sénat', 'Corps', 'Sony', 'flotte', 'Game', 'priorité', 'tonnes', 'sélectionné', 'Yoga', 'manuel', 'milieux', 'Nouveaux', 'tenté', 'proposée', 'Alger', 'Nathalie', 'favoriser', 'facteur', 'Real', 'meubles', 'chinoise', 'ingrédients', 'modifiée', 'évoluer', 'france', 'accessibles', '1925', 'Auguste', 'Jérusalem', 'An', 'aise', 'Bravo', 'ONU', 'enlever', 'foyer', 'Jean-Claude', 'caméra', 'ok', 'Membres', 'ordinaire', 'colonne', 'fiction', 'chronique', 'Claire', '1924', 'administratives', 'spéciaux', 'Panier', 'taxe', 'gardien', 'différences', 'identique', 'douceur', 'artillerie', 'RDV', 'Outre', 'autrefois', 'alerte', 'Annuler', 'hauts', 'maritime', 'peintures', 'Format', 'acide', 'témoignages', 'cycliste', 'panneaux', 'lectures', 'coucher', 'adoption', 'Danemark', 'progression', 'accepté', 'Best', 'professeurs', 'Ford', 'panoramique', 'Entreprise', 'ch', 'Euro', 'pareil', 'drapeau', 'admis', 'confirmé', 'Voyage', 'Dimanche', 'musiques', 'compétence', 'célèbres', 'extraordinaire', 'jouent', 'Group', 'canon', 'J.-C.', 'lune', 'Soyez', 'Carlos', 'maternelle', 'récent', 'Sommaire', '1915', 'boulevard', 'étions', 'constater', 'causes', 'InvitéInvitéSujet', 'investissements', 'tranquille', 'alternative', 'Jean-François', 'CE', 'chances', 'Kit', 'négociations', 'limiter', 'Atlantique', 'Enfants', 'Lot', 'Taille', 'bonus', 'annuelle', 'francs', 'jambes', 'lever', 'pertes', 'stress', 'connaissent', '3ème', 'veuillez', 'quasi', 'Données', 'lunettes', '1912', 'voient', 'habitat', 'fonde', 'Free', 'seules', 'procédures', 'jury', 'Green', 'antique', 'Numéro', 'Jeudi', 'Ukraine', 'nation', 'apparaître', 'garçons', 'Niveau', 'manches', 'riz', 'maîtres', 'hameau', 'ressort', 'récents', 'circonstances', 'québécois', 'rentre', 'newsletter', 'électroniques', 'crimes', 'habitation', 'el', 'all', 'réduite', 'profonde', 'trouvez', 'LED', 'entrées', 'Médaille', 'Naissance', '3e', 'content', 'régler', 'universités', 'peint', 'jusque', 'individuel', 'Jean-Baptiste', 'intervenir', 'Utilisateur', 'blessé', 'maximale', 'téléchargement', 'commander', 'échapper', 'Décembre', 'To', 'sponsoriséSujet', 'souffle', 'Amazon', 'venait', 'pousse', 'plaques', 'ouvriers', 'continent', 'forums', 'terminer', 'auxquels', 'restera', 'britanniques', 'Irak', 'FRANCE', 'trouvant', 'Semaine', 'diagnostic', 'Roland', 'récentes', 'CA', 'caisse', 'imaginer', 'quitté', 'Temple', 'rendent', 'considérer', 'permanence', 'instruction', 'explication', 'contribuer', 'junior', 'Costa', 'tapis', 'Commune', 'Résumé', 'Norvège', 'that', 'atteinte', 'FR', 'Cap', '1927', 'lancée', 'mixte', 'pure', 'micro', 'disponibilitésDu', 'ferroviaire', 'bleue', 'sentiments', 'Fermer', 'vertu', 'mont', 'courts', 'sacré', '130', 'Metz', 'contente', 'séjours', 'universitaires', 'v.', 'sachant', 'resté', 'colonel', 'ménage', 'couvre', 'Utilisation', 'Brown', 'PàS', 'trait', 'ronde', 'officiers', 'Williams', 'oeuvres', 'Hall', 'bisous', 'Test', 'Walter', 'gars', 'serais', 'soutient', 'franchement', 'déposer', 'monastère', 'indice', 'mec', 'Équipe', 'genres', 'identification', '--Présentation', 'Tél', 'Ajoutez', 'accueillant', 'mariée', 'Louise', 'conclusion', 'html', 'interventions', 'précédents', 'destinés', 'abonnement', 'French', 'bouteille', 'abrite', 'communautaire', 'Magazine', 'imagine', 'foule', 'accent', 'citoyen', 'Esprit', 'rappel', 'BMW', 'monsieur', 'trace', 'Public', 'connaitre', 'parfum', 'Mini', 'poèmes', 'réalisées', 'Mathieu', 'culturels', 'Ensemble', 'soutenu', 'Renaissance', 'Eugène', 'spécialisés', 'AS', 'soyez', 'marquée', 'possession', 'Galaxy', 'ml', 's.', 'étudie', 'Bourse', 'geste', 'gâteau', 'Brest', 'grossesse', 'agissait', 'trimestre', 'Charlie', 'School', 'familial', 'joindre', '1913', 'ailes', 'séparation', 'générations', 'réactions', 'obligé', 'Wars', 'Profil', 'cool', 'Maire', 'grosses', 'mine', 'Mobile', 'Construction', 'intéresser', 'occupé', 'intellectuelle', '700', 'room', 'Liens', 'Journée', 'passages', 'Publicité', 'Auvergne', 'évaluer', 'pompe', 'sûrement', 'Finalement', 'cherchez', 'parlent', 'tables', 'tourné', 'classée', 'not', 'centrales', 'vis-à-vis', 'acquérir', 'I.', 'lèvres', 'César', 'London', 'signal', 'actuels', 'Île', 'explications', 'supports', 'prime', 'interprète', 'choisit', 'représenter', 'Magasiner', 'intervient', 'Trouvez', 'Entretien', 'représenté', 'préfecture', 'Manchester', '24h', 'restant', 'Azur', '้', 'sondage', 'Time', 'métrage', 'carbone', '2005Sujet', 'réfugiés', 'Nouvelles', 'nettement', 'Lausanne', 'proposant', 'Chapelle', 'arbitre', 'exercer', 'pouvaient', 'puissent', 'Support', 'testé', 'PARIS', '2010Sujet', 'drôle', 'doté', 'pauvreté', 'usages', 'conformément', 'Scénario', 'posté', 'graves', 'représentations', 'froide', 'oppose', 'Camille', 'permanente', 'littéraires', 'présentées', 'signaler', 'vingtaine', 'intégral', 'dramatique', 'constituée', 'Lundi', 'souligne', 'refaire', 'sonore', 'Reims', 'Modifier', 'spectateurs', 'parvenir', 'arabes', 'Roman', 'Imprimer', 'Ivoire', 'casque', 'Littérature', 'faibles', 'trou', 'suppose', 'Déjà', 'évènement', 'carton', 'Domaine', 'quelqu', 'Avenue', '1922', 'verbe', 'volet', 'diocèse', 'sexuelle', 'avancer', 'futurs', 'animé', 'Texte', 'éthique', 'Linux', 'Sarah', 'matériels', 'inférieure', 'Paru', 'boutons', 'Mardi', 'Juste', 'Dragon', 'universelle', 'Dijon', 'guère', 'Aquitaine', 'observer', 'Lit', 'convaincre', 'meurtre', 'Nintendo', '1916', 'interdiction', 'Kim', 'destin', 'balle', 'Écosse', 'établit', 'voler', 'astéroïde', 'conservé', 'brut', 'opéra', 'cardinal', 'Août', 'passagers', 'Pyrénées', 'Samuel', 'Inc', 'triste', 'verts', 'succession', 'Victoria', 'Bleu', 'incluant', 'Jackson', 'remplace', 'Island', '1923', 'Météo', 'Jour', 'russes', 'abri', 'révolutionnaire', 'aviation', 'puisqu', 'postal', 'communs', 'tube', 'essentielles', 'Deuxième', 'Jeune', 'attends', 'randonnées', 'paradis', 'requête', 'enseignant', 'plaît', 'saisir', 'consultez', 'alertes', 'initiale', 'panneau', 'caractéristique', 'attaquer', 'Recettes', 'commis', 'Caen', 'aile', 'blogs', 'désert', 'Bible', 'Mohamed', 'Section', 'vendeur', 'Hier', 'Little', 'Exposition', 'fonctionner', 'er', 'documentation', 'élaboration', 'chrétienne', 'allé', 'Stock', 'mené', 'précieux', 'supérieures', 'extraits', 'schéma', 'duquel', 'Cameroun', 'internes', 'golf', 'Professeur', 'terrible', 'parisienne', 'Anthony', 'frappe', 'Celle-ci', 'vrais', 'poursuite', 'nationalité', 'officiels', 'cordes', 'fédérale', 'gardé', 'Hervé', 'comprennent', 'intéressé', 'constructions', 'adopter', 'fabricant', 'apparemment', 'civilisation', 'aurai', 'Contactez-nous', 'islamique', 'indiquant', 'feux', 'inutile', 'Machine', 'trés', 'Young', 'Bulletin', 'Contacter', 'parlementaire', 'composants', 'boire', 'couronne', 'bourg', 'agences', 'up', 'poème', 'Roumanie', 'graphiques', 'remarquer', 'fantastique', 'fontsize', 'passés', '̀', 'Alexander', 'indépendants', 'profond', 'publicités', 'Avignon', 'constante', 'Consultez', 'star', 'figures', 'foot', 'épaisseur', 'paraître', 'arguments', 'Allemands', 'tombé', 'introduit', 'Quels', 'sainte', 'magnifiques', 'Toronto', 'volant', 'Angers', 'Légion', 'églises', 'Bar', 'vive', 'rois', 'suivie', 'habite', 'habitant', 'maillot', 'prévenir', 'taxes', 'Malheureusement', 'case', 'cliquer', 'toilette', 'charmant', 'jeter', 'appellation', 'désigné', '1906', 'définit', 'Jim', 'travaillent', 'fiable', 'VII', 'présentés', 'réfléchir', 'chère', 'Kevin', 'argument', 'sportives', 'my', 'Excellent', 'géant', 'produite', 'contribue', 'retrouvent', 'Roy', 'oubliez', 'façons', 'ouverts', 'réserves', 'grecque', 'classés', 'Double', 'pourrais', 'am', 'ouvertes', 'graines', 'Annuaire', 'Laval', 'our', 'host', 'etait', 'sortant', 'Alliance', 'étages', 'voila', 'typique', 'dedans', 'trône', 'profondément', 'battu', 'Maritimes', 'Soit', 'Day', 'souhaitent', 'hein', 'musicien', 'électeurs', 'Mans', 'prévues', 'Administration', 'rapides', 'gueule', 'marins', 'achète', 'devons', 'électorale', 'pratiquement', 'clinique', 'équipage', 'servent', 'spacieux', 'Marques', 'immédiate', 'géographiques', 'insee', 'associée', 'Quelles', 'PME', 'cf.', 'collecte', 'Charlotte', 'valable', 'Editions', 'employeur', 'promo', 'file', 'Boston', 'bateaux', 'dispute', 'revues', 'new', 'couches', 'Fred', 'deviendra', 'coll', 'obligatoires', 'bgcolor', 'traitements', 'verra', 'folie', 'UNE', 'librement', 'rechercher', 'collaborateurs', 'concernés', 'déplacements', 'partagé', 'Technique', 'ya', 'marge', 'powiat', 'escalier', 'Ontario', 'Minimum', 'priori', 'Café', 'manche', 'SNCF', 'Dossier', 'remboursement', 'survie', 'fixation', 'Paiement', 'Six', 'civils', 'W.', 'fournis', 'pensent', 'Lecture', 'zéro', 'séances', 'Mali', 'Vu', 'recommandations', 'Vallée', 'utilité', 'resultat', 'Personne', '1870', 'constate', 'âgé', 'Golf', 'fixé', 'policier', 'provoque', 'ligue', 'onze', 'pot', 'orbite', 'Mercredi', 'more', 'tissus', 'Central', 'néerlandais', 'récupération', 'détruire', 'OFFRE', 'Amsterdam', 'décoré', 'humeur', '1905', 'CV', 'ordinateurs', 'biologique', 'odeur', 'Texas', 'énormément', 'provinces', 'puits', 'Gros', 'septième', 'Obama', '350', 'citron', 'rapporte', 'attendu', 'Sylvie', 'émotions', 'séminaire', 'Né', 'Gilbert', 'vaisseau', 'stages', 'Patrimoine', 'bravo', 'assister', '¨', 'Enseignement', 'Johnson', '97', 'Venez', 'Jean-Luc', 'militants', 'parlant', 'dommages', 'savoir-faire', 'juive', 'artisans', 'Orient', 'estimé', 'satisfaction', 'gentilé', 'ha', 'ventre', 'Fontaine', 'Moulin', 'dormir', 'simplicité', 'tchèque', 'Karl', 'intense', 'chimiques', 'décennies', 'Dame', 'Mission', 'crédits', 'décider', 'fonctionnaires', 'serbe', 'accueillis', 'stable', 'complémentaire', 'universel', 'conquête', 'centaine', 'Allez', 'dépasse', 'philosophe', 'exprime', 'compliqué', 'Beauté', 'excellence', 'Las', 'utilisez', 'fiches', 'preuves', 'Marguerite', 'Stephen', 'plafond', 'drame', 'Trouver', 'recommandé', 'cités', 'haine', 'stay', 'Derniers', 'opérateurs', 'actualités', 'clic', 'abandonné', 'apprécier', 'prochaines', 'exposé', 'cuire', 'cap', 'côtes', 'préserver', 'ballon', 'évaluations', 'procéder', 'correspondent', 'complément', 'Bonsoir', 'marchandises', 'Transport', 'serai', 'disposer', '2017Voir', 'Pages', 'roue', 'Bac', 'SA', 'citation', 'combattre', 'refusé', 'Offre', 'Citation', 'témoin', 'dessert', 'qualifié', 'PSG', 'blanches', 'possèdent', 'probable', 'dirigeant', 'invitons', 'pause', 'pôle', 'adhésion', 'attribué', 'sacs', 'chef-lieu', 'dirigée', 'traditions', 'syndicats', 'manga', 'facture', 'Blanche', 'stratégies', 'heureuse', 'vendus', 'Techniques', 'moral', 'animations', 'issues', 'pensées', 'tailles', 'entraîner', 'Éric', 'Franck', 'étendue', 'forfait', 'hygiène', 'vice-président', '2010Age', 'latine', 'Neuf', 'oeufs', 'cellule', 'conseillé', 'protocole', 'Munich', 'dispositifs', 'anagramme', 'barrage', 'Édouard', 'Up', 'affronter', 'démarrage', 'paris', 'Jean-Louis', 'ferait', 'capables', 'satisfaire', 'communications', 'ingénierie', 'fréquemment', 'bourse', 'traités', 'Aperçu', 'Réalisation', 'actuelles', 'essentielle', 'défini', 'charte', 'serveurs', 'pomme', 'réunions', 'provenance', 'Question', 'catholiques', \"tarifsJusqu'\", 'Historique', 'énergies', 'branches', 'quelconque', 'mousse', 'défis', 'échanger', '0,00', 'horaire', 'apt', 'productions', 'Exemple', 'Johnny', 'TF1', 'Portrait', 'touristes', 'week', 'Statistiques', 'climatique', 'accusé', 'Logement', 'frac', 'époux', 'intéressante', 'canapé', 'Crédit', 'participent', 'rural', 'miroir', 'oublie', 'téléfilm', 'bière', 'correspondance', 'ultime', 'domestiques', 'dégâts', 'gouvernements', 'situées', 'Langue', 'stabilité', 'externes', 'reconnue', 'suspension', 'partiellement', 'gloire', 'majeurs', 'ISBN', 'dévoile', 'instructions', 'photographies', 'immigration', 'Company', 'select', 'institut', 'America', 'papiers', 'exécutif', 'disposent', 'étudié', 'fédération', 'Oise', 'Seul', 'Kong', 'nulle', 'opposé', 'Pôle', 'os', 'Troisième', 'fiscal', 'trajet', 'contribué', 'Brian', 'têtes', 'Gallimard', 'faculté', 'Dark', 'Unitaire', 'médicament', 'qualification', 'chimique', 'certificat', 'Racing', 'héritage', 'Jane', 'talents', 'Award', 'explosion', 'malades', 'confidentialité', 'positive', 'joint', 'sèche', 'ondes', 'nef', 'Carl', 'assistant', 'rond', 'canons', 'exerce', 'notoriété', 'éditeurs', 'URSS', 'plainte', 'idéalement', 'imprimé', 'basket-ball', 'XXX', 'al', 'boutiques', 'bête', 'connues', 'instance', '1907', 'Bay', 'Côté', 'astéroïdes', 'balcon', 'Robin', 'dynastie', 'Finlande', '2011Sujet', 'tués', 'esprits', 'sons', 'Taylor', 'mobilier', 'remonter', 'Jean-Marie', 'réglementation', 'cousin', 'Peugeot', 'Île-de-France', 'routière', 'marié', 'Marque', 'alliés', 'North', 'signer', 'Pinterest', 'vend', 'Celui', 'devaient', 'BTS', 'voyant', 'attirer', 'Suivant', 'nomination', 'digne', 'livré', 'Charte', 'partisans', 'Pacifique', 'habituellement', 'laser', 'circuits', 'délégation', 'Mouvement', 'températures', 'thématique', 'comportements', 'faim', 'réservéDu', 'précédentes', 'élite', 'colonnes', 'reconnaît', 'œufs', 'salarié', 'république', 'ingénieurs', 'ménages', 'merveilleux', 'oreille', 'investir', 'noix', 'vs', 'RSS', 'antenne', 'satisfait', 'Actuellement', 'Reine', 'racines', 'oncle', 'traits', 'motivation', 'Centrale', 'attentat', 'conducteur', 'Grands', 'connaissez', 'imaginaire', 'Contrairement', 'horreur', 'Serbie', 'marcher', 'feront', 'siren', 'filiale', 'Lady', 'relatifs', 'Marketing', 'fermer', 'confirmer', '1908', 'AC', 'T.', 'placée', 'récompense', 'législation', '±', 'ultra', 'fortune', 'Comté', 'traditionnels', 'Power', 'projection', 'moulin', 'Lune', 'bords', 'surpris', 'nécessairement', 'miel', 'hésite', 'Compte', 'remarqué', 'dépasser', 'Images', 'bénéfice', 'Jacob', 'territoriale', 'transmettre', 'iPad', 'have', 'intégralité', 'scrutin', 'compétitions', 'pensais', 'Félix', 'distinction', 'Chili', 'subi', 'préparé', 'réunit', 'naît', 'combinaison', 'réalisations', 'handicap', 'horizon', 'OS', 'FN', 'Oscar', 'orientale', 'Colombie', 'baseball', 'accueillante', 'supprimé', 'filtres', 'trous', 'Virginie', 'Marne', 'Station', 'transforme', 'War', 'pousser', 'Lieu', 'métalliques', 'phare', 'chante', 'fidélité', 'degrés', 'Nicole', 'coûte', 'ordonnance', 'XIXe', 'révolte', 'vies', 'révision', 'Appel', 'dictionnaire', 'Romain', 'sauvegarde', 'Giovanni', 'administrateurs', 'isolation', 'Étienne', 'camps', 'départemental', 'Fleurs', 'Mort', 'Cup', 'primaires', 'grade', 'expansion', 'Classe', 'gmina', 'corruption', 'Hill', 'Chevalier', 'Jean-Jacques', 'domination', 'Prise', 'illustrations', 'entouré', 'litres', 'Garde', 'mg', 'souligné', 'sensibles', 'Jonathan', 'franchise', 'pharmacie', 'High', 'k', 'semblait', 'Besoin', 'manifeste', 'venez', 'terrorisme', 'gentillesse', 'corriger', 'South', 'impériale', 'Suppression', 'artistiques', 'notables', 'Émile', 'Pack', 'masque', 'tue', 'Gratuit', 'Luis', 'nombres', 'sélections', 'Ile', 'Études', 'préférence', 'fausse', 'recul', 'devront', 'associées', 'Opéra', 'immobilière', 'violences', '2011Age', 'AFP', 'thématiques', 'stars', 'conversion', 'carburant', 'tournant', 'apres', 'spacieuse', 'fermés', 'suprême', 'pis', 'annoncer', 'topic', 'FORUM', 'saut', 'justifier', 'celles-ci', 'Doctinaute', 'promotions', 'régionaux', 'abandon', 'ports', 'volontaires', 'Cinq', 'cite', 'ajout', 'récits', 'responsabilités', 'Gaulle', 'susceptibles', 'précédemment', 'reposer', 'lieutenant', 'provisoire', 'DJ', 'sensation', 'sections', 'sanitaire', 'Chaussures', 'prévoir', 'vaisselle', 'Night', 'Occident', 'mentionné', 'consommateur', 'neutre', 'solaires', 'émotion', 'initial', 'mâle', '2017Déjà', 'personnellement', 'intensité', 'constituer', 'Formule', 'intégrée', 'sculpture', 'extrémité', 'parisien', 'Show', 'soldat', 'paragraphe', 'chair', 'boucle', 'Clément', 'banlieue', 'Ier', 'laine', 'voïvodie', 'archevêque', 'Hans', 'mystère', 'recommander', 'plume', 'anime', 'extérieurs', 'continuent', 'Bistro', 'strictement', 'Flash', 'Garantie', 'imprimer', 'data', 'Athènes', 'traditionnelles', 'Découvrir', 'promis', 'statistique', 'mécanisme', 'Tournoi', 'plaine', 'oblige', 'appuie', 'cheminée', 'VTT', 'Barbara', 'Allah', 'poule', 'écrivains', 'installée', 'autorisé', 'évolutions', 'Islam', 'fiche.php', 'fermée', 'pp.', 'Laura', 'renommée', 'requis', 'monté', 'technologique', 'enfer', 'témoins', 'Story', '/', 'jolies', 'cuivre', 'montrant', 'cassini', 'pollution', 'défenseur', 'Petits', 'surfaces', 'élevés', 'tirage', 'Valérie', 'déclarations', 'psychologie', 'XIII', 'volontaire', 'bloqué', 'ampleur', 'Lens', 'facilité', 'cassini.ehess.fr', 'Éducation', 'Sauf', '2,99', 'aperçu', '−', 'Libération', 'chaine', 'mineurs', 'urbanisme', 'doigt', 'imagination', 'quantités', 'symbolique', 'faisons', 'opportunité', 'commissaire', 'finance', 'Xbox', 'concepts', '--Problèmes', 'touché', 'pratiquer', 'baron', 'visibles', 'loup', 'établie', 'aériennes', 'puissante', 'participant', 'phénomènes', 'Concernant', '1896', 'Hong', 'aidé', 'cou', 'voté', 'chimie', 'Champagne', 'catastrophe', 'Début', 'sûre', 'Piscine', 'génial', 'HP', 'Amiens', '101', 'Canton', 'noires', 'styles', 'perspectives', 'attendent', 'Volume', 'remet', 'Certes', 'Video', 'hebdomadaire', 'accidents', 'Auto', 'Boutique', 'Villes', 'attaquant', 'supplément', 'jugé', 'recherchez', 'virtuelle', 'Toulon', 'apport', 'Systèmes', 'Ceux', 'Quoi', 'Commons', 'plait', 'égale', 'assurances', 'découvrez', 'linguistique', 'Analyse', 'invasion', 'robot', 'Long', 'Floride', 'créés', 'Anvers', 'Standard', 'réformes', 'jouant', 'so', 'prochains', 'Siège', 'varie', 'abonner', 'syndicat', 'Petites', 'souple', 'Connectez-vous', 'intitulée', 'anciennement', 'téléphonique', 'box', 'poulet', 'Saint-Pierre', 'bébés', 'spatiale', 'Parking', 'considérés', 'engagements', 'annexe', 'réunis', 'fondateurs', 'salaires', 'toilettes', 'réflexions', 'mauvaises', 'insectes', 'parait', 'couture', 'prouver', 'Photographie', 'précisé', 'Ray', 'choisis', 'gentil', 'effectuée', 'seuil', 'informé', 'apprécie', 'Alan', 'itinéraire', 'clos', 'terrestre', '✉', 'orgue', 'retenir', 'continu', 'dons', 'Alexis', 'devenus', 'Poids', 'descente', 'tabac', 'Wikipedia', 'opus', 'Society', 'debout', 'invitation', 'présidente', 'Rencontre', 'ème', 'problématique', 'illustre', 'insertion', 'poitrine', 'absolue', 'payé', 'apporté', 'Cher', 'College', 'distinguer', 'adhérents', 'ISO', 'Continuer', 'Tweet', 'Secrétaire', 'PSP', 'ruisseau', 'chaise', '1909', 'faune', 'illustration', 'conjoint', 'dose', 'sélectionner', 'one', 'fiscale', 'massage', '1,5', 'bandeau', 'protégé', 'promu', 'Femmes', 'Nouveautés', 'fallu', 'préfet', 'libertés', 'beaux-arts', 'romantique', 'enjeu', 'fibre', 'soeur', 'moi-même', 'accorde', 'Américains', 'curieux', 'subit', 'occasions', 'facebook', 'analyser', 'religions', 'augmenté', 'aussitôt', 'quai', 'Créé', 'Médecin', 'littéralement', 'directrice', 'demandent', 'examens', 'charbon', 'est-elle', 'noblesse', '2012Sujet', 'pleins', 'immédiat', 'historiens', 'neuve', 'Naples', 'Louvre', 'savait', 'écrans', 'juif', 'Abbaye', 'efficaces', 'incontournable', 'spécialité', 'Newsletter', 'investisseurs', 'éliminer', 'tranche', 'Catalogue', 'tiennent', 'cacher', 'gère', 'organes', 'proviennent', 'authentique', 'générique', 'alias', 'adresser', 'acoustique', 'Andrew', 'généraliste', 'studios', 'Biographie', 'financer', 'voyager', 'humidité', 'dépit', 'existait', 'clan', 'correct', 'op', '1793', 'Tel', 'drogue', 'porte-parole', 'sauvages', 'tenues', 'attentats', 'rendant', 'mobilisation', 'soirées', 'show', 'temporaire', 'barbecue', 'inscriptions', 'ref-data4', 'fixer', 'savais', 'adoré', \"Lorsqu'\", 'traversée', 'Arc', 'Libre', '1890', 'suédois', 'oldid', 'compagnon', 'admin', 'Etudes', 'Social', 'exemplaire', 'libérer', 'encontre', 'huiles', 'Wilson', 'Choisissez', 'coupé', 'inclut', 'rédigé', 'filière', 'constaté', 'View', 'paquet', 'essaye', 'dîner', 'ah', 'nice', 'Data', 'juger', 'dieux', 'olive', 'boissons', 'retours', 'phases', 'Manager', '1880', 'égal', 'observations', 'parlement', 'Profitez', 'définitive', 'ref-data8', 'Lewis', 'jouets', 'mécanismes', 'ref-data3', 'délicieux', 'ref-data1', 'ref-data2', 'ref-data5', '105', 'ref-data7', 'ref-data6', 'évolué', 'réside', 'mecs', 'chargement', 'exil', 'dir.', 'destinées', 'circulaire', 'consacre', 'biographie', 'retenu', 'initiatives', 'livrer', 'Lui', 'existant', 'Prague', 'Horaires', 'tort', 'violon', 'Economie', 'dégagée', 'manquer', 'municipales', 'développée', 'coller', 'refuge', 'mange', 'décrire', 'raconter', 'relever', '--Discussions', 'surement', 'papa', 'methodes', 'anonyme', 'Longueur', 'Dan', 'conversation', 'Nouvel', 'parution', 'pédagogiques', 'allée', 'coalition', 'contributeur', 'Lumière', 'shopping', 'Marché', 'Golden', 'révélé', 'amène', 'variables', 'Madagascar', 'sœurs', 'voisine', 'Ressources', 'orthographe', 'nu', 'femelle', 'Surtout', 'offerts', 'consensus', 'composés', 'nomenclatures', 'âgées', 'Manche', 'XIV', 'River', 'CC', 'p.revenumedian', 'Installation', 'Cuba', 'donnera', '2021173', 'Nouvelle-Zélande', 'Secret', 'Papier', 'EST', '2129090', '2123878', 'explorer', 'adversaires', '2129062', '2129059', '2123937', 'rendus', '2129068', '2129076', 'axes', 'noble', 'restes', 'colonie', 'colline', 'Départ', 'garanties', 'entourage', 'Ed', 'Cahiers', 'die', 'francophones', 'géographie', 'frein', 'conte', 'devenant', 'pattes', 'activer', 'p.page2code', 'Lucas', 'faisaient', 'troupe', 'décors', \"avancéeS'\", 'affirmé', 'plate-forme', 'renseignement', 'Notice', 'Info', 'africaine', 'relief', 'appuyer', 'portefeuille', 'tentatives', 'Davis', \"VOIRL'\", 'plongée', 'bis', 'Arabie', 'livret', 'rajouter', 'ref-data9', 'History', 'coordination', 'Annonces', 'phrases', 'partition', 'servant', 'émis', 'SMS', 'courir', 'colle', 'disparaître', 'q', 'Droits', 'fur', 'Mettre', 'Internationale', 'gain', 'transformé', 'wifi', 'TripAdvisor', 'gratuites', 'Martine', 'visibilité', 'sculpteur', 'jean', 'ambition', 'chars', 'bol', 'Rivière', 'susceptible', 'suites', 'réservée', 'rendement', 'expose', 'panne', 'perception', 'trouble', 'For', 'Spa', 'Camping', 'indiqués', 'laissent', '900', '115', 'pc', 'Mémoire', 'systématiquement', 'dirait', 'doctorat', 'terminée', 'text-align', 'Police', 'reportage', 'lacs', 'unies', 'metal', 'pop35', 'Assurance', 'an35', 'if', 'Faculté', 'offerte', 'aquarium', '2534314', 'balade', 'rempli', 'recens35', 'avocats', 'lis', 'Elizabeth', 'sérieusement', 'ambassadeur', '1904', 'confirmation', 'business', 'pop36', 'an36', 'publiées', 'Eh', 'Boîte', 'amoureuse', 'trentaine', '1881', 'Allemand', 'recens36', 'contemporains', 'Lake', 'ICI', 'Tim', 'installés', 'sanitaires', 'amont', 'finition', 'compagnons', 'pop37', 'an37', 'Somme', 'recens37', 'étudiante', 'particulières', 'Points', 'poignée', 'épicerie', 'great', 'vents', 'More', 'Laurence', 'suicide', 'chrétien', 'Langues', 'brillant', 'lourds', 'inspire', 'conçue', 'clocher', 'chapeau', 'mineur', 'planche', 'rotation', 'suffisant', 'abandonner', 'chambresLocation', 'couvrir', 'chirurgie', 'cahier', 'menaces', 'zonages', 'Architecture', 'pop38', 'Règlement', 'an38', 'prenez', 'promenade', 'recens38', 'auxquelles', 'créant', 'tirs', 'souviens', 'noyau', 'travaillant', 'publicitaire', 'Ernest', 'démonstration', 'personnaliser', 'inventaire', 'libéral', 'Médecins', 'Sun', 'Dead', 'continuité', 'Déclaration', 'passées', 'confusion', 'harmonie', 'assaut', 'May', 'eBay', 'armé', 'portugais', 'Marco', 'Nick', 'Girl', 'Européenne', 'remporter', 'Cartes', 'blé', 'sensibilité', 'formats', 'concernent', 'illustré', 'disciplines', 'témoigne', 'courtes', 'Diego', 'abonnés', 'décident', 'assassinat', 'DC', 'définie', 'tablettes', 'mi', 'partielle', 'supporter', 'assurée', 'marquis', 'discret', 'marquer', 'Résistance', 'épargne', 'communal', 'opinions', 'boule', 'symptômes', 'blessures', 'parts', 'convaincu', 'an39', 'pop39', 'K.', 'recens39', 'avère', 'Pâques', 'Librairie', 'ruines', 'days', 'Broché', 'intime', 'commune.asp', 'depcom', 'bombe', 'Valence', 'tubes', 'hâte', 'portraits', 'notions', 'Décoration', 'laver', 'obtention', 'bizarre', 'transparence', 'Times', 'fitness', 'British', 'lourde', 'actu', 'chalet', 'honte', 'interprété', 'reconstruction', 'Chacun', 'variations', 'avez-vous', 'brevet', 'mémoires', 'séquence', 'diriger', 'personnalisé', 'saga', 'provoquer', 'ponts', 'an40', 'Peut', 'distances', 'souffrance', 'organisées', 'Client', 'Madeleine', 'Limoges', 'attire', 'échecs', 'assis', 'Entrée', 'aîné', 'génétique', 'reviendrons', 'prononcé', 'conservateur', 'Saint-Louis', 'savons', 'voyez', 'formidable', 'Brigitte', 'noté', 'Album', 'rangs', 'territoriales', 'can', 'Leurs', 'OU', 'interdite', 'lave', 'couteau', 'vernis', 'chasseurs', '1500', 'monétaire', 'heureusement', 'matches', 'terroristes', 'subir', 'peaux', 'particules', 'Jazz', 'basque', 'perdue', 'Poitiers', 'Notes', 'enquêtes', '---', 'seins', '├', 'offensive', 'time', 'brigade', 'Contacts', 'lots', 'routier', 'Saint-Martin', 'agréables', 'Meilleure', 'Documents', 'cherchent', 'succède', 'diffuser', 'Dentiste', '--Archives', 'pop40', 'accompagnée', 'recens40', 'constat', 'observe', 'espoirs', 'respecte', 'bibliothèques', 'considérable', 'Besançon', 'Hello', 'Taux', 'Marion', 'planification', 'Réserver', 'construits', 'académie', 'tendre', 'partant', 'épée', 'poétique', 'vitesses', '2014-2015', 'propagande', 'caché', 'Coup', 'tomates', 'modules', 'juges', 'profité', 'préférés', 'fabrique', 'Monument', 'XVI', 'Ayant', 'fier', '2012Age', 'raisonnable', 'rassemble', 'charmante', 'Liban', 'Road', '104', 'médicaux', 'originales', 'Traité', 'vestiges', 'moyennes', 'planches', 'cinquante', 'destinations', 'doctrine', 'Réf', 'publicitaires', 'DANS', 'vif', '\\u200e', 'tensions', 'flore', '1800', 'Afghanistan', '1903', 'canaux', 'traduire', 'commentaireCharger', 'black', 'châteaux', 'Media', 'entité', 'Hollywood', 'Rochelle', 'chargés', 'Sac', 'étonnant', 'délégué', 'classification', 'menus', 'contes', 'champignons', 'variés', 'logistique', 'cavalerie', 'mères', 'dirais', 'Lucien', 'trésor', 'prêtres', 'choisissez', 'moines', 'cantons', 'Patrice', 'jette', 'posée', 'Immobilier', 'conformité', 'sénateur', 'rénové', 'tas', 'comptent', 'Fillon', 'Lord', 'tracé', 'créateurs', 'Jimmy', '1860', 'marbre', 'rangement', 'contrôles', 'paysans', 'vélos', 'Quartier', 'amener', 'al.', 'soie', 'concerné', 'gouvernance', 'baignoire', '1902', 'républicain', 'balades', '1886', 'maréchal', 'complexité', 'Havre', 'inconnue', 'identifié', 'Céline', 'Is', 'blessure', 'habitudes', 'coureur', 'Christopher', 'africain', 'originaux', 'rédacteur', 'Pékin', 'System', 'nuages', 'pluriel', 'souverain', 'postés', 'CNRS', 'contiennent', 'renouvellement', 'Extrait', 'flash', 'couverte', 'légitime', 'surnom', 'will', 'légale', 'rigueur', 'amené', 'Gaston', 'Promotion', 'jupe', '1891', 'N.', 'collèges', 'BA', 'allemandes', 'remercier', 'Chemin', 'instar', 'effectuées', 'débutant', 'signification', 'Your', 'solde', '1876', 'VIII', 'rebelles', 'And', 'reposant', 'br', 'vivants', 'usagers', 'were', 'aérien', 'c.', 'cachées', 'an41', 'pop41', 'recens41', 'Hitler', 'Magasin', 'Vosges', 'négatif', 'Rhône-Alpes', 'demandant', 'Olympique', 'invention', 'marchands', 'Libye', 'gagnant', 'inclinaison', 'roses', 'SC', 'métallique', 'Trop', 'fût', 'Series', 'Great', 'payant', 'refuser', 'm.', 'Idéal', 'roulant', 'étendre', 'emballage', 'Molière', 'protégée', '1789', 'combattants', 'bénéfices', 'Amis', 'fixes', 'Finances', 'prochainement', '1830', 'Miller', 'concurrents', 'rurale', 'polémique', 'adolescents', 'contrainte', 'engagée', 'nucléaires', 'perles', 'Vladimir', 'matériau', 'intégrale', 'mélanger', 'remarques', 'départementale', '1848', 'esclaves', 'avancées', 'diminuer', 'affirmer', 'fondamentaux', 'peintres', 'théorique', 'Interview', 'Hauteur', 'figurent', 'menées', 'faciles', 'na', 'légal', 'Observatoire', 'Bad', 'Digital', 'arbitrage', 'protéines', 'annuler', 'purement', 'descriptif', 'arrivés', 'fréquentes', 'maquillage', '--Jeux', 'foie', 'fabriquer', 'coupable', 'mythe', 'chouette', 'donnés', 'blocs', 'pourcentage', 'gestes', 'literie', 'aménagé', '450', 'proprement', 'Sylvain', 'répartis', 'Vieux', '4e', 'gel', 'Jeunes', 'vérification', 'plomb', 'Tunis', 'UNESCO', 'rêver', 'Resort', 'doublé', 'Moto', 'Porto', 'modeste', 'diminution', 'Sir', 'particularité', 'ouvrant', 'Midi', '2013-2014', 'douleurs', 'relevé', 'goûts', 'véritables', 'Gustave', 'relie', 'Western', 'Rendez-vous', 'lampe', 'Supprimer', 'po', 'théories', 'Heureusement', 'larges', 'Télévision', 'renseigner', 'Promotions', '1871', 'Tribunal', 'procureur', 'souhaité', 'FM', 'guematria', 'lycées', 'démission', 'bars', 'Univers', 'couvent', 'lumineuse', 'courante', 'métaux', 'conventions', 'souffre', 'nourrir', 'Montagne', 'pattern', 'dépendance', 'majeures', 'considérablement', 'protège', 'créativité', 'chanter', 'Sortie', 'YouTube', 'engagés', 'régimes', 'organisés', 'OpenEdition', 'apparait', 'gorge', 'devoirs', 'assisté', 'tend', 'Cloud', 'Co', '2009Age', 'conclu', 'effectifs', 'exister', 'carrés', 'Annie', 'représentée', 'racine', 'Ferdinand', 'caractérisée', 'mensuel', 'excès', 'EP', 'pr', 'Près', 'attractions', 'constamment', 'pantalon', 'bénévoles', 'résister', 'had', 'régulier', 'Traitement', 'passionnés', 'colonies', 'Land', 'occidental', 'prétexte', 'médiévale', 'rappelé', 'exploration', 'Huile', 'donna', 'débuté', 'carnet', 'ours', '1895', 'individuelles', 'Dimensions', 'Édition', 'made', 'espérons', '1898', 'consacrer', 'immeubles', 'proportion', 'compromis', 'placés', 'téléphones', 'contraint', 'Géorgie', 'marin', 'chercheur', 'cohérence', 'Pérou', 'fontaine', 'Traduction', 'Matt', 'incident', 'XXe', 'Régime', 'Moins', 'fabricants', 'Cécile', 'retire', 'exact', 'signée', 'scandale', 'résistant', 'pavillon', 'mécaniques', 'Miami', 'désolé', '2015-2016', 'Découverte', 'indien', 'coque', 'accorder', 'Moyen-Orient', 'archéologique', 'Jeff', 'Four', 'Comparer', 'Logo', 'absolu', 'avancé', 'marchand', 'suggestions', '---------------', 'certification', '128', 'Hubert', 'réparer', 'herbe', 'ange', 'laissez', 'supérieurs', 'variétés', 'Ryan', 'rémunération', 'visuel', 'couverts', 'popularité', 'cote', 'Jura', 'musulman', 'guitariste', 'ressource', 'Îles', 'Jean-Marc', 'pouvais', '§', 'falloir', 'Box', 'fauteuil', 'Peinture', 'superbes', \"I'\", 'camion', 'Email', 'Classic', 'Gold', 'Style', 'bordure', 'optimiser', 'Éditeur', 'Games', 'Industrie', 'comptable', 'polonaise', 'Responsable', 'sage', 'Professionnels', 'boîtes', 'della', 'Soin', 'verres', 'bancaires', 'Lionel', 'dames', 'envisager', 'Séjour', 'athlète', 'évêques', 'Justin', 'choisie', 'Heures', 'pack', 'encourager', 'marie', 'By', 'contenir', 'enregistre', 'officielles', 'prendra', 'hjem', 'Ferrari', 'Combien', 'sépare', 'cardiaque', 'moule', 'Space', 'Post', 'Emma', 'Essai', 'inscrite', 'inquiète', 'franc', 'retenue', 'administratifs', 'dés', 'Noire', 'puissants', 'familiales', 'exige', 'surprises', 'Boy', '00ZUn', 'product', 'attraction', 'confie', 'Bruce', 'usines', 'renvoie', 'agriculteurs', 'onde', '3000', 'trio', 'étang', 'Donner', 'faut-il', 'fonctionnelle', 'pension', 'conclure', 'weekend', 'fameuse', 'Palestine', 'galeries', 'Anciens', 'poêle', 'PAS', 'appliquée', 'Midi-Pyrénées', 'Stanley', 'transferts', 'intrigue', 'Campagne', 'renforcement', 'implantation', 'humide', 'Ivan', 'comportant', 'compilation', 'Howard', 'E-mail', 'symboles', 'confié', 'Choisir', 'before', 'défend', 'répression', 'Douglas', 'chic', 'épices', 'manipulation', 'métropole', 'remarquables', 'changeant', 'Rencontres', 'Server', 'leçons', 'Jason', 'imprimante', 'Mondial', 'Discuter', 'Portes', 'alinéa', '220', 'Billy', 'delà', 'Picardie', 'technologiques', 'Agriculture', 'CampagneIdéal', 'originalité', 'nettoyer', 'costume', 'africains', 'Entertainment', 'rendue', 'Prenez', 'Cercle', 'ST', 'suggère', 'appartiennent', 'Vatican', 'per', 'régulation', 'poivre', 'hyper', 'Contrôle', 'brun', 'CP', 'breton', 'UTC', 'psychologique', 'Jean-Michel', 'Mots-clés', 'watch', 'spirituel', 'espérer', 'validation', 'doucement', 'ajoutée', 'Alphonse', 'Préparation', 'courbe', 'rencontrent', '.Le', 'réservoir', 'vagues', 'véritablement', 'réductions', 'alternance', 'Moselle', 'ADN', 'hébergements', 'ascension', 'forteresse', 'ONG', 'Pedro', 'ébauche', 'Marche', 'State', 'métropolitaine', 'aidera', 'CO2', '106', 'casse', '2,5', 'jet', 'traverser', \"p'\", 'Premium', 'emporter', 'coins', 'grandeur', '1899', 'Caisse', 'Oxford', 'communistes', '170', 'résulte', 'stocks', 'Armand', 'index', 'Cadre', 'Aéroport', 'Visite', 'Zurich', 'médiatique', '.jpg', 'Prénom', 'meuble', 'rivières', 'coloris', 'Ton', 'fatigue', 'Recherches', 'multimédia', 'média', 'théologie', 'set', 'urbains', 'athlétisme', 'tempête', 'retiré', 'Johann', 'réels', 'Hôpital', 'estimer', 'sortent', 'chaleureuse', 'Simple', 'Presses', 'saints', 'Andrea', 'sommaire', 'cents', 'Mère', '\', 'Générales', 'Anderson', '1866', 'GT', 'Sydney', 'Sauvegarder', 'Économie', 'socialistes', 'sélectionnés', 'fuir', 'poil', 'larmes', 'soi-même', 'vocabulaire', 'pilotage', 'love', 'Conseiller', 'Fil', 'animateur', 'Genre', 'colloque', 'réagir', 'jaunes', 'Last', 'démontrer', 'archipel', '240', 'emploie', '1200', 'promet', '1861', 'paramètre', 'Bas', 'Online', '1889', 'alarme', 'sanctions', 'déploiement', 'Alimentation', 'merde', 'favori', '00ZLogement', 'Saint-Jean', 'ensembles', 'divorce', 'lentement', 'manuscrit', 'bloquer', 'mondes', 'passionné', 'pop42', 'majoritairement', 'an42', 'recens42', 'successivement', 'Java', 'Au-delà', 'inspecteur', 'évite', 'Pokémon', 'balles', '1.1', 'libéré', 'écho', 'Fox', 'patience', 'ail', 'solidaire', 'Fiat', 'fumée', 'procurer', 'semblable', 'tombée', 'Vert', 'substance', 'copier', 'bénéficient', 'équipés', 'tribu', 'bla', '▪', 'versant', 'refait', 'défauts', 'aborder', 'cartouche', 'Fax', 'Chinois', 'enregistrés', 'uniques', 'Sept', 'efficacement', 'détention', 'reliant', 'Croatie', 'pré', 'Carlo', 'Baby', 'apprécierez', '2012-2013', 'guides', 'tentent', 'Indonésie', 'Jersey', 'Egypte', 'industries', 'Résultat', 'Figaro', 'sagesse', 'croissant', 'Abonnez-vous', 'formant', 'attaché', 'tunnel', 'Andy', 'espérant', 'statuts', 'attribution', 'Automobile', 'sauter', 'PIB', 'émergence', 'vedette', 'Transports', 'âmes', 'fois-ci', 'Ignace', 'Der', 'cherché', 'Allen', 'climatisation', 'interroger', 'intéressantes', 'attache', 'Casa', '1850', 'Line', '750', 'stationnement', 'Seulement', 'express', 'matelas', 'Lisbonne', 'idéologie', 'fréquente', 'saisie', 'campus', 'age', 'Gironde', 'renommé', 'grand-père', 'affluent', 'Forces', 'Restauration', 'Books', 'coffre', 'curiosité', 'critère', 'monstre', 'anges', 'adoptée', 'conclusions', 'OM', 'évoqué', 'Varsovie', 'fous', 'Thaïlande', 'Gîtes', 'Objets', 'séjourner', 'Orchestre', 'Activité', 'musicales', 'Bulgarie', 'précipitations', 'céréales', 'standards', 'collègue', 'Moteur', 'développeurs', 'envoyés', '1897', 'Hamilton', 'HC', 'basses', 'ouvrier', 'prévus', 'futures', 'multitude', 'Suivez', 'regroupant', 'caractérise', 'héritier', 'Good', 'AUX', 'z', 'détendre', 'BBC', 'Animation', 'Junior', 'Élections', 'assise', 'vignes', 'Instagram', 'Définition', 'diable', 'Tibet', 'inédit', 'General', 'dominante', 'Sélection', 'serre', 'permettrait', 'Institute', 'enseignements', 'www.youtube.com', 'chantiers', 'Infirmiers', 'incapable', 'opposer', 'Résidence', '102', 'stratégiques', 'plastiques', 'Ok', 'master', '←', 'collectifs', 'déficit', 'Productions', 'banc', 'référendum', 'recevrez', 'palette', 'reçoivent', 'huitième', 'dépression', 'descendre', 'Décès', 'chapitres', 'Stage', 'Jordan', 'Gordon', 'Argent', \"T'\", 'Ottawa', 'négociation', 'hop', 'Lion', 'accordé', 'salade', 'chroniques', 'ramener', 'Maxime', 'migrants', 'Second', 'réfrigérateur', 'seigneurs', 'CHF', 'imposé', 'Parfois', 'frigo', 'ignore', 'East', 'robots', 'Fille', 'gravité', 'Isère', 'Mieux', 'Vendée', 'résidences', 'invisible', 'triple', 'batteries', 'Simone', 'complètes', 'dénonce', 'péninsule', 'deja', 'indicateurs', 'gré', 'dessinateur', 'manager', 'saurait', 'exploiter', 'Rugby', 'appuyant', 'balance', 'forumAccueilCréer', 'médicales', 'mentale', '1872', 'chaises', 'formés', 'sculptures', 'Joueur', 'automobiles', 'accessoire', 'étiquette', 'domestique', 'has', 'Saint-Denis', 'intelligent', 'belges', 'milliard', 'syndrome', '17h', 'implication', 'MP', 'textile', 'races', 'Patricia', 'Cabinet', 'Proche', 'Technologies', 'paisible', 'constructeurs', 'anti', 'occupent', 'arrival', 'rumah', 'Nîmes', 'nette', 'transmis', 'concevoir', 'Rhin', 'manqué', 'regrette', 'out', 'bleus', 'Vietnam', 'Arrondissement', 'transféré', 'soumettre', 'promesse', 'lumières', 'Anniversaire', 'fines', 'buteur', 'merveille', 'Problème', 'coule', 'Réservez', 'Boris', 'globalement', 'fosse', 'Kate', 'christianisme', 'uniforme', 'biologie', 'First', 'biodiversité', 'arrêtés', 'bouteilles', 'pertinence', 'souveraineté', 'Solutions', 'treize', 'bulletin', 'qualifiés', 'quinzaine', 'fabriqué', 'Frères', 'Challenge', '1885', 'écologie', 'individuels', 'Francesco', 'indispensables', 'icône', 'essentiels', 'commença', 'Distribution', 'Fantasy', 'apparu', 'massacre', 'préférée', 'portait', 'optimale', 'marais', 'tranquillité', '14h', 'minimale', 'Calais', 'entrepreneurs', 'vieilles', 'gothique', 'amende', 'Morgan', 'Lisa', 'tit', '5e', 'salons', 'Dordogne', 'sondages', 'classées', 'pdf', 'obstacles', 'divisé', 'produisent', 'détermination', 'commerçants', '2016-2017', 'extérieures', 'australien', 'Devant', 'PAR', 'formée', 'Voix', 'Audi', 'Bande', 'Printemps', 'âgés', 'affluence', 'Steven', 'occupée', 'élimination', 'valorisation', 'aimerai', 'probleme', 'messe', 'Casino', 'coach', 'apartment', 'précisions', 'grotte', 'touches', 'spirituelle', 'onglet', 'Conservatoire', 'tournois', 'verser', 'aménagements', 'entretenir', 'voisines', 'exclusion', 'Être', 'médailles', 'sociologie', 'arrêts', 'Tant', 'çà', 'cessé', 'veuve', 'assurent', 'Match', 'Saint-Étienne', 'poussé', 'restait', 'Déco', 'Kelly', 'NBA', 'propreté', 'spécialités', 'sentiers', 'capture', 'révéler', 'agrandir', 'cosy', 'agissant', 'filet', 'fouilles', 'lanceur', 'vêtement', 'élégant', 'méditation', 'abandonne', 'qualifie', 'sois', 'associe', 'affecté', 'autorise', 'italiens', 'List', 'infrastructure', 'Hommes', 'soumise', 'ID', 'pm', 'désirez', 'autorisés', 'Blues', 'Véronique', 'constitutionnel', 'Bébé', 'indices', 'Store', 'nov', 'quarante', 'Couronne', '00ZRoom', '4ème', 'Pharmacie', 'Youtube', 'camarades', 'annulation', 'science-fiction', 'comprise', 'manières', 'boulangerie', 'natale', 'effectués', 'résidents', 'correction', 'partagée', 'solides', 'cave', 'placement', 'difficilement', 'diplômé', 'virtuel', 'masculine', '--Photos', 'commodités', 'PlayStation', 'pseudonyme', 'Spécial', 'Venezuela', 'voulant', 'surveiller', 'reconnus', 'rayonnement', 'pop34', 'coffret', 'Unité', 'mignon', 'puissances', '1893', 'Old', 'fraîche', 'expressions', 'texture', 'People', 'Situation', 'Index', 'inspirée', 'Franz', 'dérivés', 'corde', 'profitez', 'réédition', 'bah', 'Précédent', 'Objet', 'Antiquité', 'économiser', 'soigner', 'assurant', 'an34', 'dignité', 'back', '113', '103', 'Nobel', 'postale', 'TypeEntire', 'festivals', 'Licence', 'beautiful', 'curé', 'Friedrich', 'divisions', 'indications', 'Do', 'cuillère', 'recens34', 'gares', 'climatiques', 'lame', 'tramway', 'visiblement', 'Honda', 'fluide', 'doubles', 'parent', 'varier', 'substances', 'mètre', 'Lambert', 'départementales', 'applicables', 'convertir', 'enveloppe', 'finis', 'Aires', 'Academy', 'Comédie', 'réunir', 'chants', 'extraction', 'hiérarchie', 'devrais', 'progresser', 'distribué', 'Mathématiques', 'Champs', 'Espagnol', 'fibres', 'coco', 'accessibilité', 'étroite', 'qualifier', 'Romains', 'leçon', '2020', 'ES', 'reçus', 'THE', 'folle', 'Japonais', 'immobilières', 'prononciation', 'oct', 'supporters', 'stand', 'Chauffage', 'emporte', 'rassemblement', 'fautes', 'crainte', 'paiements', 'neufs', 'foyers', 'enthousiasme', 'Contre', 'concernées', 'accomplir', 'Plaza', 'magazines', 'blonde', '2011-2012', 'Inter', 'garantit', 'pianiste', 'identiques', 'équipées', 'appellent', 'pile', 'porteur', 'Liberté', 'Autant', 'unes', 'Disneyland', 'validité', 'nocturne', 'légers', 'DS', 'rapprocher', 'acceptation', 'Maman', 'violation', 'Abraham', 'RechercherRésultats', 'Capitaine', 'Galles', 'Coucou', 'contraste', 'spa', 'appliqué', 'rachat', 'Montage', 'tri', 'battant', 'réaliste', 'Voyages', 'Motif', 'parquet', 'isolé', 'D2', 'iOS', 'Will', 'compositions', '--les', 'Bavière', 'clics', '112', 'satellites', 'déplace', 'Hot', '18h', 'Turin', 'potentiels', 'prisonnier', 'détient', 'neveu', 'Grandes', 'citations', 'baignade', 'Canon', 'systématique', 'violent', 'grand-mère', 'Caraïbes', 'Pau', 'Aix', 'Mis', 'Hugues', 'podium', 'secs', 'endémique', 'assiste', 'déguster', 'Sites', 'échappe', 'abusif', 'fiabilité', 'parlementaires', 'Fabrice', 'brésilien', 'Angel', 'pâtes', 'Carter', 'foncé', 'faillite', 'st', 'Batterie', 'permettront', 'mourut', 'motos', 'crises', 'woning', 'intéressants', 'Inscrivez-vous', 'attendait', 'industrielles', 'architectes', 'Yann', 'déçu', 'entré', 'wc', 'Partenaires', 'regardant', 'suffrages', 'Dakar', 'exprimé', 'devise', 'céramique', 'gravure', 'comparateur', 'frappé', 'Chat', 'Elisabeth', 'assiette', 'provoqué', 'IX', 'signifiant', 'dépôts', 'District', 'Wii', 'mystérieux', 'Objectif', 'Seuls', 'conclut', 'voulons', 'pochette', 'souligner', 'parcourir', 'goûter', 'taper', 'sale', '118', 'opposant', 'Zoom', 'sublime', 'Cédric', 'fondamentale', 'peut-on', 'Suites', 'repasser', 'bits', 'een', 'grise', 'séparés', '1894', 'veste', 'lignée', 'good', 'Walt', 'québécoise', 'Mémoires', 'Mariage', 'briques', 'loisir', 'Bilan', 'littoral', 'organe', 'détection', 'Renaud', 'impeccable', 'Magic', 'gendarmerie', 'prouve', 'Coin', 'irlandais', 'Miguel', 'coureurs', 'exécuter', 'Contexte', 'turc', 'baroque', '●', '--Concours', 'ex.', 'lavage', 'fausses', 'secrète', '1892', 'Final', 'Ain', 'av', 'applicable', 'Moore', 'descendants', 'Ball', 'Agenda', 'width', 'magnétique', 'souhait', 'Philippines', 'éponyme', 'clichés', 'trouvés', 'dotée', 'Equipements', 'écris', '2010-2011', 'Application', 'divine', 'registres', 'Ø', 'grain', 'Be', 'nés', 'Ahmed', 'Out', 'people', 'intervenants', 'intérieurs1', 'Colin', 'reservation', 'Etude', 'trophée', 'suggestion', 'lapin', 'restée', 'essor', 'poches', 'séparer', 'records', 'baisser', 'maîtresse', 'Actes', 'rénovée', 'cinématographique', 'sommets', 'dits', 'bulle', 'suffisante', 'Cycle', 'décennie', 'terroriste', 'appelait', 'Pape', 'entrepreneur', 'accueillants', 'Mo', 'open', 'animale', 'reçut', 'Ouverture', 'racisme', 'Augustin', 'restaurer', 'transactions', 'Fernando', 'capitalisme', 'avouer', 'cloud', 'montres', 'regardé', 'extra', 'composant', 'creux', 'envergure', 'Jr', 'minéraux', 'permettait', 'fournie', 'script', 'entités', 'clean', 'Paix', 'ascenseur', 'Bank', 'Philip', 'éteint', 'indienne', 'attribuée', 'maïs', 'Passion', 'job', 'recherché', 'péché', 'formules', 'favorise', 'kr', 'transporter', 'activement', 'dénomination', 'inauguré', 'archéologie', 'copié', 'militant', 'âgée', 'bataillon', 'séparé', 'Eva', 'désire', 'rumeurs', 'Bonaparte', '108', 'détaillé', 'développés', 'Square', 'Confédération', 'Etienne', 'Canadiens', 'richesses', 'Languedoc-Roussillon', 'partent', 'boules', 'domine', 'indicatif', 'pic', 'Hygiène', 'Unies', 'portables', 'miracle', 'costumes', 'marron', 'baiser', 'vivante', 'cirque', 'estimation', 'Nelson', 'animée', 'Di', 'porteurs', '00ZAccueil', 'nid', 'Cadeaux', 'remercions', 'Bell', 'cotation', 'rejet', 'Plage', 'Julia', 'Métiers', 'Party', 'Paulo', 'associer', 'Budapest', 'sanctuaire', 'Réseaux', '1867', 'teint', 'Gary', 'passait', 'déclin', 'collier', 'Corporation', 'Baie', 'référencement', 'détenus', 'épaule', 'Agnès', 'absent', 'enregistrements', 'Ferme', 'entourée', 'team', 'soutenue', 'anneau', 'Bach', 'disposant', 'étoilesà', 'Insee', 'quatorze', 'répondent', 'exacte', 'partagent', 'poils', 'CFA', 'collines', 'maîtriser', 'diffuse', 'organique', 'rédiger', 'viendra', 'Désolé', 'supporte', 'déclarer', 'doré', 'passions', 'légendes', 'Navy', '109', 'processeur', 'observé', 'Autour', 'survivre', 'M6', 'bouger', 'cyclisme', 'Burkina', 'gâteaux', 'favorables', 'flexible', 'confortables', 'sérénité', 'Bluetooth', 'Ski', 'Phil', 'collectivité', 'Russell', '5000', 'pénal', 'philosophique', 'réglage', 'levée', 'Course', 'Syndicat', 'faiblesse', 'prestige', 'obtenus', 'Pratique', 'Bisous', 'Objectifs', 'aval', 'créatures', 'XP', 'gite', 'simultanément', 'Robe', 'marqués', 'parlait', 'estimations', 'hésiter', 'tr', 'Play', 'considèrent', 'aptProperty', 'dragon', 'assassiné', 'Cambridge', 'échéant', 'assemblage', 'ment', 'adopte', 'voudrait', 'civiles', 'Forme', 'sentier', 'anagrammes', 'Adrien', 'opportunités', 'munitions', 'composer', 'Changer', 'Possibilité', '190', 'Coran', 'suisses', 'esclavage', 'infini', 'Main', '1888', 'prof', 'décorée', 'kmHôtels', 'Atlas', 'ira', 'étanchéité', 'sympathiques', 'connectés', 'SI', 'grandement', 'municipaux', 'asiatique', 'Bel', 'acides', 'Britanniques', 'roller', 'ruban', 'Auvergne-Rhône-Alpes', 'privilégié', 'like', 'sortis', 'sensibilisation', 'seize', 'ciblées', \"M'\", 'volontairement', 'Clark', 'Relations', 'encadrement', 'ose', 'Project', 'aisément', 'Franche-Comté', 'Guinée', 'Maine', 'Coffret', '107', 'juridiction', 'doutes', 'déroulement', 'consommer', 'décorations', 'décrite', 'intentions', 'Ortograf', 'hôpitaux', 'variante', 'protégés', 'Roche', 'préface', 'judiciaires', 'Halloween', 'Intel', 'interdire', 'fragile', 'Ardèche', 'Bijoux', 'São', 'smartphones', 'durs', 'défaites', 'fixée', 'pente', 'élégance', '135', 'Hérault', 'herbes', 'amuser', 'aveugle', 'Cyril', 'influences', 'manuscrits', 'condamnation', 'chêne', 'challenge', 'Jennifer', 'exclusif', 'Stars', 'idem', 'Global', 'Mohammed', 'DR', 'pardon', 'détruite', 'réveil', 'google', 'Pétrole', 'académique', 'trouvée', 'carrières', 'Sicile', 'reproduire', 'Vendu', 'leaders', 'compteur', 'écrites', 'sexuel', 'Casablanca', 'affiches', 'Juridique', 'fesses', 'Sources', 'innovations', 'Valls', 'boue', 'Studios', 'pois', 'Citroën', '2009-2010', 'Potter', 'vérifié', 'Laboratoire', 'orthodoxe', 'déc', 'occidentaux', 'capteur', 'précises', 'Champions', 'musulmane', 'VOUS', '1851', 'ヽ', 'Shanghai', 'monstres', 'terroir', '✔', 'remplacée', 'desservie', 'réservations', 'illustrer', 'calculer', 'traductions', 'poussière', 'compétitivité', 'Cathédrale', 'intéressés', 'trouvera', 'Séries', 'spectaculaire', 'valider', 'réuni', 'volontiers', 'Haïti', 'laboratoires', 'Michèle', 'guise', 'copies', 'poussée', 'élue', 'poursuivi', 'résume', 'Devenir', 'chèque', 'AVEC', 'sèches', 'Network', 'récolte', 'Wifi', '111', 'là-bas', 'dépassé', 'Mercedes', 'fournies', 'impulsion', 'sphère', 'lève', 'variantes', 'Wild', 'catch', 'variation', 'Recevez', 'tenait', 'spécifiquement', 'baies', 'approvisionnement', 'relevant', 'ancêtres', 'Islande', 'nobles', 'exclusive', 'lisse', 'carnets', 'Voiture', 'surnommé', 'allié', 'Largeur', 'prestigieux', 'occurrence', 'agression', 'firme', 'perdus', 'Matthieu', 'agenda', 'autel', 'revers', 'lion', 'recense', 'Parallèlement', 'spectateur', 'hongrois', 'problématiques', 'interaction', 'Championship', 'asile', 'améliorations', '1792', 'déterminé', 'nommés', 'Guadeloupe', 'Juliette', 'Située', 'démontre', 'Light', 'automatiques', 'figurant', 'rouler', 'Firefox', 'actionnaires', 'Dave', 'évacuation', 'retraites', 'optimisation', 'maux', '2013Sujet', 'Grégoire', '1875', 'végétaux', 'rapproche', 'mythique', 'visuelle', 'tarte', 'Écrit', 'gestionnaire', 'batailles', 'entretiens', 'adapte', 'modernité', '1878', 'armés', 'réputé', 'Golfe', 'passes', 'Clé', 'Jardins', 'ongles', 'synonyme', 'dispo', 'misère', 'tribus', 'Pop', 'considération', 'défilé', 'célébrer', 'indication', 'éventuelle', 'gardes', 'inauguration', 'indiquée', 'Document', '205', 'mosquée', 'possédant', 'posséder', 'musicaux', 'ambassade', 'pédagogie', 'demi-finale', 'nouveauté', 'humanitaire', 'coupes', 'aube', 'CDI', 'copains', 'Marianne', 'Aisne', 'échantillon', 'admirer', 'Comte', 'mythologie', 'Valley', 'cabine', 'évoquer', 'initiation', 'Clermont', 'traitant', 'boisson', 'Cookies', 'actives', 'Dommage', 'terminal', '--Forum', 'allure', 'Africa', 'Astuces', 'bâti', 'palmarès', 'cherchant', 'internaute', 'vaisseaux', 'répondant', 'tenus', 'serviettes', 'Martinique', 'UA', 'apportent', 'Sacs', 'Souvent', 'vertus', 'Affaire', 'arnaque', '1815', 'vertes', 'continuation', 'fermes', 'clef', 'maintient', '2008-2009', 'Jacqueline', 'den', 'amiral', 'Faut', 'draps', '£', 'créées', '--LA', 'a-t-elle', 'infection', 'concentrer', 'révélation', 'lourdes', 'Critique', 'calculs', 'rap', 'linéaire', 'agisse', 'directive', 'Germain', '1882', 'croise', 'significative', 'amusant', 'ferai', 'mentions', 'Death', 'robes', 'conçus', 'artisan', 'Stone', 'WordPress', 'rez-de-chaussée', 'Foot', 'trompe', 'admission', 'Valentin', 'Religion', 'remplaçant', 'Danse', 'reviens', 'disparaît', 'suspendu', 'variées', '.-', 'automated', 'Edmond', 'massive', 'OTAN', 'States', 'Envie', 'auberge', 'inox', 'comptant', 'Part', 'colonisation', 'vintage', 'tranches', 'reviennent', '¯', 'PLUS', 'Pakistan', 'démo', 'plu', 'faille', 'connaissais', 'saura', 'carrelage', 'élémentaire', 'Raoul', 'Publications', 'bébéEquipements', 'comptabilité', 'Projets', 'biologiques', 'seigneurie', 'canceled', 'dangers', 'approches', 'téléphoniques', 'close', 'Occitanie', 'gay', 'exposés', 'démarrer', 'go', 'intérieurs', 'put', 'statues', 'Thèmes', 'Physique', 'Assistance', 'Tapis', '230', '1887', 'Empereur', 'visuels', 'mentionne', 'illusion', 'dissolution', 'hauteurs', 'positionnement', 'voyageur', 'sérieuse', 'vus', 'Ian', 'piège', 'énormes', 'nue', '--LE', 'Giuseppe', 'animés', '1884', 'prononcer', 'concession', 'Diane', 'tasse', 'Landes', '1.2', 'sonores', 'saveurs', 'éleveurs', 'bacs', 'Avez-vous', 'inventé', 'urbaines', '1856', \"Quelqu'\", 'Raphaël', 'Read', 'envisage', 'évalué', 'procédés', 'JavaScript', 'PVC', 'demi-grand', 'croyances', 'caméras', 'Bio', 'Gaza', 'visité', 'compatibles', 'botanique', 'singulier', 'Arrivée', 'donnait', 'productivité', 'Buenos', '1-0', 'émet', 'ABC', 'Forêt', 't-il', 'baise', 'fonte', 'Vivre', 'coquine', 'écossais', 'Parcours', 'Toyota', 'IT', 'localités', 'tolérance', 'arrivant', '1846', '10h', 'Nation', 'artificielle', 'crochet', 'navette', 'sacrée', '123', 'sensations', 'réelles', 'disais', 'exprimés', 'ridicule', 'baptisé', 'Seuil', 'renouvelables', 'marches', 'causer', 'débutants', 'view', 'chaussée', 'censure', 'documentaires', 'pénale', 'jolis', 'rapporté', 'atouts', 'dégustation', 'existants', 'interactions', 'manteau', 'Marina', 'MP3', 'déposée', 'sont-ils', 'profils', 'baptême', 'élevées', 'diesel', 'apparente', 'arrestation', 'maxi', 'href', 'évoluant', 'Oliver', '1790', 'Ni', 'informe', 'Charente', 'Navigation', 'Fait', 'posts', 'prévision', 'Secrets', 'Ancienne', 'Bâle', 'indiquent', 'alternatives', 'Figure', 'intermédiaires', 'Vichy', 'grains', 'Hégésippe', 'Cœur', 'dérive', 'quarts', 'manquent', 'créent', 'Agent', 'obstacle', 'Reste', 'médiation', 'petit-déjeuner', 'Autorité', 'Tennis', 'nommer', 'im', 'fiscalité', 'Arles', 'attaqué', '--Annonces', 'Aventure', 'croient', 'plomberie', 'los', 'Thème', 'socle', 'Song', 'Queen', '1840', 'alphabet', 'Accéder', 'tantôt', 'diplômes', 'Bâtiment', 'légères', 'épaules', 'coiffure', 'Original', 'madame', 'commercialisation', 'Ross', 'CS', 'quarantaine', 'commissions', 'caisses', 'Autrement', 'bémol', 'plancher', 'appartenance', 'papillon', 'für', 'XI', 'fêter', 'Feu', 'promesses', 'rapprochement', 'indépendantes', 'Circuit', 'Trophée', 'Raison', 'vanille', 'dépannage', 'équation', 'accordée', 'Train', 'spécialisées', 'approuvé', 'Ciel', 'Victoire', 'oxygène', 'mutation', 'blues', 'signalé', 'Guyane', 'plutot', 'composent', 'Singapour', 'poules', 'câbles', 'préférable', 'répétition', 'Almouggar.com', 'Coeur', 'Disque', 'Géographie', 'chatte', 'Beau', 'Clermont-Ferrand', 'géré', 'Parker', 'Town', 'numero', 'accuse', 'enceintes', 'fondamental', 'Sud-Ouest', 'archéologiques', 'PêcheVoir', 'Anjou', 'Poser', 'Constantinople', 'Cliquer', 'autrui', 'entends', 'manoir', 'Princesse', 'vendue', 'XVIIIe', 'passa', 'duplicate', 'ci-après', '--Espace', 'partiel', 'kms', 'Populaire', 'Utiliser', 'recevez', 'casser', 'médiéval', 'valoir', 'tuto', 'manifestants', 'ad', 'coloniale', 'traversé', 'Paradis', 'sexuelles', 'sévère', 'oubli', 'Créez', 'roche', 'mien', 'admissibilité', 'Sud-Est', 'entame', 'tactile', 'alphabétique', 'solitaire', 'Élisabeth', 'adorable', 'commenter', 'XII', 'introduire', 'éducatif', 'Limousin', 'intellectuels', 'diplomatique', 'Saint-Pétersbourg', 'about', 'consultant', 'Wallonie', 'championne', 'correcte', 'Italien', 'dynamiques', 'Monique', 'accompagnés', 'intéressent', 'Beaux-Arts', 'porc', 'Jerry', 'fonctionnalité', 'amies', 'dénoncer', 'instants', 'encyclopédique', 'Opération', 'mat', 'quotidiens', 'Royale', 'positifs', 'Forums', 'maturité', 'mondiaux', 'enseigner', 'organisateurs', 'détriment', '127', 'PSPsexy', 'Vegas', 'Istanbul', 'pots', 'instances', 'puce', 'Revenir', 'signale', 'minuit', 'quoique', 'généralistes', 'matinée', 'pouce', 'renoncer', 'mental', 'budgétaire', 'essayez', 'imposant', 'Back', '--A', 'remercié', 'Meuse', 'achève', 'angles', 'Special', 'Flandre', 'Mail', 'Rica', 'Azure', 'Alberto', 'Malte', 'Who', 'audit', 'intervalle', '117', 'Stéphanie', 'municipalités', 'annoncée', 'épais', 'espérance', 'fonctionnaire', 'dettes', 'technicien', 'ouvrent', 'Gard', 'orale', 'approfondie', 'tomes', 'dessiner', 'basilique', 'Crédits', 'méchant', 'recommandation', 'Batman', 'tribunaux', 'dira', 'vain', 'Jusqu', '--Histoire', 'PDG', 'Hunter', 'escalade', 'tre', 'minorité', 'Rights', 'améliore', 'Universal', 'Rousseau', 'Faso', '--Questions', 'wikipédia', 'localement', 'Parfait', 'athlètes', 'Puy', 'volets', 'Rachel', 'liaisons', 'Métropole', 'SAS', 'Ingénieur', 'Lorient', 'Chantal', 'acheteur', 'lingerie', 'planètes', 'enregistrée', 'Quelque', 'congé', 'confondre', '1883', 'Caire', 'prétend', 'ranger', 'châssis', 'chaos', 'électoral', 'générer', '19h', 'impasse', 'mutuelle', 'radical', 'Prendre', 'icone', 'renouveler', 'périmètre', 'Bush', 'Conception', 'Téléchargez', 'Pauline', 'interroge', 'carrefour', 'Villeneuve', 'regards', 'scénarios', 'Annecy', 'vous-même', 'digital', 'poètes', 'Fonction', 'Bruges', 'possédait', 'entrent', 'cotisations', 'demandeurs', 'convivial', 'moine', 'barrière', '1863', 'résolu', '26Localisation', 'Stratégie', 'SE', 'nuage', 'Ann', 'détour', 'triangle', 'licences', 'Alexandra', '1Sauter', 'intégrés', 'décida', 'Stockholm', 'négocier', 'empreinte', '2013Age', 'mâles', 'Book', 'Gallery', 'désignation', 'segment', 'Posted', 'pourriez', 'sexualité', 'semblables', 'Actu', 'Professionnel', 'flèche', 'semestre', 'Constantin', 'chaudes', 'toiture', 'confluence', 'Retourner', '6e', 'Explorer', 'compact', 'quotidiennement', 'incarne', 'InvitéInvité', 'oeuf', 'démontré', 'Audio', 'allais', 'Marvel', 'buffet', 'coucou', 'Otto', 'DO', 'finissent', 'réguliers', 'alimenter', 'humides', 'discrimination', 'Micro', 'tribune', '♦', 'Comics', 'démocrate', 'Personnellement', 'Damien', 'franchir', 'vigne', 'para', 'gr', 'blason', 'cycles', 'caoutchouc', 'investi', 'saumon', 'consacrés', '9h', 'étendu', 'Aude', 'Roberto', 'cinquantaine', 'Bons', 'préoccupations', 'pirates', 'Equitation', 'rassembler', 'piliers', 'simulation', 'cinéaste', 'pompiers', '-10,5', 'réplique', 'aéronautique', 'guider', 'végétation', 'Full', 'désordre', 'LG', 'Catalogne', 'envoyée', 'Charme', 'Cologne', 'unis', 'pensait', 'complot', 'israélien', 'dictature', 'details', 'free', 'Chronique', 'Sociétés', 'croisière', 'fun', 'représentés', 'Berne', 'porno', 'appliquent', 'accroître', 'Metal', 'profondes', 'cliniques', 'there', 'prototype', 'vraies', '1865', 'Abs', 'Edouard', 'over', 'enchères', 'priorités', 'VOTRE', 'inégalités', 'séduire', 'injection', 'Effectivement', 'passez', 'éclat', 'Salvador', '1862', 'potable', 'synthétique', '11h', 'confier', 'restés', 'chauffer', 'aborde', 'EDF', 'Troyes', 'ressenti', 'jambe'])\n", + "[-0.0842, -0.0388, 0.0456, -0.0559, -0.0366, 0.0241, 0.0919, -0.0214, 0.0179, -0.1384, -0.0202, -0.1276, -0.0163, 0.0644, -0.1042, 0.0152, -0.0191, 0.0761, -0.0149, 0.0261, 0.0354, -0.077, -0.0034, 0.0941, -0.0169, 0.1621, 0.2469, -0.009, 0.0335, 0.0022, -0.0168, -0.0063, 0.0149, -0.0182, 0.0205, 0.0628, -0.3591, -0.0155, 0.0188, 0.0503, -0.0251, 0.0328, 0.04, 0.0639, -0.1502, 0.1655, 0.0538, 0.0762, -0.1086, -0.0351, 0.0534, 0.0267, 0.0255, 0.038, 0.0026, 0.3703, 0.0797, -0.0189, 0.4854, 0.0882, 0.0483, 0.224, 0.0077, -0.2437, -0.0396, -0.0343, -0.1632, -0.0818, -0.0074, 0.0008, -0.0255, -0.0482, -0.4431, -0.0576, -0.0413, -0.0182, -0.0852, -0.0737, 0.2608, -0.0044, -0.0147, -0.0486, -0.2496, -1.3323, -0.0243, -0.0382, 0.0852, 0.0166, 0.0292, -0.0092, 0.0345, -0.0205, 0.0806, -0.0287, 0.0068, -0.3224, -0.0187, -0.0661, -0.043, 0.4115, 0.021, 0.0019, 0.0826, 0.0753, 0.0254, 0.0634, 0.0524, -0.0342, -0.0224, 0.3635, 0.0102, -0.0121, -0.3234, 0.1405, 0.0347, 0.029, -0.0187, 0.0473, -0.067, 0.0084, -0.0503, -0.0469, -0.1019, 0.1343, -0.0289, 0.0632, 0.0699, 0.0675, 0.0196, -0.0432, 0.0576, 0.0173, 0.0264, 0.0001, 0.026, -0.0262, -0.3346, -0.025, 0.1202, 0.0655, 0.0264, -0.0396, 0.0032, -0.0192, -0.0364, -0.0285, 0.0278, 0.0017, -0.0048, -0.0001, -0.0395, 0.002, -0.1174, 0.0715, 0.0118, -0.0433, 0.0497, -0.0519, 0.0654, -0.0596, 0.006, 0.1493, 0.01, 0.0117, -0.1024, -0.0334, 0.0252, -0.2275, -0.0043, -0.0623, 0.3386, 0.0622, 0.0344, -0.3352, -0.0398, -0.161, -0.0401, -0.2124, 0.0329, 0.0056, -0.0218, -0.007, 0.1279, 0.0429, -0.0155, 0.0529, 0.1669, 0.0851, -0.4496, -0.0199, 0.1243, 0.0296, 0.0625, 0.5931, -0.0495, -0.0263, 0.0038, 0.0456, -0.0591, 0.0706, 0.046, 0.0196, 0.0271, 0.0136, 0.0427, 0.1151, 0.0651, 0.0513, 0.3261, -0.0095, -0.1681, 0.0631, 0.4491, 0.0119, -0.0168, -0.0606, -0.2383, -0.0494, 0.1051, 0.0095, -0.0175, -0.0459, 0.094, 0.0788, 0.0581, -0.0833, 0.0291, 0.0228, 0.004, -0.2135, -0.045, -0.2637, -0.0708, -0.0272, 0.0321, -0.0116, 0.0079, -0.0634, 0.1234, -0.0904, 0.0501, -0.0339, -0.0494, 0.0714, 0.1486, 0.1024, 0.0903, 0.0458, -0.0289, -0.0185, -0.034, 0.0427, -0.033, -0.0147, -0.2744, -0.0971, 0.0208, 0.0127, -0.0412, 0.0009, -0.0658, 0.0333, -0.0383, 0.0523, -0.019, 0.0391, 0.0702, 0.0231, 0.0573, 0.083, -0.1997, -0.0273, -0.0001, 0.002, -0.0557, 0.0669, -0.0026, 0.1349, 0.0173, -0.0312, -0.0388, 0.032, 0.0129, -0.0233, 0.0034, -0.0373, 0.0239, -0.07, 0.0412, 0.0402, 0.0019, -0.0405, -0.0111, -0.0038, 0.008, 0.1887, 0.0118, 0.3069, -0.0106, 0.0579]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### 2.2- Build the weight matrix\n", + "\n", + "We have a list of words associated to vector.\n", + "Now we need to specifically retrieve the vectors for the words present in our data, there is no need to keep vectors for all the words.\n", + "We thus build a matrix over the dataset associating each word present in the dataset to its vector.\n", + "For each word in dataset’s vocabulary, we check if it is in FastText’s vocabulary:\n", + "* if yes: load its pre-trained word vector.\n", + "* else: we initialize a random vector.\n", + "\n", + "The code below will also examine the coverage, i.e.:\n", + "* print the number of tokens from FastText found in the training set\n", + "* and the number of unknown words." + ], + "metadata": { + "id": "NXFLV8kXU0AA" + } + }, + { + "cell_type": "code", + "source": [ + "# Load the weight matrix: modify the code below to check the coverage of the\n", + "# pre-trained embeddings\n", + "emb_dim = 300\n", + "matrix_len = len(train.vocab)\n", + "weights_matrix = np.zeros((matrix_len, emb_dim))\n", + "words_found, words_unk = 0,0\n", + "\n", + "for i in range(0, len(train.vocab)):\n", + " word = train.vocab.lookup_token(i)\n", + " try:\n", + " weights_matrix[i] = vectors[word]\n", + " words_found += 1\n", + " except KeyError:\n", + " weights_matrix[i] = np.random.normal(scale=0.6, size=(emb_dim, ))\n", + " words_unk += 1\n", + "weights_matrix = torch.from_numpy(weights_matrix).to( torch.float32)\n", + "print( \"Words found:\", weights_matrix.size() )\n", + "print( \"Unk words:\", words_unk )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "SZ4CRB6VUuk0", + "outputId": "490e5858-cdc7-4fc0-c29d-a06c721fa7be" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Words found: torch.Size([43072, 300])\n", + "Unk words: 37486\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## 3- ▶ Exercise: Model definition\n", + "\n", + "#### (a) Define the embedding layer:\n", + "Now modify your model to add an embedding layer in the __init__() function below:\n", + "\n", + "* Define *self.embedding_bag*: a layer combining the word embeddings for the words. Here we just give the definition of the layer, i.e.:\n", + " * we use pre initialized weights\n", + " * we want to combine the embeddings by doing the average\n", + "See ```nn.EmbeddingBeg.from_pretrained( ..)```, https://pytorch.org/docs/stable/generated/torch.nn.EmbeddingBag.html\n", + "* Retrieve the *embedding dimensions* to be used as parameter for the first linear function (look at the *EnbeddingBag* class definition).\n", + "\n", + "#### (b) Use the embedding layer\n", + "Now you need to tell the model when to use this embedding layer, thus you need to modify the *forward()* function to say that it needs to first *embed* the input before going through the linear and non linear layers.\n", + "\n", + "Look at the example in the doc: https://pytorch.org/docs/stable/generated/torch.nn.EmbeddingBag.html\n", + "Note that this embedding layer needs the information about the offset, to retrieve the sequences / individual documents in the batch.\n", + "\n" + ], + "metadata": { + "id": "VcLWQgu877rQ" + } + }, + { + "cell_type": "code", + "source": [ + "class FeedforwardNeuralNetModel(nn.Module):\n", + " def __init__(self, hidden_dim, output_dim, weights_matrix):\n", + " # calls the init function of nn.Module. Dont get confused by syntax,\n", + " # just always do it in an nn.Module\n", + " super(FeedforwardNeuralNetModel, self).__init__()\n", + "\n", + " # Embedding layer\n", + " #self.embedding_bag = ...\n", + "\n", + " embed_dim = self.embedding_bag.embedding_dim\n", + "\n", + " # Linear function\n", + " self.fc1 = nn.Linear(embed_dim, hidden_dim)\n", + "\n", + " # Non-linearity\n", + " self.sigmoid = nn.Sigmoid()\n", + "\n", + " # Linear function (readout)\n", + " self.fc2 = nn.Linear(hidden_dim, output_dim)\n", + "\n", + " def forward(self, text, offsets):\n", + " # Embedding layer\n", + " #embedded = ...\n", + "\n", + " # Linear function\n", + " out = self.fc1(embedded)\n", + "\n", + " # Non-linearity\n", + " out = self.sigmoid(out)\n", + "\n", + " # Linear function (readout)\n", + " out = self.fc2(out)\n", + " return out" + ], + "metadata": { + "id": "VfR2w-Z4V6Qq" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "------------------------------------\n", + "SOLUTION" + ], + "metadata": { + "id": "6E9K900ZV0zz" + } + }, + { + "cell_type": "code", + "source": [ + "class FeedforwardNeuralNetModel(nn.Module):\n", + " def __init__(self, hidden_dim, output_dim, weights_matrix):\n", + " # calls the init function of nn.Module. Dont get confused by syntax,\n", + " # just always do it in an nn.Module\n", + " super(FeedforwardNeuralNetModel, self).__init__()\n", + "\n", + " # Embedding layer\n", + " # mode (string, optional) – \"sum\", \"mean\" or \"max\". Default=mean.\n", + " self.embedding_bag = nn.EmbeddingBag.from_pretrained(\n", + " weights_matrix,\n", + " mode='mean')\n", + " embed_dim = self.embedding_bag.embedding_dim\n", + "\n", + " # Linear function\n", + " self.fc1 = nn.Linear(embed_dim, hidden_dim)\n", + "\n", + " # Non-linearity\n", + " self.sigmoid = nn.Sigmoid()\n", + "\n", + " # Linear function (readout)\n", + " self.fc2 = nn.Linear(hidden_dim, output_dim)\n", + "\n", + " def forward(self, text, offsets):\n", + " # Embedding layer\n", + " embedded = self.embedding_bag(text, offsets)\n", + "\n", + " # Linear function\n", + " out = self.fc1(embedded)\n", + "\n", + " # Non-linearity\n", + " out = self.sigmoid(out)\n", + "\n", + " # Linear function (readout)\n", + " out = self.fc2(out)\n", + " return out" + ], + "metadata": { + "id": "fXOPuCv_vZrr" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "## 4- Train and evaluation (code given)\n", + "\n", + "Look at the code below that performs the training and evaluation of your model.\n", + "Note that:\n", + "* one epoch is one iteration over the entire training set\n", + "* each *input* is here a batch of several documents (here 2)\n", + "* the model computes a loss after making a prediction for each input / batch. We accumulate this loss, and compute a score after seing each batch\n", + "* at the end of each round / epoch, we print the accumulated loss and accuracy:\n", + " * A good indicator that your model is doing what is supposed to, is the loss: it should decrease during training. At the same time, the accuracy on the training set should increase.\n", + "* in the evaluation procedure, we have to compute score for batched of data, that's why we have slight modifications in the code (use of *extend* to have a set of predictions)\n", + "\n", + "Note: here we need to take into account the offsets in the training and evaluation procedures." + ], + "metadata": { + "id": "UsXmIGqApbxj" + } + }, + { + "cell_type": "code", + "source": [ + "import matplotlib.pyplot as plt\n", + "import os\n", + "\n", + "def my_plot(epochs, loss):\n", + " plt.plot(epochs, loss)\n", + " #fig.savefig(os.path.join('./lossGraphs', 'train.jpg'))\n", + "\n", + "def training(model, train_loader, optimizer, num_epochs=5, plot=False ):\n", + " loss_vals = []\n", + " for epoch in range(num_epochs):\n", + " train_loss, total_acc, total_count = 0, 0, 0\n", + " for input, label, offsets in train_loader:\n", + " # Step1. Clearing the accumulated gradients\n", + " optimizer.zero_grad()\n", + " # Step 2. Forward pass to get output/logits\n", + " outputs = model( input, offsets ) # <---- argument offsets en plus\n", + " # Step 3. Compute the loss, gradients, and update the parameters by\n", + " # calling optimizer.step()\n", + " # - Calculate Loss: softmax --> cross entropy loss\n", + " loss = criterion(outputs, label)\n", + " # - Getting gradients w.r.t. parameters\n", + " loss.backward()\n", + " # - Updating parameters\n", + " optimizer.step()\n", + " # Accumulating the loss over time\n", + " train_loss += loss.item()\n", + " total_acc += (outputs.argmax(1) == label).sum().item()\n", + " total_count += label.size(0)\n", + " # Compute accuracy on train set at each epoch\n", + " print('Epoch: {}. Loss: {}. ACC {} '.format(epoch, train_loss/len(train), total_acc/len(train)))\n", + " loss_vals.append(train_loss/len(train))\n", + " total_acc, total_count = 0, 0\n", + " train_loss = 0\n", + " if plot:\n", + " # plotting\n", + " my_plot(np.linspace(1, num_epochs, num_epochs).astype(int), loss_vals)\n", + "\n", + "\n", + "def evaluate( model, dev_loader ):\n", + " predictions = []\n", + " gold = []\n", + " with torch.no_grad():\n", + " for input, label, offsets in dev_loader:\n", + " probs = model(input, offsets) # <---- fct forward with offsets\n", + " # -- to deal with batches\n", + " predictions.extend( torch.argmax(probs, dim=1).cpu().numpy() )\n", + " gold.extend([int(l) for l in label])\n", + " print(classification_report(gold, predictions))\n", + " return gold, predictions" + ], + "metadata": { + "id": "US_0JmN5phqs" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Set the values of the hyperparameters\n", + "hidden_dim = 4\n", + "learning_rate = 0.001\n", + "num_epochs = 5\n", + "criterion = nn.CrossEntropyLoss()\n", + "output_dim = 2" + ], + "metadata": { + "id": "Jod8FnWPs_Vi" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Initialize the model\n", + "model_ffnn = FeedforwardNeuralNetModel( hidden_dim, output_dim, weights_matrix)\n", + "optimizer = torch.optim.SGD(model_ffnn.parameters(), lr=learning_rate)\n", + "model_ffnn = model_ffnn.to(device)\n", + "# Train the model\n", + "training( model_ffnn, train_loader, optimizer, num_epochs=5, plot=True )\n", + "# Evaluate on dev\n", + "gold, pred = evaluate( model_ffnn, dev_loader )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 693 + }, + "id": "1Xug7ygbpAhS", + "outputId": "3463fdb4-575e-40c5-b865-5a47935bba79" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 0. Loss: 0.35214536357689546. ACC 0.5004973145016909 \n", + "Epoch: 1. Loss: 0.34653718033533154. ACC 0.529739407201114 \n", + "Epoch: 2. Loss: 0.33326706543389906. ACC 0.595583847224985 \n", + "Epoch: 3. Loss: 0.321205671890749. ACC 0.630992639745375 \n", + "Epoch: 4. Loss: 0.3143239427311226. ACC 0.6411378555798687 \n", + " precision recall f1-score support\n", + "\n", + " 0 0.45 0.94 0.61 230\n", + " 1 0.82 0.18 0.30 319\n", + "\n", + " accuracy 0.50 549\n", + " macro avg 0.64 0.56 0.46 549\n", + "weighted avg 0.67 0.50 0.43 549\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjUAAAGdCAYAAADqsoKGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABUg0lEQVR4nO3de1xUdeL/8dfMcBW5CCgIoqCkpKmoyEi5ZolZudu2W0llaniptrKMvpVuu13W3R+17ZZbWlpeMrRN26zdtdJVzEpFUJS0UvKuKKCGgqAOlzm/P1xpSVDH1APD+/l4zOORZz7nzPvTaXfenssci2EYBiIiIiJNnNXsACIiIiIXg0qNiIiIuAWVGhEREXELKjUiIiLiFlRqRERExC2o1IiIiIhbUKkRERERt6BSIyIiIm7Bw+wAl4vT6eTAgQP4+/tjsVjMjiMiIiLnwTAMjh07RkREBFbr2Y/FNJtSc+DAAaKiosyOISIiIhdg3759tGvX7qxjmk2p8ff3B079SwkICDA5jYiIiJyPsrIyoqKiar/Hz6bZlJrTp5wCAgJUakRERJqY87l0RBcKi4iIiFtQqRERERG3oFIjIiIibkGlRkRERNyCSo2IiIi4BZUaERERcQsqNSIiIuIWVGpERETELajUiIiIiFtQqRERERG3oFIjIiIibkGlRkRERNyCSs1PdLKqhtQ5Ofz7qwNU1zjNjiMiItJsNZundF8q/8zbz2f5h/gs/xCRQb6MuroDKX3bE+jraXY0ERGRZsViGIZhdojLoaysjMDAQEpLSwkICLho2z1c7mDe2j3MW7uHw+WVALTwsjEsIYrUa6LpEOJ30T5LRESkuXHl+1ul5iI5WVXDv/IOMGvVLvKLjwFgsUDylWGM7R9DYkwwFovlon+uiIiIO1OpqcelLjWnGYbB6u3fM2vVTj7LP1S7/KrIAMb0j2Fo9wi8PHQpk4iIyPlQqanH5So1/2v7wXLmrN7FBxsKOFl16iLiNv7ejLo6mrsT29PKz+uy5BAREWmqVGrqYUapOe1IRSXv5uxl7prdHDzmAMDH08qve7dj9DUxxLZpeVnziIiINBUqNfUws9ScVlnt5OPNp667+Xp/We3y67q0Zkz/jlwTG6LrbkRERP6HSk09GkOpOc0wDHJ2lTBr1S6WbSnm9B6IC/dn9DUx3BIfgY+nzdSMIiIijYFKTT0aU6n5X3u+r2DO6t0sXL+P45U1AIS29GK4vQP39OtAa39vkxOKiIiYR6WmHo211JxWeqKKBev2MnfNHvYfPQGAl83Krb0iGN0/hrjwxpdZRETkUlOpqUdjLzWnVdc4WfJNEbNW7WLj3qO1y/vHhjKmfwzXdm6N1arrbkREpHlQqalHUyk1/yt3zxFmr9rFp18X4vzvXurU2o/Ua2K4rXc7fL103Y2IiLg3lZp6NMVSc1rBkePMXbOb93L2ccxRDUBQC0/uTmzPqKujCQvwMTmhiIjIpaFSU4+mXGpOK3dU8/76fcxZvZu9JccB8LRZ+HmPCMb0j+GqyECTE4qIiFxcKjX1cIdSc1qN02D5lmJmfbmLnN0ltcsTY4IZ0z+G5CvDsOm6GxERcQOufH9f0EOIpk2bRnR0ND4+PtjtdnJychocu2jRIhISEggKCsLPz4/4+HgyMjLqjLn33nuxWCx1XjfeeGOdMSUlJQwfPpyAgACCgoIYM2YM5eXlFxK/ybNZLQzpFs7CB5L498P9uTU+Ag+rhZxdJdyfkcv1f13JnNW7KP/vqSoREZHmwOUjNQsWLGDkyJFMnz4du93OlClTeP/998nPz6dNmzZnjF+5ciVHjhwhLi4OLy8vFi9ezOOPP87HH3/MkCFDgFOlpri4mDlz5tSu5+3tTatWrWr/fNNNN1FYWMiMGTOoqqoiNTWVvn378u67755Xbnc6UlOfotKTvJO1m3dz9nL0eBUA/j4e3PXf624ig3xNTigiIuK6S3r6yW6307dvX6ZOnQqA0+kkKiqK8ePHM3HixPPaRu/evRk6dCiTJ08GTpWao0eP8tFHH9U7fsuWLXTt2pV169aRkJAAwJIlS7j55pspKCggIiLinJ/p7qXmtBOVNXywoYDZq3ex81AFcOrIzo1XhTOmfwy927c6xxZEREQaj0t2+qmyspLc3FySk5N/2IDVSnJyMllZWedc3zAMMjMzyc/PZ8CAAXXeW7lyJW3atKFLly785je/4fvvv699Lysri6CgoNpCA5CcnIzVaiU7O9uVKbg9Xy8b9/TrwPLHrmX2vQlcExtCjdPg402F/Pr1Nfzq9dV8vKmQ6hqn2VFFREQuKg9XBh8+fJiamhrCwsLqLA8LC2Pr1q0NrldaWkpkZCQOhwObzcbrr7/O4MGDa9+/8cYb+fWvf01MTAw7duzgt7/9LTfddBNZWVnYbDaKiorOOLXl4eFBcHAwRUVF9X6mw+HA4XDU/rmsrKzece7KarVwfVwY18eFsaWwjNmrdvHPvANs3HuUh97dQGSQL/deHU1KYhQBPp5mxxUREfnJXCo1F8rf35+8vDzKy8vJzMwkLS2Njh07MnDgQADuvPPO2rHdu3enR48edOrUiZUrVzJo0KAL+sz09HSef/75ixG/ybuybQAv3dGTJ2+MI2PtHuavPfUohj99soUpy7/jjoQoUq+JpkOIn9lRRURELphLp59CQ0Ox2WwUFxfXWV5cXEx4eHjDH2K1EhsbS3x8PI8//ji333476enpDY7v2LEjoaGhbN++HYDw8HAOHjxYZ0x1dTUlJSUNfu6kSZMoLS2tfe3bt+98p+m2Wvt7kza4M6snXs+Lt3Wnc1hLKipreHvNbgb+ZSX3vbOenF0lNJO7/EVExM24VGq8vLzo06cPmZmZtcucTieZmZkkJSWd93acTmedU0M/VlBQwPfff0/btm0BSEpK4ujRo+Tm5taOWbFiBU6nE7vdXu82vL29CQgIqPOSU3w8baT0bc/SCQPIGJPIwC6tMQz4z7fFDJuRxS1TV/PRxv1UVuu6GxERaTou6JbuUaNGMWPGDBITE5kyZQoLFy5k69athIWFMXLkSCIjI2uPxKSnp5OQkECnTp1wOBx88sknTJw4kTfeeIOxY8dSXl7O888/z2233UZ4eDg7duzgySef5NixY2zevBlvb2/g1C3dxcXFTJ8+vfaW7oSEBN3SfZFsP3iM2at380FuAY7/lpmwAG9GJkUz3N6eoBZeJicUEZHmyJXvb5evqUlJSeHQoUM888wzFBUVER8fz5IlS2ovHt67dy9W6w8HgCoqKnjwwQcpKCjA19eXuLg45s2bR0pKCgA2m41NmzYxd+5cjh49SkREBDfccAOTJ0+uLTQA8+fP5+GHH2bQoEFYrVZuu+02Xn31VVfjSwNi2/jz/37Vnf+7oQvvZu/hnaw9FJc5eGlpPq+t2MZtvdsxun8MnVq3NDuqiIhIvfSYBKlXZbWTxZsOMGvVLr458MOdY9fHtWFM/xiu7hSCxaJHMYiIyKWlZz/VQ6XmwhiGQfauEmat2sXyLcWc/q8lLtyf0f1juKVnBD6eNnNDioiI21KpqYdKzU+3+3AFc1bv4v3cAo5X1gAQ2tKLe/p14J5+HQht6X2OLYiIiLhGpaYeKjUXT+nxKt5bt5e5a3ZzoPQkAF4eVm6Nj2BM/450Cfc3OaGIiLgLlZp6qNRcfFU1TpZ8XcTMVbv4at/R2uU/uyKU0f1juPaK1lituu5GREQunEpNPVRqLh3DMNiw9wizVu1iyddFOP/7X1Sn1n6M7h/Dr3u1w9dL192IiIjrVGrqoVJzeewrOc7cNbtZsG4fxxzVALRq4cnd9vaMTIomLMDH5IQiItKUqNTUQ6Xm8jp2sor31xcwZ80u9pWcAMDTZuEXPSIY3T+GqyIDTU4oIiJNgUpNPVRqzFHjNFj2bRGzVu1i3e4jtcvtMcGM6R/DoCvDsOm6GxERaYBKTT1Uasy3qeAos1bt4uNNhVT/98KbDiEtSL06mjsSovDzviwPjRcRkSZEpaYeKjWNR2HpCd7J2sO72XspPVEFgL+PB3cntmfU1dFEBPmanFBERBoLlZp6qNQ0Pscrq/kgt4DZq3ez63AFADarhZuuCmdM/xh6tW9lckIRETGbSk09VGoaL6fT4LP8g8xatYs1O76vXd67fRBjf9aRG7qG4WGznmULIiLirlRq6qFS0zR8e6CM2at38a+8A1TWOAGIDPIl9ZpohvWNIsDH0+SEIiJyOanU1EOlpmk5eOwk89buZd7aPZRUVALg52VjWN8oUq+OoX1IC5MTiojI5aBSUw+VmqbpZFUNH23cz6xVu9h2sBwAqwUGdw1jTP+O9I1uhcWiW8JFRNyVSk09VGqaNsMw+HLbYWat2sXn3x2qXd6jXSBj+sdwc/e2eOq6GxERt6NSUw+VGvexrfgYs1fvYtGG/TiqT113Ex7gw8irO3B3YnuCWniZnFBERC4WlZp6qNS4n+/LHbybvZd31u7h0DEHAL6eNm7rE8noa2Lo2LqlyQlFROSnUqmph0qN+3JU17D4q0JmrdrFt4Vltcuvj2vD2P4xJHUK0XU3IiJNlEpNPVRq3J9hGKzdWcKsVTvJ3HqQ0/9lx4X7M6Z/DLfER+DtYTM3pIiIuESlph4qNc3LrsMVzFm9i/fXF3CiqgaA0JbejOjXgXv6tSekpbfJCUVE5Hyo1NRDpaZ5Kj1exd/X7WXumt0Ulp4EwMvDyq/iIxnzsxg6h/mbnFBERM5GpaYeKjXNW1WNk0+/LmLWlzv5qqC0dvnPrghlTP8Yru3cWtfdiIg0Qio19VCpETh13U3uniPMWrWLpd8U4fzvf/1XtGnJS3f0JD4qyNR8IiJSl0pNPVRq5Mf2lRzn7TW7WbBuH+WOavx9PPj7uH5cFRlodjQREfkvV76/9ROs0mxFBbfg9z/vyppJ15MYHcyxk9WMnJ3DtuJjZkcTEZELoFIjzV6Ajyez7k2gZ7tASioqGT4zm92HK8yOJSIiLlKpEQH8fTyZOzqRuHB/Dh5zMHxmNvuPnjA7loiIuEClRuS/glp4MW+snY6t/dh/9ATD31rLwbKTZscSEZHzpFIj8j9CW3rz7th+RAX7svv74wyfmU1JRaXZsURE5Dyo1Ij8SHigD++O7Ud4gA/bDpYzYlY2pSeqzI4lIiLnoFIjUo+o4BbMH2cntKUX3xwoI3VODhWOarNjiYjIWajUiDSgU+uWZIyxE+jryYa9Rxk7dz0n//scKRERaXxUakTO4sq2AbwzOpGW3h5k7fye38zLpbLaaXYsERGpxwWVmmnTphEdHY2Pjw92u52cnJwGxy5atIiEhASCgoLw8/MjPj6ejIyMBsc/8MADWCwWpkyZUmd5dHQ0FoulzuuFF164kPgiLukZFcTse/vi42nls/xDPPreRqprVGxERBobl0vNggULSEtL49lnn2XDhg307NmTIUOGcPDgwXrHBwcH8/TTT5OVlcWmTZtITU0lNTWVpUuXnjH2ww8/ZO3atURERNS7rT/84Q8UFhbWvsaPH+9qfJELkhgTzFsjE/CyWfn06yKe+McmnM5m8YQREZEmw+VS8/LLLzNu3DhSU1Pp2rUr06dPp0WLFsyePbve8QMHDuRXv/oVV155JZ06deLRRx+lR48erFq1qs64/fv3M378eObPn4+np2e92/L39yc8PLz25efn52p8kQv2syta8/rw3nhYLXy4cT+/++fXNJNHp4mINAkulZrKykpyc3NJTk7+YQNWK8nJyWRlZZ1zfcMwyMzMJD8/nwEDBtQudzqdjBgxgieeeIJu3bo1uP4LL7xASEgIvXr14qWXXqK6uuG7URwOB2VlZXVeIj9VctcwptwZj9UC72bv5Y8fb1GxERFpJDxcGXz48GFqamoICwurszwsLIytW7c2uF5paSmRkZE4HA5sNhuvv/46gwcPrn3/xRdfxMPDg0ceeaTBbTzyyCP07t2b4OBg1qxZw6RJkygsLOTll1+ud3x6ejrPP/+8K9MTOS8/7xHBicoanvjHJmat2kULLxuP39DF7FgiIs2eS6XmQvn7+5OXl0d5eTmZmZmkpaXRsWNHBg4cSG5uLn/729/YsGEDFoulwW2kpaXV/nOPHj3w8vLi/vvvJz09HW9v7zPGT5o0qc46ZWVlREVFXdyJSbN1R0IUJ6tq+P0/v+G1Fdvx9bLx4MBYs2OJiDRrLpWa0NBQbDYbxcXFdZYXFxcTHh7e4HpWq5XY2FP/hx8fH8+WLVtIT09n4MCBfPnllxw8eJD27dvXjq+pqeHxxx9nypQp7N69u95t2u12qqur2b17N126nPm3ZG9v73rLjsjFMiIpmuOVNaR/upU/L8mnhaeNe6+JMTuWiEiz5dI1NV5eXvTp04fMzMzaZU6nk8zMTJKSks57O06nE4fDAcCIESPYtGkTeXl5ta+IiAieeOKJeu+QOi0vLw+r1UqbNm1cmYLIRXX/tZ14dNAVADz3729ZuG6fyYlERJovl08/paWlMWrUKBISEkhMTGTKlClUVFSQmpoKwMiRI4mMjCQ9PR04dW1LQkICnTp1wuFw8Mknn5CRkcEbb7wBQEhICCEhIXU+w9PTk/Dw8NojMFlZWWRnZ3Pdddfh7+9PVlYWjz32GPfccw+tWrX6Sf8CRH6qCclXcKKqhje/2MlTizbh7Wnll/GRZscSEWl2XC41KSkpHDp0iGeeeYaioiLi4+NZsmRJ7cXDe/fuxWr94QBQRUUFDz74IAUFBfj6+hIXF8e8efNISUk578/09vbmvffe47nnnsPhcBATE8Njjz1W55oZEbNYLBYm3RTH8cpq5q3dS9rCr/DxtDGkW8OnZEVE5OKzGM3kftSysjICAwMpLS0lICDA7DjihpxOgyf+sYkPNhTgZbPy1qgEru3c2uxYIiJNmivf33r2k8hFYrVaePG27gzt3pbKGif3Z6wne+f3ZscSEWk2VGpELiIPm5VXUuIZFNeGk1VORr+9jo17j5gdS0SkWVCpEbnIvDysTBvem/6xoVRU1jBqdg7fHCg1O5aIiNtTqRG5BHw8bbw5sg8JHVpRdrKaEbNy2H7wmNmxRETcmkqNyCXSwsuD2al96dEukJKKSu5+K5s931eYHUtExG2p1IhcQgE+nsxNTaRLmD8Hjzm4+61sDhw9YXYsERG3pFIjcom18vNi3lg7HUP92H/0BMNnZnPw2EmzY4mIuB2VGpHLoLW/N/PH2WnXypddhysYMTOHIxWVZscSEXErKjUil0nbQF/eHduPsABv8ouPMXJ2DmUnq8yOJSLiNlRqRC6j9iEtmD+2HyF+XmzeX0rqnHUcr6w2O5aIiFtQqRG5zGLbtCRjjJ1AX09y9xxh3DvrOVlVY3YsEZEmT6VGxARdIwKYOzqRlt4erN7+PQ/O30BltdPsWCIiTZpKjYhJ4qOCmDUqAR9PKyu2HmTCgo1U16jYiIhcKJUaERPZO4bw5ogEvGxWPtlcxJP/2ITTaZgdS0SkSVKpETHZgM6tmXp3L2xWC4s27uf3//waw1CxERFxlUqNSCNwQ7dwXkmJx2KB+dl7+X+fbFGxERFxkUqNSCNxS88IXrytBwBvfbmLV5ZvMzmRiEjTolIj0ogMS4ji+Vu6AfBq5jamf77D5EQiIk2HSo1IIzPq6mieujEOgBc+3crcNbvNDSQi0kSo1Ig0Qr8Z2IlHro8F4Nl/fcPC9ftMTiQi0vip1Ig0Uo8N7szY/jEATPxgE//+6oDJiUREGjeVGpFGymKx8PTQKxlub4/TgMcW5LHs22KzY4mINFoqNSKNmMViYfIvr+LXvSKpdho8NH8DX3x3yOxYIiKNkkqNSCNntVr48+09uLl7OJU1Tu7LWE/OrhKzY4mINDoqNSJNgIfNypSUXlwf14aTVU5Gv72OvH1HzY4lItKoqNSINBFeHlZeH96bqzuFUO6oZtTsHLYUlpkdS0Sk0VCpEWlCfDxtvDUygT4dWlF6oop7Zmaz/WC52bFERBoFlRqRJsbP24M5qX25KjKA7ysqGT5zLXu/P252LBER06nUiDRBAT6evDPaTuewlhSXObh75loKS0+YHUtExFQqNSJNVLCfF/PG2okJ9aPgyAmGv5XNoWMOs2OJiJhGpUakCWvj78P8sXYig3zZebiCEbOyOVJRaXYsERFTqNSINHERQb68O85OG39vthYdY9ScHMpOVpkdS0TkslOpEXEDHUL8mD/WTrCfF5sKShk9Zx3HK6vNjiUiclldUKmZNm0a0dHR+Pj4YLfbycnJaXDsokWLSEhIICgoCD8/P+Lj48nIyGhw/AMPPIDFYmHKlCl1lpeUlDB8+HACAgIICgpizJgxlJfrVlaR064I8ydjTCIBPh6s33OE+97J5WRVjdmxREQuG5dLzYIFC0hLS+PZZ59lw4YN9OzZkyFDhnDw4MF6xwcHB/P000+TlZXFpk2bSE1NJTU1laVLl54x9sMPP2Tt2rVERESc8d7w4cP55ptvWLZsGYsXL+aLL77gvvvuczW+iFvrFhHI3NGJ+HnZWLX9MA+/u4GqGqfZsURELguLYRiGKyvY7Xb69u3L1KlTAXA6nURFRTF+/HgmTpx4Xtvo3bs3Q4cOZfLkybXL9u/fj91uZ+nSpQwdOpQJEyYwYcIEALZs2ULXrl1Zt24dCQkJACxZsoSbb76ZgoKCekvQj5WVlREYGEhpaSkBAQGuTFmkyVm783vunZPDySonQ3u05dU7e2GzWsyOJSLiMle+v106UlNZWUlubi7Jyck/bMBqJTk5maysrHOubxgGmZmZ5OfnM2DAgNrlTqeTESNG8MQTT9CtW7cz1svKyiIoKKi20AAkJydjtVrJzs6u97McDgdlZWV1XiLNRb+OIcwYkYCnzcLHmwp58h+bcDpd+vuLiEiT41KpOXz4MDU1NYSFhdVZHhYWRlFRUYPrlZaW0rJlS7y8vBg6dCivvfYagwcPrn3/xRdfxMPDg0ceeaTe9YuKimjTpk2dZR4eHgQHBzf4uenp6QQGBta+oqKizneaIm7h2s6tmXp3b2xWCx9sKOCZf32NiwdmRUSalMty95O/vz95eXmsW7eOP/3pT6SlpbFy5UoAcnNz+dvf/sbbb7+NxXLxDo9PmjSJ0tLS2te+ffsu2rZFmooh3cJ5eVhPLBaYt3Yv6Z9uVbEREbfl4crg0NBQbDYbxcXFdZYXFxcTHh7e4HpWq5XY2FgA4uPj2bJlC+np6QwcOJAvv/ySgwcP0r59+9rxNTU1PP7440yZMoXdu3cTHh5+xoXI1dXVlJSUNPi53t7eeHt7uzI9Ebf0y/hITlbV8NQHm3nzi5208LIxIbmz2bFERC46l47UeHl50adPHzIzM2uXOZ1OMjMzSUpKOu/tOJ1OHI5TP+c+YsQINm3aRF5eXu0rIiKCJ554ovYOqaSkJI4ePUpubm7tNlasWIHT6cRut7syBZFmKaVve577RVcApizfxptf7DA5kYjIxefSkRqAtLQ0Ro0aRUJCAomJiUyZMoWKigpSU1MBGDlyJJGRkaSnpwOnrm1JSEigU6dOOBwOPvnkEzIyMnjjjTcACAkJISQkpM5neHp6Eh4eTpcuXQC48sorufHGGxk3bhzTp0+nqqqKhx9+mDvvvPO87nwSEbj3mhiOV9Xw5yX5/L9PtuLraWNEUrTZsURELhqXS01KSgqHDh3imWeeoaioiPj4eJYsWVJ78fDevXuxWn84AFRRUcGDDz5IQUEBvr6+xMXFMW/ePFJSUlz63Pnz5/Pwww8zaNAgrFYrt912G6+++qqr8UWatQcHxnLcUcPUz7bz+39+g4+njTsSdBG9iLgHl3+npqnS79SInGIYBpMXb2H26l1YLfDqXb34eQ8d8RSRxumS/U6NiDR9FouF3//8Su5KbI/TgAnv5bH82+Jzrygi0sip1Ig0QxaLhT/dehW/6hVJtdPgwfkbWLXtsNmxRER+EpUakWbKarXw0u09uLFbOJU1Tsa9s551u0vMjiUicsFUakSaMQ+blVfv6sXALq05UVVD6px1fLXvqNmxREQuiEqNSDPn5WFl+j19SOoYQrmjmpGzc9hSqGeliUjTo1IjIvh42pg5KoHe7YMoPVHFiFnZ7DhUbnYsERGXqNSICAB+3h7MSU3kqsgADpdXMvytbPaVHDc7lojIeVOpEZFagb6evDPazhVtWlJUdpK7Z66lsPSE2bFERM6LSo2I1BHs58X8sXaiQ1qwr+QEw2dmc7jcYXYsEZFzUqkRkTO0CfBh/rh+RAb5svNQBffMzObo8UqzY4mInJVKjYjUKzLIl/lj7bTx92Zr0TFGzc7h2Mkqs2OJiDRIpUZEGhQd6sf8sXZatfDkq4JSxry9nuOV1WbHEhGpl0qNiJzVFWH+ZIyx4+/jQc7uEu7PyOVkVY3ZsUREzqBSIyLndFVkIG+nJtLCy8aX2w7z8Lsbqapxmh1LRKQOlRoROS99OrRi1qi+eHtYWb6lmMcW5FHjNMyOJSJSS6VGRM5bUqcQZozog6fNwuJNhUz8YBNOFRsRaSRUakTEJQO7tOG1u3pjs1p4P7eA5/79DYahYiMi5lOpERGX3XhVOH+9oycWC7yTtYcXlmxVsRER06nUiMgFubVXJP/vV90BmPH5Tl5bsd3kRCLS3KnUiMgFuyuxPc/8vCsALy/7jplf7jQ5kYg0Zyo1IvKTjO4fwxNDugDwx4+3MG/tHpMTiUhzpVIjIj/ZQ9fF8tB1nQD43Udf80FugcmJRKQ5UqkRkYvi/27owr1XRwPwxD++4uNNheYGEpFmR6VGRC4Ki8XCs7/oyp19o3Aa8Oh7G1mxtdjsWCLSjKjUiMhFY7FY+NOvuvPL+AiqnQYPzNvA6u2HzY4lIs2ESo2IXFQ2q4W/3tGTId3CqKx2MnbuetbvLjE7log0Ayo1InLRedisvHpXL67t3JoTVTWkzlnHpoKjZscSETenUiMil4S3h43p9/TBHhPMMUc1I2fnsLWozOxYIuLGVGpE5JLx9bIx696+9GofxNHjVdwzM4edh8rNjiUibkqlRkQuqZbeHrydmkjXtgEcLncwfGY2+0qOmx1LRNyQSo2IXHKBvp5kjEkktk1LCktPMnxmNkWlJ82OJSJuRqVGRC6LkJbezB9rp0NIC/aWHGf4zLUcLneYHUtE3IhKjYhcNmEBPswfayci0IcdhyoYMSuHo8crzY4lIm5CpUZELqt2rVowf1w/Wvt7s6WwjFFz1lHuqDY7loi4gQsqNdOmTSM6OhofHx/sdjs5OTkNjl20aBEJCQkEBQXh5+dHfHw8GRkZdcY899xzxMXF4efnR6tWrUhOTiY7O7vOmOjoaCwWS53XCy+8cCHxRcRkMaF+zB9rp1ULT77ad5TRb6/jRGWN2bFEpIlzudQsWLCAtLQ0nn32WTZs2EDPnj0ZMmQIBw8erHd8cHAwTz/9NFlZWWzatInU1FRSU1NZunRp7ZjOnTszdepUNm/ezKpVq4iOjuaGG27g0KFDdbb1hz/8gcLCwtrX+PHjXY0vIo1E5zB/MsbY8ff2IGdXCfdlrMdRrWIjIhfOYhiG4coKdrudvn37MnXqVACcTidRUVGMHz+eiRMnntc2evfuzdChQ5k8eXK975eVlREYGMjy5csZNGgQcOpIzYQJE5gwYYIrcc/YZmlpKQEBARe0DRG5+HL3lDBiVg7HK2sY3DWM14f3xtOmM+Micoor398u/T9HZWUlubm5JCcn/7ABq5Xk5GSysrLOub5hGGRmZpKfn8+AAQMa/Iw333yTwMBAevbsWee9F154gZCQEHr16sVLL71EdXXD5+EdDgdlZWV1XiLS+PTpEMzMkQl4eVhZ9m0xjy/8ihqnS3/XEhEBwMOVwYcPH6ampoawsLA6y8PCwti6dWuD65WWlhIZGYnD4cBms/H6668zePDgOmMWL17MnXfeyfHjx2nbti3Lli0jNDS09v1HHnmE3r17ExwczJo1a5g0aRKFhYW8/PLL9X5meno6zz//vCvTExGTXB0byox7+nBfxnr+9dUBfD1tpP+6O1arxexoItKEuHT66cCBA0RGRrJmzRqSkpJqlz/55JN8/vnnZ1zce5rT6WTnzp2Ul5eTmZnJ5MmT+eijjxg4cGDtmIqKCgoLCzl8+DBvvfUWK1asIDs7mzZt2tS7zdmzZ3P//fdTXl6Ot7f3Ge87HA4cjh9+A6OsrIyoqCidfhJpxD7dXMhD727AacC9V0fz7C+6YrGo2Ig0Z5fs9FNoaCg2m43i4uI6y4uLiwkPD2/4Q6xWYmNjiY+P5/HHH+f2228nPT29zhg/Pz9iY2Pp168fs2bNwsPDg1mzZjW4TbvdTnV1Nbt37673fW9vbwICAuq8RKRxu6l7W/46rCcWC7y9Zjd/XpqPi5f9iUgz5lKp8fLyok+fPmRmZtYuczqdZGZm1jlycy5Op7POUZQLGZOXl4fVam3wSI6INE2/6tWOP956FQBvrNzB1BXbTU4kIk2FS9fUAKSlpTFq1CgSEhJITExkypQpVFRUkJqaCsDIkSOJjIysPRKTnp5OQkICnTp1wuFw8Mknn5CRkcEbb7wBnDrt9Kc//YlbbrmFtm3bcvjwYaZNm8b+/fu54447AMjKyiI7O5vrrrsOf39/srKyeOyxx7jnnnto1arVxfp3ISKNxHB7B05U1vDHj7fw12Xf4etlY+zPOpodS0QaOZdLTUpKCocOHeKZZ56hqKiI+Ph4lixZUnvx8N69e7FafzgAVFFRwYMPPkhBQQG+vr7ExcUxb948UlJSALDZbGzdupW5c+dy+PBhQkJC6Nu3L19++SXdunUDTp1Keu+993juuedwOBzExMTw2GOPkZaWdjH+HYhIIzT2Zx05UVnDX5d9xx8/3kILLw/utrc3O5aINGIu/05NU6XfqRFpegzD4M9L83lj5Q4sFnh5WE9+1aud2bFE5DK6ZBcKi4hcThaLhSeHdOHeq6MxDHh84Vd8urnQ7Fgi0kip1IhIo2axWHjm510ZltAOpwGPvLeRz7bW/1gWEWneVGpEpNGzWi2k/7oHt/SMoKrG4P55uazZftjsWCLSyKjUiEiTYLNa+OuwngzuGkZltZOx76wnd0+J2bFEpBFRqRGRJsPTZmXq3b0Y0Lk1xytruHf2Or7eX2p2LBFpJFRqRKRJ8fawMeOePiTGBHPMUc2IWdnkFx0zO5aINAIqNSLS5Ph62Zh9b196RgVx5HgVw2dms+twhdmxRMRkKjUi0iS19PbgndRErmwbwOFyB8PfWsue71VsRJozlRoRabICW3iSMSaRTq39OFB6kjumZ7GtWKeiRJorlRoRadJCW3rz9/v6ERfuz8FjDlLeXKuLh0WaKZUaEWny2vj78N59/ejZLpCSikruemutbvcWaYZUakTELQS18GLeWPupu6JOVnPPzBxW6wf6RJoVlRoRcRv+Pp7MTU1kQOfWnKiqIfXtdSz/ttjsWCJymajUiIhb8fWy8dbIPgzpduqXhx+Yl8u/vzpgdiwRuQxUakTE7Xh72Jh2d29+1SuSaqfBI+9tZOG6fWbHEpFLTKVGRNySh83KX+/oyXB7ewwDnvxgE3NW7zI7lohcQio1IuK2rFYLf7z1Ku4b0BGA5//9LdM+225yKhG5VFRqRMStWSwWJt0Ux2PJnQF4aWk+Ly7ZimEYJicTkYtNpUZE3J7FYuHR5Cv43dArAXhj5Q6e+9c3OJ0qNiLuRKVGRJqNsT/ryP/7VXcsFpibtYcnP9hEjYqNiNtQqRGRZuVue3teGRaPzWrhH7kFPPL3jVRWO82OJSIXgUqNiDQ7t/aKZNrdvfGyWfl4cyEPzMvlZFWN2bFE5CdSqRGRZunGq8J5a1QCPp5WVmw9SOqcdVQ4qs2OJSI/gUqNiDRb13ZuzTuj7bT09iBr5/fcMyub0uNVZscSkQukUiMizVpiTDDzx9oJauHJxr1HueuttXxf7jA7lohcAJUaEWn2ekYF8d59/Qht6c23hWUMm5FFUelJs2OJiItUakREgLjwAN5/IImIQB92HKrgjhlr2Fdy3OxYIuIClRoRkf+KCfVj4QNJRIe0YF/JCe6YnsX2g+VmxxKR86RSIyLyP9q1asHC+5PoHNaSorKTpMzI4psDpWbHEpHzoFIjIvIjbQJ8WHBfEt0jA/m+opK73lzLhr1HzI4lIuegUiMiUo9Wfl7MH2enb3Qryk5Wc8/MbNbsOGx2LBE5C5UaEZEGBPh4Mnd0Ij+7IpTjlTWkzlnHiq3FZscSkQao1IiInEULLw9mjkpgcNcwHNVO7nsnl483FZodS0TqcUGlZtq0aURHR+Pj44PdbicnJ6fBsYsWLSIhIYGgoCD8/PyIj48nIyOjzpjnnnuOuLg4/Pz8aNWqFcnJyWRnZ9cZU1JSwvDhwwkICCAoKIgxY8ZQXq67EkTk0vP2sPH68N78Mj6CaqfB+L9v4P31+8yOJSI/4nKpWbBgAWlpaTz77LNs2LCBnj17MmTIEA4ePFjv+ODgYJ5++mmysrLYtGkTqamppKamsnTp0toxnTt3ZurUqWzevJlVq1YRHR3NDTfcwKFDh2rHDB8+nG+++YZly5axePFivvjiC+67774LmLKIiOs8bVZeHhbPnX2jcBrwxD828U7WbrNjicj/sBiGYbiygt1up2/fvkydOhUAp9NJVFQU48ePZ+LEiee1jd69ezN06FAmT55c7/tlZWUEBgayfPlyBg0axJYtW+jatSvr1q0jISEBgCVLlnDzzTdTUFBARETEOT/z9DZLS0sJCAg4z9mKiNRlGAZ//HgLs1btAuCpG+P4zcBOJqcScV+ufH+7dKSmsrKS3NxckpOTf9iA1UpycjJZWVnnXN8wDDIzM8nPz2fAgAENfsabb75JYGAgPXv2BCArK4ugoKDaQgOQnJyM1Wo94zTVaQ6Hg7KysjovEZGfymKx8LuhV/LIoCsAeHHJVv6yNB8X/34oIpeAS6Xm8OHD1NTUEBYWVmd5WFgYRUVFDa5XWlpKy5Yt8fLyYujQobz22msMHjy4zpjFixfTsmVLfHx8eOWVV1i2bBmhoaEAFBUV0aZNmzrjPTw8CA4ObvBz09PTCQwMrH1FRUW5MlURkQZZLBbSBndm0k1xAEz9bDt/WPytio2IyS7L3U/+/v7k5eWxbt06/vSnP5GWlsbKlSvrjLnuuuvIy8tjzZo13HjjjQwbNqzB63TOx6RJkygtLa197duni/pE5OK6/9pOTL71KgDmrN7NxA82U+NUsRExi4crg0NDQ7HZbBQX1/2dhuLiYsLDwxtcz2q1EhsbC0B8fDxbtmwhPT2dgQMH1o7x8/MjNjaW2NhY+vXrxxVXXMGsWbOYNGkS4eHhZxSc6upqSkpKGvxcb29vvL29XZmeiIjLRvTrQAtPG0/84ysWrN9HRWU1r6TE42nTL2aIXG4u/a/Oy8uLPn36kJmZWbvM6XSSmZlJUlLSeW/H6XTicDjOe0xSUhJHjx4lNze39v0VK1bgdDqx2+2uTEFE5KK7rU87pt3dG0+bhcWbCvnNvFxOVtWYHUuk2XH5rxJpaWm89dZbzJ07ly1btvCb3/yGiooKUlNTARg5ciSTJk2qHZ+ens6yZcvYuXMnW7Zs4a9//SsZGRncc889AFRUVPDb3/6WtWvXsmfPHnJzcxk9ejT79+/njjvuAODKK6/kxhtvZNy4ceTk5LB69Woefvhh7rzzzvO680lE5FK7qXtb3hyZgLeHleVbDjJm7joqHNVmxxJpVlw6/QSQkpLCoUOHeOaZZygqKiI+Pp4lS5bUXjy8d+9erNYfulJFRQUPPvggBQUF+Pr6EhcXx7x580hJSQHAZrOxdetW5s6dy+HDhwkJCaFv3758+eWXdOvWrXY78+fP5+GHH2bQoEFYrVZuu+02Xn311Z86fxGRi+a6Lm2YOzqRMW+vY/X27xk5O4fZ9/Yl0NfT7GgizYLLv1PTVOl3akTkctm49wijZudQdrKabhEBZIyxE+znZXYskSbpkv1OjYiInFuv9q14774kQvy8+OZAGSkzsiguO2l2LBG3p1IjInIJdI0IYOEDSbQN9GHbwXLumJ7FvpLjZscScWsqNSIil0in1i1ZeH8S7YNbsLfkOMNmZLHjkB7EK3KpqNSIiFxCUcEteP+BJGLbtKSw9CQpM7LYUqjHtohcCio1IiKXWFiADwvu60e3iAAOl1dy55trydt31OxYIm5HpUZE5DIIaenNu+P60adDK0pPVDH8rbWs3fm92bFE3IpKjYjIZRLo68k7oxO5ulMIFZU1jJqdw8r8C3/GnYjUpVIjInIZ+Xl7MPveviRf2QZHtZNx76zn082FZscScQsqNSIil5mPp4037unDz3u0parG4KF3N7BoQ4HZsUSaPJUaERETeNqs/O3OXgxLaIfTgLSFX5Gxdo/ZsUSaNJUaERGT2KwWXvh1D+69OhqA33/0NTM+32FuKJEmTKVGRMREVquFZ3/RlYeviwUg/dOtvLzsO5rJY/lELiqVGhERk1ksFv5vSBeevLELAK9mbuOPH29RsRFxkUqNiEgj8eDAWJ6/pRsAs1bt4rcfbqbGqWIjcr5UakREGpFRV0fz59t7YLXA33P2kbYwj6oap9mxRJoElRoRkUZmWEIUr93VGw+rhX/mHeDB+RtwVNeYHUuk0VOpERFphIb2aMubI/vg5WFl2bfFjJ27nuOV1WbHEmnUVGpERBqp6+PCePvevrTwsvHltsOMmp1D2ckqs2OJNFoqNSIijdjVsaFkjLHj7+PBut1HGP5WNkcqKs2OJdIoqdSIiDRyfTq04u/j+hHs58Xm/aWkvJnFwbKTZscSaXRUakREmoCrIgNZeH8/wgK8+a64nGEzsig4ctzsWCKNikqNiEgTEdvGn/fvv5qoYF92f3+cYdOz2HW4wuxYIo2GSo2ISBPSPqQFC+9PomNrPw6UnuSO6VlsLSozO5ZIo6BSIyLSxLQN9GXh/Ulc2TaAw+UO7nxzLZsKjpodS8R0KjUiIk1QaEtv3hvXj17tgzh6vIq738omZ1eJ2bFETKVSIyLSRAW28CRjjJ1+HYMpd1QzcnY2X3x3yOxYIqZRqRERacJaenvwdmoi13VpzckqJ2PnrmfpN0VmxxIxhUqNiEgT5+NpY8aIBG7uHk5ljZMH52/go437zY4lctmp1IiIuAEvDyuv3tmL23q3o8Zp8NjCPN7N3mt2LJHLSqVGRMRNeNisvHR7D0YmdcAw4LcfbmbmlzvNjiVy2ajUiIi4EavVwvO3dOOBazsB8MePt/C35dswDMPkZCKXnkqNiIibsVgsTLwpjieGdAHgleXfkf7pVhUbcXsqNSIibuqh62J55uddAXjzi5387qOvcTpVbMR9XVCpmTZtGtHR0fj4+GC328nJyWlw7KJFi0hISCAoKAg/Pz/i4+PJyMiofb+qqoqnnnqK7t274+fnR0REBCNHjuTAgQN1thMdHY3FYqnzeuGFFy4kvohIszG6fwwv3tYdiwXmZ+/l/97/iuoap9mxRC4Jl0vNggULSEtL49lnn2XDhg307NmTIUOGcPDgwXrHBwcH8/TTT5OVlcWmTZtITU0lNTWVpUuXAnD8+HE2bNjA73//ezZs2MCiRYvIz8/nlltuOWNbf/jDHygsLKx9jR8/3tX4IiLNTkrf9vztzl54WC0s2rifh9/diKO6xuxYIhedxXDxJKvdbqdv375MnToVAKfTSVRUFOPHj2fixInntY3evXszdOhQJk+eXO/769atIzExkT179tC+fXvg1JGaCRMmMGHCBFfi1iorKyMwMJDS0lICAgIuaBsiIk3Zsm+LeWj+BiprnAzo3JoZ9/TB18tmdiyRs3Ll+9ulIzWVlZXk5uaSnJz8wwasVpKTk8nKyjrn+oZhkJmZSX5+PgMGDGhwXGlpKRaLhaCgoDrLX3jhBUJCQujVqxcvvfQS1dXVrsQXEWnWBncNY/a9ffH1tPHFd4cYNSeHYyerzI4lctF4uDL48OHD1NTUEBYWVmd5WFgYW7dubXC90tJSIiMjcTgc2Gw2Xn/9dQYPHlzv2JMnT/LUU09x11131WlkjzzyCL179yY4OJg1a9YwadIkCgsLefnll+vdjsPhwOFw1P65rKzMlamKiLil/leEkjEmkdQ568jZVcI9M7OZOzqRoBZeZkcT+clcKjUXyt/fn7y8PMrLy8nMzCQtLY2OHTsycODAOuOqqqoYNmwYhmHwxhtv1HkvLS2t9p979OiBl5cX999/P+np6Xh7e5/xmenp6Tz//POXZD4iIk1ZQnQwf7+vHyNmZfNVQSl3vrmWjDF2Wvuf+f+lIk2JS6efQkNDsdlsFBcX11leXFxMeHh4wx9itRIbG0t8fDyPP/44t99+O+np6XXGnC40e/bsYdmyZec8b2a326murmb37t31vj9p0iRKS0trX/v27Tu/SYqINANXRQay4P4k2vh7s7XoGMNmZHHg6AmzY4n8JC6VGi8vL/r06UNmZmbtMqfTSWZmJklJSee9HafTWefU0OlCs23bNpYvX05ISMg5t5GXl4fVaqVNmzb1vu/t7U1AQECdl4iI/KBzmD8L708iMsiXXYcruGN6FrsPV5gdS+SCuXz6KS0tjVGjRpGQkEBiYiJTpkyhoqKC1NRUAEaOHElkZGTtkZj09HQSEhLo1KkTDoeDTz75hIyMjNrTS1VVVdx+++1s2LCBxYsXU1NTQ1FREXDqdnAvLy+ysrLIzs7muuuuw9/fn6ysLB577DHuueceWrVqdbH+XYiINDvRoX68/0AS98zMZufhCu6YkcX8sXY6h/mbHU3EZS6XmpSUFA4dOsQzzzxDUVER8fHxLFmypPbi4b1792K1/nAAqKKiggcffJCCggJ8fX2Ji4tj3rx5pKSkALB//37+9a9/ARAfH1/nsz777DMGDhyIt7c37733Hs899xwOh4OYmBgee+yxOtfZiIjIhYkI8mXB/UmMmJXN1qJjpMzI4p3Rdrq3CzQ7mohLXP6dmqZKv1MjInJ2R49XMmrOOr7adxR/bw/mpPYlITrY7FjSzF2y36kRERH3FdTCi/lj7STGBHPMUc2IWTms2nbY7Fgi502lRkREarX09mBuaiLXdm7NiaoaRr+9jmXfFp97RZFGQKVGRETq8PWy8ebIPtzYLZzKGicPzMvln3n7zY4lck4qNSIicgZvDxtT7+7Fr3tFUuM0mLAgj/dy9podS+SsVGpERKReHjYrf7mjJ8Pt7TEMmLhoM7NW7TI7lkiDVGpERKRBVquFP956FfcN6AjA5MXfMnXFNprJjbPSxKjUiIjIWVksFibdFMdjyZ0B+Mt/vuPFJfkqNtLoqNSIiMg5WSwWHk2+gt8NvRKA6Z/v4Jl/foPTqWIjjYdKjYiInLexP+vI//tVdywWyFi7hyf+sYnqGqfZsUQAlRoREXHR3fb2vDIsHpvVwgcbCnjkvY1UVqvYiPlUakRExGW39ork9eG98bJZ+WRzEfdlrOdkVY3ZsaSZU6kREZELMqRbODNHJeDjaWVl/iHunZNDuaPa7FjSjKnUiIjIBRvQuTXvjLbT0tuDtTtLuGdmNqXHq8yOJc2USo2IiPwkiTHBvDvOTlALT/L2HeXOt9ZyuNxhdixphlRqRETkJ+vRLogF9yUR2tKbLYVlDJuRRWHpCbNjSTOjUiMiIhdFl3B/3n8giYhAH3YequCO6Vns/f642bGkGVGpERGRiyYm1I/3f3M10SEtKDhygjtmrGH7wWNmx5JmQqVGREQuqsggXxben0TnsJYUlzkYNmMtX+8vNTuWNAMqNSIictG1CfBhwX1JdI8MpKSikrveWkvuniNmxxI3p1IjIiKXRCs/L+aPs9M3uhXHTlYzYlY2a7YfNjuWuDGVGhERuWQCfDyZOzqRn10RyvHKGu59ex2ZW4rNjiVuSqVGREQuqRZeHswclcDgrmFUVju5PyOXxZsOmB1L3JBKjYiIXHLeHjZeH96bX8ZHUO00eOTvG1m4fp/ZscTNqNSIiMhl4Wmz8vKweO5KjMJpwJP/2MTbq3eZHUvciEqNiIhcNjarhf/3q+6M6R8DwHP//pZpn203OZW4C5UaERG5rCwWC78beiWPDLoCgJeW5vPnJVsxDMPkZNLUqdSIiMhlZ7FYSBvcmd/eHAfA6yt3MPGDzRw9XmlyMmnKVGpERMQ09w3oxORbrwJgwfp9DPjzZ0z/fAcnq2pMTiZNkUqNiIiYakS/DmSMSSQu3J+yk9W88OlWrvvLSt5fv48ap05JyfmzGM3kJGZZWRmBgYGUlpYSEBBgdhwREfmRGqfBRxv389f/5HOg9CQAXcL8eeqmLlzXpQ0Wi8XkhGIGV76/VWpERKRROVlVwztZu5n22Q5KT1QBYI8JZtLNVxIfFWRuOLnsVGrqoVIjItK0lB6v4vWV25mzZjeV1U4AhnZvyxNDuhAd6mdyOrlcVGrqoVIjItI07T96gleWfccHGwowDPCwWrjb3p7x119Ba39vs+PJJaZSUw+VGhGRpm1rURkvfrqVz/IPAeDnZWPcgI6M+1lH/Lw9TE4nl4or398XdPfTtGnTiI6OxsfHB7vdTk5OToNjFy1aREJCAkFBQfj5+REfH09GRkbt+1VVVTz11FN0794dPz8/IiIiGDlyJAcO1H3YWUlJCcOHDycgIICgoCDGjBlDeXn5hcQXEZEmKC48gDmpifx9XD96tgukorKGKcu3ce1Ln5GRtZuqGqfZEcVkLh+pWbBgASNHjmT69OnY7XamTJnC+++/T35+Pm3atDlj/MqVKzly5AhxcXF4eXmxePFiHn/8cT7++GOGDBlCaWkpt99+O+PGjaNnz54cOXKERx99lJqaGtavX1+7nZtuuonCwkJmzJhBVVUVqamp9O3bl3ffffe8cutIjYiI+zAMg483F/LS0nz2fH8cgJhQP54Y0oWbrgrXnVJu5JKefrLb7fTt25epU6cC4HQ6iYqKYvz48UycOPG8ttG7d2+GDh3K5MmT631/3bp1JCYmsmfPHtq3b8+WLVvo2rUr69atIyEhAYAlS5Zw8803U1BQQERExDk/U6VGRMT9VFY7eW/dXv62fBvfV5z6NeL4qCAm3RSHvWOIyenkYrhkp58qKyvJzc0lOTn5hw1YrSQnJ5OVlXXO9Q3DIDMzk/z8fAYMGNDguNLSUiwWC0FBQQBkZWURFBRUW2gAkpOTsVqtZGdn17sNh8NBWVlZnZeIiLgXLw8rI5Oi+fzJ63hk0BW08LKRt+8oKW+uZczb68gvOmZ2RLmMXCo1hw8fpqamhrCwsDrLw8LCKCoqanC90tJSWrZsiZeXF0OHDuW1115j8ODB9Y49efIkTz31FHfddVdtIysqKjrj1JaHhwfBwcENfm56ejqBgYG1r6ioKFemKiIiTUhLbw/SBndm5RMDGW5vj81qIXPrQW762xc88f5XFJaeMDuiXAaX5TEJ/v7+5OXlsW7dOv70pz+RlpbGypUrzxhXVVXFsGHDMAyDN9544yd95qRJkygtLa197du37ydtT0REGr82/j786Vfd+c9jA7jpqnCcBryfW8DAl1bywqdba3/MT9yTS/fAhYaGYrPZKC4urrO8uLiY8PDwBtezWq3ExsYCEB8fz5YtW0hPT2fgwIG1Y04Xmj179rBixYo6583Cw8M5ePBgnW1WV1dTUlLS4Od6e3vj7a3fLxARaY46tW7JG/f0YcPeI7zwyVZydpcw/fMdvLduLw9fF8uIpA54e9jMjikXmUtHary8vOjTpw+ZmZm1y5xOJ5mZmSQlJZ33dpxOJw6Ho/bPpwvNtm3bWL58OSEhdS/uSkpK4ujRo+Tm5tYuW7FiBU6nE7vd7soURESkGendvhUL7u/HzJEJXNGmJUePV/HHj7dw/V8+Z9GGApx6YKZbuaBbukeNGsWMGTNITExkypQpLFy4kK1btxIWFsbIkSOJjIwkPT0dOHVtS0JCAp06dcLhcPDJJ58wceJE3njjDcaOHUtVVRW33347GzZsYPHixXWu1wkODsbLyws4dUt3cXEx06dPr72lOyEhQbd0i4jIeamucfLBhgJeXvYdxWWn/mJ9ZdsAJt4Ux4ArQnUbeCPlyve3yz/BmJKSwqFDh3jmmWcoKioiPj6eJUuW1JaRvXv3YrX+cACooqKCBx98kIKCAnx9fYmLi2PevHmkpKQAsH//fv71r38Bp05N/a/PPvus9hTV/Pnzefjhhxk0aBBWq5XbbruNV1991dX4IiLSTHnYrKT0bc8tPSOZs2YXb3y2gy2FZYyancM1sSFMvPFKurcLNDum/AR6TIKIiDRLRyoqmfrZdjKy9lD5318jvqVnBP93Qxfah7QwOZ2cpmc/1UOlRkRE6rOv5Dh//U8+H+WdejyPp83CcHsHxl8fS0hL3XBiNpWaeqjUiIjI2Xy9v5QXl2zly22HgVO/ffPAtR0Z3T+GFl56YKZZVGrqoVIjIiLnY9W2w6R/uoVvDpz6Jfo2/t48Nrgzd/Rph4ftsvy8m/wPlZp6qNSIiMj5cjoN/r3pAH/5Tz77Sk79GnGn1n48eWMcN3QN051Sl5FKTT1UakRExFWO6hrmr93Layu2ceT4qV8jTujQikk3x9GnQ7DJ6ZoHlZp6qNSIiMiFKjtZxYzPdzBr1S5OVp26U+qGrmE8eWMcsW1ampzOvanU1EOlRkREfqqi0pNMWf4dC9fvw2mAzWphWEIUjyVfQZsAH7PjuSWVmnqo1IiIyMWy/eAxXlySz7JvTz0L0dfTxpj+Mdx/bUf8fTxNTudeVGrqoVIjIiIX27rdJaR/soUNe48CEOznxfjrYxlu74CXh+6UuhhUauqhUiMiIpeCYRgs/aaYPy/dys5DFQC0D27B/w3pws+7t8Vq1Z1SP4VKTT1UakRE5FKqrnGycH0Bryz/jkPHTj0ws3tkIBNviuOa2FCT0zVdKjX1UKkREZHL4XhlNbO+3MWML3ZS7qgGYEDn1ky8MY6uEfr+cZVKTT1UakRE5HL6vtzBayu2Mz97D1U1BhYL3BofyeM3dKZdKz0w83yp1NRDpUZERMyw5/sKXlqaz+JNhQB42ayMTOrAQ9fF0srPy+R0jZ9KTT1UakRExEybCo7ywqdbWbPjewD8fTx4cGAsqddE4+NpMzld46VSUw+VGhERMZthGHz+3SFe+HQrW4uOAdA20IfHBnfmtt7tsOlOqTOo1NRDpUZERBqLGqfBRxv38/Ky79h/9NQDMzuHteSpG+O4Pq6NHpj5P1Rq6qFSIyIijc3JqhoysvYw9bPtlJ449cDMxJhgJt0UR6/2rUxO1zio1NRDpUZERBqr0uNVvP75duas3k1l9akHZt7cPZwnhsQRE+pncjpzqdTUQ6VGREQauwNHT/Dysu/4YEMBhgEeVgt3Jkbx6KDOtPb3NjueKVRq6qFSIyIiTcXWojJe/HQrn+UfAqCFl41xP+vIuAEdaentYXK6y0ulph4qNSIi0tRk7fieFz7dwlcFpQCEtvTi0UFXcGdiezxtzeOBmSo19VCpERGRpsgwDD7ZXMRLS7ey+/vjAMSE+vHEkC7cdFW4298ppVJTD5UaERFpyqpqnPw9Zy9/W76N7ysqAegZFcSkm+Lo1zHE5HSXjkpNPVRqRETEHZQ7qnnri5289eVOjlfWAHB9XBueujGOLuH+Jqe7+FRq6qFSIyIi7uTgsZO8mrmNv+fso8ZpYLXAbb3bkXZDZ9oG+pod76JRqamHSo2IiLijnYfKeWlpPp9+XQSAt4eVe6+J5sGBsQT6epqc7qdTqamHSo2IiLizDXuP8MInW8nZXQJAoK8nD18Xy4ikDk36gZkqNfVQqREREXdnGAYrth7kxSVb+a64HIDIIF8ev6Ezt8ZHYm2CD8xUqamHSo2IiDQXNU6DD3ILeHnZdxSVnQTgyrYBTLwpjgFXhDap28BVauqhUiMiIs3Nyaoa5qzezesrt3PsZDUAV3cKYdJNV9K9XaDJ6c6PSk09VGpERKS5OlJRybTPtvNO1h4qa049MPMXPSN44oYutA9pYXK6s1OpqYdKjYiINHf7So7z8rLv+ChvP4YBnjYLw+0dGH99LCEtG+cDM135/r6gB0dMmzaN6OhofHx8sNvt5OTkNDh20aJFJCQkEBQUhJ+fH/Hx8WRkZJwx5oYbbiAkJASLxUJeXt4Z2xk4cCAWi6XO64EHHriQ+CIiIs1SVHALXkmJZ/H4/gzo3JqqGoO31+zm2pdWMnXFNo5XVpsd8SdxudQsWLCAtLQ0nn32WTZs2EDPnj0ZMmQIBw8erHd8cHAwTz/9NFlZWWzatInU1FRSU1NZunRp7ZiKigr69+/Piy++eNbPHjduHIWFhbWvP//5z67GFxERafa6RQTyzuhE5o+1c1VkAOWOav7yn+8Y+NJK3s3eS/V/T1E1NS6ffrLb7fTt25epU6cC4HQ6iYqKYvz48UycOPG8ttG7d2+GDh3K5MmT6yzfvXs3MTExbNy4kfj4+DrvDRw4kPj4eKZMmeJK3Fo6/SQiInImp9Pg35sO8Jf/5LOv5AQAnVr78eSNcdzQNcz0O6Uu2emnyspKcnNzSU5O/mEDVivJyclkZWWdc33DMMjMzCQ/P58BAwa48tEAzJ8/n9DQUK666iomTZrE8ePHGxzrcDgoKyur8xIREZG6rFYLv4yPZHnatTzz8660auHJjkMV3J+Ry+3Ts1j/3x/zawo8XBl8+PBhampqCAsLq7M8LCyMrVu3NrheaWkpkZGROBwObDYbr7/+OoMHD3Yp6N13302HDh2IiIhg06ZNPPXUU+Tn57No0aJ6x6enp/P888+79BkiIiLNlbeHjdH9Y7g9oR1vfr6Tmat2krvnCLdPz2Jw1zCeurELsW0a9wMzXSo1F8rf35+8vDzKy8vJzMwkLS2Njh07MnDgwPPexn333Vf7z927d6dt27YMGjSIHTt20KlTpzPGT5o0ibS0tNo/l5WVERUV9ZPmISIi4u4CfDz5vyFdGJHUgSnLv2PBun0s+7aYzC3FpPSNYkJyZ8ICfMyOWS+XSk1oaCg2m43i4uI6y4uLiwkPD29wPavVSmxsLADx8fFs2bKF9PR0l0rNj9ntdgC2b99eb6nx9vbG27tx3p4mIiLS2IUF+JD+6x6M6R/Di0vyWfZtMX/P2ceHG/czpn8M91/biQCfxvXATJeuqfHy8qJPnz5kZmbWLnM6nWRmZpKUlHTe23E6nTgcDlc++gynb/tu27btT9qOiIiINCy2jT9vjUzgHw8k0adDK05WOZn22Q6u/fNnzF61C0d1jdkRa7l8+iktLY1Ro0aRkJBAYmIiU6ZMoaKigtTUVABGjhxJZGQk6enpwKlrWxISEujUqRMOh4NPPvmEjIwM3njjjdptlpSUsHfvXg4cOABAfn4+AOHh4YSHh7Njxw7effddbr75ZkJCQti0aROPPfYYAwYMoEePHj/5X4KIiIicXUJ0MP94IIn/fFvMi0u2svNQBX9Y/C1z1uzi/27owi96RJj+wEyXS01KSgqHDh3imWeeoaioiPj4eJYsWVJ78fDevXuxWn84AFRRUcGDDz5IQUEBvr6+xMXFMW/ePFJSUmrH/Otf/6otRQB33nknAM8++yzPPfccXl5eLF++vLZARUVFcdttt/G73/3ugicuIiIirrFYLAzpFs6guDYsXF/AK8u/Y1/JCR59L4+3vtzJxBuvpP8Voebl02MSRERE5EIcr6xm1pe7mPHFTsod1XRq7cd/HrsW20U8YuPK9/dluftJRERE3E8LLw/GD7qCu+3teW3FdvrHhl7UQuMqlRoRERH5SUJaevPcLd3MjnFhD7QUERERaWxUakRERMQtqNSIiIiIW1CpEREREbegUiMiIiJuQaVGRERE3IJKjYiIiLgFlRoRERFxCyo1IiIi4hZUakRERMQtqNSIiIiIW1CpEREREbegUiMiIiJuodk8pdswDADKyspMTiIiIiLn6/T39unv8bNpNqXm2LFjAERFRZmcRERERFx17NgxAgMDzzrGYpxP9XEDTqeTAwcO4O/vj8ViuajbLisrIyoqin379hEQEHBRt90YaH5Nn7vP0d3nB+4/R82v6btUczQMg2PHjhEREYHVevarZprNkRqr1Uq7du0u6WcEBAS47X+soPm5A3efo7vPD9x/jppf03cp5niuIzSn6UJhERERcQsqNSIiIuIWVGouAm9vb5599lm8vb3NjnJJaH5Nn7vP0d3nB+4/R82v6WsMc2w2FwqLiIiIe9ORGhEREXELKjUiIiLiFlRqRERExC2o1IiIiIhbUKk5hy+++IJf/OIXREREYLFY+Oijj865zsqVK+nduzfe3t7Exsby9ttvX/KcP4Wrc1y5ciUWi+WMV1FR0eUJ7KL09HT69u2Lv78/bdq04dZbbyU/P/+c673//vvExcXh4+ND9+7d+eSTTy5DWtddyPzefvvtM/afj4/PZUrsmjfeeIMePXrU/qBXUlISn3766VnXaSr77jRX59iU9l99XnjhBSwWCxMmTDjruKa2H087n/k1tX343HPPnZE3Li7urOuYsf9Uas6hoqKCnj17Mm3atPMav2vXLoYOHcp1111HXl4eEyZMYOzYsSxduvQSJ71wrs7xtPz8fAoLC2tfbdq0uUQJf5rPP/+chx56iLVr17Js2TKqqqq44YYbqKioaHCdNWvWcNdddzFmzBg2btzIrbfeyq233srXX399GZOfnwuZH5z61c//3X979uy5TIld065dO1544QVyc3NZv349119/Pb/85S/55ptv6h3flPbdaa7OEZrO/vuxdevWMWPGDHr06HHWcU1xP8L5zw+a3j7s1q1bnbyrVq1qcKxp+8+Q8wYYH3744VnHPPnkk0a3bt3qLEtJSTGGDBlyCZNdPOczx88++8wAjCNHjlyWTBfbwYMHDcD4/PPPGxwzbNgwY+jQoXWW2e124/7777/U8X6y85nfnDlzjMDAwMsX6iJr1aqVMXPmzHrfa8r77n+dbY5Ndf8dO3bMuOKKK4xly5YZ1157rfHoo482OLYp7kdX5tfU9uGzzz5r9OzZ87zHm7X/dKTmIsvKyiI5ObnOsiFDhpCVlWVSoksnPj6etm3bMnjwYFavXm12nPNWWloKQHBwcINjmvJ+PJ/5AZSXl9OhQweioqLOeVSgsaipqeG9996joqKCpKSkesc05X0H5zdHaJr776GHHmLo0KFn7J/6NMX96Mr8oOntw23bthEREUHHjh0ZPnw4e/fubXCsWfuv2TzQ8nIpKioiLCyszrKwsDDKyso4ceIEvr6+JiW7eNq2bcv06dNJSEjA4XAwc+ZMBg4cSHZ2Nr179zY73lk5nU4mTJjANddcw1VXXdXguIb2Y2O9bui0851fly5dmD17Nj169KC0tJS//OUvXH311XzzzTeX/MGvF2Lz5s0kJSVx8uRJWrZsyYcffkjXrl3rHdtU950rc2xq+w/gvffeY8OGDaxbt+68xje1/ejq/JraPrTb7bz99tt06dKFwsJCnn/+eX72s5/x9ddf4+/vf8Z4s/afSo24rEuXLnTp0qX2z1dffTU7duzglVdeISMjw8Rk5/bQQw/x9ddfn/VccFN2vvNLSkqqcxTg6quv5sorr2TGjBlMnjz5Usd0WZcuXcjLy6O0tJR//OMfjBo1is8//7zBL/2myJU5NrX9t2/fPh599FGWLVvWqC+GvVAXMr+mtg9vuumm2n/u0aMHdrudDh06sHDhQsaMGWNisrpUai6y8PBwiouL6ywrLi4mICDALY7SNCQxMbHRF4WHH36YxYsX88UXX5zzb0IN7cfw8PBLGfEncWV+P+bp6UmvXr3Yvn37JUr303h5eREbGwtAnz59WLduHX/729+YMWPGGWOb4r4D1+b4Y419/+Xm5nLw4ME6R3Jramr44osvmDp1Kg6HA5vNVmedprQfL2R+P9bY9+GPBQUF0blz5wbzmrX/dE3NRZaUlERmZmadZcuWLTvruXF3kJeXR9u2bc2OUS/DMHj44Yf58MMPWbFiBTExMedcpyntxwuZ34/V1NSwefPmRrsPf8zpdOJwOOp9ryntu7M52xx/rLHvv0GDBrF582by8vJqXwkJCQwfPpy8vLx6v/Cb0n68kPn9WGPfhz9WXl7Ojh07Gsxr2v67pJchu4Fjx44ZGzduNDZu3GgAxssvv2xs3LjR2LNnj2EYhjFx4kRjxIgRteN37txptGjRwnjiiSeMLVu2GNOmTTNsNpuxZMkSs6ZwTq7O8ZVXXjE++ugjY9u2bcbmzZuNRx991LBarcby5cvNmsJZ/eY3vzECAwONlStXGoWFhbWv48eP144ZMWKEMXHixNo/r1692vDw8DD+8pe/GFu2bDGeffZZw9PT09i8ebMZUzirC5nf888/byxdutTYsWOHkZuba9x5552Gj4+P8c0335gxhbOaOHGi8fnnnxu7du0yNm3aZEycONGwWCzGf/7zH8Mwmva+O83VOTal/deQH98d5A778X+da35NbR8+/vjjxsqVK41du3YZq1evNpKTk43Q0FDj4MGDhmE0nv2nUnMOp29f/vFr1KhRhmEYxqhRo4xrr732jHXi4+MNLy8vo2PHjsacOXMue25XuDrHF1980ejUqZPh4+NjBAcHGwMHDjRWrFhhTvjzUN/cgDr75dprr62d72kLFy40OnfubHh5eRndunUzPv7448sb/DxdyPwmTJhgtG/f3vDy8jLCwsKMm2++2diwYcPlD38eRo8ebXTo0MHw8vIyWrdubQwaNKj2y94wmva+O83VOTal/deQH3/pu8N+/F/nml9T24cpKSlG27ZtDS8vLyMyMtJISUkxtm/fXvt+Y9l/FsMwjEt7LEhERETk0tM1NSIiIuIWVGpERETELajUiIiIiFtQqRERERG3oFIjIiIibkGlRkRERNyCSo2IiIi4BZUaERERcQsqNSIiIuIWVGpERETELajUiIiIiFtQqRERERG38P8BjKulYSyPukQAAAAASUVORK5CYII=\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "## 5- ▶ Exercise: Tuning your model\n", + "\n", + "The model comes with a variety of hyper-parameters. To find the best model, we need to test different values for these free parameters.\n", + "\n", + "Be careful:\n", + "* you always optimize / fine-tune your model on the **development set**.\n", + "* Then you compare the results obtained with the different settings on the dev set to choose the best setting\n", + "* finally you report the results of the best model on the test set\n", + "* you always keep a track of your experimentation, for reproducibility purpose: report the values tested for each hyper-parameters and the values used by your best model.\n", + "\n", + "In this part, you have to test different values for the following hyper-parameters:\n", + "\n", + "1. Batch size: 2, 10, 100\n", + "2. Max number of epochs: max 100\n", + "3. Size of the hidden layer: 10, 64, 512\n", + "4. Activation function: Sigmoid, Relu, HardTahn\n", + "5. Learning rate: 0.0001, 0.1, 0.5, 10\n", + "6. Optimizer: SGD, Adam, RMSProp\n", + "\n", + "\n", + "Inspect your model to give some hypothesis on the influence of these parameters on the model by inspecting how they affect the loss during training and the performance of the model.\n", + "\n", + "**Note:** (not done below) Here you are trying to make a report on the performance of your model. try to organise your code to keep track of what you're doing:\n", + "* give a different name to each model, to be able to run them again\n", + "* [Optional] save the results in a dictionnary of a file, to be able to use them later: \n", + " * think that you should be able to provide e.g. plots of your results (for example, plotting the accuracy for different value of a specific hyper-parameter), or analysis of your results (e.g. by inspecting the predictions of your model) so you need to be able to access the results." + ], + "metadata": { + "id": "1HmIthzRumir" + } + }, + { + "cell_type": "code", + "source": [ + "from sklearn.metrics import accuracy_score, f1_score" + ], + "metadata": { + "id": "bS_br1eLi-X_" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# epochs, hidden, lr, batch, activation, optimizer, acc, macro-F1\n", + "experiments = []\n", + "\n", + "class Expe:\n", + " def __init__(self, epochs, hidden, lr, batch, act, opt):\n", + " self.epochs = epochs\n", + " self.hidden = hidden\n", + " self.lr = lr\n", + " self.batch = batch\n", + " self.activation = act\n", + " self.optimizer = opt\n", + " self.acc = None\n", + " self.macroF1 = None\n", + " self.model = None\n", + "\n", + " def to_string( self ):\n", + " return str(self.epochs) + ' ' + str(self.hidden) + ' ' + str(self.lr) + ' ' + str(self.batch) + ' ' + self.activation + ' ' + self.optimizer\n", + "\n", + " def set_acc(self, acc ):\n", + " self.acc = acc\n", + "\n", + " def set_f1( self, f1 ):\n", + " self.macroF1 = f1\n", + "\n", + " def set_model( self, model ):\n", + " self.model = model\n", + "\n", + " def set_scores( self, gold, pred ):\n", + " self.acc = accuracy_score( gold, pred )\n", + " self.macroF1 = f1_score( gold, pred, average='macro')\n", + "\n", + " def is_better( self, other_exp, score='f1' ):\n", + " if score == 'f1':\n", + " if self.macroF1 >= other_exp.macroF1:\n", + " return self\n", + " return other_exp\n", + " elif score == 'acc':\n", + " if self.acc >= other_exp.acc:\n", + " return self\n", + " return other_exp\n" + ], + "metadata": { + "id": "jLy2TCP3f4fE" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# For now, we keep a medium number of epochs eg 20\n", + "num_epochs = 20" + ], + "metadata": { + "id": "mPl550bHgYE7" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### 5.1- Batch Size\n", + "\n", + "We need to reload the data to change the size of the batch." + ], + "metadata": { + "id": "YXarvcQk4uEo" + } + }, + { + "cell_type": "code", + "source": [ + "# Hyperparameters\n", + "hidden_dim = 4\n", + "learning_rate = 0.1" + ], + "metadata": { + "id": "V1RYBCEm4wNu" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "-----> BATCH SIZE 2" + ], + "metadata": { + "id": "XbB7T1Un5ZET" + } + }, + { + "cell_type": "code", + "source": [ + "# To optimize\n", + "batch_size = 2\n", + "\n", + "train_loader = DataLoader(train, batch_size=batch_size, shuffle=True, collate_fn=collate_fn) # Bien modifie ici la batch size + shuffle = True!\n", + "dev_loader = DataLoader(dev, batch_size=batch_size, shuffle=False, collate_fn=collate_fn)" + ], + "metadata": { + "id": "y1uRBZ5t5MsC" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Initialize the model\n", + "model_ffnn = FeedforwardNeuralNetModel( hidden_dim, output_dim, weights_matrix)\n", + "optimizer = torch.optim.SGD(model_ffnn.parameters(), lr=learning_rate)\n", + "model_ffnn = model_ffnn.to(device)\n", + "# Train the model\n", + "training( model_ffnn, train_loader, optimizer, num_epochs=num_epochs, plot=True )\n", + "# Evaluate on dev\n", + "gold, pred = evaluate( model_ffnn, dev_loader )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 954 + }, + "outputId": "4d39382c-452c-49ba-c4a0-230f2b98711c", + "id": "RujCyodz4wNv" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 0. Loss: 0.35137161087842783. ACC 0.5080564949273921 \n", + "Epoch: 1. Loss: 0.34497533449008305. ACC 0.5380942908295205 \n", + "Epoch: 2. Loss: 0.3317288612072051. ACC 0.5941913666202506 \n", + "Epoch: 3. Loss: 0.31957197939280085. ACC 0.6303958623433459 \n", + "Epoch: 4. Loss: 0.31301197692565136. ACC 0.6504873682116571 \n", + "Epoch: 5. Loss: 0.31010686454252195. ACC 0.659637955042769 \n", + "Epoch: 6. Loss: 0.30637670752763013. ACC 0.6620250646508852 \n", + "Epoch: 7. Loss: 0.30487175766354185. ACC 0.6664014322657649 \n", + "Epoch: 8. Loss: 0.30381960170434297. ACC 0.6673960612691466 \n", + "Epoch: 9. Loss: 0.30206383668999326. ACC 0.6691863934752338 \n", + "Epoch: 10. Loss: 0.30109720433996784. ACC 0.6709767256813208 \n", + "Epoch: 11. Loss: 0.29928570350634665. ACC 0.6769444997016113 \n", + "Epoch: 12. Loss: 0.29807540136147664. ACC 0.6729659836880844 \n", + "Epoch: 13. Loss: 0.2958215641997931. ACC 0.6787348319076985 \n", + "Epoch: 14. Loss: 0.2965297440164383. ACC 0.6765466481002586 \n", + "Epoch: 15. Loss: 0.29576828911280256. ACC 0.6821165705191964 \n", + "Epoch: 16. Loss: 0.2941557399206781. ACC 0.6837079769246072 \n", + "Epoch: 17. Loss: 0.2921211054931747. ACC 0.6797294609110802 \n", + "Epoch: 18. Loss: 0.29148273871385666. ACC 0.6767455739009349 \n", + "Epoch: 19. Loss: 0.29129313203199186. ACC 0.6811219415158146 \n", + " precision recall f1-score support\n", + "\n", + " 0 0.48 0.92 0.63 230\n", + " 1 0.83 0.27 0.41 319\n", + "\n", + " accuracy 0.54 549\n", + " macro avg 0.65 0.60 0.52 549\n", + "weighted avg 0.68 0.54 0.50 549\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# epochs, hidden, lr, batch, act, opt\n", + "exp = Expe( num_epochs, hidden_dim, learning_rate, batch_size, 'sigmoid', 'SGD' )\n", + "exp.set_model( model_ffnn )\n", + "exp.set_scores( gold, pred )\n", + "experiments.append( exp )" + ], + "metadata": { + "id": "pgkEIDRgiv1W" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "UQCZKqFZFHev" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "-----> BATCH SIZE 100" + ], + "metadata": { + "id": "Wvf6nYZ55ff3" + } + }, + { + "cell_type": "code", + "source": [ + "# To optimize\n", + "batch_size = 100\n", + "\n", + "train_loader = DataLoader(train, batch_size=batch_size, shuffle=True, collate_fn=collate_fn)\n", + "dev_loader = DataLoader(dev, batch_size=batch_size, shuffle=False, collate_fn=collate_fn)" + ], + "metadata": { + "id": "q7nMbTzl5ff4" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Initialize the model\n", + "model_ffnn = FeedforwardNeuralNetModel( hidden_dim, output_dim, weights_matrix)\n", + "optimizer = torch.optim.SGD(model_ffnn.parameters(), lr=learning_rate)\n", + "model_ffnn = model_ffnn.to(device)\n", + "# Train the model\n", + "training( model_ffnn, train_loader, optimizer, num_epochs=num_epochs, plot=True )\n", + "# Evaluate on dev\n", + "gold, pred = evaluate( model_ffnn, dev_loader )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "39d2ac11-a776-4f6b-f8f8-4c3dbb6e254c", + "id": "ZuMZ7YyV5ff4" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 0. Loss: 0.00705797830679935. ACC 0.5060672369206286 \n", + "Epoch: 1. Loss: 0.007030139309477327. ACC 0.5120350109409191 \n", + "Epoch: 2. Loss: 0.0070370292720487344. ACC 0.4995026854983091 \n", + "Epoch: 3. Loss: 0.007033164811366734. ACC 0.5008951661030435 \n", + "Epoch: 4. Loss: 0.007034888864156382. ACC 0.502287646707778 \n", + "Epoch: 5. Loss: 0.007034632921076589. ACC 0.5026854983091307 \n", + "Epoch: 6. Loss: 0.007030553423625611. ACC 0.5050726079172468 \n", + "Epoch: 7. Loss: 0.007032911381950098. ACC 0.5078575691267158 \n", + "Epoch: 8. Loss: 0.007032738128902662. ACC 0.5066640143226576 \n", + "Epoch: 9. Loss: 0.007032250644246745. ACC 0.5070618659240104 \n", + "Epoch: 10. Loss: 0.007032540581063672. ACC 0.4993037596976328 \n", + "Epoch: 11. Loss: 0.007032272223807813. ACC 0.5090511239307738 \n", + "Epoch: 12. Loss: 0.0070344977286835655. ACC 0.4985080564949274 \n", + "Epoch: 13. Loss: 0.007030598432424411. ACC 0.5050726079172468 \n", + "Epoch: 14. Loss: 0.007029776559427147. ACC 0.5058683111199522 \n", + "Epoch: 15. Loss: 0.007029959961982425. ACC 0.5088521981300975 \n", + "Epoch: 16. Loss: 0.007032337128487643. ACC 0.5084543465287448 \n", + "Epoch: 17. Loss: 0.0070288959236251254. ACC 0.5158146011537696 \n", + "Epoch: 18. Loss: 0.007029469181107839. ACC 0.5126317883429481 \n", + "Epoch: 19. Loss: 0.007026630733699431. ACC 0.5162124527551223 \n", + " precision recall f1-score support\n", + "\n", + " 0 0.42 1.00 0.59 230\n", + " 1 0.00 0.00 0.00 319\n", + "\n", + " accuracy 0.42 549\n", + " macro avg 0.21 0.50 0.30 549\n", + "weighted avg 0.18 0.42 0.25 549\n", + "\n" + ] + }, + { + "output_type": "stream", + "name": "stderr", + "text": [ + "/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n", + "/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n", + "/usr/local/lib/python3.10/dist-packages/sklearn/metrics/_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", + " _warn_prf(average, modifier, f\"{metric.capitalize()} is\", len(result))\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# epochs, hidden, lr, batch, act, opt\n", + "exp = Expe( num_epochs, hidden_dim, learning_rate, batch_size, 'sigmoid', 'SGD' )\n", + "exp.set_model( model_ffnn )\n", + "exp.set_scores( gold, pred )\n", + "experiments.append( exp )" + ], + "metadata": { + "id": "-kF0PCLZjyRj" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "-----> BATCH SIZE 10" + ], + "metadata": { + "id": "jemPmZxi62n0" + } + }, + { + "cell_type": "code", + "source": [ + "# To optimize\n", + "batch_size = 10\n", + "\n", + "train_loader = DataLoader(train, batch_size=batch_size, shuffle=True, collate_fn=collate_fn) #<-- use shuffle = True instead\n", + "dev_loader = DataLoader(dev, batch_size=batch_size, shuffle=False, collate_fn=collate_fn)" + ], + "metadata": { + "id": "Mx8IMlLO62n2" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Initialize the model\n", + "model_ffnn = FeedforwardNeuralNetModel( hidden_dim, output_dim, weights_matrix)\n", + "optimizer = torch.optim.SGD(model_ffnn.parameters(), lr=learning_rate)\n", + "model_ffnn = model_ffnn.to(device)\n", + "# Train the model\n", + "training( model_ffnn, train_loader, optimizer, num_epochs=num_epochs )\n", + "# Evaluate on dev\n", + "gold, pred = evaluate( model_ffnn, dev_loader )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "outputId": "1c58f87d-2538-4bcc-c8f9-243b924985da", + "id": "LBjLVvoM62n2" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 0. Loss: 0.06960286194414511. ACC 0.5088521981300975 \n", + "Epoch: 1. Loss: 0.06949205969587956. ACC 0.5018897951064253 \n", + "Epoch: 2. Loss: 0.06919643985411744. ACC 0.5269544459916451 \n", + "Epoch: 3. Loss: 0.06909697062219378. ACC 0.5329222200119356 \n", + "Epoch: 4. Loss: 0.06878613686974204. ACC 0.5410781778396658 \n", + "Epoch: 5. Loss: 0.06825835482605129. ACC 0.5615675353093296 \n", + "Epoch: 6. Loss: 0.06760561589528818. ACC 0.5947881440222796 \n", + "Epoch: 7. Loss: 0.06679691170659624. ACC 0.6051322856574498 \n", + "Epoch: 8. Loss: 0.06587741506343953. ACC 0.6317883429480804 \n", + "Epoch: 9. Loss: 0.06498667840244331. ACC 0.6274119753332007 \n", + "Epoch: 10. Loss: 0.06396877246323224. ACC 0.6481002586035409 \n", + "Epoch: 11. Loss: 0.06312658314513288. ACC 0.649293813407599 \n", + "Epoch: 12. Loss: 0.062206074052998106. ACC 0.6626218420529143 \n", + "Epoch: 13. Loss: 0.061668635197228365. ACC 0.6707777998806446 \n", + "Epoch: 14. Loss: 0.061332281461785515. ACC 0.67157350308335 \n", + "Epoch: 15. Loss: 0.06072062264030393. ACC 0.6739606126914661 \n", + "Epoch: 16. Loss: 0.06056326459956164. ACC 0.6769444997016113 \n", + "Epoch: 17. Loss: 0.06020275467974494. ACC 0.6763477222995823 \n", + "Epoch: 18. Loss: 0.060072721953844485. ACC 0.6799283867117565 \n", + "Epoch: 19. Loss: 0.05991415160418932. ACC 0.6805251641137856 \n", + " precision recall f1-score support\n", + "\n", + " 0 0.49 0.90 0.63 230\n", + " 1 0.82 0.31 0.45 319\n", + "\n", + " accuracy 0.56 549\n", + " macro avg 0.65 0.61 0.54 549\n", + "weighted avg 0.68 0.56 0.53 549\n", + "\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# epochs, hidden, lr, batch, act, opt\n", + "exp = Expe( num_epochs, hidden_dim, learning_rate, batch_size, 'sigmoid', 'SGD' )\n", + "exp.set_model( model_ffnn )\n", + "exp.set_scores( gold, pred )\n", + "experiments.append( exp )" + ], + "metadata": { + "id": "jnf8dVIRkJUI" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "------> Perte par rapport à 2, mais beaucoup plus rapide. On garde celui là (we could have tried a few more values here)" + ], + "metadata": { + "id": "VmXdgAMC7Ap0" + } + }, + { + "cell_type": "code", + "source": [ + "# So now we keep the data loaded with 10 batches\n", + "batch_size = 10\n", + "\n", + "train_loader = DataLoader(train, batch_size=batch_size, shuffle=False, collate_fn=collate_fn) #<-- use shuffle = True instead\n", + "dev_loader = DataLoader(dev, batch_size=batch_size, shuffle=False, collate_fn=collate_fn)" + ], + "metadata": { + "id": "PaaocPgK7Gfy" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### 5.2- Number of epochs\n", + "\n", + "Simply train your model for a large number of epochs." + ], + "metadata": { + "id": "ebikIV4yjEfx" + } + }, + { + "cell_type": "code", + "source": [ + "num_epochs = 100" + ], + "metadata": { + "id": "JMdEIg_IjQUh" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Initialize the model\n", + "model_ffnn = FeedforwardNeuralNetModel( hidden_dim, output_dim, weights_matrix)\n", + "optimizer = torch.optim.SGD(model_ffnn.parameters(), lr=learning_rate)\n", + "model_ffnn = model_ffnn.to(device)\n", + "# Train the model\n", + "training( model_ffnn, train_loader, optimizer, num_epochs=num_epochs, plot=True )\n", + "# Evaluate on dev\n", + "gold, pred = evaluate( model_ffnn, dev_loader )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "7pTSuPPEjVWe", + "outputId": "e6c57c5d-ee58-490d-d297-528066abde44" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 0. Loss: 0.06963509724347426. ACC 0.5056693853192759 \n", + "Epoch: 1. Loss: 0.0695286692433787. ACC 0.5084543465287448 \n", + "Epoch: 2. Loss: 0.06942234052112095. ACC 0.5158146011537696 \n", + "Epoch: 3. Loss: 0.06926284745551968. ACC 0.5223791525760891 \n", + "Epoch: 4. Loss: 0.06901932719547278. ACC 0.5307340362044958 \n", + "Epoch: 5. Loss: 0.06865637074034756. ACC 0.5522180226775413 \n", + "Epoch: 6. Loss: 0.06814203977063135. ACC 0.5731052317485578 \n", + "Epoch: 7. Loss: 0.06746299424037702. ACC 0.5961806246270142 \n", + "Epoch: 8. Loss: 0.06663953955614095. ACC 0.6120946886811219 \n", + "Epoch: 9. Loss: 0.06572513203747068. ACC 0.6276109011338771 \n", + "Epoch: 10. Loss: 0.06478647729713542. ACC 0.6397453749751343 \n", + "Epoch: 11. Loss: 0.06388262006737068. ACC 0.6465088521981301 \n", + "Epoch: 12. Loss: 0.0630569500040529. ACC 0.6558583648299184 \n", + "Epoch: 13. Loss: 0.06233660556318178. ACC 0.6642132484583251 \n", + "Epoch: 14. Loss: 0.06173250857560564. ACC 0.667594987069823 \n", + "Epoch: 15. Loss: 0.06124116930616336. ACC 0.6691863934752338 \n", + "Epoch: 16. Loss: 0.06084933356473288. ACC 0.6717724288840262 \n", + "Epoch: 17. Loss: 0.06053961690434505. ACC 0.6739606126914661 \n", + "Epoch: 18. Loss: 0.06029470010877533. ACC 0.6751541674955241 \n", + "Epoch: 19. Loss: 0.060099397634971394. ACC 0.6765466481002586 \n", + "Epoch: 20. Loss: 0.05994128135129474. ACC 0.6797294609110802 \n", + "Epoch: 21. Loss: 0.059810697095683915. ACC 0.6799283867117565 \n", + "Epoch: 22. Loss: 0.059700512390428874. ACC 0.6797294609110802 \n", + "Epoch: 23. Loss: 0.05960569777497245. ACC 0.6801273125124329 \n", + "Epoch: 24. Loss: 0.05952279594870811. ACC 0.6807240899144619 \n", + "Epoch: 25. Loss: 0.05944940520727257. ACC 0.6811219415158146 \n", + "Epoch: 26. Loss: 0.05938379008560833. ACC 0.68191764471852 \n", + "Epoch: 27. Loss: 0.05932465524684845. ACC 0.6839069027252834 \n", + "Epoch: 28. Loss: 0.0592709946032426. ACC 0.6854983091306942 \n", + "Epoch: 29. Loss: 0.05922201477392829. ACC 0.6862940123333996 \n", + "Epoch: 30. Loss: 0.05917707211292594. ACC 0.6866918639347523 \n", + "Epoch: 31. Loss: 0.05913563756528232. ACC 0.6878854187388104 \n", + "Epoch: 32. Loss: 0.05909725591489945. ACC 0.6886811219415158 \n", + "Epoch: 33. Loss: 0.05906153156218103. ACC 0.6884821961408395 \n", + "Epoch: 34. Loss: 0.05902811956021476. ACC 0.6886811219415158 \n", + "Epoch: 35. Loss: 0.05899671571425944. ACC 0.6890789735428685 \n", + "Epoch: 36. Loss: 0.05896705309581586. ACC 0.6888800477421921 \n", + "Epoch: 37. Loss: 0.05893890081543749. ACC 0.6886811219415158 \n", + "Epoch: 38. Loss: 0.05891205998545545. ACC 0.6882832703401631 \n", + "Epoch: 39. Loss: 0.0588863566295513. ACC 0.6886811219415158 \n", + "Epoch: 40. Loss: 0.058861641255908585. ACC 0.6888800477421921 \n", + "Epoch: 41. Loss: 0.05883778279833607. ACC 0.6890789735428685 \n", + "Epoch: 42. Loss: 0.05881466824870378. ACC 0.6896757509448975 \n", + "Epoch: 43. Loss: 0.05879219591036596. ACC 0.6900736025462503 \n", + "Epoch: 44. Loss: 0.05877027481124442. ACC 0.6894768251442212 \n", + "Epoch: 45. Loss: 0.05874882452004658. ACC 0.6898746767455739 \n", + "Epoch: 46. Loss: 0.058727770628785904. ACC 0.6894768251442212 \n", + "Epoch: 47. Loss: 0.05870704316988555. ACC 0.6896757509448975 \n", + "Epoch: 48. Loss: 0.0586865745708628. ACC 0.6900736025462503 \n", + "Epoch: 49. Loss: 0.05866629936976345. ACC 0.6900736025462503 \n", + "Epoch: 50. Loss: 0.0586461473025881. ACC 0.6900736025462503 \n", + "Epoch: 51. Loss: 0.05862604574581395. ACC 0.6900736025462503 \n", + "Epoch: 52. Loss: 0.05860591405472415. ACC 0.6902725283469267 \n", + "Epoch: 53. Loss: 0.05858565930974443. ACC 0.6906703799482793 \n", + "Epoch: 54. Loss: 0.05856518015215073. ACC 0.6908693057489557 \n", + "Epoch: 55. Loss: 0.05854436864560277. ACC 0.6908693057489557 \n", + "Epoch: 56. Loss: 0.05852312497573793. ACC 0.6914660831509847 \n", + "Epoch: 57. Loss: 0.058501381887245636. ACC 0.6914660831509847 \n", + "Epoch: 58. Loss: 0.05847912775739799. ACC 0.691665008951661 \n", + "Epoch: 59. Loss: 0.058456416988624166. ACC 0.6920628605530137 \n", + "Epoch: 60. Loss: 0.058433349626496364. ACC 0.6928585637557191 \n", + "Epoch: 61. Loss: 0.058410033607354854. ACC 0.6930574895563955 \n", + "Epoch: 62. Loss: 0.05838656049019446. ACC 0.6926596379550428 \n", + "Epoch: 63. Loss: 0.05836298880068189. ACC 0.6926596379550428 \n", + "Epoch: 64. Loss: 0.05833934880355871. ACC 0.6926596379550428 \n", + "Epoch: 65. Loss: 0.05831565266104183. ACC 0.6930574895563955 \n", + "Epoch: 66. Loss: 0.05829189701466383. ACC 0.6932564153570718 \n", + "Epoch: 67. Loss: 0.0582680773261956. ACC 0.6938531927591008 \n", + "Epoch: 68. Loss: 0.058244179322891734. ACC 0.6934553411577482 \n", + "Epoch: 69. Loss: 0.058220195146590645. ACC 0.6942510443604536 \n", + "Epoch: 70. Loss: 0.0581961105927241. ACC 0.6946488959618062 \n", + "Epoch: 71. Loss: 0.058171917613420096. ACC 0.6948478217624826 \n", + "Epoch: 72. Loss: 0.05814761168823485. ACC 0.6954445991645116 \n", + "Epoch: 73. Loss: 0.05812318600834258. ACC 0.6952456733638352 \n", + "Epoch: 74. Loss: 0.05809864127330048. ACC 0.6954445991645116 \n", + "Epoch: 75. Loss: 0.058073978072989405. ACC 0.6952456733638352 \n", + "Epoch: 76. Loss: 0.05804920089228243. ACC 0.6954445991645116 \n", + "Epoch: 77. Loss: 0.05802431440279881. ACC 0.6948478217624826 \n", + "Epoch: 78. Loss: 0.05799932675023. ACC 0.6946488959618062 \n", + "Epoch: 79. Loss: 0.057974244909398426. ACC 0.6954445991645116 \n", + "Epoch: 80. Loss: 0.0579490800406128. ACC 0.695046747563159 \n", + "Epoch: 81. Loss: 0.05792383888452172. ACC 0.6946488959618062 \n", + "Epoch: 82. Loss: 0.05789853356480717. ACC 0.6948478217624826 \n", + "Epoch: 83. Loss: 0.05787317092882987. ACC 0.695046747563159 \n", + "Epoch: 84. Loss: 0.05784776003229848. ACC 0.695046747563159 \n", + "Epoch: 85. Loss: 0.057822309450717146. ACC 0.6948478217624826 \n", + "Epoch: 86. Loss: 0.05779682658575675. ACC 0.695643524965188 \n", + "Epoch: 87. Loss: 0.05777131741625997. ACC 0.6958424507658644 \n", + "Epoch: 88. Loss: 0.05774579009977515. ACC 0.6964392281678934 \n", + "Epoch: 89. Loss: 0.05772024907374776. ACC 0.6964392281678934 \n", + "Epoch: 90. Loss: 0.057694700050240175. ACC 0.6964392281678934 \n", + "Epoch: 91. Loss: 0.05766914761787336. ACC 0.6964392281678934 \n", + "Epoch: 92. Loss: 0.057643595938419806. ACC 0.6966381539685698 \n", + "Epoch: 93. Loss: 0.05761805120414641. ACC 0.6970360055699224 \n", + "Epoch: 94. Loss: 0.05759251392193573. ACC 0.6976327829719514 \n", + "Epoch: 95. Loss: 0.05756698897386702. ACC 0.696837079769246 \n", + "Epoch: 96. Loss: 0.05754147932712994. ACC 0.696837079769246 \n", + "Epoch: 97. Loss: 0.057515986757295516. ACC 0.6970360055699224 \n", + "Epoch: 98. Loss: 0.05749051376913422. ACC 0.6972349313705988 \n", + "Epoch: 99. Loss: 0.057465063555116845. ACC 0.6978317087726278 \n", + " precision recall f1-score support\n", + "\n", + " 0 0.46 0.94 0.62 230\n", + " 1 0.82 0.19 0.31 319\n", + "\n", + " accuracy 0.51 549\n", + " macro avg 0.64 0.57 0.46 549\n", + "weighted avg 0.67 0.51 0.44 549\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "---> Loss continues to decrease slightly, but less quickly after 40.\n", + "\n", + "Now we fix the number of epochs to 40." + ], + "metadata": { + "id": "UhEgVYcGjxRI" + } + }, + { + "cell_type": "markdown", + "source": [ + "### 5.3- Hidden Size" + ], + "metadata": { + "id": "NOCfrCXHXuHF" + } + }, + { + "cell_type": "code", + "source": [ + "# Hyper-parameters\n", + "num_epochs = 40\n", + "learning_rate = 0.1\n", + "criterion = nn.CrossEntropyLoss()\n", + "output_dim = 2" + ], + "metadata": { + "id": "Decj_K3OXuHG" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "-----> BHIDDEN DIM 10" + ], + "metadata": { + "id": "CHMNOXBcaYuE" + } + }, + { + "cell_type": "code", + "source": [ + "# To optimize\n", + "hidden_dim = 10" + ], + "metadata": { + "id": "6LLePhm2aYuF" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Initialize the model\n", + "model_ffnn = FeedforwardNeuralNetModel( hidden_dim, output_dim, weights_matrix)\n", + "optimizer = torch.optim.SGD(model_ffnn.parameters(), lr=learning_rate)\n", + "model_ffnn = model_ffnn.to(device)\n", + "# Train the model\n", + "training( model_ffnn, train_loader, optimizer, num_epochs=num_epochs, plot=True )\n", + "# Evaluate on dev\n", + "gold, pred = evaluate( model_ffnn, dev_loader )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "1512bda5-c807-4d90-d088-df8fda73f3ab", + "id": "kLkludZnaYuF" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 0. Loss: 0.06996377758935216. ACC 0.49830913069425103 \n", + "Epoch: 1. Loss: 0.06981138791055264. ACC 0.5016908693057489 \n", + "Epoch: 2. Loss: 0.06977116996402032. ACC 0.5024865725084543 \n", + "Epoch: 3. Loss: 0.06970947674972673. ACC 0.5056693853192759 \n", + "Epoch: 4. Loss: 0.06960997699813812. ACC 0.5104436045355083 \n", + "Epoch: 5. Loss: 0.06944751888898915. ACC 0.5182017107618858 \n", + "Epoch: 6. Loss: 0.06918649299258096. ACC 0.5265565943902925 \n", + "Epoch: 7. Loss: 0.06878434632344774. ACC 0.539486771434255 \n", + "Epoch: 8. Loss: 0.06820530898058322. ACC 0.5621643127113587 \n", + "Epoch: 9. Loss: 0.06744299065125305. ACC 0.5872289635965785 \n", + "Epoch: 10. Loss: 0.06653527622315858. ACC 0.6085140242689476 \n", + "Epoch: 11. Loss: 0.06555292989094547. ACC 0.6236323851203501 \n", + "Epoch: 12. Loss: 0.06457137288453448. ACC 0.6353690073602546 \n", + "Epoch: 13. Loss: 0.06365227370250763. ACC 0.6423314103839268 \n", + "Epoch: 14. Loss: 0.06283881240036181. ACC 0.6526755520190969 \n", + "Epoch: 15. Loss: 0.06215370156097678. ACC 0.6592401034414164 \n", + "Epoch: 16. Loss: 0.06159951517542575. ACC 0.6664014322657649 \n", + "Epoch: 17. Loss: 0.06116325403032897. ACC 0.6669982096677939 \n", + "Epoch: 18. Loss: 0.06082425708322087. ACC 0.6707777998806446 \n", + "Epoch: 19. Loss: 0.060561552907592. ACC 0.67157350308335 \n", + "Epoch: 20. Loss: 0.060357061400194395. ACC 0.6739606126914661 \n", + "Epoch: 21. Loss: 0.06019621722286066. ACC 0.6759498706982295 \n", + "Epoch: 22. Loss: 0.060067728532340006. ACC 0.6765466481002586 \n", + "Epoch: 23. Loss: 0.059963072878194655. ACC 0.6783369803063457 \n", + "Epoch: 24. Loss: 0.059875916694821715. ACC 0.6785359061070221 \n", + "Epoch: 25. Loss: 0.05980158481181486. ACC 0.6789337577083748 \n", + "Epoch: 26. Loss: 0.05973661566601137. ACC 0.6773423513029639 \n", + "Epoch: 27. Loss: 0.05967842905332157. ACC 0.6767455739009349 \n", + "Epoch: 28. Loss: 0.059625086554101765. ACC 0.6767455739009349 \n", + "Epoch: 29. Loss: 0.059575127095713255. ACC 0.6779391287049931 \n", + "Epoch: 30. Loss: 0.05952744513471439. ACC 0.6791326835090511 \n", + "Epoch: 31. Loss: 0.05948121970516089. ACC 0.6805251641137856 \n", + "Epoch: 32. Loss: 0.05943586619658667. ACC 0.6815197931171673 \n", + "Epoch: 33. Loss: 0.059391021580304355. ACC 0.681320867316491 \n", + "Epoch: 34. Loss: 0.0593465353388755. ACC 0.681320867316491 \n", + "Epoch: 35. Loss: 0.05930244759012696. ACC 0.6809230157151382 \n", + "Epoch: 36. Loss: 0.059258925480801805. ACC 0.68191764471852 \n", + "Epoch: 37. Loss: 0.059216171710562794. ACC 0.6821165705191964 \n", + "Epoch: 38. Loss: 0.05917434964972982. ACC 0.682514422120549 \n", + "Epoch: 39. Loss: 0.059133555576344574. ACC 0.6833101253232544 \n", + " precision recall f1-score support\n", + "\n", + " 0 0.46 0.94 0.62 230\n", + " 1 0.84 0.21 0.33 319\n", + "\n", + " accuracy 0.52 549\n", + " macro avg 0.65 0.58 0.48 549\n", + "weighted avg 0.68 0.52 0.45 549\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# epochs, hidden, lr, batch, act, opt\n", + "exp = Expe( num_epochs, hidden_dim, learning_rate, batch_size, 'sigmoid', 'SGD' )\n", + "exp.set_model( model_ffnn )\n", + "exp.set_scores( gold, pred )\n", + "experiments.append( exp )" + ], + "metadata": { + "id": "m64cYF23kVjf" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "-----> HIDDEN DIM 64" + ], + "metadata": { + "id": "vdAowqjnaM6m" + } + }, + { + "cell_type": "code", + "source": [ + "# To optimize\n", + "hidden_dim = 64" + ], + "metadata": { + "id": "s3d0b5JOaM6n" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Initialize the model\n", + "model_ffnn = FeedforwardNeuralNetModel( hidden_dim, output_dim, weights_matrix)\n", + "optimizer = torch.optim.SGD(model_ffnn.parameters(), lr=learning_rate)\n", + "model_ffnn = model_ffnn.to(device)\n", + "# Train the model\n", + "training( model_ffnn, train_loader, optimizer, num_epochs=num_epochs, plot=True )\n", + "# Evaluate on dev\n", + "gold, pred = evaluate( model_ffnn, dev_loader )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "aa041315-66f6-4625-a420-365d94130cd0", + "id": "dPVElrroaM6n" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 0. Loss: 0.07275916600715861. ACC 0.5102446787348319 \n", + "Epoch: 1. Loss: 0.07249512868893178. ACC 0.5130296399443007 \n", + "Epoch: 2. Loss: 0.07222251622819606. ACC 0.5168092301571514 \n", + "Epoch: 3. Loss: 0.07190552247146832. ACC 0.5215834493733837 \n", + "Epoch: 4. Loss: 0.07150292000524894. ACC 0.5273522975929978 \n", + "Epoch: 5. Loss: 0.0709696923415372. ACC 0.5317286652078774 \n", + "Epoch: 6. Loss: 0.07027140550829673. ACC 0.5416749552416948 \n", + "Epoch: 7. Loss: 0.06940647640758513. ACC 0.553212651680923 \n", + "Epoch: 8. Loss: 0.06841664225224688. ACC 0.570917047941118 \n", + "Epoch: 9. Loss: 0.06737008235529021. ACC 0.5860354087925204 \n", + "Epoch: 10. Loss: 0.0663343019233633. ACC 0.5967774020290432 \n", + "Epoch: 11. Loss: 0.06536385625073182. ACC 0.6101054306743585 \n", + "Epoch: 12. Loss: 0.06449928389454969. ACC 0.6222399045156157 \n", + "Epoch: 13. Loss: 0.06376417517448624. ACC 0.6331808235528148 \n", + "Epoch: 14. Loss: 0.0631621678769055. ACC 0.6379550427690471 \n", + "Epoch: 15. Loss: 0.06268051691740152. ACC 0.644121742590014 \n", + "Epoch: 16. Loss: 0.062298749837530094. ACC 0.645912074796101 \n", + "Epoch: 17. Loss: 0.06199579484210897. ACC 0.6502884424109807 \n", + "Epoch: 18. Loss: 0.061753282910766816. ACC 0.6554605132285658 \n", + "Epoch: 19. Loss: 0.06155642493595915. ACC 0.6568529938333002 \n", + "Epoch: 20. Loss: 0.06139383065622275. ACC 0.6606325840461508 \n", + "Epoch: 21. Loss: 0.06125695419188212. ACC 0.6622239904515616 \n", + "Epoch: 22. Loss: 0.06113947397651885. ACC 0.6646111000596777 \n", + "Epoch: 23. Loss: 0.061036750564571404. ACC 0.6648100258603541 \n", + "Epoch: 24. Loss: 0.0609453870189197. ACC 0.6650089516610305 \n", + "Epoch: 25. Loss: 0.06086289295743279. ACC 0.6664014322657649 \n", + "Epoch: 26. Loss: 0.060787433868424896. ACC 0.6667992838671176 \n", + "Epoch: 27. Loss: 0.060717649741558855. ACC 0.668788541873881 \n", + "Epoch: 28. Loss: 0.06065252416765142. ACC 0.66938531927591 \n", + "Epoch: 29. Loss: 0.06059128800134714. ACC 0.6699820966779392 \n", + "Epoch: 30. Loss: 0.060533353590884645. ACC 0.6709767256813208 \n", + "Epoch: 31. Loss: 0.0604782642676955. ACC 0.6731649094887607 \n", + "Epoch: 32. Loss: 0.06042566273590431. ACC 0.6729659836880844 \n", + "Epoch: 33. Loss: 0.06037526085501474. ACC 0.6743584642928188 \n", + "Epoch: 34. Loss: 0.06032682523970247. ACC 0.6745573900934951 \n", + "Epoch: 35. Loss: 0.060280159676029926. ACC 0.6741595384921424 \n", + "Epoch: 36. Loss: 0.06023510079367725. ACC 0.6753530932962005 \n", + "Epoch: 37. Loss: 0.06019150209469565. ACC 0.6767455739009349 \n", + "Epoch: 38. Loss: 0.0601492392535425. ACC 0.6781380545056693 \n", + "Epoch: 39. Loss: 0.06010819780368892. ACC 0.6781380545056693 \n", + " precision recall f1-score support\n", + "\n", + " 0 0.45 0.96 0.61 230\n", + " 1 0.84 0.16 0.27 319\n", + "\n", + " accuracy 0.49 549\n", + " macro avg 0.64 0.56 0.44 549\n", + "weighted avg 0.67 0.49 0.41 549\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# epochs, hidden, lr, batch, act, opt\n", + "exp = Expe( num_epochs, hidden_dim, learning_rate, batch_size, 'sigmoid', 'SGD' )\n", + "exp.set_model( model_ffnn )\n", + "exp.set_scores( gold, pred )\n", + "experiments.append( exp )" + ], + "metadata": { + "id": "YTvL74nskeKl" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "-----> HIDDEN DIM 512" + ], + "metadata": { + "id": "-n9xrbgOaBBW" + } + }, + { + "cell_type": "code", + "source": [ + "# To optimize\n", + "hidden_dim = 512" + ], + "metadata": { + "id": "j8xOZDOWaBBY" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Initialize the model\n", + "model_ffnn = FeedforwardNeuralNetModel( hidden_dim, output_dim, weights_matrix)\n", + "optimizer = torch.optim.SGD(model_ffnn.parameters(), lr=learning_rate)\n", + "model_ffnn = model_ffnn.to(device)\n", + "# Train the model\n", + "training( model_ffnn, train_loader, optimizer, num_epochs=num_epochs, plot=True )\n", + "# Evaluate on dev\n", + "gold, pred = evaluate( model_ffnn, dev_loader )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "ec7d9a8d-e798-4d7d-8fe5-9e83e6a90096", + "id": "ZA52chWCaBBY" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 0. Loss: 0.2978592665040851. ACC 0.4873682116570519 \n", + "Epoch: 1. Loss: 0.2278574062124123. ACC 0.4973145016908693 \n", + "Epoch: 2. Loss: 0.1829171202482512. ACC 0.4973145016908693 \n", + "Epoch: 3. Loss: 0.15505569087171356. ACC 0.4985080564949274 \n", + "Epoch: 4. Loss: 0.13253630096285865. ACC 0.5048736821165705 \n", + "Epoch: 5. Loss: 0.11563538200152852. ACC 0.5132285657449771 \n", + "Epoch: 6. Loss: 0.10475731679737295. ACC 0.5185995623632386 \n", + "Epoch: 7. Loss: 0.09711393686087393. ACC 0.5215834493733837 \n", + "Epoch: 8. Loss: 0.09105930351252961. ACC 0.5335189974139646 \n", + "Epoch: 9. Loss: 0.08641801475411455. ACC 0.5464491744579272 \n", + "Epoch: 10. Loss: 0.08267590181239917. ACC 0.5528148000795703 \n", + "Epoch: 11. Loss: 0.07960491427517753. ACC 0.5653471255221802 \n", + "Epoch: 12. Loss: 0.07709535509970403. ACC 0.5754923413566739 \n", + "Epoch: 13. Loss: 0.07504374389978534. ACC 0.5830515217823752 \n", + "Epoch: 14. Loss: 0.07336382725875752. ACC 0.595583847224985 \n", + "Epoch: 15. Loss: 0.07198763575448605. ACC 0.6037398050527153 \n", + "Epoch: 16. Loss: 0.07085724007497612. ACC 0.6095086532723294 \n", + "Epoch: 17. Loss: 0.06992252933734783. ACC 0.6134871692858563 \n", + "Epoch: 18. Loss: 0.06914168376915018. ACC 0.6180624627014124 \n", + "Epoch: 19. Loss: 0.06848115502590447. ACC 0.622438830316292 \n", + "Epoch: 20. Loss: 0.06791489147300485. ACC 0.6260194947284663 \n", + "Epoch: 21. Loss: 0.06742309976197959. ACC 0.6297990849413169 \n", + "Epoch: 22. Loss: 0.06699086614553369. ACC 0.6323851203501094 \n", + "Epoch: 23. Loss: 0.06660693015377825. ACC 0.6345733041575492 \n", + "Epoch: 24. Loss: 0.06626271187772992. ACC 0.6383528943703999 \n", + "Epoch: 25. Loss: 0.06595159280672447. ACC 0.6397453749751343 \n", + "Epoch: 26. Loss: 0.06566840149380707. ACC 0.6393475233737815 \n", + "Epoch: 27. Loss: 0.06540904699961661. ACC 0.6377561169683708 \n", + "Epoch: 28. Loss: 0.06517024608879173. ACC 0.6391485975731053 \n", + "Epoch: 29. Loss: 0.06494933721296874. ACC 0.6409389297791923 \n", + "Epoch: 30. Loss: 0.06474413285085641. ACC 0.6417346329818977 \n", + "Epoch: 31. Loss: 0.064552815979699. ACC 0.6423314103839268 \n", + "Epoch: 32. Loss: 0.0643738576164534. ACC 0.6423314103839268 \n", + "Epoch: 33. Loss: 0.06420596219897151. ACC 0.6431271135866322 \n", + "Epoch: 34. Loss: 0.06404802171164771. ACC 0.6445195941913666 \n", + "Epoch: 35. Loss: 0.06389907756547983. ACC 0.6465088521981301 \n", + "Epoch: 36. Loss: 0.06375829649298809. ACC 0.6484981102048936 \n", + "Epoch: 37. Loss: 0.06362495003577513. ACC 0.6504873682116571 \n", + "Epoch: 38. Loss: 0.06349839453007607. ACC 0.6500895166103043 \n", + "Epoch: 39. Loss: 0.06337806315077733. ACC 0.6510841456136861 \n", + " precision recall f1-score support\n", + "\n", + " 0 0.44 0.98 0.61 230\n", + " 1 0.88 0.11 0.20 319\n", + "\n", + " accuracy 0.48 549\n", + " macro avg 0.66 0.55 0.40 549\n", + "weighted avg 0.70 0.48 0.37 549\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# epochs, hidden, lr, batch, act, opt\n", + "exp = Expe( num_epochs, hidden_dim, learning_rate, batch_size, 'sigmoid', 'SGD' )\n", + "exp.set_model( model_ffnn )\n", + "exp.set_scores( gold, pred )\n", + "experiments.append( exp )" + ], + "metadata": { + "id": "PFeWsyCTkl1I" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### 5.4- Activation Function" + ], + "metadata": { + "id": "SU5hZaAGa-oN" + } + }, + { + "cell_type": "code", + "source": [ + "# Already optimized\n", + "batch_size = 10\n", + "hidden_dim = 10" + ], + "metadata": { + "id": "oFXMMG-xbOS4" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Hyper-parameters\n", + "learning_rate = 0.1\n", + "criterion = nn.CrossEntropyLoss()\n", + "output_dim = 2" + ], + "metadata": { + "id": "hGgQ8IVAbOS4" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "------> RELU" + ], + "metadata": { + "id": "2JOuEGpAbHvD" + } + }, + { + "cell_type": "markdown", + "source": [ + "----------------------------\n", + "SOLUTION" + ], + "metadata": { + "id": "OaAT_mbnnZ79" + } + }, + { + "cell_type": "code", + "source": [ + "class FeedforwardNeuralNetModel(nn.Module):\n", + " def __init__(self, hidden_dim, output_dim, weights_matrix):\n", + " # calls the init function of nn.Module. Dont get confused by syntax,\n", + " # just always do it in an nn.Module\n", + " super(FeedforwardNeuralNetModel, self).__init__()\n", + "\n", + " # Embedding layer\n", + " self.embedding_bag = nn.EmbeddingBag.from_pretrained(\n", + " weights_matrix,\n", + " mode='mean')\n", + " embed_dim = self.embedding_bag.embedding_dim\n", + "\n", + " # Linear function\n", + " self.fc1 = nn.Linear(embed_dim, hidden_dim)\n", + "\n", + " # Non-linearity\n", + " self.activation = nn.ReLU()\n", + "\n", + " # Linear function (readout)\n", + " self.fc2 = nn.Linear(hidden_dim, output_dim)\n", + "\n", + " def forward(self, text, offsets):\n", + " # Embedding layer\n", + " embedded = self.embedding_bag(text, offsets)\n", + "\n", + " # Linear function\n", + " out = self.fc1(embedded)\n", + "\n", + " # Non-linearity\n", + " out = self.activation(out)\n", + "\n", + " # Linear function (readout)\n", + " out = self.fc2(out)\n", + " return out" + ], + "metadata": { + "id": "HNaP18nEZNTu" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Initialize the model\n", + "model_ffnn = FeedforwardNeuralNetModel( hidden_dim, output_dim, weights_matrix)\n", + "optimizer = torch.optim.SGD(model_ffnn.parameters(), lr=learning_rate)\n", + "model_ffnn = model_ffnn.to(device)\n", + "# Train the model\n", + "training( model_ffnn, train_loader, optimizer, num_epochs=num_epochs, plot=True )\n", + "# Evaluate on dev\n", + "gold, pred = evaluate( model_ffnn, dev_loader )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "3jC2S26dbdD7", + "outputId": "8ac92d69-cb58-4e15-8dea-6b7db3f2383d" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 0. Loss: 0.06947135333633575. ACC 0.5044758305152178 \n", + "Epoch: 1. Loss: 0.0689417885126213. ACC 0.5388899940322259 \n", + "Epoch: 2. Loss: 0.06711450736708116. ACC 0.5933956634175452 \n", + "Epoch: 3. Loss: 0.06442576222920575. ACC 0.6307937139446986 \n", + "Epoch: 4. Loss: 0.0625185880410593. ACC 0.6512830714143625 \n", + "Epoch: 5. Loss: 0.06135143008529962. ACC 0.6628207678535906 \n", + "Epoch: 6. Loss: 0.06054908076313444. ACC 0.6685896160732047 \n", + "Epoch: 7. Loss: 0.05986351958676648. ACC 0.6753530932962005 \n", + "Epoch: 8. Loss: 0.05932085048566643. ACC 0.6795305351104038 \n", + "Epoch: 9. Loss: 0.05881184618160505. ACC 0.6801273125124329 \n", + "Epoch: 10. Loss: 0.058372599083314436. ACC 0.6851004575293416 \n", + "Epoch: 11. Loss: 0.05797103613537966. ACC 0.6882832703401631 \n", + "Epoch: 12. Loss: 0.05747430726384842. ACC 0.6898746767455739 \n", + "Epoch: 13. Loss: 0.05705877671973094. ACC 0.6906703799482793 \n", + "Epoch: 14. Loss: 0.05659139006055324. ACC 0.6948478217624826 \n", + "Epoch: 15. Loss: 0.05615444571781709. ACC 0.7006166699820967 \n", + "Epoch: 16. Loss: 0.055739216875527235. ACC 0.7030037795902129 \n", + "Epoch: 17. Loss: 0.05529192807969882. ACC 0.7081758504077978 \n", + "Epoch: 18. Loss: 0.05475609092238601. ACC 0.7095683310125324 \n", + "Epoch: 19. Loss: 0.054239009083301475. ACC 0.7145414760294411 \n", + "Epoch: 20. Loss: 0.05368258624599021. ACC 0.7217028048537896 \n", + "Epoch: 21. Loss: 0.05322986537665099. ACC 0.7226974338571712 \n", + "Epoch: 22. Loss: 0.05272137535384334. ACC 0.7280684304754327 \n", + "Epoch: 23. Loss: 0.05222201137187492. ACC 0.734036204495723 \n", + "Epoch: 24. Loss: 0.05168944066055067. ACC 0.7388104237119555 \n", + "Epoch: 25. Loss: 0.05107997418315505. ACC 0.7441814203302168 \n", + "Epoch: 26. Loss: 0.05048732394628599. ACC 0.7467674557390094 \n", + "Epoch: 27. Loss: 0.049938210684332573. ACC 0.7473642331410384 \n", + "Epoch: 28. Loss: 0.04938540383447158. ACC 0.7503481201511836 \n", + "Epoch: 29. Loss: 0.04877773079200794. ACC 0.7555201909687687 \n", + "Epoch: 30. Loss: 0.04817319610987028. ACC 0.7630793713944699 \n", + "Epoch: 31. Loss: 0.04746822225085921. ACC 0.7654664810025861 \n", + "Epoch: 32. Loss: 0.04683999892273076. ACC 0.772826735627611 \n", + "Epoch: 33. Loss: 0.04621328434532481. ACC 0.7766063258404615 \n", + "Epoch: 34. Loss: 0.045464468489638. ACC 0.783170877262781 \n", + "Epoch: 35. Loss: 0.04482407960095888. ACC 0.788342948080366 \n", + "Epoch: 36. Loss: 0.04419518774958901. ACC 0.7937139446986274 \n", + "Epoch: 37. Loss: 0.043567528473541235. ACC 0.7964989059080962 \n", + "Epoch: 38. Loss: 0.04298357173625579. ACC 0.8002784961209469 \n", + "Epoch: 39. Loss: 0.04227601012623711. ACC 0.8044559379351501 \n", + " precision recall f1-score support\n", + "\n", + " 0 0.46 0.97 0.62 230\n", + " 1 0.89 0.18 0.30 319\n", + "\n", + " accuracy 0.51 549\n", + " macro avg 0.68 0.57 0.46 549\n", + "weighted avg 0.71 0.51 0.43 549\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "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jZiYGCMmJsbE1BX3W9u5d+9e429/+5uxceNG48CBA8ann35qNGvWzOjdu7fJyS/f448/bqSmphoHDhwwtm3bZjz++OOGxWIxvvzyS8Mw3GM/Gsalt9Md9uOl/PrKLjP3qUqNE6+88orRuHFjw263G127djXWrl1rdqRKNWTIEKNhw4aG3W43QkJCjCFDhhh79+41O9ZVW7FihQFcsIwYMcIwjNLLup988kkjMDDQ8PLyMvr162fs2rXL3NAVdKltPHfunNG/f3+jfv36hqenp9GkSRPj/vvvd8lC7mwbAeOtt94qG3P+/HljzJgxRp06dYyaNWsat99+u3H8+HHzQl+B39rOw4cPG7179zbq1q1reHl5GS1atDAmTZpkZGdnmxu8Au677z6jSZMmht1uN+rXr2/069evrNAYhnvsR8O49Ha6w368lF+XGjP3qcUwDOPaHw8SERERubY0p0ZERETcgkqNiIiIuAWVGhEREXELKjUiIiLiFlRqRERExC2o1IiIiIhbUKkRERERt6BSIyIiIm5BpUZERETcgkqNiIiIuAWVGhEREXELKjUiIiLiFv4/Mi3lIPABqBYAAAAASUVORK5CYII=\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# epochs, hidden, lr, batch, act, opt\n", + "exp = Expe( num_epochs, hidden_dim, learning_rate, batch_size, 'relu', 'SGD' )\n", + "exp.set_model( model_ffnn )\n", + "exp.set_scores( gold, pred )\n", + "experiments.append( exp )" + ], + "metadata": { + "id": "NZf4IZtyksmP" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "------> Hardtanh" + ], + "metadata": { + "id": "D4tkSoOXckfU" + } + }, + { + "cell_type": "code", + "source": [ + "class FeedforwardNeuralNetModel(nn.Module):\n", + " def __init__(self, hidden_dim, output_dim, weights_matrix):\n", + " # calls the init function of nn.Module. Dont get confused by syntax,\n", + " # just always do it in an nn.Module\n", + " super(FeedforwardNeuralNetModel, self).__init__()\n", + "\n", + " # Embedding layer\n", + " self.embedding_bag = nn.EmbeddingBag.from_pretrained(\n", + " weights_matrix,\n", + " mode='mean')\n", + " embed_dim = self.embedding_bag.embedding_dim\n", + "\n", + " # Linear function\n", + " self.fc1 = nn.Linear(embed_dim, hidden_dim)\n", + "\n", + " # Non-linearity\n", + " self.activation = nn.Hardtanh()\n", + "\n", + " # Linear function (readout)\n", + " self.fc2 = nn.Linear(hidden_dim, output_dim)\n", + "\n", + " def forward(self, text, offsets):\n", + " # Embedding layer\n", + " embedded = self.embedding_bag(text, offsets)\n", + "\n", + " # Linear function\n", + " out = self.fc1(embedded)\n", + "\n", + " # Non-linearity\n", + " out = self.activation(out)\n", + "\n", + " # Linear function (readout)\n", + " out = self.fc2(out)\n", + " return out" + ], + "metadata": { + "id": "85rJ0LeNcnVh" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Initialize the model\n", + "model_ffnn = FeedforwardNeuralNetModel( hidden_dim, output_dim, weights_matrix)\n", + "optimizer = torch.optim.SGD(model_ffnn.parameters(), lr=learning_rate)\n", + "model_ffnn = model_ffnn.to(device)\n", + "# Train the model\n", + "training( model_ffnn, train_loader, optimizer, num_epochs=num_epochs, plot=True )\n", + "# Evaluate on dev\n", + "gold, pred = evaluate( model_ffnn, dev_loader )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "64969e51-9d06-4880-e963-5aa6da2ebc4c", + "id": "AG3KHam2cnVi" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 0. Loss: 0.06924010234915857. ACC 0.5174060075591804 \n", + "Epoch: 1. Loss: 0.0676556401397875. ACC 0.5802665605729063 \n", + "Epoch: 2. Loss: 0.06508188367316801. ACC 0.6305947881440223 \n", + "Epoch: 3. Loss: 0.06323095920760802. ACC 0.644121742590014 \n", + "Epoch: 4. Loss: 0.06223800997148813. ACC 0.6568529938333002 \n", + "Epoch: 5. Loss: 0.06170375551194729. ACC 0.6618261388502089 \n", + "Epoch: 6. Loss: 0.061271748000688096. ACC 0.6640143226576487 \n", + "Epoch: 7. Loss: 0.061038093435757196. ACC 0.6660035806644121 \n", + "Epoch: 8. Loss: 0.06074255015400928. ACC 0.668191764471852 \n", + "Epoch: 9. Loss: 0.06063684351002693. ACC 0.6695842450765864 \n", + "Epoch: 10. Loss: 0.06040970502991503. ACC 0.6709767256813208 \n", + "Epoch: 11. Loss: 0.060354981527713604. ACC 0.6713745772826736 \n", + "Epoch: 12. Loss: 0.06018284043830362. ACC 0.673363835289437 \n", + "Epoch: 13. Loss: 0.06014509342858349. ACC 0.6743584642928188 \n", + "Epoch: 14. Loss: 0.06001727005253024. ACC 0.6767455739009349 \n", + "Epoch: 15. Loss: 0.05998357945487351. ACC 0.6761487964989059 \n", + "Epoch: 16. Loss: 0.05988980674686739. ACC 0.6769444997016113 \n", + "Epoch: 17. Loss: 0.059856029700540464. ACC 0.6769444997016113 \n", + "Epoch: 18. Loss: 0.0597873576028413. ACC 0.6797294609110802 \n", + "Epoch: 19. Loss: 0.059753285201093374. ACC 0.6805251641137856 \n", + "Epoch: 20. Loss: 0.05970206744679879. ACC 0.68191764471852 \n", + "Epoch: 21. Loss: 0.059668969036168314. ACC 0.6821165705191964 \n", + "Epoch: 22. Loss: 0.0596293099469116. ACC 0.683111199522578 \n", + "Epoch: 23. Loss: 0.059598487148423404. ACC 0.6839069027252834 \n", + "Epoch: 24. Loss: 0.059566287692508046. ACC 0.6851004575293416 \n", + "Epoch: 25. Loss: 0.059538417268468105. ACC 0.6854983091306942 \n", + "Epoch: 26. Loss: 0.059511203604141. ACC 0.6854983091306942 \n", + "Epoch: 27. Loss: 0.05948635654774816. ACC 0.6854983091306942 \n", + "Epoch: 28. Loss: 0.05946268650820034. ACC 0.6852993833300179 \n", + "Epoch: 29. Loss: 0.05944056500965496. ACC 0.6852993833300179 \n", + "Epoch: 30. Loss: 0.05941853083126204. ACC 0.6854983091306942 \n", + "Epoch: 31. Loss: 0.05939730088872513. ACC 0.6862940123333996 \n", + "Epoch: 32. Loss: 0.05937704791931644. ACC 0.687089715536105 \n", + "Epoch: 33. Loss: 0.059357956440140004. ACC 0.687089715536105 \n", + "Epoch: 34. Loss: 0.059339807809928743. ACC 0.6874875671374577 \n", + "Epoch: 35. Loss: 0.05932257820816715. ACC 0.6872886413367814 \n", + "Epoch: 36. Loss: 0.05930616868308223. ACC 0.6866918639347523 \n", + "Epoch: 37. Loss: 0.05929054039739249. ACC 0.6866918639347523 \n", + "Epoch: 38. Loss: 0.059275564869711264. ACC 0.6866918639347523 \n", + "Epoch: 39. Loss: 0.05926126111258041. ACC 0.686492938134076 \n", + " precision recall f1-score support\n", + "\n", + " 0 0.46 0.93 0.62 230\n", + " 1 0.83 0.22 0.35 319\n", + "\n", + " accuracy 0.52 549\n", + " macro avg 0.64 0.58 0.49 549\n", + "weighted avg 0.67 0.52 0.46 549\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "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Nbu0DnXVVVfp5MmT/u2dd94xu6QrVlVVpaysLK1YsaLVz3/0ox/pF7/4hVauXKn3339fsbGxys/PV21tbRdXemUu109Jmj59eovz+6c//akLK7xyW7du1b333qv33ntPmzZtUkNDg2644QZVVVX52yxcuFCvvPKK1qxZo61bt+rEiROaM2eOiVUHri39lKS77rqrxfn80Y9+ZFLFgevXr5+WLVumnTt3aseOHfryl7+smTNn6oMPPpAUHudRunw/pdA+j635+9//rl//+tcaM2ZMi/2mnlMDLYwfP9649957/T97PB6jT58+RkFBgYlVdaylS5caWVlZZpfRqSQZa9eu9f/s9XqNtLQ048c//rF/X3l5ueFwOIw//elPJlTYMb7YT8MwjPnz5xszZ840pZ7OUlpaakgytm7dahiG79xFRkYaa9as8bc5cOCAIckoLCw0q8wr9sV+GoZhTJkyxXjwwQfNK6oT9OjRw/if//mfsD2PzZr7aRjhdx4rKiqMoUOHGps2bWrRN7PPKVdqzlNfX6+dO3dq2rRp/n1Wq1XTpk1TYWGhiZV1vMOHD6tPnz4aNGiQvv71r6uoqMjskjrVsWPHVFxc3OLcOp1O5ebmht25laQtW7YoJSVFw4cP1z333KPTp0+bXdIVcblckqSePXtKknbu3KmGhoYW5zMzM1MZGRkhfT6/2M9mf/zjH5WUlKRRo0ZpyZIlqq6uNqO8K+bxeLRq1SpVVVUpLy8vbM/jF/vZLFzOoyTde++9mjFjRotzJ5n/381u80DLtigrK5PH41FqamqL/ampqTp48KBJVXW83NxcPffccxo+fLhOnjypH/zgB7r22mu1f/9+xcfHm11epyguLpakVs9t82fhYvr06ZozZ44GDhyoo0eP6pFHHtGNN96owsJCRUREmF1ewLxerx566CF96Utf0qhRoyT5zqfdbldiYmKLtqF8PlvrpyR97WtfU//+/dWnTx/t3btX3//+93Xo0CH95S9/MbHawOzbt095eXmqra1VXFyc1q5dq5EjR2rPnj1hdR4v1k8pPM5js1WrVmnXrl36+9//fsFnZv93k1DTDd14443+92PGjFFubq769++vP//5z1qwYIGJlaEjzJs3z/9+9OjRGjNmjAYPHqwtW7Zo6tSpJlbWPvfee6/2798fFuO+LuVi/fz2t7/tfz969Gj17t1bU6dO1dGjRzV48OCuLrNdhg8frj179sjlcunFF1/U/PnztXXrVrPL6nAX6+fIkSPD4jxK0vHjx/Xggw9q06ZNioqKMrucC3D76TxJSUmKiIi4YJR2SUmJ0tLSTKqq8yUmJmrYsGE6cuSI2aV0mubz193OrSQNGjRISUlJIXl+77vvPq1fv15vvvmm+vXr59+flpam+vp6lZeXt2gfqufzYv1sTW5uriSF1Pm02+0aMmSIxo0bp4KCAmVlZennP/952J3Hi/WzNaF4HiXf7aXS0lKNHTtWNptNNptNW7du1S9+8QvZbDalpqaaek4JNeex2+0aN26cNm/e7N/n9Xq1efPmFvdFw01lZaWOHj2q3r17m11Kpxk4cKDS0tJanFu32633338/rM+tJH322Wc6ffp0SJ1fwzB03333ae3atXrjjTc0cODAFp+PGzdOkZGRLc7noUOHVFRUFFLn83L9bM2ePXskKaTO5xd5vV7V1dWFzXm8mOZ+tiZUz+PUqVO1b98+7dmzx79dc801+vrXv+5/b+o57fShyCFm1apVhsPhMJ577jnjww8/NL797W8biYmJRnFxsdmldZjvfe97xpYtW4xjx44Z7777rjFt2jQjKSnJKC0tNbu0K1JRUWHs3r3b2L17tyHJ+OlPf2rs3r3b+PTTTw3DMIxly5YZiYmJxl//+ldj7969xsyZM42BAwcaNTU1JlcemEv1s6KiwvjXf/1Xo7Cw0Dh27Jjx+uuvG2PHjjWGDh1q1NbWml16m91zzz2G0+k0tmzZYpw8edK/VVdX+9t85zvfMTIyMow33njD2LFjh5GXl2fk5eWZWHXgLtfPI0eOGP/+7/9u7Nixwzh27Jjx17/+1Rg0aJAxefJkkytvu8WLFxtbt241jh07Zuzdu9dYvHixYbFYjNdee80wjPA4j4Zx6X6Gw3m8lC/O7DLznBJqWvHLX/7SyMjIMOx2uzF+/HjjvffeM7ukDjV37lyjd+/eht1uN/r27WvMnTvXOHLkiNllXbE333zTkHTBNn/+fMMwfNO6H3vsMSM1NdVwOBzG1KlTjUOHDplbdDtcqp/V1dXGDTfcYCQnJxuRkZFG//79jbvuuivkQnlr/ZNk/O53v/O3qampMb773e8aPXr0MGJiYozZs2cbJ0+eNK/odrhcP4uKiozJkycbPXv2NBwOhzFkyBDj4YcfNlwul7mFB+Bf/uVfjP79+xt2u91ITk42pk6d6g80hhEe59EwLt3PcDiPl/LFUGPmObUYhmF0/vUgAACAzsWYGgAAEBYINQAAICwQagAAQFgg1AAAgLBAqAEAAGGBUAMAAMICoQYAAIQFQg0AAAgLhBoAABAWCDUAACAsEGoAAEBYINQAAICw8P8BNIatgefEqT4AAAAASUVORK5CYII=\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# epochs, hidden, lr, batch, act, opt\n", + "exp = Expe( num_epochs, hidden_dim, learning_rate, batch_size, 'hardthan', 'SGD' )\n", + "exp.set_model( model_ffnn )\n", + "exp.set_scores( gold, pred )\n", + "experiments.append( exp )" + ], + "metadata": { + "id": "jMUbVLU0kxEI" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "### 5.5- Learning Rate" + ], + "metadata": { + "id": "T-MTCs64c9R-" + } + }, + { + "cell_type": "code", + "source": [ + "# Already optimized\n", + "batch_size = 10\n", + "hidden_dim = 10" + ], + "metadata": { + "id": "EGKtAcFfc9R_" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "----> learning_rate = 0.0001" + ], + "metadata": { + "id": "l7QZ17-fdJYY" + } + }, + { + "cell_type": "code", + "source": [ + "# To optimize\n", + "learning_rate = 0.0001" + ], + "metadata": { + "id": "jYkx9YVsc9R_" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Initialize the model\n", + "model_ffnn = FeedforwardNeuralNetModel( hidden_dim, output_dim, weights_matrix)\n", + "optimizer = torch.optim.SGD(model_ffnn.parameters(), lr=learning_rate)\n", + "model_ffnn = model_ffnn.to(device)\n", + "# Train the model\n", + "training( model_ffnn, train_loader, optimizer, num_epochs=num_epochs, plot=True )\n", + "# Evaluate on dev\n", + "gold, pred = evaluate( model_ffnn, dev_loader )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "lo6ootHAdJx1", + "outputId": "42de9b90-f4be-460e-943d-7755a1c734cf" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 0. Loss: 0.07342526102032841. ACC 0.5086532723294211 \n", + "Epoch: 1. Loss: 0.07310842124918286. ACC 0.5086532723294211 \n", + "Epoch: 2. Loss: 0.0728152275725722. ACC 0.5086532723294211 \n", + "Epoch: 3. Loss: 0.07254399489948568. ACC 0.5086532723294211 \n", + "Epoch: 4. Loss: 0.07229314763147124. ACC 0.5086532723294211 \n", + "Epoch: 5. Loss: 0.07206122276914365. ACC 0.5086532723294211 \n", + "Epoch: 6. Loss: 0.07184685393500949. ACC 0.5086532723294211 \n", + "Epoch: 7. Loss: 0.07164877362627857. ACC 0.5086532723294211 \n", + "Epoch: 8. Loss: 0.07146579816845555. ACC 0.5086532723294211 \n", + "Epoch: 9. Loss: 0.07129681940365198. ACC 0.5086532723294211 \n", + "Epoch: 10. Loss: 0.07114081563450647. ACC 0.5086532723294211 \n", + "Epoch: 11. Loss: 0.07099682093852316. ACC 0.5086532723294211 \n", + "Epoch: 12. Loss: 0.07086395204766788. ACC 0.5084543465287448 \n", + "Epoch: 13. Loss: 0.07074137500676052. ACC 0.5084543465287448 \n", + "Epoch: 14. Loss: 0.07062831854806023. ACC 0.5084543465287448 \n", + "Epoch: 15. Loss: 0.07052406504444937. ACC 0.5084543465287448 \n", + "Epoch: 16. Loss: 0.07042794754520809. ACC 0.5084543465287448 \n", + "Epoch: 17. Loss: 0.07033934800933601. ACC 0.5084543465287448 \n", + "Epoch: 18. Loss: 0.0702576943887544. ACC 0.5084543465287448 \n", + "Epoch: 19. Loss: 0.07018245079893465. ACC 0.5082554207280684 \n", + "Epoch: 20. Loss: 0.07011312482274976. ACC 0.5082554207280684 \n", + "Epoch: 21. Loss: 0.07004925739653713. ACC 0.5088521981300975 \n", + "Epoch: 22. Loss: 0.069990422644102. ACC 0.5088521981300975 \n", + "Epoch: 23. Loss: 0.06993622829170902. ACC 0.5088521981300975 \n", + "Epoch: 24. Loss: 0.06988631052218684. ACC 0.5088521981300975 \n", + "Epoch: 25. Loss: 0.06984033308566055. ACC 0.5088521981300975 \n", + "Epoch: 26. Loss: 0.06979798471474709. ACC 0.5088521981300975 \n", + "Epoch: 27. Loss: 0.06975897714445267. ACC 0.5090511239307738 \n", + "Epoch: 28. Loss: 0.06972304294235976. ACC 0.5090511239307738 \n", + "Epoch: 29. Loss: 0.06968993796300575. ACC 0.5086532723294211 \n", + "Epoch: 30. Loss: 0.06965943464873348. ACC 0.5088521981300975 \n", + "Epoch: 31. Loss: 0.06963132437735778. ACC 0.5088521981300975 \n", + "Epoch: 32. Loss: 0.06960541436751415. ACC 0.5088521981300975 \n", + "Epoch: 33. Loss: 0.06958152606612009. ACC 0.5084543465287448 \n", + "Epoch: 34. Loss: 0.06955949442510413. ACC 0.5080564949273921 \n", + "Epoch: 35. Loss: 0.0695391698459377. ACC 0.5080564949273921 \n", + "Epoch: 36. Loss: 0.06952041167019612. ACC 0.5082554207280684 \n", + "Epoch: 37. Loss: 0.06950309138092199. ACC 0.5078575691267158 \n", + "Epoch: 38. Loss: 0.06948709308875824. ACC 0.5080564949273921 \n", + "Epoch: 39. Loss: 0.06947230711736427. ACC 0.5080564949273921 \n", + " precision recall f1-score support\n", + "\n", + " 0 0.42 1.00 0.59 230\n", + " 1 1.00 0.00 0.01 319\n", + "\n", + " accuracy 0.42 549\n", + " macro avg 0.71 0.50 0.30 549\n", + "weighted avg 0.76 0.42 0.25 549\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAj4AAAGdCAYAAAASUnlxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAABW9klEQVR4nO3de1hUdf4H8PcMMAzXQeSOIHjFKygCYqaZJJZlrNYSWZqLXVx1LapV28radsPN7Kb+QkvU3c0FKbMSMxHzlnjj4i1FUREUZhCVGUS5zZzfH+jkxKAOCoeZeb+e5zzqOd9zzufb2X3m/XzPOd8jEQRBABEREZEVkIpdABEREVF7YfAhIiIiq8HgQ0RERFaDwYeIiIisBoMPERERWQ0GHyIiIrIaDD5ERERkNRh8iIiIyGrYil1AR6LT6VBWVgYXFxdIJBKxyyEiIqI7IAgCqqur4efnB6n01mM6DD43KSsrQ0BAgNhlEBERUSuUlpaiS5cut2zD4HMTFxcXAE3/4VxdXUWuhoiIiO6ERqNBQECA/nf8Vhh8bnLj9parqyuDDxERkZm5k8dU+HAzERERWQ0GHyIiIrIaDD5ERERkNVoVfJYuXYqgoCDI5XJERUVh3759t2yfkZGBkJAQyOVyDBgwABs3bjTYLpFIjC4LFy7Utxk/fjwCAwMhl8vh6+uLZ599FmVlZfrtxcXFRo+xZ8+e1nSRiIiILJDJwSc9PR1JSUmYP38+8vLyEBoaitjYWFRUVBhtv3v3biQkJCAxMRH5+fmIi4tDXFwcjhw5om9TXl5usKSmpkIikWDixIn6NqNGjcLatWtRWFiIb775BqdOncITTzzR7HxbtmwxOFZ4eLipXSQiIiILJREEQTBlh6ioKERERGDJkiUAmib9CwgIwKxZszB37txm7ePj41FTU4MNGzbo1w0dOhRhYWFISUkxeo64uDhUV1cjOzu7xTq+//57xMXFoa6uDnZ2diguLkZwcDDy8/MRFhZmSpf0NBoNFAoF1Go13+oiIiIyE6b8fps04lNfX4/c3FzExMT8dgCpFDExMcjJyTG6T05OjkF7AIiNjW2xvUqlQmZmJhITE1us49KlS/jqq68wbNgw2NnZGWwbP348vLy8MHz4cHz//fe37E9dXR00Go3BQkRERJbLpOBTWVkJrVYLb29vg/Xe3t5QKpVG91EqlSa1X716NVxcXDBhwoRm2+bMmQMnJyd07twZJSUl+O677/TbnJ2dsWjRImRkZCAzMxPDhw9HXFzcLcNPcnIyFAqFfuGszURERJatw73VlZqaikmTJkEulzfb9vrrryM/Px+bN2+GjY0NJk+ejBt36jw8PJCUlKS/FbdgwQI888wzBg9I/968efOgVqv1S2lpaZv1i4iIiMRn0szNHh4esLGxgUqlMlivUqng4+NjdB8fH587br9z504UFhYiPT29xfN7eHigV69e6NOnDwICArBnzx5ER0cbbR8VFYWsrKwW+2Nvbw97e/sWtxMREZFlMWnERyaTITw83OChY51Oh+zs7BbDR3R0dLOHlLOysoy2X7FiBcLDwxEaGnrbWnQ6HYCm53RaUlBQAF9f39sei4iIiKyDyd/qSkpKwpQpUzBkyBBERkbik08+QU1NDaZOnQoAmDx5Mvz9/ZGcnAwAmD17NkaOHIlFixZh3LhxSEtLw4EDB7B8+XKD42o0GmRkZGDRokXNzrl3717s378fw4cPR6dOnXDq1Cm89dZb6N69uz5ArV69GjKZDIMGDQIArFu3Dqmpqfjyyy9N7SIRERFZKJODT3x8PC5cuIC3334bSqUSYWFh2LRpk/4B5pKSEkilvw0kDRs2DGvWrMGbb76JN954Az179sT69evRv39/g+OmpaVBEAQkJCQ0O6ejoyPWrVuH+fPno6amBr6+vhg7dizefPNNg1tV7733Hs6ePQtbW1uEhIQgPT3d6Fw/7e2kqhqpvxRjeA8PjBvIESgiIiKxmDyPjyVrq3l8FmefxKKsEwgLcMP6Gffds+MSERFRG87jQ62TEBUImY0UBaVVyC+5LHY5REREVovBpx14ONvjsVA/AMDq3cXiFkNERGTFGHzayXPDggAAmYfLUaGpFbcYIiIiK8Xg004GdFFgSNdOaNAK+GpvidjlEBERWSUGn3b03H1BAICv9pagrlErbjFERERWiMGnHcX284GPqxyVV+qw8XC52OUQERFZHQafdmRnI8Wz0V0BACt/KQZnEiAiImpfDD7t7KmIAMhspTh0To380iqxyyEiIrIqDD7trLOzPcZff7V91S/F4hZDRERkZRh8RHDj1faNh8uh4qvtRERE7YbBRwT9/RWICOqERp2Ar/acFbscIiIiq8HgI5LnhgUDANbs46vtRERE7YXBRyRj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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# epochs, hidden, lr, batch, act, opt\n", + "exp = Expe( num_epochs, hidden_dim, learning_rate, batch_size, 'hardthan', 'SGD' )\n", + "exp.set_model( model_ffnn )\n", + "exp.set_scores( gold, pred )\n", + "experiments.append( exp )" + ], + "metadata": { + "id": "llwJEQ-Zk5H0" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "----> learning_rate = 0.1" + ], + "metadata": { + "id": "ZPEu2SxLraYC" + } + }, + { + "cell_type": "code", + "source": [ + "# To optimize\n", + "learning_rate = 0.1" + ], + "metadata": { + "id": "upzKKmgaraYL" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Initialize the model\n", + "model_ffnn = FeedforwardNeuralNetModel( hidden_dim, output_dim, weights_matrix)\n", + "optimizer = torch.optim.SGD(model_ffnn.parameters(), lr=learning_rate)\n", + "model_ffnn = model_ffnn.to(device)\n", + "# Train the model\n", + "training( model_ffnn, train_loader, optimizer, num_epochs=num_epochs, plot=True )\n", + "# Evaluate on dev\n", + "gold, pred = evaluate( model_ffnn, dev_loader )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "bfa1b7c8-26ac-44c2-c516-c8d45138e0a1", + "id": "eHqXWCv-raYN" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 0. Loss: 0.06908447540420554. ACC 0.5317286652078774 \n", + "Epoch: 1. Loss: 0.06696160580212206. ACC 0.5999602148398647 \n", + "Epoch: 2. Loss: 0.06447852052702258. ACC 0.6333797493534912 \n", + "Epoch: 3. Loss: 0.06289903144606876. ACC 0.6455142231947484 \n", + "Epoch: 4. Loss: 0.06208572018708532. ACC 0.6586433260393874 \n", + "Epoch: 5. Loss: 0.0615576500562543. ACC 0.6608315098468271 \n", + "Epoch: 6. Loss: 0.06123311275489197. ACC 0.6642132484583251 \n", + "Epoch: 7. Loss: 0.0609200120458362. ACC 0.6666003580664412 \n", + "Epoch: 8. Loss: 0.06075057267597283. ACC 0.6677939128704993 \n", + "Epoch: 9. Loss: 0.06053232903008151. ACC 0.6711756514819972 \n", + "Epoch: 10. Loss: 0.06042892793098975. ACC 0.6705788740799682 \n", + "Epoch: 11. Loss: 0.06027004342679596. ACC 0.6723692062860553 \n", + "Epoch: 12. Loss: 0.06020159977009312. ACC 0.672170280485379 \n", + "Epoch: 13. Loss: 0.06008046564297954. ACC 0.6745573900934951 \n", + "Epoch: 14. Loss: 0.06003037668351082. ACC 0.6749552416948478 \n", + "Epoch: 15. Loss: 0.059936986574008304. ACC 0.6765466481002586 \n", + "Epoch: 16. Loss: 0.05989567259919793. ACC 0.6767455739009349 \n", + "Epoch: 17. Loss: 0.05982401339225701. ACC 0.6781380545056693 \n", + "Epoch: 18. Loss: 0.05978677968559622. ACC 0.6793316093097275 \n", + "Epoch: 19. Loss: 0.05973194672047843. ACC 0.6809230157151382 \n", + "Epoch: 20. Loss: 0.05969731267508299. ACC 0.6815197931171673 \n", + "Epoch: 21. Loss: 0.059654400478852114. ACC 0.6827133479212254 \n", + "Epoch: 22. Loss: 0.05962251246817334. ACC 0.6829122737219018 \n", + "Epoch: 23. Loss: 0.0595879940453547. ACC 0.6851004575293416 \n", + "Epoch: 24. Loss: 0.05955895519479502. ACC 0.6851004575293416 \n", + "Epoch: 25. Loss: 0.059529007619433215. ACC 0.6856972349313706 \n", + "Epoch: 26. Loss: 0.05950137682337635. ACC 0.6854983091306942 \n", + "Epoch: 27. Loss: 0.05947490251393922. ACC 0.6856972349313706 \n", + "Epoch: 28. Loss: 0.059450449610600684. ACC 0.6854983091306942 \n", + "Epoch: 29. Loss: 0.05942711280927474. ACC 0.6854983091306942 \n", + "Epoch: 30. Loss: 0.05940536524183783. ACC 0.685896160732047 \n", + "Epoch: 31. Loss: 0.05938468856604739. ACC 0.6860950865327233 \n", + "Epoch: 32. Loss: 0.05936507136963556. ACC 0.6862940123333996 \n", + "Epoch: 33. Loss: 0.05934654593894561. ACC 0.6868907897354287 \n", + "Epoch: 34. Loss: 0.05932877917803849. ACC 0.6868907897354287 \n", + "Epoch: 35. Loss: 0.059312008681438634. ACC 0.6872886413367814 \n", + "Epoch: 36. Loss: 0.05929545766794589. ACC 0.687089715536105 \n", + "Epoch: 37. Loss: 0.05928091584794299. ACC 0.6868907897354287 \n", + "Epoch: 38. Loss: 0.05926603521697441. ACC 0.6866918639347523 \n", + "Epoch: 39. Loss: 0.05925195337361552. ACC 0.686492938134076 \n", + " precision recall f1-score support\n", + "\n", + " 0 0.46 0.93 0.62 230\n", + " 1 0.83 0.22 0.35 319\n", + "\n", + " accuracy 0.52 549\n", + " macro avg 0.64 0.58 0.49 549\n", + "weighted avg 0.67 0.52 0.46 549\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# epochs, hidden, lr, batch, act, opt\n", + "exp = Expe( num_epochs, hidden_dim, learning_rate, batch_size, 'hardthan', 'SGD' )\n", + "exp.set_model( model_ffnn )\n", + "exp.set_scores( gold, pred )\n", + "experiments.append( exp )" + ], + "metadata": { + "id": "pbVZURqdraYQ" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "----> learning_rate = 0.5" + ], + "metadata": { + "id": "8ofbW-LidnCo" + } + }, + { + "cell_type": "code", + "source": [ + "# To optimize\n", + "learning_rate = 0.5" + ], + "metadata": { + "id": "1bFV5uzXdiMU" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Initialize the model\n", + "model_ffnn = FeedforwardNeuralNetModel( hidden_dim, output_dim, weights_matrix)\n", + "optimizer = torch.optim.SGD(model_ffnn.parameters(), lr=learning_rate)\n", + "model_ffnn = model_ffnn.to(device)\n", + "# Train the model\n", + "training( model_ffnn, train_loader, optimizer, num_epochs=num_epochs, plot=True )\n", + "# Evaluate on dev\n", + "gold, pred = evaluate( model_ffnn, dev_loader )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "85969629-b556-43a2-ddc9-087233ddf18a", + "id": "SnipbtnodiMV" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 0. Loss: 0.06924024741242224. ACC 0.5374975134274915 \n", + "Epoch: 1. Loss: 0.06607861800579848. ACC 0.6015516212452755 \n", + "Epoch: 2. Loss: 0.06393702824120022. ACC 0.6299980107419932 \n", + "Epoch: 3. Loss: 0.0628489178894575. ACC 0.640740003978516 \n", + "Epoch: 4. Loss: 0.06203776908034664. ACC 0.6524766262184205 \n", + "Epoch: 5. Loss: 0.061449412870814984. ACC 0.659637955042769 \n", + "Epoch: 6. Loss: 0.060906915795573044. ACC 0.6648100258603541 \n", + "Epoch: 7. Loss: 0.060446302696798675. ACC 0.66938531927591 \n", + "Epoch: 8. Loss: 0.05996372725467025. ACC 0.67157350308335 \n", + "Epoch: 9. Loss: 0.05948941482804228. ACC 0.6741595384921424 \n", + "Epoch: 10. Loss: 0.05903786109282052. ACC 0.6803262383131092 \n", + "Epoch: 11. Loss: 0.05859775083580097. ACC 0.683111199522578 \n", + "Epoch: 12. Loss: 0.05821072372309797. ACC 0.6874875671374577 \n", + "Epoch: 13. Loss: 0.05781896588744002. ACC 0.6892778993435449 \n", + "Epoch: 14. Loss: 0.05745339588365333. ACC 0.6940521185597772 \n", + "Epoch: 15. Loss: 0.05710244000622025. ACC 0.6978317087726278 \n", + "Epoch: 16. Loss: 0.056795576774436106. ACC 0.7012134473841257 \n", + "Epoch: 17. Loss: 0.056448665490699663. ACC 0.7051919633976527 \n", + "Epoch: 18. Loss: 0.05614935036845726. ACC 0.7071812214044162 \n", + "Epoch: 19. Loss: 0.055883554656889274. ACC 0.7083747762084742 \n", + "Epoch: 20. Loss: 0.05559804214500684. ACC 0.7139446986274119 \n", + "Epoch: 21. Loss: 0.0553690721292915. ACC 0.7175253630395863 \n", + "Epoch: 22. Loss: 0.055126804144808854. ACC 0.7211060274517604 \n", + "Epoch: 23. Loss: 0.05490127450397291. ACC 0.7219017306544658 \n", + "Epoch: 24. Loss: 0.05464359616958196. ACC 0.7219017306544658 \n", + "Epoch: 25. Loss: 0.054406849612221225. ACC 0.7240899144619057 \n", + "Epoch: 26. Loss: 0.054180209768181276. ACC 0.7244877660632584 \n", + "Epoch: 27. Loss: 0.053959598571732. ACC 0.7270738014720509 \n", + "Epoch: 28. Loss: 0.05371726429827625. ACC 0.7264770240700219 \n", + "Epoch: 29. Loss: 0.0534954625503287. ACC 0.7290630594788144 \n", + "Epoch: 30. Loss: 0.05322559365510988. ACC 0.7298587626815198 \n", + "Epoch: 31. Loss: 0.05299423653087726. ACC 0.7310523174855779 \n", + "Epoch: 32. Loss: 0.052827280298577924. ACC 0.7332405012930177 \n", + "Epoch: 33. Loss: 0.0526219813124617. ACC 0.7338372786950468 \n", + "Epoch: 34. Loss: 0.05242801570135864. ACC 0.736224388303163 \n", + "Epoch: 35. Loss: 0.052251237265058696. ACC 0.7380147205092501 \n", + "Epoch: 36. Loss: 0.05208190936785653. ACC 0.7404018301173663 \n", + "Epoch: 37. Loss: 0.05197478379511041. ACC 0.7415953849214243 \n", + "Epoch: 38. Loss: 0.051808677514433646. ACC 0.7427889397254824 \n", + "Epoch: 39. Loss: 0.051666518595860356. ACC 0.7423910881241297 \n", + " precision recall f1-score support\n", + "\n", + " 0 0.45 0.94 0.61 230\n", + " 1 0.81 0.18 0.30 319\n", + "\n", + " accuracy 0.50 549\n", + " macro avg 0.63 0.56 0.46 549\n", + "weighted avg 0.66 0.50 0.43 549\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "----> learning_rate = 10" + ], + "metadata": { + "id": "QJJ__xWZdu7L" + } + }, + { + "cell_type": "code", + "source": [ + "# To optimize\n", + "learning_rate = 10" + ], + "metadata": { + "id": "oMu4WtyOdu7M" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# Initialize the model\n", + "model_ffnn = FeedforwardNeuralNetModel( hidden_dim, output_dim, weights_matrix)\n", + "optimizer = torch.optim.SGD(model_ffnn.parameters(), lr=learning_rate)\n", + "model_ffnn = model_ffnn.to(device)\n", + "# Train the model\n", + "training( model_ffnn, train_loader, optimizer, num_epochs=num_epochs, plot=True )\n", + "# Evaluate on dev\n", + "gold, pred = evaluate( model_ffnn, dev_loader )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "outputId": "48f0e9ea-e9e4-4be2-9852-7cae9953ee05", + "id": "4aMJb_Pldu7M" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 0. Loss: 3.0166748961682393. ACC 0.4981102048935747 \n", + "Epoch: 1. Loss: 3.0057952245732578. ACC 0.4973145016908693 \n", + "Epoch: 2. Loss: 3.012421615026048. ACC 0.4993037596976328 \n", + "Epoch: 3. Loss: 3.1523107549222678. ACC 0.4859757310523175 \n", + "Epoch: 4. Loss: 2.944609932173121. ACC 0.5042769047145415 \n", + "Epoch: 5. Loss: 3.005021988574852. ACC 0.5008951661030435 \n", + "Epoch: 6. Loss: 2.9698043898035524. ACC 0.4989059080962801 \n", + "Epoch: 7. Loss: 3.025354045118469. ACC 0.4941316888800477 \n", + "Epoch: 8. Loss: 2.87215760845253. ACC 0.5058683111199522 \n", + "Epoch: 9. Loss: 2.876202580099768. ACC 0.507459717525363 \n", + "Epoch: 10. Loss: 2.969862364900973. ACC 0.5000994629003381 \n", + "Epoch: 11. Loss: 3.0069589921131934. ACC 0.49830913069425103 \n", + "Epoch: 12. Loss: 2.909736330463655. ACC 0.5064650885219814 \n", + "Epoch: 13. Loss: 2.9427568858082926. ACC 0.5002983887010145 \n", + "Epoch: 14. Loss: 3.0380569062556426. ACC 0.4941316888800477 \n", + "Epoch: 15. Loss: 2.9768166160616696. ACC 0.49711557589019295 \n", + "Epoch: 16. Loss: 2.845160269976753. ACC 0.51143823353889 \n", + "Epoch: 17. Loss: 3.0774262677088915. ACC 0.4939327630793714 \n", + "Epoch: 18. Loss: 3.0652555672150616. ACC 0.4933359856773423 \n", + "Epoch: 19. Loss: 2.939976218220062. ACC 0.5048736821165705 \n", + "Epoch: 20. Loss: 3.1195968528711133. ACC 0.4893574696638154 \n", + "Epoch: 21. Loss: 3.095655088150077. ACC 0.49035209866719714 \n", + "Epoch: 22. Loss: 2.9785817000983084. ACC 0.502287646707778 \n", + "Epoch: 23. Loss: 3.053891602023971. ACC 0.4951263178834295 \n", + "Epoch: 24. Loss: 2.987405612605311. ACC 0.5014919435050726 \n", + "Epoch: 25. Loss: 2.9875548428051606. ACC 0.5020887209071017 \n", + "Epoch: 26. Loss: 3.101939969255361. ACC 0.49114780186990253 \n", + "Epoch: 27. Loss: 3.0973046768819072. ACC 0.49094887606922616 \n", + "Epoch: 28. Loss: 3.112040183310341. ACC 0.49015317286652077 \n", + "Epoch: 29. Loss: 3.0269929093064385. ACC 0.49751342749154565 \n", + "Epoch: 30. Loss: 2.99616632525338. ACC 0.5004973145016909 \n", + "Epoch: 31. Loss: 3.078126731510781. ACC 0.493733837278695 \n", + "Epoch: 32. Loss: 3.05708611291328. ACC 0.4951263178834295 \n", + "Epoch: 33. Loss: 3.0767168896986044. ACC 0.4927392082753133 \n", + "Epoch: 34. Loss: 2.965223568451435. ACC 0.5038790531131888 \n", + "Epoch: 35. Loss: 3.0015626069753383. ACC 0.4989059080962801 \n", + "Epoch: 36. Loss: 3.019604488670743. ACC 0.4989059080962801 \n", + "Epoch: 37. Loss: 3.039547343388784. ACC 0.4973145016908693 \n", + "Epoch: 38. Loss: 3.0278841809745525. ACC 0.497712353292222 \n", + "Epoch: 39. Loss: 3.052734056582905. ACC 0.4955241694847822 \n", + " precision recall f1-score support\n", + "\n", + " 0 0.00 0.00 0.00 230\n", + " 1 0.58 1.00 0.73 319\n", + "\n", + " accuracy 0.58 549\n", + " macro avg 0.29 0.50 0.37 549\n", + "weighted avg 0.34 0.58 0.43 549\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### 5.6- Optimizer" + ], + "metadata": { + "id": "enMCV7JAeU1k" + } + }, + { + "cell_type": "code", + "source": [ + "for expe in experiments:\n", + " print(expe.to_string())" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-ulQCyIepUaL", + "outputId": "9ef368ec-e490-4881-d951-a567ab20fe5f" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "40 10 0.1 10 hardthan SGD\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# Already optimized\n", + "num_epochs = 40\n", + "batch_size = 10\n", + "hidden_dim = 10\n", + "learning_rate = 0.1\n", + "# activation = hard than\n" + ], + "metadata": { + "id": "t38eX3rheWnZ" + }, + "execution_count": null, + "outputs": [] + }, + { + "cell_type": "markdown", + "source": [ + "-------> Adam" + ], + "metadata": { + "id": "NrJ3w13Op8Lr" + } + }, + { + "cell_type": "code", + "source": [ + "# Initialize the model\n", + "model_ffnn = FeedforwardNeuralNetModel( hidden_dim, output_dim, weights_matrix)\n", + "\n", + "# --> Adam\n", + "optimizer = torch.optim.Adam(model_ffnn.parameters(), lr=learning_rate)\n", + "\n", + "model_ffnn = model_ffnn.to(device)\n", + "# Train the model\n", + "training( model_ffnn, train_loader, optimizer, num_epochs=num_epochs, plot=True )\n", + "# Evaluate on dev\n", + "gold, pred = evaluate( model_ffnn, dev_loader )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "JBnYT4fJeswN", + "outputId": "46964c78-fad0-4420-a5f0-c301f8d3d7bc" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 0. Loss: 0.07316462491363471. ACC 0.55719116769445 \n", + "Epoch: 1. Loss: 0.06831659184835862. ACC 0.6194549433061468 \n", + "Epoch: 2. Loss: 0.06881633621455424. ACC 0.6220409787149394 \n", + "Epoch: 3. Loss: 0.06739485650359457. ACC 0.6395464491744579 \n", + "Epoch: 4. Loss: 0.06657098044285795. ACC 0.6471056296001592 \n", + "Epoch: 5. Loss: 0.06574313069269674. ACC 0.658444400238711 \n", + "Epoch: 6. Loss: 0.06506116019818663. ACC 0.6558583648299184 \n", + "Epoch: 7. Loss: 0.06504748362076314. ACC 0.6608315098468271 \n", + "Epoch: 8. Loss: 0.06595309020149938. ACC 0.6646111000596777 \n", + "Epoch: 9. Loss: 0.06670350689157141. ACC 0.6526755520190969 \n", + "Epoch: 10. Loss: 0.06476127602469739. ACC 0.6775412771036403 \n", + "Epoch: 11. Loss: 0.06408558086654598. ACC 0.6707777998806446 \n", + "Epoch: 12. Loss: 0.06455305347047555. ACC 0.6662025064650885 \n", + "Epoch: 13. Loss: 0.06423317511927804. ACC 0.6795305351104038 \n", + "Epoch: 14. Loss: 0.06340794157372427. ACC 0.6837079769246072 \n", + "Epoch: 15. Loss: 0.06377620607027601. ACC 0.6851004575293416 \n", + "Epoch: 16. Loss: 0.06107017450643767. ACC 0.700218818380744 \n", + "Epoch: 17. Loss: 0.06120369321627197. ACC 0.6998209667793913 \n", + "Epoch: 18. Loss: 0.06149114301694609. ACC 0.6966381539685698 \n", + "Epoch: 19. Loss: 0.05919233745292662. ACC 0.7226974338571712 \n", + "Epoch: 20. Loss: 0.05976915723948586. ACC 0.7133479212253829 \n", + "Epoch: 21. Loss: 0.0598130849971315. ACC 0.7147404018301173 \n", + "Epoch: 22. Loss: 0.05934584585559612. ACC 0.7161328824348518 \n", + "Epoch: 23. Loss: 0.0584295944849658. ACC 0.7171275114382335 \n", + "Epoch: 24. Loss: 0.05938428418196905. ACC 0.7141436244280883 \n", + "Epoch: 25. Loss: 0.059241275623016856. ACC 0.7179232146409389 \n", + "Epoch: 26. Loss: 0.059003945298512175. ACC 0.7181221404416153 \n", + "Epoch: 27. Loss: 0.05812445094707782. ACC 0.7278695046747563 \n", + "Epoch: 28. Loss: 0.05768636263119954. ACC 0.7288641336781381 \n", + "Epoch: 29. Loss: 0.05698663653609101. ACC 0.733439427093694 \n", + "Epoch: 30. Loss: 0.05744716888047223. ACC 0.7332405012930177 \n", + "Epoch: 31. Loss: 0.05801670252832191. ACC 0.7280684304754327 \n", + "Epoch: 32. Loss: 0.05870871224592736. ACC 0.7262780982693455 \n", + "Epoch: 33. Loss: 0.0567985563152693. ACC 0.7300576884821961 \n", + "Epoch: 34. Loss: 0.05623617759543194. ACC 0.7390093495126318 \n", + "Epoch: 35. Loss: 0.05494511906618576. ACC 0.7429878655261587 \n", + "Epoch: 36. Loss: 0.055823345485017196. ACC 0.7443803461308932 \n", + "Epoch: 37. Loss: 0.05498916115400591. ACC 0.747165307340362 \n", + "Epoch: 38. Loss: 0.05641301055495322. ACC 0.7380147205092501 \n", + "Epoch: 39. Loss: 0.0562217034946409. ACC 0.7433857171275114 \n", + " precision recall f1-score support\n", + "\n", + " 0 0.53 0.75 0.62 230\n", + " 1 0.74 0.52 0.61 319\n", + "\n", + " accuracy 0.62 549\n", + " macro avg 0.64 0.64 0.62 549\n", + "weighted avg 0.65 0.62 0.62 549\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "------> RMSProp" + ], + "metadata": { + "id": "XMkYb3UdqAnY" + } + }, + { + "cell_type": "code", + "source": [ + "# Initialize the model\n", + "model_ffnn = FeedforwardNeuralNetModel( hidden_dim, output_dim, weights_matrix)\n", + "\n", + "# --> RMSprop\n", + "optimizer = torch.optim.RMSprop(model_ffnn.parameters(), lr=learning_rate)\n", + "\n", + "model_ffnn = model_ffnn.to(device)\n", + "# Train the model\n", + "training( model_ffnn, train_loader, optimizer, num_epochs=num_epochs, plot=True )\n", + "# Evaluate on dev\n", + "gold, pred = evaluate( model_ffnn, dev_loader )" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "5bsQDKcMfC2u", + "outputId": "41ed0ef8-8a90-47ee-92e1-626f3cb9c22a" + }, + "execution_count": null, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Epoch: 0. Loss: 0.09518847184269429. ACC 0.5261587427889397 \n", + "Epoch: 1. Loss: 0.08241781907466242. ACC 0.5653471255221802 \n", + "Epoch: 2. Loss: 0.07882078389465062. ACC 0.5770837477620847 \n", + "Epoch: 3. Loss: 0.07559202145173721. ACC 0.5973741794310722 \n", + "Epoch: 4. Loss: 0.07301282952942573. ACC 0.6170678336980306 \n", + "Epoch: 5. Loss: 0.0723440936404003. ACC 0.6266162721304953 \n", + "Epoch: 6. Loss: 0.07065994856145098. ACC 0.6391485975731053 \n", + "Epoch: 7. Loss: 0.07046600024215692. ACC 0.6477024070021882 \n", + "Epoch: 8. Loss: 0.06900936739805656. ACC 0.645912074796101 \n", + "Epoch: 9. Loss: 0.06822866038961203. ACC 0.6642132484583251 \n", + "Epoch: 10. Loss: 0.06619252894101144. ACC 0.6713745772826736 \n", + "Epoch: 11. Loss: 0.06547287488158. ACC 0.6799283867117565 \n", + "Epoch: 12. Loss: 0.06568151244959254. ACC 0.6749552416948478 \n", + "Epoch: 13. Loss: 0.06457823484406833. ACC 0.6866918639347523 \n", + "Epoch: 14. Loss: 0.06335515739229106. ACC 0.6930574895563955 \n", + "Epoch: 15. Loss: 0.06263002634392312. ACC 0.6984284861746568 \n", + "Epoch: 16. Loss: 0.06119087669699762. ACC 0.7024070021881839 \n", + "Epoch: 17. Loss: 0.06114435013622988. ACC 0.7127511438233539 \n", + "Epoch: 18. Loss: 0.06057191168233939. ACC 0.7121543664213248 \n", + "Epoch: 19. Loss: 0.060274264420065324. ACC 0.7131489954247066 \n", + "Epoch: 20. Loss: 0.05969845127260232. ACC 0.7215038790531132 \n", + "Epoch: 21. Loss: 0.058367405407633154. ACC 0.7282673562761091 \n", + "Epoch: 22. Loss: 0.056989349970256495. ACC 0.7366222399045156 \n", + "Epoch: 23. Loss: 0.05708779348088278. ACC 0.7360254625024866 \n", + "Epoch: 24. Loss: 0.05732187343439336. ACC 0.7336383528943704 \n", + "Epoch: 25. Loss: 0.056756166072448586. ACC 0.7380147205092501 \n", + "Epoch: 26. Loss: 0.05505982866895728. ACC 0.7447781977322459 \n", + "Epoch: 27. Loss: 0.05449623294116869. ACC 0.7583051521782375 \n", + "Epoch: 28. Loss: 0.05402209134581598. ACC 0.7571115973741794 \n", + "Epoch: 29. Loss: 0.05388123757273154. ACC 0.7579073005768848 \n", + "Epoch: 30. Loss: 0.0545144537888039. ACC 0.7577083747762084 \n", + "Epoch: 31. Loss: 0.05442591659207455. ACC 0.7519395265565944 \n", + "Epoch: 32. Loss: 0.0542254322624382. ACC 0.7638750745971753 \n", + "Epoch: 33. Loss: 0.053165749984089176. ACC 0.764869703600557 \n", + "Epoch: 34. Loss: 0.05310859738363526. ACC 0.7658643326039387 \n", + "Epoch: 35. Loss: 0.05169956749947995. ACC 0.774020290431669 \n", + "Epoch: 36. Loss: 0.051527427116296674. ACC 0.7785955838472249 \n", + "Epoch: 37. Loss: 0.05055068430913379. ACC 0.7801869902526357 \n", + "Epoch: 38. Loss: 0.05061442217349959. ACC 0.7787945096479013 \n", + "Epoch: 39. Loss: 0.05056860546690938. ACC 0.7744181420330217 \n", + " precision recall f1-score support\n", + "\n", + " 0 0.47 0.87 0.61 230\n", + " 1 0.76 0.30 0.43 319\n", + "\n", + " accuracy 0.54 549\n", + " macro avg 0.61 0.58 0.52 549\n", + "weighted avg 0.64 0.54 0.51 549\n", + "\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "<Figure size 640x480 with 1 Axes>" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### 5.7- [Optional] Additional exercise\n", + "\n", + "Modify your model to test a variation on the architecture. Here you don't have to tune all your model again, just try for example when keeping the best values found previously for the hyper-parameters:\n", + "\n", + "* Try with 1 additional hidden layer" + ], + "metadata": { + "id": "VwGKy1zH0mYT" + } + } + ] +} \ No newline at end of file