{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Import necessary dependencies and settings" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import re\n", "import nltk\n", "import matplotlib.pyplot as plt\n", "\n", "pd.options.display.max_colwidth = 200\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Sample corpus of text documents" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DocumentCategory
0The sky is blue and beautiful.weather
1Love this blue and beautiful sky!weather
2The quick brown fox jumps over the lazy dog.animals
3A king's breakfast has sausages, ham, bacon, eggs, toast and beansfood
4I love green eggs, ham, sausages and bacon!food
5The brown fox is quick and the blue dog is lazy!animals
6The sky is very blue and the sky is very beautiful todayweather
7The dog is lazy but the brown fox is quick!animals
\n", "
" ], "text/plain": [ " Document Category\n", "0 The sky is blue and beautiful. weather\n", "1 Love this blue and beautiful sky! weather\n", "2 The quick brown fox jumps over the lazy dog. animals\n", "3 A king's breakfast has sausages, ham, bacon, eggs, toast and beans food\n", "4 I love green eggs, ham, sausages and bacon! food\n", "5 The brown fox is quick and the blue dog is lazy! animals\n", "6 The sky is very blue and the sky is very beautiful today weather\n", "7 The dog is lazy but the brown fox is quick! animals" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "corpus = ['The sky is blue and beautiful.',\n", " 'Love this blue and beautiful sky!',\n", " 'The quick brown fox jumps over the lazy dog.',\n", " \"A king's breakfast has sausages, ham, bacon, eggs, toast and beans\",\n", " 'I love green eggs, ham, sausages and bacon!',\n", " 'The brown fox is quick and the blue dog is lazy!',\n", " 'The sky is very blue and the sky is very beautiful today',\n", " 'The dog is lazy but the brown fox is quick!' \n", "]\n", "labels = ['weather', 'weather', 'animals', 'food', 'food', 'animals', 'weather', 'animals']\n", "\n", "corpus = np.array(corpus)\n", "corpus_df = pd.DataFrame({'Document': corpus, \n", " 'Category': labels})\n", "corpus_df = corpus_df[['Document', 'Category']]\n", "corpus_df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Simple text pre-processing" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "wpt = nltk.WordPunctTokenizer()\n", "stop_words = nltk.corpus.stopwords.words('english')\n", "\n", "def normalize_document(doc):\n", " # lower case and remove special characters\\whitespaces\n", " doc = re.sub(r'[^a-zA-Z\\s]', '', doc, re.I|re.A)\n", " doc = doc.lower()\n", " doc = doc.strip()\n", " # tokenize document\n", " tokens = wpt.tokenize(doc)\n", " # filter stopwords out of document\n", " filtered_tokens = [token for token in tokens if token not in stop_words]\n", " # re-create document from filtered tokens\n", " doc = ' '.join(filtered_tokens)\n", " return doc\n", "\n", "normalize_corpus = np.vectorize(normalize_document)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array(['sky blue beautiful', 'love blue beautiful sky',\n", " 'quick brown fox jumps lazy dog',\n", " 'kings breakfast sausages ham bacon eggs toast beans',\n", " 'love green eggs ham sausages bacon',\n", " 'brown fox quick blue dog lazy', 'sky blue sky beautiful today',\n", " 'dog lazy brown fox quick'],\n", " dtype=' 2]\n", "\n", "print('Total lines:', len(bible))\n", "print('\\nSample line:', bible[10])\n", "print('\\nProcessed line:', norm_bible[10])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Implementing a word2vec model using a CBOW (Continuous Bag of Words) neural network architecture" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build Vocabulary" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Vocabulary Size: 12425\n", "Vocabulary Sample: [('base', 2338), ('feller', 10771), ('sanctuary', 455), ('plunge', 10322), ('azariah', 1120), ('enlightened', 4438), ('horns', 838), ('kareah', 2920), ('nursing', 5943), ('baken', 3492)]\n" ] } ], "source": [ "from keras.preprocessing import text\n", "from keras.utils import np_utils\n", "from keras.preprocessing import sequence\n", "\n", "tokenizer = text.Tokenizer()\n", "tokenizer.fit_on_texts(norm_bible)\n", "word2id = tokenizer.word_index\n", "\n", "word2id['PAD'] = 0\n", "id2word = {v:k for k, v in word2id.items()}\n", "wids = [[word2id[w] for w in text.text_to_word_sequence(doc)] for doc in norm_bible]\n", "\n", "vocab_size = len(word2id)\n", "embed_size = 100\n", "window_size = 2\n", "\n", "print('Vocabulary Size:', vocab_size)\n", "print('Vocabulary Sample:', list(word2id.items())[:10])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build (context_words, target_word) pair generator" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def generate_context_word_pairs(corpus, window_size, vocab_size):\n", " context_length = window_size*2\n", " for words in corpus:\n", " sentence_length = len(words)\n", " for index, word in enumerate(words):\n", " context_words = []\n", " label_word = [] \n", " start = index - window_size\n", " end = index + window_size + 1\n", " \n", " context_words.append([words[i] \n", " for i in range(start, end) \n", " if 0 <= i < sentence_length \n", " and i != index])\n", " label_word.append(word)\n", "\n", " x = sequence.pad_sequences(context_words, maxlen=context_length)\n", " y = np_utils.to_categorical(label_word, vocab_size)\n", " yield (x, y)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Context (X): ['old', 'testament', 'james', 'bible'] -> Target (Y): king\n", "Context (X): ['first', 'book', 'called', 'genesis'] -> Target (Y): moses\n", "Context (X): ['beginning', 'god', 'heaven', 'earth'] -> Target (Y): created\n", "Context (X): ['earth', 'without', 'void', 'darkness'] -> Target (Y): form\n", "Context (X): ['without', 'form', 'darkness', 'upon'] -> Target (Y): void\n", "Context (X): ['form', 'void', 'upon', 'face'] -> Target (Y): darkness\n", "Context (X): ['void', 'darkness', 'face', 'deep'] -> Target (Y): upon\n", "Context (X): ['spirit', 'god', 'upon', 'face'] -> Target (Y): moved\n", "Context (X): ['god', 'moved', 'face', 'waters'] -> Target (Y): upon\n", "Context (X): ['god', 'said', 'light', 'light'] -> Target (Y): let\n", "Context (X): ['god', 'saw', 'good', 'god'] -> Target (Y): light\n" ] } ], "source": [ "i = 0\n", "for x, y in generate_context_word_pairs(corpus=wids, window_size=window_size, vocab_size=vocab_size):\n", " if 0 not in x[0]:\n", " print('Context (X):', [id2word[w] for w in x[0]], '-> Target (Y):', id2word[np.argwhere(y[0])[0][0]])\n", " \n", " if i == 10:\n", " break\n", " i += 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build CBOW Deep Network Model" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "_________________________________________________________________\n", "Layer (type) Output Shape Param # \n", "=================================================================\n", "embedding_1 (Embedding) (None, 4, 100) 1242500 \n", "_________________________________________________________________\n", "lambda_1 (Lambda) (None, 100) 0 \n", "_________________________________________________________________\n", "dense_1 (Dense) (None, 12425) 1254925 \n", "=================================================================\n", "Total params: 2,497,425\n", "Trainable params: 2,497,425\n", "Non-trainable params: 0\n", "_________________________________________________________________\n", "None\n" ] } ], "source": [ "import keras.backend as K\n", "from keras.models import Sequential\n", "from keras.layers import Dense, Embedding, Lambda\n", "\n", "cbow = Sequential()\n", "cbow.add(Embedding(input_dim=vocab_size, output_dim=embed_size, input_length=window_size*2))\n", "cbow.add(Lambda(lambda x: K.mean(x, axis=1), output_shape=(embed_size,)))\n", "cbow.add(Dense(vocab_size, activation='softmax'))\n", "\n", "cbow.compile(loss='categorical_crossentropy', optimizer='rmsprop')\n", "print(cbow.summary())" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "G\n", "\n", "\n", "1879610447800\n", "\n", "InputLayer\n", "\n", "input:\n", "\n", "output:\n", "\n", "(None, 4)\n", "\n", "(None, 4)\n", "\n", "\n", "1879610447352\n", "\n", "Embedding\n", "\n", "input:\n", "\n", "output:\n", "\n", "(None, 4)\n", "\n", "(None, 4, 100)\n", "\n", "\n", "1879610447800->1879610447352\n", "\n", "\n", "\n", "\n", "1879610447688\n", "\n", "Lambda\n", "\n", "input:\n", "\n", "output:\n", "\n", "(None, 4, 100)\n", "\n", "(None, 100)\n", "\n", "\n", "1879610447352->1879610447688\n", "\n", "\n", "\n", "\n", "1879610448584\n", "\n", "Dense\n", "\n", "input:\n", "\n", "output:\n", "\n", "(None, 100)\n", "\n", "(None, 12425)\n", "\n", "\n", "1879610447688->1879610448584\n", "\n", "\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import SVG\n", "from keras.utils.vis_utils import model_to_dot\n", "\n", "SVG(model_to_dot(cbow, show_shapes=True, show_layer_names=False, \n", " rankdir='TB').create(prog='dot', format='svg'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Train model for 5 epochs" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Processed 100000 (context, word) pairs\n", "Processed 200000 (context, word) pairs\n", "Processed 300000 (context, word) pairs\n", "Epoch: 1 \tLoss: 4257900.60084\n", "\n", "Processed 100000 (context, word) pairs\n", "Processed 200000 (context, word) pairs\n", "Processed 300000 (context, word) pairs\n", "Epoch: 2 \tLoss: 4256209.59646\n", "\n", "Processed 100000 (context, word) pairs\n", "Processed 200000 (context, word) pairs\n", "Processed 300000 (context, word) pairs\n", "Epoch: 3 \tLoss: 4247990.90456\n", "\n", "Processed 100000 (context, word) pairs\n", "Processed 200000 (context, word) pairs\n", "Processed 300000 (context, word) pairs\n", "Epoch: 4 \tLoss: 4225663.18927\n", "\n", "Processed 100000 (context, word) pairs\n", "Processed 200000 (context, word) pairs\n", "Processed 300000 (context, word) pairs\n", "Epoch: 5 \tLoss: 4104501.48929\n", "\n" ] } ], "source": [ "for epoch in range(1, 6):\n", " loss = 0.\n", " i = 0\n", " for x, y in generate_context_word_pairs(corpus=wids, window_size=window_size, vocab_size=vocab_size):\n", " i += 1\n", " loss += cbow.train_on_batch(x, y)\n", " if i % 100000 == 0:\n", " print('Processed {} (context, word) pairs'.format(i))\n", "\n", " print('Epoch:', epoch, '\\tLoss:', loss)\n", " print()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Get word embeddings" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(12424, 100)\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123456789...90919293949596979899
shall-1.183386-2.8662141.0464310.943265-1.021784-0.0470692.108584-0.458692-1.6988810.905800...0.6557860.7038280.821803-0.093732-2.4745362.3095050.713962-0.1751760.2627000.818652
unto-1.725262-1.7659721.4119710.9177130.7938320.3106311.541964-0.082523-1.3468110.095824...1.682762-0.8722931.9085970.977152-0.8350051.1286180.8340681.852117-2.522386-0.053387
lord1.694633-0.650949-0.0957960.9500020.8138371.5382061.125482-1.655581-1.3526730.409504...1.553925-0.8192611.086127-1.545129-0.0352511.8955982.378903-1.6328351.3751050.599096
thou-1.590623-0.8019681.6590411.314925-0.4558221.733872-0.233771-0.6389220.1047440.490223...0.652781-0.362778-0.1903550.040719-1.9881842.3300421.441790-1.771272-1.738142-3.210077
thy0.386488-0.8346050.5859850.801969-0.1651320.9999171.224088-0.317555-0.671106-1.073181...1.267184-0.5646600.089618-0.979835-0.2156042.1895680.529003-1.682130-0.6324600.578122
\n", "

5 rows × 100 columns

\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 \\\n", "shall -1.183386 -2.866214 1.046431 0.943265 -1.021784 -0.047069 2.108584 \n", "unto -1.725262 -1.765972 1.411971 0.917713 0.793832 0.310631 1.541964 \n", "lord 1.694633 -0.650949 -0.095796 0.950002 0.813837 1.538206 1.125482 \n", "thou -1.590623 -0.801968 1.659041 1.314925 -0.455822 1.733872 -0.233771 \n", "thy 0.386488 -0.834605 0.585985 0.801969 -0.165132 0.999917 1.224088 \n", "\n", " 7 8 9 ... 90 91 92 \\\n", "shall -0.458692 -1.698881 0.905800 ... 0.655786 0.703828 0.821803 \n", "unto -0.082523 -1.346811 0.095824 ... 1.682762 -0.872293 1.908597 \n", "lord -1.655581 -1.352673 0.409504 ... 1.553925 -0.819261 1.086127 \n", "thou -0.638922 0.104744 0.490223 ... 0.652781 -0.362778 -0.190355 \n", "thy -0.317555 -0.671106 -1.073181 ... 1.267184 -0.564660 0.089618 \n", "\n", " 93 94 95 96 97 98 99 \n", "shall -0.093732 -2.474536 2.309505 0.713962 -0.175176 0.262700 0.818652 \n", "unto 0.977152 -0.835005 1.128618 0.834068 1.852117 -2.522386 -0.053387 \n", "lord -1.545129 -0.035251 1.895598 2.378903 -1.632835 1.375105 0.599096 \n", "thou 0.040719 -1.988184 2.330042 1.441790 -1.771272 -1.738142 -3.210077 \n", "thy -0.979835 -0.215604 2.189568 0.529003 -1.682130 -0.632460 0.578122 \n", "\n", "[5 rows x 100 columns]" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ "weights = cbow.get_weights()[0]\n", "weights = weights[1:]\n", "print(weights.shape)\n", "\n", "pd.DataFrame(weights, index=list(id2word.values())[1:]).head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build a distance matrix to view the most similar words (contextually)" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(12424, 12424)\n" ] }, { "data": { "text/plain": [ "{'egypt': ['destroy', 'none', 'whole', 'jacob', 'sea'],\n", " 'famine': ['wickedness', 'sore', 'countries', 'cease', 'portion'],\n", " 'god': ['therefore', 'heard', 'may', 'behold', 'heaven'],\n", " 'gospel': ['church', 'fowls', 'churches', 'preached', 'doctrine'],\n", " 'jesus': ['law', 'heard', 'world', 'many', 'dead'],\n", " 'john': ['dream', 'bones', 'held', 'present', 'alive'],\n", " 'moses': ['pharaoh', 'gate', 'jews', 'departed', 'lifted'],\n", " 'noah': ['abram', 'plagues', 'hananiah', 'korah', 'sarah']}" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.metrics.pairwise import euclidean_distances\n", "\n", "# compute pairwise distance matrix\n", "distance_matrix = euclidean_distances(weights)\n", "print(distance_matrix.shape)\n", "\n", "# view contextually similar words\n", "similar_words = {search_term: [id2word[idx] for idx in distance_matrix[word2id[search_term]-1].argsort()[1:6]+1] \n", " for search_term in ['god', 'jesus', 'noah', 'egypt', 'john', 'gospel', 'moses','famine']}\n", "\n", "similar_words" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Implementing a word2vec model using a skip-gram neural network architecture" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build Vocabulary" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Vocabulary Size: 12425\n", "Vocabulary Sample: [('base', 2338), ('feller', 10771), ('sanctuary', 455), ('plunge', 10322), ('azariah', 1120), ('enlightened', 4438), ('horns', 838), ('kareah', 2920), ('nursing', 5943), ('baken', 3492)]\n" ] } ], "source": [ "from keras.preprocessing import text\n", "\n", "tokenizer = text.Tokenizer()\n", "tokenizer.fit_on_texts(norm_bible)\n", "\n", "word2id = tokenizer.word_index\n", "id2word = {v:k for k, v in word2id.items()}\n", "\n", "vocab_size = len(word2id) + 1 \n", "embed_size = 100\n", "\n", "wids = [[word2id[w] for w in text.text_to_word_sequence(doc)] for doc in norm_bible]\n", "print('Vocabulary Size:', vocab_size)\n", "print('Vocabulary Sample:', list(word2id.items())[:10])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build and View sample skip grams ((word1, word2) -> relevancy)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(bible (5766), stank (5220)) -> 0\n", "(james (1154), izri (9970)) -> 0\n", "(king (13), bad (2285)) -> 0\n", "(king (13), james (1154)) -> 1\n", "(king (13), lucius (8272)) -> 0\n", "(james (1154), king (13)) -> 1\n", "(james (1154), bazluth (10091)) -> 0\n", "(james (1154), bible (5766)) -> 1\n", "(king (13), bible (5766)) -> 1\n", "(bible (5766), james (1154)) -> 1\n" ] } ], "source": [ "from keras.preprocessing.sequence import skipgrams\n", "\n", "# generate skip-grams\n", "skip_grams = [skipgrams(wid, vocabulary_size=vocab_size, window_size=10) for wid in wids]\n", "\n", "# view sample skip-grams\n", "pairs, labels = skip_grams[0][0], skip_grams[0][1]\n", "for i in range(10):\n", " print(\"({:s} ({:d}), {:s} ({:d})) -> {:d}\".format(\n", " id2word[pairs[i][0]], pairs[i][0], \n", " id2word[pairs[i][1]], pairs[i][1], \n", " labels[i]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build Skip-gram Deep Network Model" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "____________________________________________________________________________________________________\n", "Layer (type) Output Shape Param # Connected to \n", "====================================================================================================\n", "embedding_12_input (InputLayer) (None, 1) 0 \n", "____________________________________________________________________________________________________\n", "embedding_13_input (InputLayer) (None, 1) 0 \n", "____________________________________________________________________________________________________\n", "embedding_12 (Embedding) (None, 1, 100) 1242500 embedding_12_input[0][0] \n", "____________________________________________________________________________________________________\n", "embedding_13 (Embedding) (None, 1, 100) 1242500 embedding_13_input[0][0] \n", "____________________________________________________________________________________________________\n", "reshape_11 (Reshape) (None, 100) 0 embedding_12[0][0] \n", "____________________________________________________________________________________________________\n", "reshape_12 (Reshape) (None, 100) 0 embedding_13[0][0] \n", "____________________________________________________________________________________________________\n", "dot_4 (Dot) (None, 1) 0 reshape_11[0][0] \n", " reshape_12[0][0] \n", "____________________________________________________________________________________________________\n", "dense_5 (Dense) (None, 1) 2 dot_4[0][0] \n", "====================================================================================================\n", "Total params: 2,485,002\n", "Trainable params: 2,485,002\n", "Non-trainable params: 0\n", "____________________________________________________________________________________________________\n", "None\n" ] } ], "source": [ "from keras.layers import Dot\n", "from keras.layers.core import Dense, Reshape\n", "from keras.layers.embeddings import Embedding\n", "from keras.models import Sequential\n", "from keras.models import Model\n", "\n", "word_model = Sequential()\n", "word_model.add(Embedding(vocab_size, embed_size,\n", " embeddings_initializer=\"glorot_uniform\",\n", " input_length=1))\n", "word_model.add(Reshape((embed_size, )))\n", "\n", "context_model = Sequential()\n", "context_model.add(Embedding(vocab_size, embed_size,\n", " embeddings_initializer=\"glorot_uniform\",\n", " input_length=1))\n", "context_model.add(Reshape((embed_size,)))\n", "\n", "model_arch = Dot(axes=1)([word_model.output, context_model.output])\n", "model_arch = Dense(1, kernel_initializer=\"glorot_uniform\", activation=\"sigmoid\")(model_arch)\n", "model = Model([word_model.input,context_model.input], model_arch)\n", "#model.add(Merge([word_model, context_model], mode=\"dot\"))\n", "#model.add(Dense(1, kernel_initializer=\"glorot_uniform\", activation=\"sigmoid\"))\n", "model.compile(loss=\"mean_squared_error\", optimizer=\"rmsprop\")\n", "print(model.summary())" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "\n", "\n", "G\n", "\n", "\n", "1879585006088\n", "\n", "InputLayer\n", "\n", "input:\n", "\n", "output:\n", "\n", "(None, 1)\n", "\n", "(None, 1)\n", "\n", "\n", "1879585005808\n", "\n", "Embedding\n", "\n", "input:\n", "\n", "output:\n", "\n", "(None, 1)\n", "\n", "(None, 1, 100)\n", "\n", "\n", "1879585006088->1879585005808\n", "\n", "\n", "\n", "\n", "1879585007656\n", "\n", "InputLayer\n", "\n", "input:\n", "\n", "output:\n", "\n", "(None, 1)\n", "\n", "(None, 1)\n", "\n", "\n", "1879644457168\n", "\n", "Embedding\n", "\n", "input:\n", "\n", "output:\n", "\n", "(None, 1)\n", "\n", "(None, 1, 100)\n", "\n", "\n", "1879585007656->1879644457168\n", "\n", "\n", "\n", "\n", "1879585006312\n", "\n", "Reshape\n", "\n", "input:\n", "\n", "output:\n", "\n", "(None, 1, 100)\n", "\n", "(None, 100)\n", "\n", "\n", "1879585005808->1879585006312\n", "\n", "\n", "\n", "\n", "1879585006200\n", "\n", "Reshape\n", "\n", "input:\n", "\n", "output:\n", "\n", "(None, 1, 100)\n", "\n", "(None, 100)\n", "\n", "\n", "1879644457168->1879585006200\n", "\n", "\n", "\n", "\n", "1879585006928\n", "\n", "Dot\n", "\n", "input:\n", "\n", "output:\n", "\n", "[(None, 100), (None, 100)]\n", "\n", "(None, 1)\n", "\n", "\n", "1879585006312->1879585006928\n", "\n", "\n", "\n", "\n", "1879585006200->1879585006928\n", "\n", "\n", "\n", "\n", "1879585008496\n", "\n", "Dense\n", "\n", "input:\n", "\n", "output:\n", "\n", "(None, 1)\n", "\n", "(None, 1)\n", "\n", "\n", "1879585006928->1879585008496\n", "\n", "\n", "\n", "\n", "" ], "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import SVG\n", "from keras.utils.vis_utils import model_to_dot\n", "\n", "SVG(model_to_dot(model, show_shapes=True, show_layer_names=False, \n", " rankdir='TB').create(prog='dot', format='svg'))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Train the model for 5 epochs" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Processed 0 (skip_first, skip_second, relevance) pairs\n", "Processed 10000 (skip_first, skip_second, relevance) pairs\n", "Processed 20000 (skip_first, skip_second, relevance) pairs\n", "Epoch: 1 Loss: 4474.41281086\n", "Processed 0 (skip_first, skip_second, relevance) pairs\n", "Processed 10000 (skip_first, skip_second, relevance) pairs\n", "Processed 20000 (skip_first, skip_second, relevance) pairs\n", "Epoch: 2 Loss: 3735.81375903\n", "Processed 0 (skip_first, skip_second, relevance) pairs\n", "Processed 10000 (skip_first, skip_second, relevance) pairs\n", "Processed 20000 (skip_first, skip_second, relevance) pairs\n", "Epoch: 3 Loss: 3759.779281\n", "Processed 0 (skip_first, skip_second, relevance) pairs\n", "Processed 10000 (skip_first, skip_second, relevance) pairs\n", "Processed 20000 (skip_first, skip_second, relevance) pairs\n", "Epoch: 4 Loss: 3793.27816557\n", "Processed 0 (skip_first, skip_second, relevance) pairs\n", "Processed 10000 (skip_first, skip_second, relevance) pairs\n", "Processed 20000 (skip_first, skip_second, relevance) pairs\n", "Epoch: 5 Loss: 3718.15081862\n" ] } ], "source": [ "for epoch in range(1, 6):\n", " loss = 0\n", " for i, elem in enumerate(skip_grams):\n", " pair_first_elem = np.array(list(zip(*elem[0]))[0], dtype='int32')\n", " pair_second_elem = np.array(list(zip(*elem[0]))[1], dtype='int32')\n", " labels = np.array(elem[1], dtype='int32')\n", " X = [pair_first_elem, pair_second_elem]\n", " Y = labels\n", " if i % 10000 == 0:\n", " print('Processed {} (skip_first, skip_second, relevance) pairs'.format(i))\n", " loss += model.train_on_batch(X,Y) \n", "\n", " print('Epoch:', epoch, 'Loss:', loss)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Get word embeddings" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(12424, 100)\n" ] }, { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123456789...90919293949596979899
shall0.0432520.030233-0.016057-0.0718560.0059150.0531700.0135780.0002010.037018-0.151811...0.2898110.014798-0.0223500.0599660.107588-0.006052-0.1120830.0642910.110624-0.033265
unto-0.072916-0.0149410.018243-0.206662-0.0182530.0716340.0947200.008018-0.003973-0.076268...0.0442760.097791-0.1200940.0571710.2397570.0633030.0185240.2032820.093460-0.110360
lord-0.0243380.066582-0.057416-0.1123750.0341310.103507-0.0007330.0714660.015607-0.119505...0.115495-0.027881-0.215636-0.0284940.0970590.050633-0.2345690.106756-0.0145400.028276
thou0.0842240.0482170.0085290.0251980.019296-0.0055080.041746-0.012590-0.299545-0.030134...0.079110-0.037630-0.0166090.0322800.0558970.180336-0.2185250.0781870.077540-0.039218
thy0.0404580.054175-0.033665-0.0310590.0536220.157648-0.0098120.032927-0.2298370.002110...-0.033932-0.079629-0.0704540.0519920.029190-0.023169-0.259643-0.0160680.122141-0.088576
\n", "

5 rows × 100 columns

\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 \\\n", "shall 0.043252 0.030233 -0.016057 -0.071856 0.005915 0.053170 0.013578 \n", "unto -0.072916 -0.014941 0.018243 -0.206662 -0.018253 0.071634 0.094720 \n", "lord -0.024338 0.066582 -0.057416 -0.112375 0.034131 0.103507 -0.000733 \n", "thou 0.084224 0.048217 0.008529 0.025198 0.019296 -0.005508 0.041746 \n", "thy 0.040458 0.054175 -0.033665 -0.031059 0.053622 0.157648 -0.009812 \n", "\n", " 7 8 9 ... 90 91 92 \\\n", "shall 0.000201 0.037018 -0.151811 ... 0.289811 0.014798 -0.022350 \n", "unto 0.008018 -0.003973 -0.076268 ... 0.044276 0.097791 -0.120094 \n", "lord 0.071466 0.015607 -0.119505 ... 0.115495 -0.027881 -0.215636 \n", "thou -0.012590 -0.299545 -0.030134 ... 0.079110 -0.037630 -0.016609 \n", "thy 0.032927 -0.229837 0.002110 ... -0.033932 -0.079629 -0.070454 \n", "\n", " 93 94 95 96 97 98 99 \n", "shall 0.059966 0.107588 -0.006052 -0.112083 0.064291 0.110624 -0.033265 \n", "unto 0.057171 0.239757 0.063303 0.018524 0.203282 0.093460 -0.110360 \n", "lord -0.028494 0.097059 0.050633 -0.234569 0.106756 -0.014540 0.028276 \n", "thou 0.032280 0.055897 0.180336 -0.218525 0.078187 0.077540 -0.039218 \n", "thy 0.051992 0.029190 -0.023169 -0.259643 -0.016068 0.122141 -0.088576 \n", "\n", "[5 rows x 100 columns]" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "word_embed_layer = model.layers[2]\n", "weights = word_embed_layer.get_weights()[0][1:]\n", "\n", "print(weights.shape)\n", "pd.DataFrame(weights, index=id2word.values()).head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Build a distance matrix to view the most similar words (contextually)" ] }, { "cell_type": "code", "execution_count": 42, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(12424, 12424)\n" ] }, { "data": { "text/plain": [ "{'egypt': ['taken', 'pharaoh', 'wilderness', 'gods', 'became'],\n", " 'famine': ['moved', 'awake', 'driven', 'howl', 'snare'],\n", " 'god': ['strength', 'given', 'blessed', 'wherefore', 'lord'],\n", " 'gospel': ['preached', 'must', 'preach', 'desire', 'grace'],\n", " 'jesus': ['disciples', 'christ', 'dead', 'peter', 'jews'],\n", " 'john': ['peter', 'hold', 'mountain', 'ghost', 'preached'],\n", " 'moses': ['commanded', 'third', 'congregation', 'tabernacle', 'tribes'],\n", " 'noah': ['ham', 'terah', 'amon', 'adin', 'zelophehad']}" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.metrics.pairwise import euclidean_distances\n", "\n", "distance_matrix = euclidean_distances(weights)\n", "print(distance_matrix.shape)\n", "\n", "similar_words = {search_term: [id2word[idx] for idx in distance_matrix[word2id[search_term]-1].argsort()[1:6]+1] \n", " for search_term in ['god', 'jesus', 'noah', 'egypt', 'john', 'gospel', 'moses','famine']}\n", "\n", "similar_words" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualize word embeddings" ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total words: 48 \tWord Embedding shapes: (48, 100)\n" ] }, { "data": { "image/png": "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\nnnuOvLw8LBYLb775Jn5+fjYfh4iIVE1GVXiY4+vra2pfCxGR8ufg6Ej3yatwcPzvzOyiwgI2TRtA\n0W880REREbE3wzCSTNP0tUVf5flESUREqhiXNm3JPrz3inPZh/fi0qatnSISERGxDyVKIiJiFR0V\nSfr6GLIOpVBUWEDWoRTS18cQHRVp79BEREQqlC2q3omISDUxpKTkd2RUNElLiqvexcyeaT0vIiJy\ns9AaJRERERERqRa0RklERERERKQcKVESEREREREpRYmSiIiIiIhIKUqURERERERESlGiJCIiIiIi\nUooSJRERERERkVKUKImIiIiIiJSiRElERERERKQUJUoiIiIiIiKlKFESEREREREpRYmSiIiIiIhI\nKUqURERERERESlGiJCIiIiIiUooSJRERERERkVKUKImIiIiIiJSiRElERERERKQUJUoiIiIiIiKl\nKFESEREREREpRYmSiNw0+vTpQ3Z2NgBOTk5lthk+fDgrVqyoyLBERESkEqph7wBERCrK+vXrbd5n\nQUEBNWron1IREZHqRk+URKTaePPNN5k7dy4AY8aM4b777gNg06ZNDB06FGdnZ06dOnXFPaZpMmrU\nKNzd3QkNDeXnn3+2XktKSiI4OBgfHx969+7N8ePHAQgJCeGVV14hODiYt99+m+HDh/Piiy/StWtX\nXF1dr3giNXPmTDp37ozFYmHKlCkAnDt3jtDQUDw9PenYsSPLly8HYOLEibi7u2OxWBg3blz5fVAi\nIiLym/Q1qIhUG0FBQbz11lu8+OKLJCYm8uuvv5Kfn8+2bdsIDAxk27ZtV92zevVq9u/fz549ezhx\n4gTu7u488cQT5OfnM3r0aNasWUOzZs1Yvnw5r776KgsWLAAgOzubb775Biiernf8+HG2bdtGWloa\nYWFhPPzww2zYsIGDBw+SkJCAaZqEhYURHx/PyZMnadGiBV9++SUAOTk5ZGVlsXr1atLS0jAMwzpF\nUEREROxDT5REpMqKXbqUNu3ccHB0pE07N/YfOEBSUhK5ubnUrl0bf39/EhMT2bp1K4GBgWX2ER8f\nz+DBg3F0dKRFixbWp1D79+8nNTWVnj174uXlxeuvv87Ro0et94WHh1/Rz0MPPYSDgwPu7u6cOHEC\ngA0bNrBhwwY6deqEt7c3aWlpHDx4EA8PDzZu3MiECRPYunUrjRo1omHDhtSpU4ennnqKVatWUa9e\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.manifold import TSNE\n", "\n", "words = sum([[k] + v for k, v in similar_words.items()], [])\n", "words_ids = [word2id[w] for w in words]\n", "word_vectors = np.array([weights[idx] for idx in words_ids])\n", "print('Total words:', len(words), '\\tWord Embedding shapes:', word_vectors.shape)\n", "\n", "tsne = TSNE(n_components=2, random_state=0, n_iter=10000, perplexity=3)\n", "np.set_printoptions(suppress=True)\n", "T = tsne.fit_transform(word_vectors)\n", "labels = words\n", "\n", "plt.figure(figsize=(14, 8))\n", "plt.scatter(T[:, 0], T[:, 1], c='steelblue', edgecolors='k')\n", "for label, x, y in zip(labels, T[:, 0], T[:, 1]):\n", " plt.annotate(label, xy=(x+1, y+1), xytext=(0, 0), textcoords='offset points')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Leveraging gensim for building a word2vec model" ] }, { "cell_type": "code", "execution_count": 1065, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'egypt': ['pharaoh', 'egyptians', 'bondage', 'rod', 'flowing'],\n", " 'famine': ['pestilence', 'peril', 'blasting', 'mildew', 'morever'],\n", " 'god': ['lord', 'promised', 'worldly', 'glory', 'reasonable'],\n", " 'gospel': ['faith', 'afflictions', 'christ', 'persecutions', 'godly'],\n", " 'jesus': ['peter', 'messias', 'apostles', 'immediately', 'neverthless'],\n", " 'john': ['baptist', 'james', 'peter', 'galilee', 'zebedee'],\n", " 'moses': ['congregation', 'children', 'aaron', 'ordinance', 'doctor'],\n", " 'noah': ['shem', 'japheth', 'ham', 'noe', 'henoch']}" ] }, "execution_count": 1065, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from gensim.models import word2vec\n", "\n", "# tokenize sentences in corpus\n", "wpt = nltk.WordPunctTokenizer()\n", "tokenized_corpus = [wpt.tokenize(document) for document in norm_bible]\n", "\n", "# Set values for various parameters\n", "feature_size = 100 # Word vector dimensionality \n", "window_context = 30 # Context window size \n", "min_word_count = 1 # Minimum word count \n", "sample = 1e-3 # Downsample setting for frequent words\n", "\n", "w2v_model = word2vec.Word2Vec(tokenized_corpus, size=feature_size, \n", " window=window_context, min_count=min_word_count,\n", " sample=sample, iter=50)\n", "\n", "# view similar words based on gensim's model\n", "similar_words = {search_term: [item[0] for item in w2v_model.wv.most_similar([search_term], topn=5)]\n", " for search_term in ['god', 'jesus', 'noah', 'egypt', 'john', 'gospel', 'moses','famine']}\n", "similar_words" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualizing word embeddings" ] }, { "cell_type": "code", "execution_count": 1080, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA0EAAAHVCAYAAAA3lfClAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XtYVWX+///nAh3LE+poZaWifRUQOQkaggfUsay0PHYQ\nFTRzwMaaZnTUzGMxV038OmiWY6OYDkylppZTM2ZJSupHUZFAJbSQDo6RgaFocrh/f2zcgaKiAhvc\nr8d1ea297nWve73X3uq13/u+131bxhhERERERESchYujAxAREREREalJSoJERERERMSpKAkSERER\nERGnoiRIREREREScipIgERERERFxKkqCRERERETEqSgJEhERERERp6IkSEREREREnMo1J0GWZbWx\nLGuzZVn7LctKtyzrydLyFpZlfWxZVmbptnmZc2ZYlnXIsqwMy7LuvtYYREREREREKssyxlxbA5bV\nGmhtjNljWVYTYDcwBIgEfjLGPG9Z1nSguTFmmmVZnYF/Ad2BW4FNQCdjTPGlrtOyZUvj7u5+TbGK\niIiIiMj1a/fu3T8aY1pdrl69a72QMeYocLT0db5lWQeA24AHgLDSam8BicC00vK3jTG/AF9blnUI\nW0K0/VLXcXd3Jzk5+VrDFRERERGR65RlWUcqU69KnwmyLMsdCAD+D7i5NEEC+B9wc+nr24Bvypz2\nbWlZRe1NtCwr2bKs5JycnKoMVUREREREnFSVJUGWZTUG1gB/NMb8XPaYsY25u+Jxd8aYJcaYIGNM\nUKtWl+3VEhERERERuawqSYIsy6qPLQGKN8a8V1p8rPR5oXPPDf1QWv4d0KbM6beXlomIiIiIiFS7\nqpgdzgKWAgeMMS+VOfQ+EFH6OgJYX6b8YcuyGliW1R7oCOy81jhEREREREQq45onRgBCgTHAF5Zl\npZSWPQ08D7xrWdajwBHgQQBjTLplWe8C+4Ei4PHLzQwnIiIiIiJSVapidrgkwLrI4f4XOScGiLnW\na4uIiIiIiFypKp0dTkREREREpLZTEiQiIiIiIk5FSZCIiIiIiDgVJUHilLKysujSpcsF5WFhYSQn\nJ19xe+vWrWP//v32/dmzZ7Np06ZrilFEREREqoeSIJEqcH4SNH/+fH73u985MCIRERERuRglQeK0\nioqKCA8Px8vLixEjRlBQUFDueHR0NEFBQXh7ezNnzhx7+fTp0+ncuTO+vr5MmTKFbdu28f777zN1\n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\ncfLkSQC+++47fvjhB77//nsaNmzI6NGjmTp1Knv27Kn2271i82fCuALwBupBtwFwf7DBd+JE7rnn\nHnx8fHBzc+Ott95i6tSp+Pr6kpKSwuzZswGIi4vj8ccfx9/fH2PMRS9z//33c/LkSQ2FE5FaR88E\niYjI9afsl3ywbUeegX8cu+Rpc+fOZfz48fj6+tKwYUPeeustAF555RU2b95sH0Z3zz330KBBAw4c\nOECPHj0AaNy4Mf/85z85dOgQU6dOxcXFhfr16/PGG29U441epcxs8ChfNGUMzN1WTMF//0vv3r0J\nDAzE39+fHTt2XHB6YGBguUkR/va3vwEQFhZGWFiYvXzfvn34+fnh6elZLbchInK1rEv9glObBAUF\nmXOz1YiIiFySq4utB6jsT31F2BbhLS5xVFS1h6e7rXfM+9eiUTGw/3B9zrh3ICIighkzZlzTJZ5/\n/nneeOMN4uPj6dmz57XFKyJSSZZl7TbGBF22npIgERG57lTwJZ90YE07OJjlmJhqk3PDBccV2HqE\nMoC4hhC7RIsVi0idVtkkSM8EiYjI9Wd2jO1LfTq2HqB0bPuzYxwcWC0xKtyW8KxpZ+sdW9NOCZCI\nOBU9EyQiItefc1/m58+0Pf/SsS3ExuhLflmjwvV+iIjTUhIkIiLXJ33JFxGRi9BwOBERERERcSpK\ngkRERERExKkoCRIREREREaeiJEhERERERJyKkiAREREREXEqSoJERERERMSpKAkSERERERGnoiRI\nREREREScipIgERERERFxKkqCRERERETEqSgJEhERERERp6IkSEREREREnIqSIBERERERcSpKgkRE\nRERExKkoCRIREREREaeiJEhERERERJyKw5Igy7IGWpaVYVnWIcuypjsqDhERERERcS4OSYIsy3IF\nFgH3AJ2BRyzL6uyIWERERERExLk4qieoO3DIGPOVMeYs8DbwgINiERERERERJ+KoJOg24Jsy+9+W\nlolcUmJiItu2bbPvL168mBUrVjgwIoELPxcRERGR2qyeowO4FMuyJgITAdq2bevgaKQ2SExMpHHj\nxoSEhAAQFRXl4IgELvxcRERERGozR/UEfQe0KbN/e2lZOcaYJcaYIGNMUKtWrWosOLk2//znP+ne\nvTv+/v78/ve/p7i4mKVLl9KpUye6d+/OY489xh/+8Afy8/Np3749hYWFAPz888/2/bCwMJ588kn8\n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\nTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.manifold import TSNE\n", "\n", "words = sum([[k] + v for k, v in similar_words.items()], [])\n", "wvs = w2v_model.wv[words]\n", "\n", "tsne = TSNE(n_components=2, random_state=0, n_iter=10000, perplexity=2)\n", "np.set_printoptions(suppress=True)\n", "T = tsne.fit_transform(wvs)\n", "labels = words\n", "\n", "plt.figure(figsize=(14, 8))\n", "plt.scatter(T[:, 0], T[:, 1], c='orange', edgecolors='r')\n", "for label, x, y in zip(labels, T[:, 0], T[:, 1]):\n", " plt.annotate(label, xy=(x+1, y+1), xytext=(0, 0), textcoords='offset points')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Applying the word2vec model on our sample corpus" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "collapsed": true }, "outputs": [], "source": [ "wpt = nltk.WordPunctTokenizer()\n", "tokenized_corpus = [wpt.tokenize(document) for document in norm_corpus]\n", "\n", "# Set values for various parameters\n", "feature_size = 10 # Word vector dimensionality \n", "window_context = 10 # Context window size \n", "min_word_count = 1 # Minimum word count \n", "sample = 1e-3 # Downsample setting for frequent words\n", "\n", "w2v_model = word2vec.Word2Vec(tokenized_corpus, size=feature_size, \n", " window=window_context, min_count = min_word_count,\n", " sample=sample, iter=100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualize word embeddings" ] }, { "cell_type": "code", "execution_count": 80, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nFUmqmJz+TlLl0b9o3O7EcbBpa2FPdOrkr9qP0l/+8hcyMzNZvXo1O3fuJDk5mc6dO9OvXz/+/Oc/\nc9lll/Hll1/y1ltv8eijjzJ9+nTq1q3LypUr+eKLL+jQoQPdu3enUaNGJXiT5cPSpUsji9RcdNFF\nfPrpp3z22WfUqVOHJ554gs6dO/Pggw9y/vnnl3GlkhQ9uwEkVS79U2BjNhwoKHyNMkRDYVi8/vrr\niYmJoX79+nTp0oWVK1dy6aWXsnDhQr744gteffVVOnfuzA9+8APeeOMNZs6cSWJiIu3atePTTz9l\n06ZNJXZrRyonJ4du3brRunVr4uPjefHFF4HCHuXExEQSExNp1KgRF154IU899RS33npr5NwnnniC\n22677Zg+f82aNZx22ml8/PHHx3QdSSprBmlJKmE1atSga9euvP7668yZM4d+/foBhUNBHnroITIz\nM8nMzOSDDz6ge/fuZVLf888/z6pVq1i4cCH/+7//SxiG3HjjjWRmZrJy5UrOOeccfvGLX3Dttdfy\n0ksvsX//fgDS0tIYMmTIVxcrPi9301j4/HMAOnXqxKxZs4DCpdXr1atHnTp12LJlCw888ADvvPMO\nr776Km+//XYp370klRyDtCQdieKBMTcXZs+iU6dOzJkzhwMHDrBjxw4WL15M27ZtAejXrx9paWks\nWbKEnj17AtCjRw8effTRSCj917/+xedFwbM0hWHIHXfcQUJCAhdffDHbtm3jk08+iewfNWoUF110\nEZdffjm1atXioosuYv78+WzcuJH9+/cTHx9feODX5uWm7xbY9SnMm8uECRPIyMggISGBsWPH8vTT\nTxOGIT/96U9JTU3lrLPOYvr06QwdOvSoF72RpPLC6e8k6XAOBsbBudAEag2FnHo1CX/3GL/MXM2r\nr75KEASMHz8+0vu8f/9+6tevT+/evUlLSwOgoKCA8ePH89JLLxGGIaeffjovvPACdevWPX51FxsP\nXiv73+Tk5TFjxgxeffVVnnnmGapVq0ZsbCyLFi0iNjaWGTNm8Nxzz/HSSy9FHgJ8++23+c1vfkPT\npk0599xzGTFiROH1m8YWhucWxT5zHTDv3MJhM5JUAR3N9HcGaUk6nIoYGL8W/smCWr+FnGee4Y87\ndvLee+/x0EMPsXDhQi666CI++OADPv30UwYOHMiSJUs45ZRTyM7OplevXqxdu5bWrVuzY8cO3n33\n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\n1KpVi5kzZ/LHP/7xiMstq27LtsB7YRi+DxAEwbNAb6D8BOliK4J93OgsTh0/iQGDBnPyySfz5JNP\nAlCvXj1ycnKYO3duZMqm2NhYMjIyaNu2beSJUID333+f8847j1tuuYWtW7fy7rvv0qhRI0455RRq\n1qzJxo0bI/8jSk5O5tZbb2XXrl3Url2befPmRZbk7d69Ow899BBjxowBIDMzk8TERDZv3kx8fDzx\n8fGsXLmSjRs3GqQlHZ2KOM2fpBPLEX6hT0xMjDzYXNxNN930rb+cfdcX94EDBzJw4MCoyy2roR1n\nAx8W2/6oqK18+NrPCmuSt9F22E9JPPdc7r77bsaPH8+wYcOIi4ujR48eJCcnR04dPXo0jz76KK1a\ntWLnzp2R9j//+c/ExcWRmJjI2rVrueGGG+jZsyf5+fk0a9aMsWPH0r59ewDOPvts7rjjDtq2bUuH\nDh2IjY2NLCE8ZcoU0tPTSUhIoHnz5kybNg2AP/zhD8TFxZGQkEC1atW49NJLS/EPJumEUBGn+ZN0\nYimhqTtLS5ksER4EwdVAzzAMhxZt/w/QLgzDkV87bjgwHKBhw4ZttmzZUjoFloPlgHNycqhVqxb5\n+fn06dOHIUOG0KdPn1L5bEmVWLFf42jcsDBEl/cZSiSdOA52Zg7OLeyZzqLwC30pTjlaEZYI3wY0\nKLZ9TlHbIcIwfBx4HCApKan0En85WA54woQJLFiwgLy8PLp3786VV15Zap8tqRLrn2JwllR2Dv73\np/gX+tTy+4W+rHqkqwL/ArpRGKBXAv3DMPzOqS+SkpLCg/MzH3floEdakiRJpe9oeqTLZIx0GIb5\nwEjgdWAD8OfvC9GlznGCkiRJOowym2w4DMNXgFfK6vO/VwX7WUGSJEmlz1U7vovjBCVJkvQ9XCJc\nkiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqS\nJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIk\nSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJ\nioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmK\ngkFakiRJioJBWpIkSYqCQVqSJEmKgkFako5Afn5+WZcgSSpnDNKSBEyaNIkmTZrQsWNHrr/+elJT\nU+natSu33norSUlJ/PGPf2THjh307duX5ORkkpOTWbZsGQCff/45Q4YMoW3btrRq1YoXX3wRgBkz\nZnDVVVfRs2dPGjduzC9/+cuyvEVJUgmrWtYFSFJZW7lyJfPmzWP16tXs37+f1q1b06ZNGwC+/PJL\n0tPTAejfvz+33XYbHTt2ZOvWrfTo0YMNGzYwefJkLrroIp566il2795N27ZtufjiiwHIzMzknXfe\noXr16jRp0oSbb76ZBg0alNm9SpJKjkFaUqW3bNkyevfuTY0aNahRowaXX355ZF+/fv0i7xcsWMD6\n9esj25999hk5OTm88cYb/PWvfyU1NRWAvLw8tm7dCkC3bt2oW7cuAM2bN2fLli0GaUk6QRikJel7\nnHTSSZH3BQUFrFixgho1ahxyTBiGzJs3jyZNmhzS/vbbb1O9evXIdkxMjGOtJekE4hhpSZXX7FnQ\nNJYOv7iNl+67l7wZaeTk5DB//vxvPbx79+489NBDke3MzEwAevTowUMPPUQYhgC88847x792SVKZ\nM0hLqpxmz4LRw6HvFpJnwBXJX5Iw9KdcmtSG+Pj4yHCM4qZMmUJ6ejoJCQk0b96cadOmAXDnnXey\nf/9+EhISaNGiBXfeeWcp34wkqSwEB3tQyrukpKTw4AM/knTMmsZC3y3QonAzJw9qbYbc5xrQuc4Z\nPP7447Ru3bpMS5Qklb4gCDLCMEw6kmOPqUc6CIJrgiBYFwRBQRAESV/b96sgCN4LgiArCIIexdrb\nBEGwpmjflCAIgmOpQZKismkrFBvSPPxJSHwGWm/6kL59+xqiJUmHdawPG64FrgIeK94YBEFz4DoK\n+3rOAhYEQXBBGIYHgEeBYcDbwCtAT+DVY6xDko5O44aQ9VWP9OyRwDpg3rnwq1+VZWWSpArimHqk\nwzDcEIZh1rfs6g08G4bhF2EYfgC8B7QNguBMoE4YhivCwjElM4Erj6UGSYrKXZMhrWZheM6n8DWt\nZmG7JElH4HhNf3c2sKLY9kdFbfuL3n+9XZJKV/+UwteJ4wqHeTRuCKmTv2qXJOkwDhukgyBYAPzw\nW3aNC8PwxZIv6ZDPHg4MB2jYsOHx/ChJlVH/FIOzJClqhw3SYRheHMV1twHFl+46p6htW9H7r7d/\n12c/DjwOhbN2RFGHJEmSdFwcr3mk/wpcFwRB9SAIGgGNgX+GYbgd+CwIgvZFs3XcABzXXm1JkiTp\neDjW6e/6BEHwEfBj4OUgCF4HCMNwHfBnYD3wGvDzohk7AEYAT1L4AOJmnLFDkiRJFZALskiSJElF\nSm1BFkmSJKmyMkhLkiRJUTBIS5IkSVEwSEuSJElRMEhLkiRJUTBIS5IkSVEwSEuSJElRMEhLkiRJ\nUTBIS5IkSVEwSEuSJElRMEhLkiRJUTBIS5IkSVEwSEuSJElRMEhLkiRJUTBIS5IkSVEwSEtSJfHM\nM8/Qtm1bEhMT+dnPfsaBAweYPn06F1xwAW3btmXYsGGMHDkSgM2bN9O+fXvi4+MZP348tWrVAmD7\n9u107tyZxMRE4uLiWLJkSVnekiSVKYO0pCO2e/dupk6delTnDBo0iLlz5x6ninSkNmzYwJw5c1i2\nbBmZmZnExMQwa9YsJk2axIoVK1i2bBkbN26MHD9q1ChGjRrFmjVrOOeccyLts2fPpkePHmRmZrJ6\n9WoSExPL4nYkqVwwSEs6YtEEaZUPb731FhkZGSQnJ5OYmMhbb73F73//e7p06cKpp55KtWrVuOaa\nayLHL1++PLLdv3//SHtycjJpaWlMmDCBNWvWULt27VK/F0kqLwzSko7Y2LFj2bx5M4mJiYwZM4Yx\nY8YQFxdHfHw8c+bMASAMQ0aOHEmTJk24+OKL+c9//hM5f+LEiSQnJxMXF8fw4cMJw5DNmzfTunXr\nyDGbNm06ZFslIwxDBg4cSGZmJpmZmWRlZTFhwoSjvk7nzp1ZvHgxZ599NoMGDWLmzJklX6wkVRAG\naUlH7N577+X8888nMzOT9u3bR37eX7BgAWPGjGH79u08//zzZGVlsX79embOnMk//vGPyPkjR45k\n5cqVrF27ln379jF//nzOP/986tatS2ZmJgBpaWkMHjy4rG7xxDN7FjSNpduoW5j7QCr/ebTwF4X/\n+7//o1WrVvz9739n165d5OfnM2/evMhp7du3j2w/++yzkfYtW7ZQv359hg0bxtChQ1m1alXp3o8k\nlSMGaUlRWbp0Kddffz0xMTHUr1+fLl26sHLlShYvXhxpP+uss7jooosi5yxcuJB27doRHx/P3/72\nN9atWwfA0KFDSUtL48CBA8yZM+eQoQQ6BrNnwejh0HcLzWfAPZfl0/2WkSQ0bMgll1zC9u3bueOO\n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\nZ0mqAJz+TpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqS\nJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIk\nSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJioJBWpIkSYqCQVqSJEmKgkFakiRJ\nioJBWpIkSYqCQVqSKqns7Gzi4uLKugxJqrAM0pIkSVIUDNKSVIkdOHCAYcOG0aJFC7p3786+fft4\n4oknSE5OpmXLlvTt25fc3FwABg0axE033UT79u0577zzWLRoEUOGDKFZs2YMGjSobG9EksqAQVqS\nKrFNmzbx85//nHXr1nHyySczb948rrrqKlauXMnq1atp1qwZ06dPjxy/a9culi9fzoMPPsgVV1zB\nbbfdxrp161izZg2ZmZlleCeSVPoM0pJUiTVq1IjExEQA2rRpQ3Z2NmvXrqVTp07Ex8cza9Ys1q1b\nFzn+8ssvJwgC4uPjqV+/PvHx8VSpUoUWLVqQnZ1dRnchSWXDIC1JlVj16tUj72NiYsjPz2fQoEE8\n/PDDrFmzhl//+tfk5eV94/gqVaoccm6VKlXIz88vvcIlqRwwSEtSZTJ7FjSNhZgq0K0j7NnzjUP2\n7t3LmWeeyf79+5k1a1bp1yhJFYRBWpIqi9mzYPRw6LsF0kLouQ3+va2wvZhJkybR7v+3d7+hltR1\nHMffH1a0lIzMzUxdd4VtN4WIvKhgBZGkCbFGBYuCQpGE1bMeKAsmidDfJxIpBpmGpP2hXCQp16ge\n2bbG+mfLzVW32mXTMtAnsWl+e3B+N8d1r957zu6ZM3vfL/hx5n5n5u7vng8z89s5M3POPZfzzz+f\n9evX99RZSZp9qaq++7Aoc3NztW3btr67IUnDtX71aBB9Vqe2A/jJ6fDY7n76JEkzJsmDVTW3mGU9\nIy1Jy8Xjf4V1B9TWtbokackmGkgnuT7Jw0m2J/llknd05l2TZFeSnUku7NTPTvJIm3djkkzSB0nS\nIq1dBTsPqO1sdUnSkk16RvrrVfXuqnoPcA9wLUCSM4GNjD5AvAj4dpIVbZ2bgM8Aa1u7aMI+SJIW\n49ob4NZjR5dzvMjo9dZjR3VJ0pIdNcnKVfV858fjgPkLrjcAd1bVfuCpJLuAc5LsBo6vqgcAktwO\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.manifold import TSNE\n", "\n", "words = w2v_model.wv.index2word\n", "wvs = w2v_model.wv[words]\n", "\n", "tsne = TSNE(n_components=2, random_state=0, n_iter=5000, perplexity=2)\n", "np.set_printoptions(suppress=True)\n", "T = tsne.fit_transform(wvs)\n", "labels = words\n", "\n", "plt.figure(figsize=(12, 6))\n", "plt.scatter(T[:, 0], T[:, 1], c='orange', edgecolors='r')\n", "for label, x, y in zip(labels, T[:, 0], T[:, 1]):\n", " plt.annotate(label, xy=(x+1, y+1), xytext=(0, 0), textcoords='offset points')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sample word embedding" ] }, { "cell_type": "code", "execution_count": 81, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0.04576328, 0.02328374, -0.04483001, 0.0086611 , 0.05173225,\n", " 0.00953358, -0.04087641, -0.00427487, -0.0456274 , 0.02155695], dtype=float32)" ] }, "execution_count": 81, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w2v_model.wv['sky']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Build framework for getting document level embeddings" ] }, { "cell_type": "code", "execution_count": 82, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def average_word_vectors(words, model, vocabulary, num_features):\n", " \n", " feature_vector = np.zeros((num_features,),dtype=\"float64\")\n", " nwords = 0.\n", " \n", " for word in words:\n", " if word in vocabulary: \n", " nwords = nwords + 1.\n", " feature_vector = np.add(feature_vector, model[word])\n", " \n", " if nwords:\n", " feature_vector = np.divide(feature_vector, nwords)\n", " \n", " return feature_vector\n", " \n", " \n", "def averaged_word_vectorizer(corpus, model, num_features):\n", " vocabulary = set(model.wv.index2word)\n", " features = [average_word_vectors(tokenized_sentence, model, vocabulary, num_features)\n", " for tokenized_sentence in corpus]\n", " return np.array(features)" ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123456789
00.0046900.009370-0.0096670.0260140.0349890.010402-0.033441-0.011956-0.0002430.010552
10.0057510.003210-0.0019640.0165500.0309620.004340-0.019463-0.0091490.0082560.019600
20.0167120.004806-0.001924-0.0272260.029162-0.017201-0.023197-0.008610-0.0119760.020602
3-0.0092160.003900-0.009232-0.0052320.042718-0.032432-0.0062430.0135240.0080950.021227
4-0.016321-0.008715-0.001633-0.0005010.027367-0.0378610.0085150.0210660.0203730.016512
50.0185380.007522-0.009302-0.0254400.037199-0.009890-0.021419-0.011769-0.0022210.018277
60.0085320.008041-0.0165730.0186530.0361400.004038-0.0228910.000484-0.0059000.015766
70.0244190.012915-0.010596-0.0393500.037018-0.013378-0.020677-0.004417-0.0118640.013540
\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 6 \\\n", "0 0.004690 0.009370 -0.009667 0.026014 0.034989 0.010402 -0.033441 \n", "1 0.005751 0.003210 -0.001964 0.016550 0.030962 0.004340 -0.019463 \n", "2 0.016712 0.004806 -0.001924 -0.027226 0.029162 -0.017201 -0.023197 \n", "3 -0.009216 0.003900 -0.009232 -0.005232 0.042718 -0.032432 -0.006243 \n", "4 -0.016321 -0.008715 -0.001633 -0.000501 0.027367 -0.037861 0.008515 \n", "5 0.018538 0.007522 -0.009302 -0.025440 0.037199 -0.009890 -0.021419 \n", "6 0.008532 0.008041 -0.016573 0.018653 0.036140 0.004038 -0.022891 \n", "7 0.024419 0.012915 -0.010596 -0.039350 0.037018 -0.013378 -0.020677 \n", "\n", " 7 8 9 \n", "0 -0.011956 -0.000243 0.010552 \n", "1 -0.009149 0.008256 0.019600 \n", "2 -0.008610 -0.011976 0.020602 \n", "3 0.013524 0.008095 0.021227 \n", "4 0.021066 0.020373 0.016512 \n", "5 -0.011769 -0.002221 0.018277 \n", "6 0.000484 -0.005900 0.015766 \n", "7 -0.004417 -0.011864 0.013540 " ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w2v_feature_array = averaged_word_vectorizer(corpus=tokenized_corpus, model=w2v_model,\n", " num_features=feature_size)\n", "pd.DataFrame(w2v_feature_array)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Clustering with word embeddings" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DocumentCategoryClusterLabel
0The sky is blue and beautiful.weather2
1Love this blue and beautiful sky!weather2
2The quick brown fox jumps over the lazy dog.animals1
3A king's breakfast has sausages, ham, bacon, eggs, toast and beansfood0
4I love green eggs, ham, sausages and bacon!food0
5The brown fox is quick and the blue dog is lazy!animals1
6The sky is very blue and the sky is very beautiful todayweather2
7The dog is lazy but the brown fox is quick!animals1
\n", "
" ], "text/plain": [ " Document \\\n", "0 The sky is blue and beautiful. \n", "1 Love this blue and beautiful sky! \n", "2 The quick brown fox jumps over the lazy dog. \n", "3 A king's breakfast has sausages, ham, bacon, eggs, toast and beans \n", "4 I love green eggs, ham, sausages and bacon! \n", "5 The brown fox is quick and the blue dog is lazy! \n", "6 The sky is very blue and the sky is very beautiful today \n", "7 The dog is lazy but the brown fox is quick! \n", "\n", " Category ClusterLabel \n", "0 weather 2 \n", "1 weather 2 \n", "2 animals 1 \n", "3 food 0 \n", "4 food 0 \n", "5 animals 1 \n", "6 weather 2 \n", "7 animals 1 " ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.cluster import AffinityPropagation\n", "\n", "ap = AffinityPropagation()\n", "ap.fit(w2v_feature_array)\n", "cluster_labels = ap.labels_\n", "cluster_labels = pd.DataFrame(cluster_labels, columns=['ClusterLabel'])\n", "pd.concat([corpus_df, cluster_labels], axis=1)" ] }, { "cell_type": "code", "execution_count": 85, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.decomposition import PCA\n", "\n", "pca = PCA(n_components=2, random_state=0)\n", "pcs = pca.fit_transform(w2v_feature_array)\n", "labels = ap.labels_\n", "categories = list(corpus_df['Category'])\n", "plt.figure(figsize=(8, 6))\n", "\n", "for i in range(len(labels)):\n", " label = labels[i]\n", " color = 'orange' if label == 0 else 'blue' if label == 1 else 'green'\n", " annotation_label = categories[i]\n", " x, y = pcs[i]\n", " plt.scatter(x, y, c=color, edgecolors='k')\n", " plt.annotate(annotation_label, xy=(x+1e-4, y+1e-3), xytext=(0, 0), textcoords='offset points')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## GloVe Embeddings with spaCy" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Use the following command to install spaCy\n", "> pip install -U spacy\n", "\n", "OR\n", "\n", "> conda install -c conda-forge spacy\n", "\n", "\n", "# Download the following language model and store it in disk\n", "https://github.com/explosion/spacy-models/releases/tag/en_vectors_web_lg-2.0.0\n", "\n", "\n", "# Link the same to spacy \n", "> python -m spacy link ./spacymodels/en_vectors_web_lg-2.0.0/en_vectors_web_lg en_vecs\n", "\n", " Linking successful\n", " ./spacymodels/en_vectors_web_lg-2.0.0/en_vectors_web_lg --> ./Anaconda3/lib/site-packages/spacy/data/en_vecs\n", "\n", " You can now load the model via spacy.load('en_vecs')" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Total word vectors: 1070971\n" ] } ], "source": [ "import spacy\n", "\n", "nlp = spacy.load('en_vecs')\n", "\n", "total_vectors = len(nlp.vocab.vectors)\n", "print('Total word vectors:', total_vectors)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualize GloVe word embeddings" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
0123456789...290291292293294295296297298299
fox-0.348680-0.0777200.177750-0.094953-0.4528900.2377900.2094400.0378860.0350640.899010...-0.2830500.270240-0.6548000.105300-0.068738-0.5347500.0617830.123610-0.553700-0.544790
ham-0.773320-0.2825400.5807600.8414800.2585400.585210-0.021890-0.4636800.1390700.658720...0.4644700.481400-0.8292000.3549100.224530-0.4939200.456930-0.649100-0.1319300.372040
brown-0.374120-0.0762640.1092600.1866200.0299430.182700-0.6319800.133060-0.1289800.603430...-0.0154040.392890-0.034826-0.720300-0.3653200.7405100.108390-0.365760-0.2881900.114630
beautiful0.1712000.534390-0.348540-0.0972340.101800-0.1708600.295650-0.041816-0.5165502.117200...-0.2855400.1046700.1263100.1200400.2543800.2474000.2076700.1725800.0638750.350990
jumps-0.3348400.215990-0.350440-0.2600200.4110700.154010-0.3861100.2063800.3867001.460500...-0.107030-0.279480-0.186200-0.543140-0.479980-0.2846800.0360220.1902900.692290-0.071501
eggs-0.417810-0.035192-0.126150-0.215930-0.6697400.513250-0.797090-0.0686110.6346601.256300...-0.232860-0.139740-0.681080-0.370920-0.5455100.0737280.111620-0.3247000.0597210.159160
beans-0.423290-0.2645000.2008700.0821870.0669441.027600-0.989140-0.2599500.1459600.766450...0.0487600.351680-0.786260-0.368790-0.5286400.287650-0.273120-1.1140000.0643220.223620
sky0.312550-0.3030800.019587-0.3549400.100180-0.141530-0.5142700.886110-0.5305401.556600...-0.6670500.2791100.500970-0.277580-0.1437200.3427100.2875800.5377400.3634900.496920
bacon-0.430730-0.0160250.4846200.101390-0.2992000.761820-0.353130-0.3252900.1567300.873210...0.3042400.413440-0.540730-0.035930-0.429450-0.2465900.161490-1.065400-0.2449400.269540
breakfast0.0733780.2276700.208420-0.456790-0.0782190.601960-0.024494-0.4679800.0546272.283700...0.6477100.3738200.019931-0.033672-0.0731840.2968300.340420-0.599390-0.0611140.232200
toast0.130740-0.1937300.2532700.090102-0.272580-0.0305710.096945-0.1150600.4840000.848380...0.1420800.4819100.0451670.057151-0.149520-0.495130-0.086677-0.569040-0.3592900.097443
today-0.1565700.594890-0.031445-0.0775860.278630-0.509210-0.066350-0.081890-0.0479862.803600...-0.326580-0.4133800.367910-0.262630-0.203690-0.296560-0.014873-0.250060-0.1159400.083741
blue0.1294500.0365180.032298-0.0600340.399840-0.103020-0.5078800.076630-0.4229200.815730...-0.5012800.1690100.548250-0.319380-0.0728870.3829500.2374100.0522890.1820600.412640
green-0.0723680.2332000.137260-0.1566300.2484400.349870-0.241700-0.091426-0.5301501.341300...-0.4051700.2435700.437300-0.461520-0.3527100.3362500.069899-0.1115500.5329300.712680
kings0.259230-0.8546900.360010-0.6420000.568530-0.3214200.1732500.133030-0.0897201.528600...-0.4700900.063743-0.545210-0.192310-0.3010201.0685000.231160-0.1473300.662490-0.577420
dog-0.0571200.0526850.003026-0.0485170.0070430.041856-0.024704-0.0397830.0096140.308416...0.003257-0.036864-0.0438780.000249-0.0269590.0778950.0443500.0351070.042551-0.010643
sausages-0.174290-0.064869-0.0469760.287420-0.1281500.6476300.056315-0.240440-0.0250940.502220...0.3022400.195470-0.653980-0.291150-0.684290-0.2663700.304310-0.8068300.6195400.201200
lazy-0.353320-0.299710-0.176230-0.321940-0.3856400.5861100.411160-0.4186800.0730931.486500...0.402310-0.038554-0.288670-0.2441300.4609900.5141700.1362600.344190-0.845300-0.077383
love0.1394900.534530-0.252470-0.1256500.0487480.1524400.199060-0.0659700.1288302.055900...-0.1243800.178440-0.0994690.0086820.089213-0.075513-0.049069-0.0152280.0884080.302170
quick-0.4456300.191510-0.2492100.4659000.1619500.212780-0.0464800.0211700.4176601.686900...-0.3294600.421860-0.0395430.1501800.3382200.0495540.149420-0.038789-0.0190690.348650
\n", "

20 rows × 300 columns

\n", "
" ], "text/plain": [ " 0 1 2 3 4 5 \\\n", "fox -0.348680 -0.077720 0.177750 -0.094953 -0.452890 0.237790 \n", "ham -0.773320 -0.282540 0.580760 0.841480 0.258540 0.585210 \n", "brown -0.374120 -0.076264 0.109260 0.186620 0.029943 0.182700 \n", "beautiful 0.171200 0.534390 -0.348540 -0.097234 0.101800 -0.170860 \n", "jumps -0.334840 0.215990 -0.350440 -0.260020 0.411070 0.154010 \n", "eggs -0.417810 -0.035192 -0.126150 -0.215930 -0.669740 0.513250 \n", "beans -0.423290 -0.264500 0.200870 0.082187 0.066944 1.027600 \n", "sky 0.312550 -0.303080 0.019587 -0.354940 0.100180 -0.141530 \n", "bacon -0.430730 -0.016025 0.484620 0.101390 -0.299200 0.761820 \n", "breakfast 0.073378 0.227670 0.208420 -0.456790 -0.078219 0.601960 \n", "toast 0.130740 -0.193730 0.253270 0.090102 -0.272580 -0.030571 \n", "today -0.156570 0.594890 -0.031445 -0.077586 0.278630 -0.509210 \n", "blue 0.129450 0.036518 0.032298 -0.060034 0.399840 -0.103020 \n", "green -0.072368 0.233200 0.137260 -0.156630 0.248440 0.349870 \n", "kings 0.259230 -0.854690 0.360010 -0.642000 0.568530 -0.321420 \n", "dog -0.057120 0.052685 0.003026 -0.048517 0.007043 0.041856 \n", "sausages -0.174290 -0.064869 -0.046976 0.287420 -0.128150 0.647630 \n", "lazy -0.353320 -0.299710 -0.176230 -0.321940 -0.385640 0.586110 \n", "love 0.139490 0.534530 -0.252470 -0.125650 0.048748 0.152440 \n", "quick -0.445630 0.191510 -0.249210 0.465900 0.161950 0.212780 \n", "\n", " 6 7 8 9 ... 290 \\\n", "fox 0.209440 0.037886 0.035064 0.899010 ... -0.283050 \n", "ham -0.021890 -0.463680 0.139070 0.658720 ... 0.464470 \n", "brown -0.631980 0.133060 -0.128980 0.603430 ... -0.015404 \n", "beautiful 0.295650 -0.041816 -0.516550 2.117200 ... -0.285540 \n", "jumps -0.386110 0.206380 0.386700 1.460500 ... -0.107030 \n", "eggs -0.797090 -0.068611 0.634660 1.256300 ... -0.232860 \n", "beans -0.989140 -0.259950 0.145960 0.766450 ... 0.048760 \n", "sky -0.514270 0.886110 -0.530540 1.556600 ... -0.667050 \n", "bacon -0.353130 -0.325290 0.156730 0.873210 ... 0.304240 \n", "breakfast -0.024494 -0.467980 0.054627 2.283700 ... 0.647710 \n", "toast 0.096945 -0.115060 0.484000 0.848380 ... 0.142080 \n", "today -0.066350 -0.081890 -0.047986 2.803600 ... -0.326580 \n", "blue -0.507880 0.076630 -0.422920 0.815730 ... -0.501280 \n", "green -0.241700 -0.091426 -0.530150 1.341300 ... -0.405170 \n", "kings 0.173250 0.133030 -0.089720 1.528600 ... -0.470090 \n", "dog -0.024704 -0.039783 0.009614 0.308416 ... 0.003257 \n", "sausages 0.056315 -0.240440 -0.025094 0.502220 ... 0.302240 \n", "lazy 0.411160 -0.418680 0.073093 1.486500 ... 0.402310 \n", "love 0.199060 -0.065970 0.128830 2.055900 ... -0.124380 \n", "quick -0.046480 0.021170 0.417660 1.686900 ... -0.329460 \n", "\n", " 291 292 293 294 295 296 \\\n", "fox 0.270240 -0.654800 0.105300 -0.068738 -0.534750 0.061783 \n", "ham 0.481400 -0.829200 0.354910 0.224530 -0.493920 0.456930 \n", "brown 0.392890 -0.034826 -0.720300 -0.365320 0.740510 0.108390 \n", "beautiful 0.104670 0.126310 0.120040 0.254380 0.247400 0.207670 \n", "jumps -0.279480 -0.186200 -0.543140 -0.479980 -0.284680 0.036022 \n", "eggs -0.139740 -0.681080 -0.370920 -0.545510 0.073728 0.111620 \n", "beans 0.351680 -0.786260 -0.368790 -0.528640 0.287650 -0.273120 \n", "sky 0.279110 0.500970 -0.277580 -0.143720 0.342710 0.287580 \n", "bacon 0.413440 -0.540730 -0.035930 -0.429450 -0.246590 0.161490 \n", "breakfast 0.373820 0.019931 -0.033672 -0.073184 0.296830 0.340420 \n", "toast 0.481910 0.045167 0.057151 -0.149520 -0.495130 -0.086677 \n", "today -0.413380 0.367910 -0.262630 -0.203690 -0.296560 -0.014873 \n", "blue 0.169010 0.548250 -0.319380 -0.072887 0.382950 0.237410 \n", "green 0.243570 0.437300 -0.461520 -0.352710 0.336250 0.069899 \n", "kings 0.063743 -0.545210 -0.192310 -0.301020 1.068500 0.231160 \n", "dog -0.036864 -0.043878 0.000249 -0.026959 0.077895 0.044350 \n", "sausages 0.195470 -0.653980 -0.291150 -0.684290 -0.266370 0.304310 \n", "lazy -0.038554 -0.288670 -0.244130 0.460990 0.514170 0.136260 \n", "love 0.178440 -0.099469 0.008682 0.089213 -0.075513 -0.049069 \n", "quick 0.421860 -0.039543 0.150180 0.338220 0.049554 0.149420 \n", "\n", " 297 298 299 \n", "fox 0.123610 -0.553700 -0.544790 \n", "ham -0.649100 -0.131930 0.372040 \n", "brown -0.365760 -0.288190 0.114630 \n", "beautiful 0.172580 0.063875 0.350990 \n", "jumps 0.190290 0.692290 -0.071501 \n", "eggs -0.324700 0.059721 0.159160 \n", "beans -1.114000 0.064322 0.223620 \n", "sky 0.537740 0.363490 0.496920 \n", "bacon -1.065400 -0.244940 0.269540 \n", "breakfast -0.599390 -0.061114 0.232200 \n", "toast -0.569040 -0.359290 0.097443 \n", "today -0.250060 -0.115940 0.083741 \n", "blue 0.052289 0.182060 0.412640 \n", "green -0.111550 0.532930 0.712680 \n", "kings -0.147330 0.662490 -0.577420 \n", "dog 0.035107 0.042551 -0.010643 \n", "sausages -0.806830 0.619540 0.201200 \n", "lazy 0.344190 -0.845300 -0.077383 \n", "love -0.015228 0.088408 0.302170 \n", "quick -0.038789 -0.019069 0.348650 \n", "\n", "[20 rows x 300 columns]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "unique_words = list(set([word for sublist in [doc.split() for doc in norm_corpus] for word in sublist]))\n", "\n", "word_glove_vectors = np.array([nlp(word).vector for word in unique_words])\n", "pd.DataFrame(word_glove_vectors, index=unique_words)" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nWvd58vPzbXBwsD18+LA9cOCAveaaa+z3339vf/75Z9u9e3c7duxYa621gwcPtuvWrbPWWrtv3z7b\nvn17a621t912m12/fr211trc3FxbWFhYJb+LmghItxXMpxraUVudnElgWD4E4vrq+SlXe1xcHLff\nfjuhoaE4HA7at28PwEsvvcQPP/zAjTfeCIDD4eBvf/sbAPfccw9Op5OmTZv66IJEajDN3S0iXhQa\nGsr//u//8vDDD3PbbbfRo0cPlixZwrPPPkt+fj4//PADwcHB7iGY5bn++uuZOXMm3377LXfeeSft\n2rUDYPbs2SxduhSAb775ht27d/Of//yHXr16cemllwJw99138+WXXwKwcuVKduzY4T7vjz/+SF5e\nHt26deP//b//R1xcHHfeeSdXX301ciYF6dpq+hRXiD45bjMY8h5xtTcbEsfGjRvPOCQxMfGsp1u/\nfj0PPfRQ1dQqIiIibtdddx2bN2/mvffeY+rUqfTp04c5c+aQnp5Oq1atmDZtmntIZp06dSgpcd3Y\nXHYKzSFDhtClSxdWrFjBb3/7W1599VX8/PxYuXIlGzdupH79+vTu3ftXp90sKSlh06ZN1KtX75T2\nyZMn079/f9577z26devGhx9+6O6Yk//SGOnaavd+V090WYGl7efg6NGjXHfddVx88cX06dPHa+WJ\niIhIqdMe6vTvOS9Rv359hg4dyqRJk9i8eTMAzZo1Iy8vj9TUVPehAQEBZGRkAJzSvnfvXtq0acOE\nCRMYMGAAX3zxBceOHaNp06bUr1+fXbt2sWnTJgAiIyP59NNPOXLkCEVFRSxZssR9nr59+/Liiy+6\n151OJwB79uwhNDSUhx9+mMjISHbt2lVlv57aTD3StZWXZhJo0qSJ++sdERER8bJyhmJufWwik555\nFr9LL+Wiiy7ilVdeYdmyZYSEhHDFFVcQGRnpPnzixIncc889zJs3j/79+7vb33rrLd544w0uuugi\nrrjiCh599FEuueQS5s6dS1BQEIGBgXTt2hWAq666ikcffZSoqCguvfRS2rdvT+PGjQHXUJCxY8cS\nFhZGUVERPXv2ZO7cucyaNYvVq1fj5+dHcHAw/fr1q9ZfW22heaRrqzP+YeKaSSBhnsZyioiI1BQ1\n5KFOeXl5NGjQgKKiImJiYhg+fDgxMTHV9v61ieaRvhCcDMvTp7iGc7RrDQkzFaJFRERqEi8Nxays\n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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.manifold import TSNE\n", "\n", "tsne = TSNE(n_components=2, random_state=0, n_iter=5000, perplexity=3)\n", "np.set_printoptions(suppress=True)\n", "T = tsne.fit_transform(word_glove_vectors)\n", "labels = unique_words\n", "\n", "plt.figure(figsize=(12, 6))\n", "plt.scatter(T[:, 0], T[:, 1], c='orange', edgecolors='r')\n", "for label, x, y in zip(labels, T[:, 0], T[:, 1]):\n", " plt.annotate(label, xy=(x+1, y+1), xytext=(0, 0), textcoords='offset points')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cluster documents with GloVe Embeddings" ] }, { "cell_type": "code", "execution_count": 86, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
DocumentCategoryClusterLabel
0The sky is blue and beautiful.weather2
1Love this blue and beautiful sky!weather2
2The quick brown fox jumps over the lazy dog.animals1
3A king's breakfast has sausages, ham, bacon, eggs, toast and beansfood0
4I love green eggs, ham, sausages and bacon!food0
5The brown fox is quick and the blue dog is lazy!animals1
6The sky is very blue and the sky is very beautiful todayweather2
7The dog is lazy but the brown fox is quick!animals1
\n", "
" ], "text/plain": [ " Document \\\n", "0 The sky is blue and beautiful. \n", "1 Love this blue and beautiful sky! \n", "2 The quick brown fox jumps over the lazy dog. \n", "3 A king's breakfast has sausages, ham, bacon, eggs, toast and beans \n", "4 I love green eggs, ham, sausages and bacon! \n", "5 The brown fox is quick and the blue dog is lazy! \n", "6 The sky is very blue and the sky is very beautiful today \n", "7 The dog is lazy but the brown fox is quick! \n", "\n", " Category ClusterLabel \n", "0 weather 2 \n", "1 weather 2 \n", "2 animals 1 \n", "3 food 0 \n", "4 food 0 \n", "5 animals 1 \n", "6 weather 2 \n", "7 animals 1 " ] }, "execution_count": 86, "metadata": {}, "output_type": "execute_result" } ], "source": [ "doc_glove_vectors = np.array([nlp(str(doc)).vector for doc in norm_corpus])\n", "\n", "km = KMeans(n_clusters=3, random_state=0)\n", "km.fit_transform(doc_glove_vectors)\n", "cluster_labels = km.labels_\n", "cluster_labels = pd.DataFrame(cluster_labels, columns=['ClusterLabel'])\n", "pd.concat([corpus_df, cluster_labels], axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Leveraging gensim for building a FastText model" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from gensim.models.fasttext import FastText\n", "\n", "wpt = nltk.WordPunctTokenizer()\n", "tokenized_corpus = [wpt.tokenize(document) for document in norm_bible]\n", "\n", "# Set values for various parameters\n", "feature_size = 100 # Word vector dimensionality \n", "window_context = 50 # Context window size \n", "min_word_count = 5 # Minimum word count \n", "sample = 1e-3 # Downsample setting for frequent words\n", "\n", "\n", "ft_model = FastText(tokenized_corpus, size=feature_size, window=window_context, \n", " min_count=min_word_count,sample=sample, sg=1, iter=50)\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "{'egypt': ['land', 'pharaoh', 'egyptians', 'pathros', 'assyrian'],\n", " 'famine': ['pestilence', 'sword', 'egypt', 'dearth', 'blasted'],\n", " 'god': ['lord', 'therefore', 'jesus', 'christ', 'truth'],\n", " 'gospel': ['preached', 'preach', 'christ', 'preaching', 'gentiles'],\n", " 'jesus': ['christ', 'god', 'disciples', 'paul', 'grace'],\n", " 'john': ['baptist', 'baptize', 'peter', 'philip', 'baptized'],\n", " 'moses': ['aaron', 'commanded', 'congregation', 'spake', 'tabernacle'],\n", " 'noah': ['shem', 'methuselah', 'creepeth', 'adam', 'milcah']}" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# view similar words based on gensim's model\n", "similar_words = {search_term: [item[0] for item in ft_model.wv.most_similar([search_term], topn=5)]\n", " for search_term in ['god', 'jesus', 'noah', 'egypt', 'john', 'gospel', 'moses','famine']}\n", "similar_words" ] }, { "cell_type": "code", "execution_count": 63, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABB0AAAJCCAYAAACMDb+GAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XlcVde9///3EqemTqnYNBgS5AciIoOCiBNV1Ggbk5sB\nb5za2DRGHDKRmuQ2A5KkfSQpD28q1Zr40xpzQ2pFk6hN+60TQRyqRwRxLEdKHPBaS5ynAK7vH+r5\nimLUcDYH9PV8PHjk7LXXXuuzzyP/7LfrrG2stQIAAAAAAPC2Rr4uAAAAAAAA3JwIHQAAAAAAgCMI\nHQAAAAAAgCMIHQAAAAAAgCMIHQAAAAAAgCMIHQAAAAAAgCMIHQAAAAAAgCMIHQAAAAAAgCMIHQAA\nAAAAgCMa+7qAq/H397dBQUG+LgMAAAAAAFxm06ZN/7bWtrtWv3obOgQFBcnlcvm6DAAAAAAAcBlj\nzJfX04+fVwAAAAAAAEcQOgAAAAAAAEcQOgAAAAAAAEcQOgAAAAAAAEcQOgAAAAAAAEcQOgAAAAAA\nAEfUOnQwxjQ3xmwwxhQaY7YZY9Jr6NPMGDPfGOM2xvzdGBNU23kBAAAAAED95o2VDmclJVlroyXF\nSBpijEm4rM/PJR221oZI+m9Jb3thXgAAAAAAUI/VOnSw5524cNjkwp+9rNt/SPrgwudsSQOMMaa2\ncwMAAAAAgPrLK3s6GGP8jDEFkv4laZm19u+XdWkvaa8kWWsrJR2V1NYbcwMAAAAAgPrJK6GDtbbK\nWhsj6S5J8caYLt9mHGPMk8YYlzHGdejQIW+UBgAAAAAAfMSrb6+w1h6RtErSkMtO7ZcUKEnGmMaS\nWksqr+H69621cdbauHbt2nmzNAAAAAAAUMe88faKdsaYNhc+f0fSIEk7L+u2WNJjFz4nS1pprb18\n34dbSmlpqbp0+VYLQqrJycnR2rVrPcczZ87UvHnzrrs/AAAAAABOaeyFMe6U9IExxk/nQ4w/WWuX\nGmNel+Sy1i6WNFvSh8YYt6SvJA33wrzQ+RChRYsW6tWrlyQpJSXlhvoDAAAAAOAUU18XHMTFxVmX\ny+XrMhxTWlqqIUOGKDY2Vvn5+YqIiNC8efOUkZGhJUuW6PTp0+rVq5fee+89GWPUr18/RUdH64sv\nvlBlZaXmzJmjr7/+Wv369dMdd9yhdu3aKTMzUytWrFCLFi30i1/8QtOmTdPMmTPVuHFjde7cWW+9\n9ZYSEhLk5+fn6d+3b1/l5OSoadOmniBi5syZuu222/TTn/7Ux98SAAAAAKA+MsZsstbGXaufV/d0\nwI3ZtWuXJkyYoB07dqhVq1aaMWOGJk2apI0bN2rr1q06ffq0li5d6ul/6tQpFRQUaMaMGXr88cd1\n11136Xvf+56ee+45FRQUqG/fvtXGf+utt7R582Zt2bJFM2fOVFBQkFJSUq7of/lPLlJSUggcAAAA\nAAC1RujgQ4GBgerdu7ckafTo0crLy9OqVavUo0cPRUZGauXKldq2bZun/4gRIyRJiYmJOnbsmI4d\nO6Zz584pKytL4eHhSk5OVkVFhZYtW6bu3bvr+PHj6tSpkz788EM1btxY/fr101/+8hdNnTpVXbp0\n0YYNG1RaWqqZM2fqv//7vxUTE6PVq1drypQpysjIUFlZmWJiYjx/fn5++vLLL3Xo0CE98sgj6t69\nu7p37641a9b45PsDAAAA0DAsXrxYb731liR5njdulLf2xUPdInTwIWPMFccTJkxQdna2ioqKNHbs\nWJ05c+aq/SWpvLxcPXv29KyW2Lhxo3r37q2NGzfqyJEjCgkJUXZ2trp37y5rrSoqKpSamupZLXG1\n1Q+SFBAQoIKCAhUUFGjs2LF65JFHdM899+iZZ57Rc889p40bN2rhwoV64oknnPuSAAAAADR4Dzzw\ngF566SVflwEfIHTwoT179mjdunWSpKysLPXp00eS5O/vrxMnTig7O7ta//nz50uS8vLy1Lp1a7Vq\n1Upt2rSRv7+/pPOrJfbs2SO3260ePXooIiJC27dvV3x8vI4ePaqqqirFx8fr+PHjntUSR44cuWad\na9as0axZszRnzhxJ0vLlyzVp0iTFxMTogQce0LFjx3TixAmvfS8AAAAAGo7S0lJ16tRJY8aMUceO\nHTVq1CgtX75cvXv3VmhoqDZs2KC5c+dq0qRJV1zrdrs1cOBARUdHq1u3btq9e7dOnDihAQMGqFu3\nboqMjNRnn33m6V9VVaWxY8cqIiJC9957r06fPl2Xt4pvgdDBh8LCwjR9+nSFh4fr8OHDGj9+vMaO\nHasuXbpo8ODB6t69e7X+zZs3V9euXZWSkqLZs2dLkm677TZ98skniomJ0ZYtW2SM0SeffKKPP/5Y\n/v7+qqio0G9/+1s9/fTTaty4sXr16uXpf/bs2RpXT1zqwIED+vnPf64//elPatGihSTp3LlzWr9+\n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\nUnXp0qXW4+Tk5Gjt2rWe45kzZ2revHm1HjcoKEj//ve/az0OAAAAAKD+auzrAlC/5eTkqEWLFurV\nq5ckKSUlxccVAQAAAAAaCkKHm1hlZaVGjRql/Px8RUREaN68ecrIyNCSJUt0+vRp9erVS++9956M\nMerXr5+io6P1xRdfqLKyUnPmzNH3v/99zZw5U35+fvqf//kfZWZmasWKFWrRooVGjhypH//4x565\nioqKVFJSottuu00pKSnas2ePJOndd99V7969VV5erhEjRmj//v3q2bOnrLW++loAAAAAAHWEn1fc\nxHbt2qUJEyZox44datWqlWbMmKFJkyZp48aN2rp1q06fPq2lS5d6+p86dUoFBQWaMWOGHn/8cQUF\nBSklJUXPPfecCgoK1LdvX0/fgIAAFRQUqKCgQGPHjtUjjzyie+65R88884yee+45bdy4UQsXLtQT\nTzwhSUpPT1efPn20bds2PfTQQ55QAgAAAABw82Klw00sMDBQvXv3liSNHj1a06ZNU4cOHfTOO+/o\n1KlT+uqrrxQREaH7779fkjRixAhJUmJioo4dO6YjR45cc441a9Zo1qxZysvLkyQtX75c27dv95w/\nduyYTpw4odzcXC1atEiSdN999+n222/36r0CAAAAAOofQoebmDHmiuMJEybI5XIpMDBQU6ZM0Zkz\nZ76x/zc5cOCAfv7zn2vx4sVq0aKFJOncuXNav369mjdv7qW7AAAAAAA0VPy84ia2Z88erVu3TpKU\nlZWlPn36SJL8/f114sQJZWdnV+s/f/58SVJeXp5at26t1q1bq2XLljp+/PgVY1dUVGjYsGF6++23\n1bFjR0/7vffeq8zMTM9xQUGBpPOrJ7KysiRJf/nLX3T48GEv3ikAAAAAoD4idLiJhYWFafr06QoP\nD9fhw4c1fvx4jR07Vl26dNHgwYPVvXv3av2bN2+url27KiUlRbNnz5Yk3X///frkk08UExOj1atX\ne/quXbtWLpdLaWlpiomJUUxMjMrKyjRt2jS5XC5FRUWpc+fOmjlzpiQpLS1Nubm5ioiI0KJFi3T3\n3XfX3RcBAAAAAPAJU1/fIhAXF2ddLpevy7hl9OvXTxkZGYqLi/N1KQAAAACAes4Ys8lae80HSFY6\nNCBZRVkKmx4mv9f9FDY9TFlFWb4uCQAAAACAq2IjyQYiqyhLqStSlZyUrHEB41RSVqLUFamSpJGR\n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\n586dkyT97W9/U8+ePdWtWzcNGzZMJ06c0LRp01RWVqb+/furf//+nrpefvllRUdHKyEhQQcPHqz7\nLwbATY/QAQAAAHDQtm3b9Oabb2rlypUqLCzUb3/7W0nSvn37tHbtWk2dOlW/+tWvlJSUpA0bNmjV\nqlWaPHmyTp48qdmzZ6t169bauHGjNm7cqFmzZumf//ynJGnDhg3KzMzU9u3btXv3bi1atEj//ve/\n9eabb2r58uXKz89XXFycpk6dqqeffloBAQFatWqVVq1aJUk6efKkEhISVFhYqMTERM2aNctn3xGA\nm1djXxcAAAAA3MxWrlypYcOGyd/fX5L0ve99T5I0bNgw+fn5STq/OmHx4sXKyMiQJJ05c0Z79uzR\n3/72N23ZskXZ2dmSpKNHj6q4uFhNmzZVfHy8goODJUkjRoxQXl6emjdvru3bt6t3796SpK+//lo9\ne/assa6mTZtq6NChkqTY2FgtW7bMoW8AwK2M0AEAAADwge9+97uez9ZaLVy4UGFhYdX6WGuVmZmp\nwYMHV2vPycmRMaZamzFG1loNGjRIH3/88TXnb9KkiWcMPz+/OttbAsCthZ9XAAAAAA5KSkrSggUL\nVF5eLkn66quvrugzePBgZWZmylorSdq8ebOn/fe//70qKiokSf/4xz908uRJSed/XvHPf/5T586d\n0/z589WnTx8lJCRozZo1crvdks7/hOIf//iHJKlly5Y6fvy4szcLAJdhpQMAAADgoIiICL388sv6\n4Q9/KD8/P3Xt2vWKPq+++qqeffZZRUVF6dy5c+rQoYOWLl2qJ554QqWlperWrZustWrXrp0+/fRT\nSVL37t01adIkud1u9e/fXw899JAaNWqkuXPnasSIETp79qwk6c0331THjh315JNPasiQIZ69HQCg\nLpiLaWp9ExcXZ10ul6/LAAAAAK6QVZSl9Nx0ucvdCmkborTENI2MHFln8+fk5CgjI0NLly6tszkB\n4FLGmE3W2rhr9WOlAwAAAHADsoqylLoiVclJyRoXME4lZSVKXZEqSXUaPABAQ8BKBwAAAOAGhE0P\n06C+gxQaGOppK95brGWrl2nXxF0+rAwA6s71rnRgI0kAAADgBrjL3QoOCK7WFhwQLHe520cVAUD9\nRegAAAAA3ICQtiEqKSup1lZSVqKQtiE+qggA6i9CBwAAAOAGpCWmKXtltor3FquqqkrFe4uVvTJb\naYlpvi4NAOodNpIEAAAAbsDFzSIvfXvF1AFT2UQSAGrARpIAAAAAAOCGsJEkAAAAAADwKUIHAAAA\nAADgCEIHAAAAAADgCEIHAAAAAADgCEIHAAAAAADgCEIHAAAAAADgCEIHAAAAAADgCEIHAAAAAADg\nCEIHAAAAAADgCK+EDsaYIcaYXcYYtzHmpRrOjzHGHDLGFFz4e8Ib8wIAAAAAgPqrcW0HMMb4SZou\naZCkfZI2GmMWW2u3X9Z1vrV2Um3nAwAAAAAADYM3VjrES3Jba0ustV9L+qOk//DCuAAAAAAAoAHz\nRujQXtLeS473XWi73CPGmC3GmGxjTKAX5gUAAAAAAPVYXW0kuURSkLU2StIySR/U1MkY86QxxmWM\ncR06dKiOSgMAAAAAAE7wRuiwX9KlKxfuutDmYa0tt9aevXD4/0uKrWkga+371to4a21cu3btvFAa\nAAAAAADwFW+EDhslhRpjOhhjmkoaLmnxpR2MMXdecviApB1emBcAAAAAANRjtX57hbW20hgzSdL/\nkeQnaY61dpsx5nVJLmvtYklPG2MekFQp6StJY2o7LwAAAAAAqN+MtdbXNdQoLi7OulwuX5cBAAAA\nAAAuY4zZZK2Nu1a/utpIEgAAAAAA3GIIHQAAAAAAgCMIHQAHtGjRwtclAAAAAIDPEToAF1RVVfm6\nBAAAAAC4qRA64JZQWlqqTp06adSoUQoPD1dycrJOnTqloKAgvfjii+rWrZsWLFig3bt3a8iQIYqN\njVXfvn21c+dOSdKSJUvUo0cPde3aVQMHDtTBgwclSSdOnNDPfvYzRUZGKioqSgsXLvTM+fLLLys6\nOloJCQme/gAAAABwKyF0wC1j165dmjBhgnbs2KFWrVppxowZkqS2bdsqPz9fw4cP15NPPqnMzExt\n2rRJGRkZmjBhgiSpT58+Wr9+vTZv3qzhw4frnXfekSS98cYbat26tYqKirRlyxYlJSVJkk6ePKmE\nhAQVFhYqMTFRs2bN8s1NAwAAAIAPNfZ1AUBdCQwMVO/evSVJo0eP1rRp0yRJjz76qKTzqxbWrl2r\nYcOGea45e/asJGnfvn169NFHdeDAAX399dfq0KGDJGn58uX64x//6Ol/++23S5KaNm2qoUOHSpJi\nY2O1bNkyh+8OAAAAAOofQgfcMowxNR5/97vflSSdO3dObdq0UUFBwRXXPvXUU0pNTdUDDzygnJwc\nTZky5RvnatKkiWd8Pz8/VVZWeuEOAAAAAKBh4ecVuGXs2bNH69atkyRlZWWpT58+1c63atVKHTp0\n0IIFCyRJ1loVFhZKko4ePar27dtLkj744APPNYMGDdL06dM9x4cPH3b0HgAAAACgISF0wC0jLCxM\n06dPV3h4uA4fPqzx48df0eejjz7S7NmzFR0drYiICH322WeSpClTpmjYsGGKjY2Vv7+/p/8rr7yi\nw4cPq0uXLoqOjtaqVavq7H4AAAAAoL4z1lpf11CjuLg463K5fF0G6qmsoiyl56bLXe5WSNsQpSWm\naWTkyKv2Ly0t1dChQ7V169Y6rBIAAAAAbk7GmE3W2rhr9WNPBzQ4WUVZSl2RquSkZI0L+L/s3XtU\nV1X+//HnAVFAEkzTryglBKEgdzAVQdIwU8NMHO+pXTTNS1H91JkmsGymGc1Ko8uU5pVqwtJ0dLwh\n4TVDxbsEImlpaoQmCClwfn+Yn5EEL8lVX4+1WHw+5+xz9nsfWC4/b/Z+75FkHc0iZm0MwBUTDyIi\nIiIiIlK1NNNBah3PeE8iwyLxcPGwHMs4ksHq9atJfzq9GiMTERERERG5NVzrTAfVdJBaJzMnEzdn\nt1LH3JzdyMzJrKaIREREREREpCxKOkit497InayjWaWOZR3Nwr2RezVFJCIiIiIiImVR0kFqndjw\nWBKTEsk4kkFxcTEZRzJITEokNjy2ukMTERERERGRS6iQpNQ6F4tFXrp7xfQu01VEUkREREREpIZR\nIUkRERERERERuS4qJCkiVcrBweGGrm/ZsiU//fRTBUUjIiIiIiI1gZIOIrew4uLi6g5BRERERERu\nYko6iNyksrOzadWqFYMGDaJ169ZER0dz9uxZWrZsyYQJEwgMDOSzzz7j4MGDdOvWjaCgIMLCwjhw\n4AAAS5cu5d577yUgIID777+f48ePA5CXl8fw4cPx8fHB19eXRYsWWfr8y1/+gp+fH+3atbO0P3ny\nJH369CEkJISQkBA2btwIQE5ODl27dsXb25snnniCmrrUS0RERERE/jglHURuYunp6YwePZr9+/fT\noEED3nnnHQAaNWrE9u3b6d+/PyNGjGDmzJls27aNadOmMXr0aAA6duzIli1b2LFjB/379+ef//wn\nAK+88gqOjo7s3r2bXbt20blzZwDy8/Np164dO3fuJDw8nA8++ACA8ePH8+yzz/LNN9+waNEinnji\nCQAmT55Mx44d2bt3L7179+bw4cNV/XhERERERKSSafcKkZuYi4sLoaGhAAwePJgZM2YA0K9fP+DC\nrIVNmzbRt29fyzW//vorAN9//z39+vXj2LFjnDt3DldXVwDWrFnDJ598YmnfsGFDAOrWrUvPnj0B\nCAoKYvXq1Zb2+/bts7T/5ZdfyMvLIyUlhc8//xyAHj16WO4jIiIiIiI3DyUdRG5ihmGU+b5+/foA\nlJSU4OTkRFpa2mXXjh07lpiYGKKiokhOTiYuLu6KfdnY2Fjub21tTVFRkaWPLVu2YGtre6PDERER\nERGRWkbLK0RuYocPH2bz5s0AJCQk0LFjx1LnGzRogKurK5999hkApmmyc+dOAE6fPk3z5s0BmDt3\nruWayMhI4uPjLe9zc3OvGEPXrl2ZOXOm5f3FBEd4eDgJCQkArFix4qr3ERERERGR2kdJB5GbmKen\nJ/Hx8bRu3Zrc3FxGjRp1WZuFCxcya9Ys/Pz88Pb2ZsmSJQDExcXRt29fgoKCaNy4saX9iy++SG5u\nLm3atMHPz49169ZdMYYZM2aQmpqKr68vXl5evPfeewDExsaSkpKCt7c3n3/+OXfeeWcFjlxERERE\nRGoCo6ZWjA8ODjZTU1OrOwyRGiVhdwKTUyaTmZOJeyN3YsNjGegzsMy22dnZ9OzZkz179lRxlCIi\nIiIicrMzDGObaZrBV2unmg4itUTC7gRi1sYQ3Tmakc4jyTqaRczaGIByEw8iIiIiIiLVSTMdRGoJ\nz3hPIsMi8XDxsBzLOJLB6vWrSX86vRojExERERGRW821znRQTQeRWiIzJxM3Z7dSx9yc3cjMyaym\niERERERERK5MSQeRWsK9kTtZR7NKHcs6moV7I/dqikhEREREROTKlHQQqSViw2NJTEok40gGxcXF\nZBzJIDEpkdjw2OoOTUREREREpEwqJClSS1wsFnnp7hXTu0xXEUkREREREamxVEhSRERERERERK6L\nCkmKiIiIiIiISLVS0kFEREREREREKoWSDiIiIiIiIiJSKZR0EBEREREREZFKoaSDiIiIiIiIiFQK\nJR1EREREREREpFIo6SAiIiIiIiIilUJJBxERERERERGpFEo6iIiIiIiIiEilUNJBRERERERERCqF\nkg4iIiIiIiIiUimUdBARERERERGRSqGkg4iIiIiIiIhUCiUdRERERERERKRSKOkgIiIiIiIiIpVC\nSQcRERERERERqRRKOoiIiIiIiIhIpVDSQUREREREREQqRYUkHQzD6GYYRrphGJmGYUws43w9wzA+\n/e3814ZhtKyIfkVERERERESk5rrhpINhGNZAPPAg4AUMMAzD63fNHgdyTdN0B94A/nGj/YqIiIiI\niIhIzVYRMx3aApmmaWaZpnkO+ATo9bs2vYC5v71OBLoYhmFUQN8iIiIiIiIiUkNVRNKhOXDkkvff\n/3aszDamaRYBp4FGv7+RYRgjDMNINQwj9eTJkxUQmoiIiIiIiIhUlxpVSNI0zX+ZphlsmmbwHXfc\nUd3hiIiIiIiIiMgNqIikww+AyyXvW/x2rMw2hmHUARyBnAroW0SqmIODQ3WHICIiIiIitURFJB2+\nATwMw3A1DKMu0B/48ndtvgSG/vY6GkgyTdOsgL5FREREREREpIa64aTDbzUaxgArgf3Av03T3GsY\nxsuGYUT91mwW0MgwjEwgBrhsW00RuX6vvPIKnp6edOzYkQEDBjBt2jTS0tJo164dvr6+9O7dm9zc\nXABmzJiBl5cXvr6+9O/fH4C4uDiGDBlC+/bt8fDw4IMPPrDce+rUqYSEhODr60tsbGy1jE9ERERE\nRGq3OhVxE9M0lwPLf3fspUteFwJ9K6IvEbngm2++YdGiRezcuZPz588TGBhIUFAQjz76KDNnzqRT\np0689NJLTJ48mTfffJPXXnuNQ4cOUa9ePU6dOmW5z65du9iyZQv5+fkEBATQo0cP9uzZQ0ZGBlu3\nbsU0TaKiokhJSSE8PLwaRywiIiIiIrVNjSokKSLXbuPGjfTq1QtbW1tuu+02HnroIfLz8zl16hSd\nOnUCYOjQoaSkpADg6+vLoEGDWLBgAXXq/C/f2KtXL+zs7GjcuDH33XcfW7duZdWqVaxatYqAgAAC\nAwM5cOAAGRkZ1TJOERERERGpvSpkpoOI1Hz/+c9/SElJYenSpbz66qvs3r0bAMMwSrUzDAPTNJk0\naRIjR46sjlCvS1FRUakkioiIiIiI1Bya6SBSS4WGhrJ06VIKCwvJy8tj2bJl1K9fn4YNG7J+/XoA\n5s+fT6dOnSgpKeHIkSPcd999/OMf/+D06dPk5eUBsGTJEgoLC8nJySE5OZmQkBAeeOABZs+ebWnz\nww8/cOLEiWoZZ1l1KyIiInjmmWcIDg7mrbfeYunSpdx7770EBARw//33c/z4cQDy8vIYPnw4Pj4+\n+Pr6smjRIgBWrVpF+/btCQwMpG/fvpZxioiIiIhIxdKfB0VqqZCQEKKiovD19aVp06b4+Pjg6OjI\n3BG8NwcAACAASURBVLlzeeqppzh79ixubm589NFHFBcXM3jwYE6fPo1pmowbNw4nJyfgwrKL++67\nj59++om//vWvODs74+zszP79+2nfvj1wYZvMBQsW0KRJkyodY3l1KwDOnTtHamoqALm5uWzZsgXD\nMPjwww/55z//yeuvv84rr7yCo6OjZVZHbm4uP/30E1OmTGHNmjXUr1+ff/zjH0yfPp2XXnqp3DhE\nREREROSPUdJBpAZJ2J3A5JTJZOZk4t7IndjwWAb6DCy3/fPPP09cXBxnz54lPDycoKAg/P392bJl\ny2VtN2zYUOY9fH19mTdv3mXHx48fz/jx4y87XpWzAi6tW2Fra8tDDz1kOdevXz/L6++//55+/fpx\n7Ngxzp07h6urKwBr1qzhk08+sbRr2LAhy5YtY9++fYSGhgIXkhcXkysiIiIiIlKxlHQQqSESdicQ\nszaG6M7RjHQeSdbRLGLWxgCUm3gYMWIE+/bto7CwkKFDhxIYGFiVIVer+vXrW16PHTuWmJgYoqKi\nSE5OJi4urtzrTNMkMjKSjz/+uAqiFBERERG5tammg0gNMTllMtGdo/Fw8cDa2hoPFw+iO0czOWVy\nudckJCSQlpbGgQMHmDRp0nX3GRcXx/PPP38jYZerQYMGpWYmXIm1tXWZxy/Wrbj77rstdSvKcvr0\naZo3bw7A3LlzLccjIyOJj4+3vM/NzaVdu3Zs3LiRzMxMAPLz8/n222+vKU4REREREbk+SjqI1BCZ\nOZm4ObuVOubm7EZmTmY1RVT5Li7VKC4uLvP8xboVWVlZPPjgg5a6Fb8XFxdH3759CQoKonHjxpbj\nL774Irm5ubRp0wY/Pz/WrVvHHXfcwZw5cxgwYAC+vr60b9+eAwcOVM4ARURERERucYZpmtUdQ5mC\ng4PNi0XiRG4FnvGeRIZF4uHiYTmWcSSD1etXk/50ejVGdm0iIiJISUkBwN7eHisrK+rWrUtubi4l\nJSX07NmTpUuXMmbMGN59911KjBIohnvevodvx3yLaZqsXr2aBx98kJKSEgDGjRvHp59+yo8//ohh\nGBiGwTfffHNLLSMREREREamJDMPYZppm8NXaaaaDSA0RGx5LYlIiGUcyKC4uJuNIBolJicSGx1Z3\naFc1c+ZMvvrqKzZt2kRJSQlfffUVcGHpQkFBATNnzrQsjUj/KZ2SkhIiX43k9ZOvExkWCVyoaTF+\n/HhatmxJSUkJ+fn5jB49mvvuuw+Ae+65hylTpijhICIiIiJSi2img0gNcr27V9QU/v7+/PTTT3z/\n/feWYw0aNKBt27asWbMGAMMwME0Tx3BHzmw6wxsn37C0feb2Z7jn7Xvo9m03ZsyYwV133cWoUaOY\nMGFCqWtvNXFxcTg4OPDLL78QHh7O/ffff13Xd+jQgU2bNl2xTcuWLUlNTS21LEVERERE5GqudaaD\ndq8QqUEG+gysFUmGa2VnZ3fZsV8Kf8Ha6vLCkZk5mbz11lt0796duLg4Jk2axIoVK0hOTq6CSGu2\nl19++Q9dd7WEg4iIiIhIZdPyChG5YY8//jg//PADW7duBWDbtm3ltm1g2wCTy2ctuDdyZ9GiRYSH\nh7N582b8/PzYu3ev5fzp06crPvAa6NVXX+Wee+6hY8eOpKdfqOUxbNgwEhMTAZg4cSJeXl74+vpa\ndh45fvw4vXv3xs/PDz8/P0uywcHBAYDk5GTCw8Pp0aMHnp6ePPXUU5a6GZdasGABbdu2xd/fn5Ej\nR1JcXExxcTHDhg2jTZs2+Pj48MYbb1x2nYiIiIhIeTTTQURu2NixY0lMTKRdu3bA/z7slqWtc1vW\nlKwh40gGbs5uZB3NAi7UtJgxZgZ9+/YFwMrKioULFwLQrFkznJycsLe3Jz8/v5JHU322bdvGJ598\nQlpaGkVFRQQGBhIUFGQ5n5OTwxdffMGBAwcwDINTp04BFwpudurUiS+++ILi4mLLriCX2rp1K/v2\n7eOuu+6iW7dufP7550RHR1vO79+/n08//ZSNGzdiY2PD6NGjWbhwId7e3vzwww/s2bMHwNKniIiI\niMi1UNJBRCrExeKR5blYk2H1J6svq12xcNfCC0tLvip7acnRo0crPN6aaP369fTu3Rt7e3sAoqKi\nSp13dHTE1taWxx9/nJ49e9KzZ08AkpKSmDdvHgDW1tZlbivatm1b3NwubMk6YMAANmzYUCrpsHbt\nWrZt20ZISAgABQUFNGnShIceeoisrCzGjh1Ljx496Nq1a8UPXERERERuWko6iEiZus7vyvrv11N4\nrhDburaEtQhj1ZBVFXLvm612RVWpU6cOW7duZe3atSQmJvL222+TlJR0TdcahnHF96ZpMnToUP7+\n979fdu3OnTtZuXIl7733Hv/+97+ZPXv2Hx+EiIiIiNxSVNNBRC7TdX5Xtvy4hcd7PM7rT7/O4z0e\nZ8uPW+g6X3/lrkzh4eEsXryYgoICzpw5w9KlS0udz8vL4/Tp03Tv3p033niDnTt3AtClSxfeffdd\nAIqLi8usf7F161YOHTpESUkJn376KR07dix1vkuXLiQmJnLixAkAfv75Z7777jt++uknSkpK6NOn\nD1OmTGH79u2VMXQRERERuUlppoOIXGb99+t5vMfjeLh4AODh4sGjDzzKrP/MqubIbm6BgYH069cP\nPz8/mjRpYlnqcNGZM2fo1asXhYWFmKbJ9OnTAXjrrbcYMWIEs2bNwtramnfffZf27duXujYkJIQx\nY8aQmZnJfffdR+/evUud9/LyYsqUKXTt2pWSkhJsbGyIj4/Hzs6O4cOHWwpPljUTQkRERESkPMbF\nddY1TXBwsJmamlrdYYjckozJBq8//TrW1v/b2rK4uJjn4p/DjK2Z/2ZUtjlz5tC1a1ecnZ2rO5Tr\nlpyczLRp01i2bFl1hyIiIiIiNwnDMLaZphl8tXZaXiEil7Gta2vZVeKirKNZ2Na1raaIqt+cOXOu\nu6BlUVERCbsT8Iz3xPplazzjPUnYnVBJEYqIiIiI1DxaXiEilwlrEca8lfN49IFHLdtazls5j7AW\nYdUdWoXJzs6mW7duBAUFsX37dry9vZk3bx779+8nJiaGvLw8GjduzJw5c9i4cSOpqakMGjQIOzs7\nNm/ezL59+y5r16xZMyIiIvD392fDhg14RniytsVaojtHM9J5JFlHs4hZGwNQpYU0IyIiiIiIqLL+\nREREREQu0vIKESlTZe5eURNkZ2fj6urKhg0bCA0N5bHHHqN169Z88cUXLFmyhDvuuINPP/2UlStX\nMnv2bCIiIpg2bRrBwcGcP3+eTp06ldvOy8uLd955B894TyLDIi21MQAyjmSwev1q0p9Or8bRi4iI\niIjcmGtdXqGZDiJSppspwVAeFxcXQkNDARg8eDB/+9vf2LNnD5GRkcCFOhbNmjW77Lr09PQrtuvX\nrx8AmTmZjHQeWepaN2c3MnMyK2U8IiIiIiI1jZIOInLLMgyj1PvbbrsNb29vNm/efMXrTNO8Yrv6\n9esD4N7InayjWaVmOmQdzcK9kfsNRi4iIiIiUjuokKSI3LIOHz5sSRwkJCTQrl07Tp48aTl2/vx5\n9u7dC1xISJw5cwYAT0/PcttdKjY8lsSkRDKOZFBcXEzGkQwSkxKJDY+tiuGJiIiIiFQ7zXQQkVuW\np6cn8fHxPPbYY3h5eTF27FgeeOABxo0bx+nTpykqKuKZZ57B29ubYcOG8dRTT1kKSSYmJpbZ7lIX\ni0VOTplMZk4m7o3cmd5lepUWkRQRERERqU4qJCkiN4WE3QmlPtz3tetL2udpLFu2rMz22dnZ9OzZ\nkz179lRxpCIiIiIitZ8KSYrILSNhdwIxa2NKbU35zr/e4a4zd1V3aCIiIiIitzTVdBCRGiU7O5tW\nrVoxaNAgWrduTXR0NGfPnuXll18mJCSENm3aMGLECC7O0oqIiGDS/ElEd46mmX0zpgROwcPFg04B\nncjIySi3n5YtW2qWg4iIiIhIJVPSQURqnPT0dEaPHs3+/ftp0KAB77zzDmPGjOGbb77hu+++o6Cg\noNSyiSOnj+Dm7FbqHs0aNyP/fH5Vhy4iIiIiIpdQ0kFEahwXFxdCQ0MBGDx4MBs2bGDdunXce++9\ntGzZkqSkpFK7Rbg4upB1NKvUPY79dIz6NvWrNG4RERERESlNSQcRqXEMw7js/ejRo0lMTGTPnj08\n+eSTzJo1i/r165OSkoKx1CAxKZFd23dx6odTPPd/z7F4xGLscu0AqFOnDunp6QDMmzcPJycnAN56\n6y3s7Oyws7PD3t6eo0ePVu1ARURERERucko6iEiNc/jwYTZv3gxAQkICHTt2BKBx48YAvPvuu+Tm\n5nLmzBmGDRvGzz/8TNcfu7L0xaWYmNw9/W7+8sFf8G3le8V+/va3vzF9+nQKCgrIysri9ttvr9yB\niYiIiIjcYpR0EJEax9PTk/j4eFq3bk1ubi6jRo3iySefpE2bNgAUFxfz888/U79+fRISEjhz5gzL\n/rWMXkG9oASc5jlxZucZ7OzsrthPQEAAL7zwAn369OHIkSPY2tpWxfBERERERG4ZSjqISKVL2J2A\nZ7wn1i9b4xnvScLuhCu2r1OnDgsWLGD//v0sWrQIe3t7pkyZwsGDB4ELO08MGDCAgoICCgsLMU2T\nn3/+mY8//pjMzEwCAwOZO3cuZ8+eBS4szygqKgIgLy/P0s9///tfS7v27duzfPnySnoCIiIiIiK3\nJiUdRKRSJexOIGZtDJFhkUwdPZXIsEhi1sZcNfFwJX369GHJkiX8+OOPAKSmprJ37162b99Oo0aN\nePfddxk3bhz79+8H4LbbbmPRokUAfPjhh5b7JCUl0adPH1asWMH//d//sX79+hsYqYiIiIiI/J5x\nca/7miY4ONhMTU2t7jBE5AZ5xnsSGRaJh4uH5VjGkQxWr19N+tPp130/wzAwTZNHHnnEMjPBxsaG\nJUuWsHnzZqZMmQKAlZUV7777Lo8++ihvv/02MTEx2NjY0Lp1azIzMzl16hS+vr58++23GIZBkyZN\n2L17Nw0aNKiYgYuIiIiI3MQMw9hmmmbwVdsp6SAilcn6ZWumjp6KtbW15VhxcTEvvPMCTwU/xdxd\nc8n/NZ/69eoz1Hco8d3jy71XRkYGrVu3tiyVEBERERGR6nGtSYc6VRGMiNy63Bu5k3U0q9RMh6yj\nWTjaOrJg7wKGdR+Gm7MbWUezmL9yPkCZiYft27fTrl07Hn744SqLXUREREREboxqOohIpYoNjyUx\nKZGMIxkUFxeTcSSDxKRECksKGfLAEDxcPLC2tsbDxYMhDwxh7q65Zd4nMDCQc+fOkZiYWMUjEBER\nERGRP0ozHUSkUg30GQjA5JTJZOZk4t7IneldpjPo80G4ObuVauvm7Eb+r/nVEaaIiIiIiFQCJR1E\npNIN9BloST5cNOI/I8pcdlG/Xv2qDk9ERERERCqJlleISLUY6juU+Svnl1p2MX/lfIb6Dq3u0ERE\nREREpIJopoOIVIuLxSLnLJ9zzbtXiIiIiIhI7aItM0VERERERETkulzrlplaXiEiIiIiIiIilUJJ\nBxERERERERGpFEo6iIiIyE2vZcuW/PTTT1XWX3Z2Nm3atKmy/kRERGoqJR1ERERErqCoqKi6QxAR\nEam1lHQQERGRm0Z2djatWrVi0KBBtG7dmujoaM6ePQvAzJkzCQwMxMfHhwMHDgCwdetW2rdvT0BA\nAB06dCA9PR2AOXPmEBUVRefOnenSpQt5eXl06dLFcv2SJUssfU6fPp02bdrQpk0b3nzzTcvx4uJi\nnnzySby9venatSsFBQVV+CRERERqBiUdRERE5KaSnp7O6NGj2b9/Pw0aNOCdd94BoHHjxmzfvp1R\no0Yxbdo0AFq1asX69evZsWMHL7/8Mn/+858t99m+fTuJiYl89dVX2Nra8sUXX7B9+3bWrVvHc889\nh2mabNu2jY8++oivv/6aLVu28MEHH7Bjxw4AMjIyePrpp9m7dy9OTk4sWrSo6h+GiIhINatT3QGI\niIiIVCQXFxdCQ0MBGDx4MDNmzADgkUceASAoKIjPP/8cgNOnTzN06FAyMjIwDIPz589b7hMZGcnt\nt98OgGma/PnPfyYlJQUrKyt++OEHjh8/zoYNG+jduzf169e39LF+/XqioqJwdXXF39/f0md2dnaV\njF9ERKQmuaGZDoZh3G4YxmrDMDJ++96wnHbFhmGk/fb15Y30KSIiFePUqVOWvwBfjzlz5nD06FHL\n+6ou0CdyNYZhlPm+Xr16AFhbW1vqNPz1r3/lvvvuY8+ePSxdupTCwkLLdRcTCQALFy7k5MmTbNu2\njbS0NJo2bVqqbVku9vf7PkVERG4lN7q8YiKw1jRND2Dtb+/LUmCapv9vX1E32KeIiFSA8pIOV/tg\n9Pukg0hNc/jwYTZv3gxAQkICHTt2LLft6dOnad68OXDhd/tK7Zo0aYKNjQ3r1q3ju+++AyAsLIzF\nixdz9uxZ8vPz+eKLLwgLC6u4wYiIiNRyN5p06AXM/e31XODhG7yfiIhUkYkTJ3Lw4EH8/f0JCQkh\nLCyMqKgovLy8Ltvub9q0acTFxZGYmEhqaiqDBg3C39/fUhivrAJ9ItXF09OT+Ph4WrduTW5uLqNG\njSq37f/7f/+PSZMmERAQcMWE26BBg0hNTcXHx4d58+bRqlUrAAIDAxk2bBht27bl3nvv5YknniAg\nIKDCxyQiIlJbGaZp/vGLDeOUaZpOv702gNyL73/XrghIA4qA10zTXFzO/UYAIwDuvPPOoIt/RRAR\nkYqXnZ1Nz5492bNnD8nJyfTo0YM9e/bg6upa6hxcSDrk5eURFxdHREQE06ZNIzg4GLiwvOK5555j\n7NixvPPOO2zfvp0PP/ywOocmN5mE3QlMTplMZk4m7o3ciQ2PZaDPwDLb/v53t6oUFxdjbW1dpX2K\niIhUJ8MwtpmmGXy1dled6WAYxhrDMPaU8dXr0nbmhexFeRmMu34LZiDwpmEYd5fVyDTNf5mmGWya\nZvAdd9xxtdBERKQCtW3bFldX1z907aUF+lQsTypSwu4EYtbGEBkWydTRU4kMiyRmbQwJuxMqpb+H\nH36YoKAgvL29+de//gXAqFGjCA4Oxtvbm9jYWEvbli1bMmHCBAIDA/nss89IS0ujXbt2+Pr60rt3\nb3JzcwGIiIhgwoQJtG3blnvuuYf169dXSuwiIiI10VV3rzBN8/7yzhmGcdwwjGamaR4zDKMZcKKc\ne/zw2/cswzCSgQDg4B8LWUREKsOlRfPq1KlDSUmJ5f21FsxTsTypaJNTJhPdORoPFw8APFw8iO4c\nzeSUyWXOdmjZsuUNzXKYPXs2t99+OwUFBYSEhNCnTx9effVVbr/9doqLi+nSpQu7du3C19cXgEaN\nGrF9+3YAfH19mTlzJp06deKll15i8uTJvPnmm8CFWilbt25l+fLlTJ48mTVr1vzhGEVERGqTG63p\n8CUw9LfXQ4Elv29gGEZDwzDq/fa6MRAK7LvBfkVE5AbddtttnDlzpsxzTZs25cSJE+Tk5PDrr7+y\nbNmya7pOpKJl5mTi5uxW6pibsxuZOZmV0t+MGTPw8/OjXbt2HDlyhIyMDP79738TGBhIQEAAe/fu\nZd++//03pl+/fsCFQpOnTp2iU6dOAAwdOpSUlBRLO80GEhGRW9VVZzpcxWvAvw3DeBz4DvgTgGEY\nwcBTpmk+AbQG3jcMo4QLSY7XTNNU0kFEpJo1atSI0NBQ2rRpg52dHU2bNrWcs7Gx4aWXXqJt27Y0\nb97cUjQPYNiwYTz11FPY2dlZdggQqSzujdzJOpplmekAkHU0C/dG7hXeV3JyMmvWrGHz5s3Y29sT\nERHB/v37mTZtGt988w0NGzZk2LBh5W6reSWaDSQiIreqG0o6mKaZA3Qp43gq8MRvrzcBPjfSj4iI\nXLvrKbqXkFD+uvhx48Yxbty4y4736dOHPn36WN5f+lfb4OBgkpOT/3DsIr8XGx5LzNoYojtH4+bs\nRtbRLBKTEpneZXqF93X69GkaNmyIvb09Bw4cYMuWLfTu3Zv69evj6OjI8ePHWbFiBREREZdd6+jo\nSMOGDVm/fj1hYWHMnz/fMutBRETkVnajMx1ERKQGuVh0L7pzNCOdR5J1NIuYtTEA5SYeRGqyi7+3\nlybSpneZXim/z926deO9996jdevWeHp60q5dO/z8/AgICKBVq1a4uLgQGhpa7vVz587lqaee4uzZ\ns7i5ufHRRx9VeIwiIiK1zQ1tmVmZgoODzdTU1OoOQ0SkVvGM9yQyLLLUVPSMIxmsXr+a9KfTqzEy\nKUt52zv+flvSa7V48WLuuecevLy8rus6BwcH8vLyruua2uJ6Zv6IiIjItauwLTNFRKT2qOqie1Kz\nLF68uFSRw1tdVW+3KSIiIpdT0kFE5CZysejepSqr6J5UjKKiIgYNGkTr1q2Jjo7m7Nmzpc6PGjWK\n4OBgvL29iY2NtRyfOHEiXl5e+Pr68vzzz7Np0ya+/PJLXnjhBfz9/Tl48CAHDx6kW7duBAUFERYW\nxoEDBwA4dOgQ7du3x8fHhxdffLFKx1uVLt1u09rautR2myIiIlI1lHQQEbmJxIbHkpiUSMaRDIqL\ni9m2ZRvzp84nNvzCh9XU1FRLccg5c+YwZsyY6gxXgPT0dEaPHs3+/ftp0KAB77zzTqnzr776Kqmp\nqezatYuvvvqKXbt2kZOTwxdffMHevXvZtWsXL774Ih06dCAqKoqpU6eSlpbG3XffzYgRI5g5cybb\ntm1j2rRpjB49GoDx48czatQodu/eTbNmzapj2FVCM39ERESqnwpJiojcRH5fdM85xxm3w26W48HB\nwdddJ0Aq16XFCQcPHsyMGTNKnf/3v//Nv/71L4qKijh27Bj79u3Dy8sLW1tbHn/8cXr27EnPnj0v\nu29eXh6bNm2ib9++lmO//vorABs3bmTRokUADBkyhAkTJlTW8KpVVWy3OWfOHLp27YqzszMALVu2\nJDU1lcaNG1dYHyIiIrWZZjqIiNRQr7zyCp6ennTs2JEBAwYwbdq0cqfLDxs2jHHjxtGhQwde7PUi\nrzZ9leKXimn+dXOy0rLw9/fnjTfeIDk5ucwPqCdPnqRPnz6EhIQQEhLCxo0bAfjqq6/w9/fH39+f\ngIAAzpw5U6XPoDpt2LABW1vbSu/HMIxy3x86dIhp06axdu1adu3aRY8ePSgsLKROnTps3bqV6Oho\nli1bRrdu3S67b0lJCU5OTqSlpVm+9u/fX26/N6Pfz/zJOJJBYlKiZeZPRZgzZw5Hjx69rmuKiooq\nrH8REZGaTkkHEZEa6JtvvmHRokXs3LmTFStWcHE3n/KmywMcO3aMDRs2sGzZMiZOnAjAa6+9RlhY\nGGlpaTz77LPl9jd+/HieffZZS79PPPEEANOmTSM+Pp60tDTWr1+PnZ1dJY761nT48GE2b94MQEJC\nAh07drSc++WXX6hfvz6Ojo4cP36cFStWABdmMZw+fZru3bvzxhtvsHPnTgBuu+02S2KoQYMGuLq6\n8tlnnwFgmqalXWhoKJ988gkACxcurJqBVoOBPgOZ3mU6q9ev5oV3XmD1+tVX3W4zOzubVq1aXVZn\n4+WXXyYkJIQ2bdowYsQITNMkMTGR1NRUBg0ahL+/PwUFBQDMnDmTwMBAfHx8LInBuLg4hgwZQmho\nKEOGDKGwsJDhw4fj4+NDQEAA69atA2Dv3r20bdsWf39/fH19ycjIqPwHJSIiUomUdBARqYE2btxI\nr169sLW15bbbbuOhhx6isLDQMl3e39+fkSNHcuzYMcs1Dz/8MFZWVnh5eXH8+PHr6m/NmjWMGTMG\nf39/oqKi+OWXX8jLyyM0NJSYmBhmzJjBqVOnqFOn9q3K69KlC3Xr1qVBgwbcdddd9OzZk08//RQH\nBwfs7Oxwdnbm0KFDACxYsAA7Ozvs7OyumKSpSJ6ensTHx9O6dWtyc3MZNWqU5Zyfnx8BAQG0atWK\ngQMHWpZhnDlzhp49e+Lr60vHjh2ZPn06AP3792fq1KkEBARw8OBBFi5cyKxZs/Dz88Pb25slS5YA\n8NZbbxEfH4+Pjw8//PBDlYyzugz0GUj60+kUv1RM+tPp17RdZll1NsaMGcM333zDnj17KCgoYNmy\nZURHRxMcHMzChQtJS0uzJOUaN27M9u3bGTVqFNOmTbPcd9++faxZs4aPP/6Y+Ph4DMNg9+7dfPzx\nxwwdOpTCwkLee+89xo8fT1paGqmpqbRo0aLSno2IiEhVqH3/exQRuUVdOl2+LPXq1bO8Nk3zuu+9\nZcuWy5YTTJw4kR49erB8+XJCQ0NZuXIlrVq1uv7gq8ncuXPZtGkTJ06c4OzZs7Rs2RIfHx+GDRvG\na6+9xvjx4wkPD+eRRx5hx44dPPnkk/zzn/9k7NixhISEXHd/CbsTLPU03Bu5Exsee8UPuS1btrT8\nJfxSycnJltdz5swp89qtW7dediw0NPSyLTP/+9//XtbO1dXVMrsCYMqUKeXGWFlOnTpFQkJCqdk6\nv5ednU3Pnj3Zs2dPpcWRnJxM3bp16dChA3Bh5sftt99+WZ2NrVu3smXLFhwdHfn555/x9vbmoYce\nKvOejzzyCABBQUF8/vnnluNRUVGWxMSGDRsYO3YsAK1ateKuu+7i22+/pX379rz66qt8//33PPLI\nI3h4eFzegYiISC2imQ4iIjVQaGgoS5cupbCwkLy8PJYtW4a9vX250+XLc+l0+yvp2rUrM2fOtLy/\nmNg4ePAgPj4+TJgwgZCQkDI/INdkixcvpm3btjg5OeHs7IyPjw/5+fmcP3+e8ePHAxemvaenp/Pd\nd99x/vx5ywfB6y2umLA7gZi1MUSGRTJ19FQiwyKJWRtDwu6ECh/XzeDUqVOX7dRR0a6ldkJycjKb\nNm2yvB80aBAODg6l2hiGwX/+8x8effRRdu/ezZNPPklhYWG597yYALS2ti4VQ/369a8az8CBQuJn\nAgAAIABJREFUA/nyyy+xs7Oje/fuJCUlXfUaERGRmkxJBxGRGigkJISoqCh8fX158MEH8fHxwdHR\nsdzp8uXx9fXF2toaPz8/3njjjXLbzZgxg9TUVHx9ffHy8uK9994D4M0336RNmzb4+vpiY2PDgw8+\nWKHjvJlMTplMdOdoPFw8sLa2xsPFg+jO0UxOmVzdodVIEydO5ODBg/j7+/Pss8/SpUsXSx2ES3+v\ni4qK6NChA3Z2djg5OfH4449TXFzMX//6V+zt7alfvz4tWrRg+PDhnDlzBltbW8aNG0dwcDD/+Mc/\ncHBwYMyYMTg6OuLo6EjLli1p06YNycnJhIaG8uqrrzJp0iRcXV1Zv349b775JocPH8bd3R0XFxe6\nd+/O119/za+//oqNjQ15eXlMnz6dN998EwcHB9avX2+ZjXLs2DF+/PFHIiIiaNOmDTt27Ch3/GFh\nYZZ6Gt9++y2HDx/G09OTrKws3NzcGDduHL169WLXrl2V+nMQERGpdKZp1sivoKAgU0TkZrJw10Lz\nnrfvMa0mW5n3vH2PuXDXwiu2P3PmjGmappmfn28GBQWZ27Ztq4owbypz5swx7ezszNzcXPPYsWOm\njY2N2aNHD9PW1tacOXOmaZqm2alTJzMgIMA0TdO0tbU14+PjTdM0zbZt25r16tW75r6sJluZr598\n3Xzz5zctX6+ffN20mmxV8QO7CRw6dMj09vY2TdM0z58/b54+fdo0TdM8efKkeffdd5slJSXmoUOH\nTMDs0KGDee7cOXP48OFm+/btzVmzZpn16tUz09PTzXPnzpmenp5mq1atTNM0zaZNm5rdunUzTdM0\n33//fdPLy8uMjo42w8PDzT59+ph33323+dVXX5leXl7m6dOnzdjYWDMuLs7S5+DBg01ra2uzT58+\npoeHh9mzZ08zPz/fdHFxMe3t7c0OHTqYdnZ25t13320WFxebzzzzjGkYhunn52f+/e9/N52cnMyT\nJ0+aRUVFZnJystmpUyfTNE0zNjbWnDp1qmX8BQUF5rBhw8w2bdqY/v7+ZlJSkmmapvn3v//d9PLy\nMv38/MwHHnjAzMnJqaofiYiIyHUBUs1r+GxvmNe57reqBAcHmxertYuI1HYXp95Hd47GzdmNrKNZ\nJCYlXrGS/sCBA9m3bx+FhYUMHTqUSZMmVXHUN4eIiAg2bdqEnZ0dDg4OdOnShR49elj+Yu7k5MSm\nTZtwdXVlwYIFPPnkkwD4+Piwa9euK06jv5RnvCeRYZF4uPxvDX7GkQxWr19N+tPplTK22uzSeg3n\nz5/n2WefJSUlBSsrK9LT0zl06BCFhYUEBgZia2tLkyZNOHPmDMePH6d58+YcOnQILy8vAE6cOEGd\nOnU4fPgwAQEB2Nvbs3HjRtq3b0+TJk1o0b4FH836iMLQQvgEFnyzgAndJ9CtWze+/PJLrK2tyc3N\n5dChQ/Tv35/U1FTy8vL46quvePHFFzl16hRHjhyhdevWrF69GicnJ5o3b07Dhg0B2LVrFyUlJaSk\npPDYY48xePBgHn74Yfz9/avzEYuIiFQqwzC2maYZfLV2Wl4hIlIF/sjU+4SEBNLS0jhw4IASDpd4\nevnTOLzmgDHZwOE1B55e/vQV23/yySecO3eOgwcPcurUKR544AH69etHXl4eBQUFHDt2DFdXV+BC\n0cCCggIKCgrYunXrNSccAGLDY0lMSiTjSAbFxcVkHMkgMSmR2PDYGxrvrWDhwoWcPHmSbdu2kZaW\nRtOmTUs9+6FDh5KWlsYHH3xAZGQko0ePxtHRkbS0NNLS0pg4cSJRUVEAODo6cuLECZKTkykuLiaX\nXBYeWEhDp4Y89fBTWFtZE7M2htxfcsnJyWHEiBHExMRc1ifAsGHDePvtt9m9ezcRERGcP3+ekpIS\n6taty+uvv27p397eHoDw8HBSUlJo3rw5w4YNY968eVX3EEVERGooJR1ERKpAZk4mbs5upY65ObuR\nmZNZTRHVTk8vf5oFexcwrPswXn/6dYZ1H8aCvQuumHho164ddnZ2NG/enI4dOzJo0KBKiW2gz0Cm\nd5nO6vWreeGdF1i9fvUVZ7Lc6i4tcnr69GmaNGmCjY0N69at47vvvrO0y83NZf78+Zw4cYKEhAQC\nAwPp3r07p06dYuXKlRQVFfHZZ5+Rk5NjuaZHjx4MHDiQ4cOHs/P4Ttr5tMOunh07l+zEysqKDk4d\nKKSQ5s2b4+TkxK5duyx9enl5YWdnR05OjqVGxPnz5y21FRo0aICDg4Nl9w/TNCkuLgbgu+++o2nT\npjz55JM88cQTbN++vUqepYiISE2mLTNFRKqAeyN3so5mlZp6n3U0C/dG7tUYVe0zd9dchnUfZnmO\nHi4eDHlgCHOWzyG+e3yZ12RnZ1/xnnFxcTg4OPD888/fUGxpaWk4HXWyLKWIi4vj6Mqj4HNDt71p\nNWrUiNDQUNq0aWPZGcXHx4fg4OBS27J6enpyxx13cOedd1KvXj3c3NyIjIxk4sSJPPzwwxiGQd26\ndbntttss13Tr1o3333+fAQMGMPpfo2nasCmZZFKnXh3OF5xn8z82U9yrmNTUVFatWsXJkyepV68e\nW7dupUmTJnTp0oVOnTpha2tLUFAQXl5eNG7cmJKSEuBCEci1a9fi5+fH+fPnLUmH5ORkpk6dio2N\nDQ4ODprpICIigpIOIiJVIjY8ttyaDnLt8n/NL3PGSP6v+dUU0QVFRUWkpaWRmppK9+7dqzWW6pSw\nO4HJKZPJzMnEvZE7seGxZc70sLRrlYl7qDuR4ZF85PNRmfcsb5vWNm3a8Morr1BUVETv3r157LHH\ngAsf/BMTE4mOjsbJyYl7nriH24Jvg9kQ/KdgHvn7I5ZaG5vnbf5D41y0aFGZx4cOHcrQoUP/0D1F\nRERuVko6iIhUgYsfvC79QKap99evfr36Zc4YqV+v/nXd59VXX2Xu3Lk0adIEFxcXgoKCOHjwIE8/\n/TQnT57E3t6eDz74gFatWrF06VKmTJnCuXPnaNSoEQsXLqRp06bExcVx8OBBsrKyuPPOO9m4cSMF\nBQVs2LDBUoNj3759REREcPjwYZ555hnGjRtXoc+jJrm0WOpI55FkHc0iZm0MQKnf8yu163BbB7p1\n60a7du3YtGkTISEhDB8+nNjYWE6cOMHChQtxd3fnscceY+PGjZw9e5Y77riDqKgoGjZsiL+/Pz/8\n8AO//PKLZflD0MEg3v/H+/ATbPxoI782/pXPVnyG83+c8fuXn2X7zX79+lX9QxMREbkFaPcKERGp\nNS7WdBjywBDLjJH5K+cz2Htwucsrfm/btm0MGzaMr7/+mqKiIgIDA3nqqadYsWIF7733Hh4eHnz9\n9ddMmjSJpKQkcnNzcXJywjAMPvzwQ/bv38/rr79OXFwcS5cuZcOGDdjZ2TFnzhxSU1N5++23gQvL\nK1atWsW6des4c+YMnp6e/Pjjj9jY2FTmI6oyv1+Wcq27d1yp3coeK3F3d2fHjh14e3sTEhKCn58f\ns2bN4ssvv+Sjjz7CxcWFxo0bExsbS1JSEjExMaSlpfHQQw8xceJEQkNDycvLw9bWlqSkJBITE+k0\nphOTv5pMxtsZtOjegj4ufcjfn88HH3wAXKgp4ejoWEVPTkRE5OZwrbtXaKaDiIjUGhcTC3OWzyH/\n13zq16vPUN+h15xwAFi/fj29e/e27DgQFRVFYWEhmzZtom/fvpZ2v/76KwDff/89/fr149ixY5w7\nd86y08XFa+3s7Mrtq0ePHtSrV4969erRpEkTjh8/TosWLa5rzLVFZk4mI51HljpWVrHUq7VzdXXF\nx+dCIQxvb2+6dOmCYRj4+PiQnZ3Nd999Z1ne0LlzZ3Jycvjll18IDQ0lJiaGQYMG8cgjj9CiRQtW\nrVrFqlWr2Lp1K/bYc3fx3UxqM4mwsDC6zujKhAkT6NmzJ2FhYZX1WERERG55SjqIiEitEt89/rqS\nDNeipKQEJycn0tLSLjs3duxYYmJiiIqKIjk5mbi4OMu5+vWvvKyjXr16ltfW1tYUFRVVWMw3Ij8/\nnz/96U98//33luUFEyZM4E9/+hMrVqzAzs6OhIQE3N3dy11ecqkPPvgA209t+bbbt9xR5w4SX0gk\nLyePYqti7uxxZ6m2Vyuqeukzs7Kysry3srKiqKio3JkiEydOpEePHixfvpzQ0FBWrlyJaZpMmjSJ\nkSNHXtZ++/btLF++nBdffJEuXbrw0ksv/bGHKSIiIlekLTNFROSWEh4ezuLFiykoKODMmTMsXboU\ne3t7XF1d+eyzz4AL2yDu3LkTuDD1vnnz5gDMnTu33PteugVkTfff//4XZ2dndu7cyZ49e+jWrRsA\njo6O7N69mzFjxvDMM88A0LFjR7Zs2cKOHTvo378///znP0vd6+2332bZsmW8M+8dFm9azEejPuLh\nvz1Mr3m9+LXTr9ivtC/VPjY8lsSkRDKOZFBcXEzGkQwSkxKJDY+9ptjDwsJYuHAhcKFoZOPGjWnQ\noAEHDx7Ex8eHCRMmWHbDeOCBB5g9ezZ5eXkA/PDDD5w4cYKjR49ib2/P4MGDeeGFF7S1pYiISCXS\nTAcREbmlBAYG0q9fP/z8/GjSpAkhISEALFy4kFGjRjFlyhTOnz9P//798fPzIy4ujr59+9KwYUM6\nd+7MoUOHyrzvfffdx2uvvYa/v7+lkGRN5ePjw3PPPXfZ8oIBAwZYvj/77LPAlZeXzJs3DxcXFxYv\nXoyNjQ3FRcU88f+e4LWHX6OedT2aOjSlxCgp1feViqpebXtTuFBL4rHHHsPX1xd7e3tLIujNN99k\n3bp1WFlZ4e3tzYMPPki9evXYv38/7du3B8DBwYEFCxaQmZnJCy+8gJWVFTY2Nrz77rs39kBFRESk\nXCokKSIicgv6+eefWb58OR988AFdunRh9uzZrFu3DldXV86fP0+zZs346aefiIiIuGx5ycXvGRkZ\npKWlsWzZMlxdXfnll1/w9PTk2LFj1T28yyQnJzNt2jSWLVt2zddEREQwbdo0goOvWiNLRETklnOt\nhSS1vEJERGq9hN0JeMZ7Yv2yNZ7xniTsTqjukGq08pYXfPrpp5bvF2cHXGl5SUBAAO+//z5RUVEc\nPXqUBg0alFqmsnDXQlpOaqmfi4iIyC1MSQcREanVEnYnELM2hsiwSKaOnkpkWCQxa2P0AfcKdu/e\nTdu2bfH392fy5Mm8+OKLAOTm5uLr68tbb73FG2+8AWBZXhIUFETjxo2BC8sq3n33XaZPn87777/P\n888/j6enJ15eXgDEx8dzl+ddDLl3CGeXnqXFly348e8/Mub9MUT0jqB169YMGzbMEo+DgwMvvPAC\n3t7e3H///WzdupWIiAjc3Nz48ssvAcjOziYsLIzAwEACAwPZtGkTcGEGQ0REBNHR0bRq1YpBgwZx\ncRbnf//7X1q1akVgYCCff/65pb/8/Hwee+wx2rZtS0BAAEuWLAGgoKCA/v3707p1a3r37k1BQUEl\n/hRERERuDVpeISIitZpnvCeRYZGldkPIOJLB6vWrSX86vRojq1oJuxNK1UmIDY+11E+4Fi1btiQ1\nNdWSWCjP3r176d27N5s2baJx48b8/PPPDB06lOjoaIYOHcrs2bP58ssv2R+5H6tVVthZ2/Hoh4+y\nZ8Ue5o2ch/M4Z7KmZBESEsKsWbPw9/fHMAyWL1/Ogw8+SO/evcnPz+c///kP+/btY+jQoaSlpXH2\n7FmsrKywtbUlIyODAQMGkJqaSnJyMr169WLv3r04OzsTGhrK1KlTCQ4OxsPDg6SkJNzd3enXrx9n\nz55l2bJl/PnPf8bLy4vBgwdz6tQp2rZty44dO3j//ffZs2cPs2fPZteuXQQGBrJlyxYtrxARESmD\nlleIiMgtITMnEzdnt1LH3JzdyMzJrKaIql5VzvZISkqib9++luTE7bffzubNmxk48EKCY8iQIWzY\nsIHMnEwc7Bzw7uaNYRg082qGYxNHjtgesRR7vFg4sm7dupYdNHx8fOjUqRM2Njb4+PhY2pw/f54n\nn3wSHx8f+vbty759+ywxtW3blhYtWmBlZYW/vz/Z2dkcOHAAV1dXPDw8MAyDwYMHW9qvWrXKUvQz\nIiKCwsJCDh8+TEpKiqWdr68vvr6+Ff78REREbjXavUJERGo190buZB3NKjXTIetoFu6N3Ksxqqo1\nOWUy0Z2jLc/Aw8WD6M7RTE6ZfM2zHa5l54jr4d7InbyCPOrUvfBfDcPKoMSqxPJzsbKyoqioCAAb\nGxsMw7Acr1ev3mVt3njjDZo2bcrOnTspKSnB1tbW0tfF9gDW1taWa8pjmiaLFi3C09OzgkYrIiIi\n5dFMBxERqdViw2NJTEok40gGxcXFZBzJIDEpkdjw2OoOrcpU5WyPzp0789lnn5GTkwNc2AWjQ4cO\nfPLJJ8CFrUfDwsKIDY8l+1g2x3KOUVxcTPbRbE7nn/7DP5fTp0/TrFkzrKysmD9/PsXFxVds36pV\nK7Kzszl48CAAH3/8seXcAw88wMyZMy21H3bs2AFAeHg4CQkXZofs2bOHXbt2/aFYRURE5H8000FE\nRGq1i3/Jv7SewfQu06+rnkFtV5WzPby9vfnLX/5Cp06dsLa2JiAggJkzZzJ8+HCmTp3KHXfcwUcf\nfcSdd97Je83eY9f/b+/ew6oq0/+Pvx/AE6JSahrFJCZuQTfgMfsqaiqpZaiJkymWWf0Sz1F2NrXR\nGctyHMu0vv5MUxibyEM6HcbjD0gtT6g4iighnsZTIyMmyWH9/kD2SKJCstmgn9d1eV2stdd6nnuv\n1pVyr2fd995drP5wNfdwD3fWvPM3/3cZMWIE/fv359NPP6Vnz57UrFnzmsdXr16djz/+mIcffhhP\nT09CQ0M5d+4cABMmTGDcuHEEBQWRn5+Pn58fq1atIioqiqeeeoqAgAACAgJo3br1b4q1tM6ePUts\nbCwjRowACrqLjBkzhri4uHKZX0RExJlUSFJERKSSK6zpENE1gsY+jUk7lkbcurhbLvlSnvLy8nB3\ndy+TsdLT0+nduzfJycllMp6IiEh5UCFJERERFzt79iwffvghUNDasXfv3k6Zp3/T/tRbUo95D83j\nxREvsjphdakSDrG7Y7HNtuH+lju22bZK3W70008/JSgoiODgYIYMGUJ6ejpdu3YlKCiIbt26kZGR\nAcDQoUMZM2YM//M//0Pjxo0dqwry8/MZMWIEzZo1IywsjIceesjxWaNGjXj55Zdp1aoVn3/+OQcP\nHqRnz560bt2a0NBQ9u3bB8DBgwdp3749drudN954Ay8vLwCysrLo1q0brVq1wm63O1p1vvLKKxw8\neJCQkBDGjx9Peno6LVq0ACA7O5unnnoKu91Oy5YtWb9+PQALFizg0UcfpWfPnvj7+/PSSy+V30UW\nEREpBb1eISIi4iSFSYfCZfM3Ijc3Fw+P4v/a3rFjBw29GpJ8pORPyguf1F++SuI5n+dIO5ZG9Npo\ngEq3SmLPnj1MmTLlinaehX/mz5/PmDFjWL58OQDHjx8nMTGRffv2ER4eTkREBEuXLiU9PZ1//vOf\nnDx5koCAAIYNG+aYo27dumzfvh2Abt26MXfuXPz9/fn+++8ZMWIE69atY+zYsYwdO5bHH3+cuXPn\nOs6tXr06y5Yto3bt2pw+fZr27dsTHh7OtGnTSE5OJikpCSha1HP27NkYY9i9ezf79u3jwQcfZP/+\n/QAkJSWxY8cOqlWrhs1mY/To0fj6+jr7MouIiJSKVjqIiIg4ya+fYGdlZREREUGzZs0YPHiwo5Dh\ntm3b6Ny5M61bt6ZHjx4cP34cgC5dujBu3DjatGnDX/7yF06dOkX//v1p27Ytbdu25bvvvuPkyZNE\nRkayZcsWQkJCOHjwIGvXrqVly5bY7XaGDRvGL7/8AhT/pP7Zx54l/+N8vn7ua04fPF2k80VlU9J2\nnoX69u2Lm5sbgYGBnDhxAoDExEQGDBiAm5sbDRs25IEHHigyx2OPPQYUrFrYuHEjAwYMICQkhOee\ne87x323Tpk0MGDAAwDE3FHTNeO211wgKCqJ79+4cPXrUMe/VJCYmOtp4NmvWjHvuuceRdOjWrRt1\n6tShevXqBAYGcujQod924URERJxIKx1ERESc5PIn2Bs2bKBPnz7s2bMHHx8fOnTowHfffcd9993H\n6NGjWbFiBfXr1+ezzz7j9ddfZ/78+QBcvHiRwhpHgwYN4vnnn6djx45kZGTQo0cP9u7dy7x583j3\n3XdZtWoV2dnZdOnShbVr19K0aVOeeOIJ5syZw7hx44Arn9RfCLvAHyb8gcM7DhM3Po6RK0Y6rfNF\nRXN5q82S1rgqLGCZn5+Pt7e3Y3VCScTExHDq1Cm2bdtGlSpVaNSoEdnZ2aUL+jKlbRUqIiLiClrp\nICIiUk7atWvH3XffjZubGyEhIaSnp5OSkkJycjJhYWGEhIQwZcoUjhw54jin8Mk6wJo1axg1ahQh\nISGEh4fzn//8h6ysrCJzpKSk4OfnR9OmTQF48skniY+Pv2K8wif1Vb+oyh87/pG/Rf+NzH9lAs7r\nfOFsJW3neS0dOnTgiy++ID8/nxMnTrBhw4Zij6tduzZ+fn58/vnnQEHSYufOnQC0b9+eL774AsAx\nNxS0/bzjjjuoUqUK69evd6xMqFWrlqOzxq+FhoYSExMDwP79+8nIyMBms5XkcoiIiFQIWukgIiJS\nTop7Mm1ZFs2bN2fTpk3FnnN5a8j8/Hw2b95M9erVf3MMv35S/97X7xG9Npp+XfvR2KcxqYdTHZ0v\nKpuStvO8lv79+7N27VoCAwPx9fWlVatW1KlTp9hjY2JiiIqKYsqUKeTk5DBw4ECCg4OZOXMmkZGR\nTJ06lZ49ezrOHzx4MI888gh2u502bdrQrFkzoGD1SYcOHWjRogW9evVi5MiRjjlGjBhBVFQUdrsd\nDw8PFixYUOQ+EhERqeiUdBAREXGSaz3BLmSz2Th16hSbNm3i/vvvJycnh/3799O8efMrjn3wwQd5\n//33GT9+PFBQSDAkJOSK8dLT0zlw4ABNmjRh0aJFdO7c+YqxCp/UV9lXhRndZjDp/03iwD8P4N/c\nv0K12ozdHcvk+MkcOHOAJnWbMLHTxGvGVlg08nLr1q274rgFCxYU2S5cMeLm5sa7776Ll5cXZ86c\noV27dtjtdqBogUcAPz8/vvnmmyvGvuuuu9i8eTPGGJYsWUJKSgoA9erVu2pyKTa2aMeQwvaZ1atX\nLzZRMnToUIYOHerYXrVqVbHjioiIuJqSDiIiIk5y+RPsGjVq0KBBgyuOqVq1KnFxcYwZM4bMzExy\nc3MZN25csUmHWbNmMXLkSIKCgsjNzaVTp05FuiPAf39JHTBgALm5ubRt25bhw4cXG1/hk/rjx4/j\nkePBpIGTeHPkm2Xz5cuAqzpr9O7dm7Nnz3Lx4kUmTJhAw4YNS3X+tm3bGDVqFJZl4e3t7ajPISIi\ncisyJS2cVN7atGljFRbOEhERqShK++RdfjvbbBthoWH4+/o79qUeTmV1wmpSRqa4MDIRERExxmyz\nLKvN9Y5TIUkREZESKnzyHhYaxvQR0wkLDSN6bTSxu2Ovf7KTeXl53dD5kyZN4t133y2jaMrGgTMH\naOzTuMi+W6WzhoiIyM1CSQcREZESmhw/mYiuEfj7+uPu7o6/rz8RXSOYHD/Z1aGVSmVprdikbhPS\njqUV2VdZO2uIiIjcqpR0EBERKaHK8OTdsizGjx9PixYtsNvtfPbZZwBs2LCB0NBQwsPDCQwMBGDq\n1Kk0bdqUjh07OoodViQTO00kbl0cqYdTycvLc3TWmNhpoqtDExERkRJSIUkREZESKnzyfnmNgYr2\n5H3p0qUkJSWxc+dOTp8+Tdu2benUqRMA27dvJzk5GT8/P7Zt28aSJUtISkoiNzeXVq1a0bp1axdH\nX1RhrYzLa2hUpM4aIiIicn1KOoiIiJTQxE4THd0UGvs0Ju1YGnHr4pjRbYarQ3NITEzk8ccfx93d\nnQYNGtC5c2e2bNlC7dq1adeuHX5+fgAkJCTQr18/PD09AQgPD3dl2Fc1yD5ISQYREZFKTEkHERGR\nEqrsT95r1qzp6hBERETkFqOaDiIiIqUwyD6IlJEp5L2ZR8rIlAqXcAgNDeWzzz4jLy+PU6dOER8f\nT7t27a44rlOnTixfvpwLFy5w7tw5Vq5c6YJoXeNGO32IiIhIyWmlg4iIyE2kX79+bNq0ieDgYIwx\nvPPOOzRs2JB9+/YVOa5Vq1Y89thjBAcHc8cdd9C2bVsXRexcubm5eHjonzsiIiKuYizLcnUMxWrT\npo21detWV4chIiLiMrG7Y4u8yjGx08QKt7KirJw/f57f//73HDlyhLy8PIYMGcL333/P0qVLWbFi\nBQMHDiQzM5P8/HwCAwNJS0sjKSmJ4cOH8/PPP3Pvvfcyf/58brvtNrp06UJISIijvsWjjz7KoEGD\nyMrKok+fPsycOZOsrCxXf2UREZFKzRizzbKsNtc77oZerzDGDDDG7DHG5BtjrjqZMaanMSbFGHPA\nGPPKjcwpIiJyK4jdHUv02mjCQsOYPmI6YaFhRK+NJnZ3rKtDc4pvvvkGHx8fdu7cSXJyMsOHDycp\nKQkoKHrZokULtmzZwvfff899990HwBNPPMHbb7/Nrl27sNvtTJ482THexYsX2bp1Ky+88AJjx44l\nKiqK3bt3c+edd7rk+5XEzJkz+eijj1wdhoiISJm60ZoOycCjQPzVDjDGuAOzgV5AIPC4MSbwBucV\nERG5qU2On0xE1wj8ff1xd3fH39efiK4RTI6ffP2TKyG73c7q1at5+eWXSUhIoE6dOtx7773s3buX\nH374gejoaOLj40lISCA0NJTMzEzOnj1L586dAXjyySeJj//vP0cee+wxx8/fffcdjz/+OABDhgwp\n3y9WCsuXL7+lamuIiMit4YaSDpZl7bUsK+U6h7UDDliWlWZZ1kVgCdDnRuYVERG52R3MP2vaAAAU\n4klEQVQ4c4DGPo2L7Gvs05gDZw64KCLnatq0Kdu3b8dut/PGG2/w1ltv0alTJ77++muqVKlC9+7d\nSUxMJDExkdDQ0OuO9+tOHcaYMokzKioKLy8vatSoQUBAABcvXmTo0KFUrVoVLy8vmjVrRlBQEMeO\nHaNKlSr8/PPPABw5csSx7e3tTUhICDVq1KB69ep88sknJCYmkpCQwNdff02NGjX44IMPyiReERER\nVyuP7hV3AYcv2z5yaZ+IiIhcRZO6TUg7llZkX9qxNJrUbeKiiJzr2LFjeHp6EhkZyfjx49m+fTuh\noaHMnDmT+++/n/r163PmzBlSUlJo0aIFderU4bbbbiMhIQGARYsWOVY9/FqHDh1YsmQJADExMb85\nxlWrVrF06VJOnjzJhQsXcHd3Z9SoUSxevJi9e/dy8uRJjh8/DoCPjw+NGjXiD3/4AwCvvPIKwcHB\neHp6ApCdnc2FCxeYPn06UVFRdOzYkdDQUHr16sWFCxcYNWrUb45TRESkIrlu0sEYs8YYk1zMnzJf\nrWCM+T/GmK3GmK2nTp0q6+FFREQqjYmdJhK3Lo7Uw6nk5eWRejiVuHVxTOw00dWhOcXu3btp164d\nISEhTJ48mTfeeIP77ruPEydO0KlTJwCCgoKw2+2OVQsLFy5k/PjxBAUFkZSUxJtvvlns2H/5y1+Y\nPXs2drudo0eP/uYYFy5cyOnTp6lbty41atRg//79LFq0iHvuuYd7770XT09Punfv7jg+OjqaBQsW\nALBixQpef/11x2fPPvssAKNHjyY3N5dDhw795rhEREQqsuv2kLIsq/v1jrmOo4DvZdt3X9pX3Fwf\nAx9DQfeKG5xXRESk0irsUnF594oZ3WbctN0revToQY8ePa7Y/8svvzh+/vjjj4t8FhISwubNm684\nZ8OGDUW2/fz82LRpk2N7ypQpvylGy7Jo165dkbFeffVV/va3vxV7fFRUFNHR0cycORPLsujXr5/j\ns1+/7lFWr3+IiIhUNOXxesUWwN8Y42eMqQoMBL4sh3lFREQqtUH2QaSMTCHvzTxSRqZUuoRD7O5Y\nbLNtuL/ljm22zdF5Y9asWQQEBDB48OAbGv/NN99kzZo1ZRFqiTzxxBNs27aNPXv2AHDw4EF69+7N\noUOH+PHHH8nOzmbt2rVFzunevTsvvPACjzzySJH98+bNA+DDDz/Ew8OD3/3ud9SqVYtz586Vz5cR\nEREpJ9dd6XAtxph+wPtAfeDvxpgky7J6GGN8gHmWZT1kWVauMWYU8C3gDsy3LGvPDUcuIiIiFVZh\ny8+IrhE85/McacfSiF4bDRT8or1mzRruvvvuG5rjrbfeKotQSyw8PJyoqCjatCnoEm6MYdasWQwc\nOBCbzUbVqlVp0KABtWrVcpwzdepUVq1axbRp04qMVa1aNTw9PcnPz2fOnDkAjBo1ir59+1KjRg2m\nT5+uug4iInJTMJZVMd9iaNOmjbV161ZXhyEiIiK/gW22jbDQMPx9/R37Ug+nsnjEYn7+4WdsNhuR\nkZEsX76c7OxsatSowSeffILNZmPBggUsX76c8+fPk5qayosvvsjFixdZtGgR1apV46uvvuL2229n\n6NCh9O7dm4iICBo1asSTTz7JypUrycnJ4fPPP6dZs2acP3+e0aNHk5ycTE5ODpMmTaJPn7ItS/Wv\nf/2Lhg0bkp2dzT333MPQoUN5++23AXjhhRdYtmwZaWn/LQrq7e3NrFmzeOKJJ8o0DhERkfJkjNlm\nWVab6x1XHq9XiIiIyC3mai0/zz14Dh8fH9avX09UVBQJCQns2LGDt956i9dee81xbHJyMkuXLmXL\nli28/vrreHp6smPHDu6//34+/fTTYuesV68e27dvJyoqinfffRcoWGnQtWtXfvjhB9avX8/48eM5\nf/6845yRX43Ea5oXZrLBa5oXI78aWerv2rt3b2rUqEGdOnVo2LAhf/rTn4CCwpezZs1yrGQQERG5\nFd3Q6xUiIiIixSls+Xn5SofClp+/UFAcMjMzkyeffJLU1FSMMeTk5DiOfeCBB6hVqxa1atWiTp06\njpoIdrudXbt2FTvno48+CkDr1q1ZunQpAP/4xz/48ssvHUmI7OxsMjIyCAgIYORXI1m8ZzFDHxpK\nY5/GpB1LY9G3iwCY/dDsEn/Xq63MvFqcZ8+eLfHYIiIilZ1WOoiIiFRyGzZsYOPGjY7tuXPnOlYD\nDB06lLi4uHKPqSQtPydMmMADDzxAcnIyK1euJDs72/FZtWrVHD+7ubk5tt3c3MjNzS12zsJj3N3d\nHcdYlsUXX3xBUlISSUlJjoQDwMJdCxnSYwj+vv64u7vj7+vPkB5DWLhrYdleDBERkVuYkg4iIiKV\n3K+TDsOHD3d5vYBB9kHM6DaD1QmrGf/heFYnrL6i5WdmZiZ33XUXAAsWLLih+TIyMord36NHD95/\n/30Ka1jt2LHD8dn5X85f8QqId64352ecR0RERMqGkg4iIiIulJ6eTrNmzRg8eDABAQFERETw888/\ns23bNjp37kzr1q3p0aMHx48fBwraTQYGBhIUFMTAgQNJT09n7ty5/PnPfyYkJISEhAQmTZrkeJ3g\nclcbs0uXLrz88su0a9eOpk2bkpCQAEBeXh4vvvgiLVq0ICgoiPfff/+a4/za9Vp+vvTSS7z66qu0\nbNnyqqsXbtSECRPIyckhKCiI5s2bM2HCBMdnNavVJO1YWpHjM05kYNyMU2KpjL788ssrOm+IiIiU\nhrpXiIiIuFB6ejp+fn4kJibSoUMHhg0bRkBAAMuWLWPFihXUr1+fzz77jG+//Zb58+fj4+PDjz/+\nSLVq1Th79ize3t5MmjQJLy8vXnzxRYAi24UdHvr06UPnzp2LHbNLly60bt2a9957j6+++ooZM2aw\nZs0a5syZw9q1a1myZAkeHh789NNP1KpV64px5iyZw/Huxzlw5gBN6jZhYqeJVyQYnM3Ly4usrCyy\nsrLo06cP//73v8nJyWHKlCn06dOH9PR0evXqRceOHdm4cSN33XUXflF+LDmwhB6+PUicksjFnIuc\na3gOr0NenEk/U67xV0S5ubl4eKj8l4iIFK+k3Sv0N4mIiIiL+fr60qFDBwAiIyP54x//SHJyMmFh\nYUDBioM777wTKOiIMHjwYPr27Uvfvn1LPEdKSspVx4SiRRjT09MBWLNmDcOHD3f84nn77beTnJxc\nZJwz589w0u0kz05+lud8niPtWBrRa6MByj3xAFC9enWWLVtG7dq1OX36NO3btyc8PByA1NRU/vrX\nv/K///u//P73vyf0fCgezT2Y8/QcrJ4WNW01CdwSSM6ZnOvMUjH07duXw4cPk52dzdixY3n66ad5\n+umn2bp1K8YYhg0bxvPPP8+sWbOYO3cuHh4eBAYGEhsbi81mY+PGjdSvX5/8/HyaNm3Kpk2bGD9+\nPNWrV2fHjh106NCBoKAgtm7dygcffMDKlSuZMmUKFy9epG7dusTExNCgQQMmTZpERkYGaWlpZGRk\nMG7cOMaMGePqyyMiIhWEkg4iIiIuZkzR5fy1atWiefPmbNq06Ypj//73vxMfH8/KlSuZOnUqu3fv\nLtEclmVddUwovghjScaxzbbxbOizji4V/r7+RHSNYHL8ZJckHSzL4rXXXiM+Ph43NzeOHj3KiRMn\nAPDz8yMkJAT4b3Jlau+prKyykoxPCmpC7Nq1i0GDyj/u32L+/PncfvvtXLhwgbZt29K6dWuOHj1K\ncnIy8N8uGdOmTSuyOsbNzY3IyEhiYmIYN24ca9asITg4mPr16wNw5MgRNm7ciLu7e5FaGx07dmTz\n5s0YY5g3bx7vvPMO7733HgD79u1j/fr1nDt3DpvNRlRUFFWqVCnfCyIiIhWSajqIiIi4WEZGhuOX\n+NjYWNq3b8+pU6cc+3JyctizZw/5+fkcPnyYBx54gLfffpvMzEyysrKoVasW586du+YcNput2DGv\nJSwsjI8++siRhPjpp5+uGCf1ZCqe//Escl5jn8YcOHOg9BeiDMTExHDq1Cm2bdtGUlISDRo0cHTF\nuLwjxvWSK5XBrFmzCA4Opn379hw+fJiLFy+SlpbG6NGj+eabb6hduzbw39UxixcvdqxaGTZsmKPD\nyfz583nqqacc4w4YMAB3d/cr5jty5Ag9evTAbrczffr0IvfPww8/TLVq1ahXrx533HGHI9EjIiKi\npIOIiIiL2Ww2Zs+eTUBAAP/+978ZPXo0cXFxvPzyywQHBxMSEsLGjRvJy8sjMjISu91Oy5YtGTNm\nDN7e3jzyyCMsW7bMUUiyOFWrVi12zGt55pln+N3vfkdQUBDBwcHExsZeMU6Vj6uwZfWWIuelHUuj\nSd0mZXZ9SiMzM5M77riDKlWqsH79eg4dOnTN4729vfH29iYxMREoSFpUBhs2bGDNmjVs2rSJnTt3\n0rJlS3755Rd27txJly5dmDt3Ls888wxQsDpm5MiRbN++nbZt25Kbm4uvry8NGjRg3bp1/PDDD/Tq\n1csxds2aNYudc/To0YwaNYrdu3fz0UcfXbXF6c2Q0BERkbKj1ytERERczMPDg8WLFxfZFxISQnx8\n/BXHFv5yfLmmTZuya9cux3ZoaKjj58uXx19tzA0bNjh+rlevnqOmg4eHBzNmzGDGjBlXjS12dyzR\na6Npfrg5jX0ak3Ysjbh1cczoVvSc8jJ48GAeeeQR7HY7bdq0oVmzZtc955NPPmHYsGEYY3jwwQfL\nIcobl5mZyW233Yanpyf79u1j8+bNnD59mvz8fPr374/NZiMyMrLI6piOHTuyZMkSsrKy8Pb25pln\nniEyMpIhQ4YUu7KhuDkLW5wuXLjQ2V9RRERuEko6iIiIlLHY3bFMjp/s0m4O5aXwe13+fWd0m1Em\n37c01zErKwsoSJpcrW5FYa0DwNHpAwrqO+zcudOx/c4779xw7M7Ws2dP5s6dS0BAADabjfbt23P0\n6FG6dOlCfn4+AH/6058cq2MyMzOxLMuxOgYgPDycp556qsirFdcyadIkBgwYwG233UbXrl358ccf\nnfb9RETk5qGWmSIiImWo8Ml/RNeIK57836yJB2e4Fa9jeSertm7dyvPPP3/VV3JERESupaQtM5V0\nEBERKUO22TbCQsMc3RwAUg+nsjphNSkjU1wYWeVyq13H8k6yTJs2jTlz5hATE0PHjh3LfHwREbn5\nlTTpoEKSIiIiZejAmQM09mlcZJ8ruzlUVrfadZwcP5mIrhH4+/rj7u5epPWoM7zyyiscOnRICQcR\nEXE6JR1ERETKUJO6TUg7llZknyu7OVRWt9p1vNWSLCIicutQ0kFERKQMTew0kbh1caQeTiUvL4/U\nw6nErYtjYqeJrg6tUrnVruOtlmQREZFbh7pXiIiIlCFndnO4ldxq13Fip4lXrekgIiJSmamQpIiI\niEgFcCu1WhURkcpP3StERERERERExCnUvUJEREREREREXEpJBxERERERERFxCiUdRERERERERMQp\nlHQQEREREREREadQ0kFEREREREREnEJJBxERERERERFxCiUdRERERERERMQplHQQEREREREREadQ\n0kFEREREREREnEJJBxERERERERFxCiUdRERERERERMQplHQQEREREREREadQ0kFEREREREREnEJJ\nBxERERERERFxCiUdRERERERERMQplHQQEREREREREadQ0kFEREREREREnEJJBxERERERERFxCiUd\nRERERERERMQplHQQEREREREREadQ0kFEREREREREnMJYluXqGIpljDkFHHJ1HOJS9YDTrg5CKg3d\nL1Iaul+ktHTPSGnofpHS0j0jpVFR7pd7LMuqf72DKmzSQcQYs9WyrDaujkMqB90vUhq6X6S0dM9I\naeh+kdLSPSOlUdnuF71eISIiIiIiIiJOoaSDiIiIiIiIiDiFkg5SkX3s6gCkUtH9IqWh+0VKS/eM\nlIbuFykt3TNSGpXqflFNBxERERERERFxCq10EBERERERERGnUNJBKixjzHRjzD5jzC5jzDJjjLer\nY5KKzRgzwBizxxiTb4ypNBV9pXwZY3oaY1KMMQeMMa+4Oh6p2Iwx840xJ40xya6ORSo+Y4yvMWa9\nMeafl/4+GuvqmKTiMsZUN8b8YIzZeel+mezqmKRyMMa4G2N2GGNWuTqWklDSQSqy1UALy7KCgP3A\nqy6ORyq+ZOBRIN7VgUjFZIxxB2YDvYBA4HFjTKBro5IKbgHQ09VBSKWRC7xgWVYg0B4Yqf/HyDX8\nAnS1LCsYCAF6GmPauzgmqRzGAntdHURJKekgFZZlWf+wLCv30uZm4G5XxiMVn2VZey3LSnF1HFKh\ntQMOWJaVZlnWRWAJ0MfFMUkFZllWPPCTq+OQysGyrOOWZW2/9PM5Cn4puMu1UUlFZRXIurRZ5dIf\nFdyTazLG3A08DMxzdSwlpaSDVBbDgK9dHYSIVHp3AYcv2z6CfiEQEScwxjQCWgLfuzYSqcguLZNP\nAk4Cqy3L0v0i1zMTeAnId3UgJeXh6gDk1maMWQM0LOaj1y3LWnHpmNcpWK4YU56xScVUkntGRETE\nlYwxXsAXwDjLsv7j6nik4rIsKw8IuVS7bJkxpoVlWaohI8UyxvQGTlqWtc0Y08XV8ZSUkg7iUpZl\ndb/W58aYoUBvoJul/q7C9e8Zkes4Cvhetn33pX0iImXCGFOFgoRDjGVZS10dj1QOlmWdNcasp6CG\njJIOcjUdgHBjzENAdaC2MWaxZVmRLo7rmvR6hVRYxpieFCwdCrcs62dXxyMiN4UtgL8xxs8YUxUY\nCHzp4phE5CZhjDHA/wX2WpY1w9XxSMVmjKlf2J3NGFMDCAP2uTYqqcgsy3rVsqy7LctqRMG/YdZV\n9IQDKOkgFdsHQC1gtTEmyRgz19UBScVmjOlnjDkC3A/83RjzratjkorlUnHaUcC3FBR4+5tlWXtc\nG5VUZMaYvwKbAJsx5ogx5mlXxyQVWgdgCND10r9dki49kRQpzp3AemPMLgqS4qsty6oULRBFSsNo\nxbqIiIiIiIiIOINWOoiIiIiIiIiIUyjpICIiIiIiIiJOoaSDiIiIiIiIiDiFkg4iIiIiIiIi4hRK\nOoiIiIiIiIiIUyjpICIiIiIiIiJOoaSDiIiIiIiIiDiFkg4iIiIiIiIi4hT/HzifDGjDHKGBAAAA\nAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.decomposition import PCA\n", "\n", "words = sum([[k] + v for k, v in similar_words.items()], [])\n", "wvs = ft_model.wv[words]\n", "\n", "pca = PCA(n_components=2)\n", "np.set_printoptions(suppress=True)\n", "P = pca.fit_transform(wvs)\n", "labels = words\n", "\n", "plt.figure(figsize=(18, 10))\n", "plt.scatter(P[:, 0], P[:, 1], c='lightgreen', edgecolors='g')\n", "for label, x, y in zip(labels, P[:, 0], P[:, 1]):\n", " plt.annotate(label, xy=(x+0.06, y+0.03), xytext=(0, 0), textcoords='offset points')" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([-0.23493268, 0.14237943, 0.35635167, 0.34680951, 0.09342121,\n", " 0.11546664, 0.06848907, -0.35488272, 0.03399122, 0.26420799,\n", " 0.05554794, -0.41830763, -0.38671952, 0.38901171, -0.26265353,\n", " 0.03854577, -0.22641954, 0.16377565, -0.0347381 , -0.43721643,\n", " -0.18751772, 0.03163779, 0.12475108, 0.28285024, 0.11760047,\n", " -0.24720524, -0.25686634, -0.01248573, 0.10454553, 0.29713026,\n", " -0.04111641, -0.44567475, -0.14127477, -0.20297718, 0.05123538,\n", " -0.19558378, -0.24215269, -0.22690177, 0.45923024, 0.10298209,\n", " 0.07537983, 0.23333244, -0.34262201, 0.36080933, -0.05114703,\n", " -0.19241138, -0.46164852, -0.25011861, -0.25578389, -0.11737192,\n", " 0.05247249, -0.00788139, -0.4545919 , 0.0890988 , -0.58961135,\n", " -0.15117864, 0.25921214, 0.50884134, -0.03514979, -0.48242396,\n", " -0.20581312, 0.1193359 , 0.02668546, 0.22564436, -0.00703725,\n", " 0.34001571, -0.19389269, -0.59574127, 0.13655224, -0.4419246 ,\n", " -0.12572952, -0.24745932, 0.23438101, -0.17981783, -0.72245467,\n", " 0.06801575, 0.02291457, -0.52627361, 0.06928489, 0.31512719,\n", " -0.24033862, 0.41592884, -0.01954436, -0.10545548, 0.05702253,\n", " 0.38872063, -0.26490289, 0.34405881, -0.41851836, -0.28361416,\n", " 0.27255496, -0.15021783, -0.08518736, -0.28278247, 0.09768565,\n", " 0.13725466, -0.09564053, -0.05963023, -0.31269372, -0.19060139], dtype=float32)" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ft_model.wv['jesus']" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.333260876685\n", "0.698824900473\n" ] } ], "source": [ "print(ft_model.wv.similarity(w1='god', w2='satan'))\n", "print(ft_model.wv.similarity(w1='god', w2='jesus'))" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Odd one out for [ god jesus satan john ]: satan\n", "Odd one out for [ john peter james judas ]: judas\n" ] } ], "source": [ "st1 = \"god jesus satan john\"\n", "print('Odd one out for [',st1, ']:', ft_model.wv.doesnt_match(st1.split()))\n", "\n", "st2 = \"john peter james judas\"\n", "print('Odd one out for [',st2, ']:', ft_model.wv.doesnt_match(st2.split()))" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 1 }