Created
October 3, 2016 12:06
-
-
Save quizzicol/55800cff7ae13cc6bdcee27478cb4b6b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# A simple word2vec example\n", | |
"\n", | |
"Gensim has a python implementation of Word2Vec. Documentation is here:\n", | |
"http://radimrehurek.com/gensim/models/word2vec.html" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"collapsed": true | |
}, | |
"source": [ | |
"Working through the example from here\n", | |
"https://districtdatalabs.silvrback.com/modern-methods-for-sentiment-analysis" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 2, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"from gensim.models.word2vec import Word2Vec\n", | |
"import numpy as np" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"As part of the Wor2Vec release, Google also released a results set from a Google news data set of about **1 billion ** words. The model contains 300 dimensional vectors for 3 million words and phrases. \n", | |
"\n", | |
"You can down load the dataset [here](https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit?usp=sharing) but beware, its 1.5GB, and nealry 4GB uncompressed.\n", | |
"\n", | |
"And to use it, I needed about 18GB or RAM in a VM" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"model = Word2Vec.load_word2vec_format('/mnt/hgfs/workspace/Jupyter/Projects/GoogleNews-vectors-negative300.bin', \n", | |
" binary=True)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Now that we have the model loaded, we can try some examples:\n", | |
"\n", | |
"$$vector(king) - vector(man) + vector(woman) =?$$\n", | |
"\n", | |
"If the model performs well, it sohuld be able to discern the relationship between genders and equivalent roles.\n", | |
"\n", | |
"The answer should be 'Queen'" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 4, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[('queen', 0.7118192911148071),\n", | |
" ('monarch', 0.6189674139022827),\n", | |
" ('princess', 0.5902431607246399),\n", | |
" ('crown_prince', 0.5499460697174072),\n", | |
" ('prince', 0.5377321243286133)]" | |
] | |
}, | |
"execution_count": 4, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"model.most_similar(positive=['woman', 'king'], negative=['man'], topn=5)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Another example, trying to find gramatical relationships between words.\n", | |
"\n", | |
"$$\"biggest\" - \"big\" + \"small\" = ?$$\n", | |
"\n", | |
"The answer should be 'smallest'" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 8, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[('smallest', 0.6086567640304565),\n", | |
" ('largest', 0.6007465124130249),\n", | |
" ('tiny', 0.5387297868728638),\n", | |
" ('large', 0.45694398880004883),\n", | |
" ('minuscule', 0.4340195059776306)]" | |
] | |
}, | |
"execution_count": 8, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"model.most_similar(positive=['biggest', 'small'], negative=['big'], topn=5)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"And one more, can the model discern tense of words;\n", | |
"\n", | |
"$$\"ate\" - \"eat\" + \"speak\" = ?$$\n", | |
"\n", | |
"The answer should be spoke" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 9, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"[('spoke', 0.6965223550796509),\n", | |
" ('speaking', 0.6261292099952698),\n", | |
" ('conversed', 0.5754592418670654),\n", | |
" ('spoken', 0.5704882740974426),\n", | |
" ('speaks', 0.5630601644515991)]" | |
] | |
}, | |
"execution_count": 9, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"model.most_similar(positive=['ate', 'speak'], negative=['eat'], topn=5)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"# An example of using Word2Vec to cluster words\n", | |
"\n", | |
"I ended up scraping these words from the [Enchanted Leaning](http://www.enchantedlearning.com/wordlist/) website myself" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 16, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"with open('./food_words.txt', 'r') as infile:\n", | |
" food_words = infile.readlines()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 17, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"with open('./sports_words.txt', 'r') as infile:\n", | |
" sports_words = infile.readlines()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 18, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"with open('./weather_words.txt', 'r') as infile:\n", | |
" weather_words = infile.readlines()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 13, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"def getWordVects(words):\n", | |
" vecs = []\n", | |
" for word in words:\n", | |
" word = word.replace('\\n', '')\n", | |
" try:\n", | |
" vecs.append(model[word].reshape((1,300)))\n", | |
" except KeyError:\n", | |
" continue\n", | |
" vecs = np.concatenate(vecs)\n", | |
" return np.array(vecs, dtype='float') #TSNE expects float type values\n", | |
"\n", | |
"food_vecs = getWordVects(food_words)\n", | |
"sports_vecs = getWordVects(sports_words)\n", | |
"weather_vecs = getWordVects(weather_words)" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"This now gives us 300 value long vector representations of words related to the food, sports and weather groups, as per the information from the model " | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 28, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"There are 468 word in the food array, each represented by a 300 value long vector\n", | |
"There are 264 word in the food array, each represented by a 300 value long vector\n", | |
"There are 180 word in the food array, each represented by a 300 value long vector\n" | |
] | |
} | |
], | |
"source": [ | |
"print('There are {0} word in the food array, each represented by a {1} value long vector'.format(\n", | |
" food_vecs.shape[0], food_vecs.shape[1]))\n", | |
"\n", | |
"print('There are {0} word in the food array, each represented by a {1} value long vector'.format(\n", | |
" sports_vecs.shape[0], sports_vecs.shape[1]))\n", | |
"\n", | |
"print('There are {0} word in the food array, each represented by a {1} value long vector'.format(\n", | |
" weather_vecs.shape[0], weather_vecs.shape[1]))" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"We can use Scikit learn and the t-SNE method to reduce the dimensionality to 2, and see how well the results cluster." | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 62, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\nVAeYCGNpOOHjs/wSAAAAAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<matplotlib.figure.Figure at 0x7f8de3dfd2e8>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"from sklearn.manifold import TSNE\n", | |
"import matplotlib.pyplot as plt\n", | |
"\n", | |
"ts = TSNE(2)\n", | |
"reduced_vecs = ts.fit_transform(np.concatenate((food_vecs, sports_vecs, weather_vecs)))\n", | |
"\n", | |
"#color points by word group to see if Word2Vec can separate them\n", | |
"for i in range(len(reduced_vecs)):\n", | |
" if i < len(food_vecs):\n", | |
" #food words colored blue\n", | |
" color = 'b'\n", | |
" elif i >= len(food_vecs) and i < (len(food_vecs) + len(sports_vecs)):\n", | |
" #sports words colored red\n", | |
" color = 'r'\n", | |
" else:\n", | |
" #weather words colored green\n", | |
" color = 'g'\n", | |
" plt.plot(reduced_vecs[i,0], reduced_vecs[i,1], marker='o', color=color, markersize=8)\n", | |
" \n", | |
"plt.savefig('./cluster.png')" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"collapsed": true | |
}, | |
"source": [ | |
"This looks pretty good. So what happened?\n", | |
"\n", | |
"* We grabbed a bunch of word related to specific subjects. Let's look at the top 10 words from each group" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 46, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/html": [ | |
"<div>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>Food</th>\n", | |
" <th>Sport</th>\n", | |
" <th>Weather</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>acorn squash</td>\n", | |
" <td>aerobics</td>\n", | |
" <td>accumulation</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>alfalfa sprouts</td>\n", | |
" <td>archer</td>\n", | |
" <td>advisory</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>almond</td>\n", | |
" <td>archery</td>\n", | |
" <td>air</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>3</th>\n", | |
" <td>anchovy</td>\n", | |
" <td>arena</td>\n", | |
" <td>air mass</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>4</th>\n", | |
" <td>anise</td>\n", | |
" <td>arrow</td>\n", | |
" <td>air pollution</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>5</th>\n", | |
" <td>appetizer</td>\n", | |
" <td>athlete</td>\n", | |
" <td>air pressure</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>6</th>\n", | |
" <td>appetite</td>\n", | |
" <td>athletics</td>\n", | |
" <td>almanac</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>7</th>\n", | |
" <td>apple</td>\n", | |
" <td>axel</td>\n", | |
" <td>altocumulus</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>8</th>\n", | |
" <td>apricot</td>\n", | |
" <td>badminton</td>\n", | |
" <td>altostratus</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>9</th>\n", | |
" <td>artichoke</td>\n", | |
" <td>ball</td>\n", | |
" <td>anemometer</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>" | |
], | |
"text/plain": [ | |
" Food Sport Weather\n", | |
"0 acorn squash aerobics accumulation\n", | |
"1 alfalfa sprouts archer advisory\n", | |
"2 almond archery air\n", | |
"3 anchovy arena air mass\n", | |
"4 anise arrow air pollution\n", | |
"5 appetizer athlete air pressure\n", | |
"6 appetite athletics almanac\n", | |
"7 apple axel altocumulus\n", | |
"8 apricot badminton altostratus\n", | |
"9 artichoke ball anemometer" | |
] | |
}, | |
"execution_count": 46, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"import pandas as pd\n", | |
"df = pd.DataFrame(data=[[word[:-1] for word in food_words[:10]], \n", | |
" [word[:-1] for word in sports_words[:10]],\n", | |
" [word[:-1] for word in weather_words[:10]]]).T\n", | |
"df.columns=['Food', 'Sport', 'Weather']\n", | |
"df" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Next\n", | |
"* We passed each word to the trained model and captured the vector.\n", | |
"\n", | |
"For, example, the first ten values for the model's vector for 'aerobics' are;" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 48, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([ 0.20898438, -0.29296875, 0.3359375 , 0.43945312, 0.6640625 ,\n", | |
" 0.18554688, 0.1015625 , -0.00817871, -0.43554688, 0.29492188], dtype=float32)" | |
] | |
}, | |
"execution_count": 48, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"model['aerobics'][:10]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Then:\n", | |
"* we constuct a 2D t-SNE model and fit the food, sport and weather vectors to it.\n", | |
"* to do this, we join all the word vectors together and t_SNE 'simplistically' determines the probability of observations are similar or not, works some magic, and returns a lower dimensoinal representation of the distance between points. Read the [wikipedia](https://en.wikipedia.org/wiki/T-distributed_stochastic_neighbor_embedding) article on t-SNE if you want to understand it better\n", | |
"* we specified two dimensions, so we get a 2D array in the same order as the word vectors we passed in" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 51, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"text/plain": [ | |
"array([[ 16.65972617, 24.69817199],\n", | |
" [ 17.84424557, -1.28163851],\n", | |
" [ 20.63538267, 10.27779422],\n", | |
" [ 7.15620649, 7.85633015],\n", | |
" [ -1.2763867 , -1.80007392],\n", | |
" [ 17.0707459 , 22.65743754],\n", | |
" [ 15.31144735, 23.37642597],\n", | |
" [ 23.51362486, 15.59165023],\n", | |
" [ 23.36985536, 16.43928042],\n", | |
" [ 6.65823559, 24.10022212]])" | |
] | |
}, | |
"execution_count": 51, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"reduced_vecs[:10]" | |
] | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"Finally:\n", | |
"* because the points are in the same order as those we passed in, we can plot each point in a scatter plot and color them based on whether they were food, sport or weather words\n", | |
"* the result if the cluster plot we saw above\n", | |
"\n", | |
"\n", | |
"What this shows is that the Word2Vec model vector representations of related words are similar to each other, and different from unrelated words.\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"anaconda-cloud": {}, | |
"kernelspec": { | |
"display_name": "Python [Root]", | |
"language": "python", | |
"name": "Python [Root]" | |
}, | |
"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": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment