Skip to content

Instantly share code, notes, and snippets.

@gangtao
Created March 11, 2019 18:23
Show Gist options
  • Select an option

  • Save gangtao/e2e7200a5370dbdc71840ff73eeef123 to your computer and use it in GitHub Desktop.

Select an option

Save gangtao/e2e7200a5370dbdc71840ff73eeef123 to your computer and use it in GitHub Desktop.
Gensim embedding sample
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### create a embedding mode using gensim"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Word2Vec(vocab=16, size=100, alpha=0.025)\n",
"['fred', 'is', 'a', 'software', 'engineer', 'xander', 'also', 'can', 'write', 'program', 'knows', 'lot', 'of', 'machine', 'learnnig', 'algorithms']\n",
"[-5.5893237e-04 1.7668052e-03 1.5800461e-03 -2.9155423e-03\n",
" -4.8828649e-04 -1.5046246e-03 2.4005286e-03 -3.3505422e-03\n",
" 2.3780200e-03 -1.3460566e-03 -4.1362685e-03 -4.2379056e-03\n",
" 5.4847426e-04 4.1570985e-03 -2.1742571e-03 2.5030107e-03\n",
" 3.5490937e-04 4.9885712e-03 -4.2925519e-03 -2.6955188e-03\n",
" 2.2162867e-04 3.3585289e-03 3.4013640e-03 -1.0012955e-03\n",
" -1.6629590e-03 -1.8072047e-03 -1.8717305e-04 -5.0179119e-04\n",
" 4.7619347e-03 1.8071961e-03 3.4890659e-03 -3.0099638e-03\n",
" 4.9460814e-03 -2.1814685e-03 3.0371203e-04 1.2496420e-03\n",
" 2.5786117e-03 4.9241213e-03 2.6873725e-03 -4.6886608e-04\n",
" 3.0186286e-03 -9.6760318e-04 -4.6525244e-03 2.4885244e-03\n",
" -3.2226990e-03 1.9304224e-03 -2.2795333e-03 4.6114167e-03\n",
" -1.1173520e-03 -2.2942331e-03 -2.7623768e-03 6.2199228e-04\n",
" 3.7770690e-03 2.5790252e-04 4.7200592e-03 2.1978549e-03\n",
" 1.8990934e-03 2.1505095e-03 4.9980511e-03 -2.9854581e-03\n",
" 8.1377748e-06 4.4536749e-03 9.3884580e-04 2.2312454e-03\n",
" -1.0586825e-04 -2.1196983e-03 2.0551309e-03 2.4646961e-03\n",
" 2.6276743e-03 -2.0470645e-04 4.9548398e-04 -2.5170366e-03\n",
" 1.3753168e-03 3.8361412e-03 3.1737713e-03 -4.0052771e-03\n",
" 3.9899144e-03 3.3078534e-03 -1.5132531e-03 -3.7289991e-03\n",
" -3.3434983e-03 3.6548586e-03 1.7128733e-03 1.7006679e-03\n",
" -3.5741429e-03 4.5237918e-03 -1.0361242e-03 2.5291061e-03\n",
" -2.5380929e-03 -2.2884402e-03 -3.5806587e-03 4.5312424e-03\n",
" -3.9801579e-03 1.8670280e-03 3.7243459e-03 -1.0268994e-03\n",
" 4.5204922e-03 -4.8972399e-04 3.1113774e-03 4.0464094e-03]\n",
"Word2Vec(vocab=16, size=100, alpha=0.025)\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:15: DeprecationWarning: Call to deprecated `__getitem__` (Method will be removed in 4.0.0, use self.wv.__getitem__() instead).\n",
" from ipykernel import kernelapp as app\n"
]
}
],
"source": [
"from gensim.models import Word2Vec\n",
"# define training data\n",
"sentences = [['fred', 'is', 'a', 'software', 'engineer'],\n",
"\t\t\t['xander', 'is', 'also', 'a', 'software', 'engineer'],\n",
"\t\t\t['fred', 'can', 'write', 'software', 'program'],\n",
"\t\t\t['xander', 'knows', 'a', 'lot', 'of','machine', 'learnnig', 'algorithms']]\n",
"# train model\n",
"model = Word2Vec(sentences, min_count=1)\n",
"# summarize the loaded model\n",
"print(model)\n",
"# summarize vocabulary\n",
"words = list(model.wv.vocab)\n",
"print(words)\n",
"# access vector for one word\n",
"print(model['fred'])\n",
"# save model\n",
"model.save('model.bin')\n",
"# load model\n",
"new_model = Word2Vec.load('model.bin')\n",
"print(new_model)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### visualize embedding result using PCA"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.7/site-packages/ipykernel_launcher.py:8: DeprecationWarning: Call to deprecated `__getitem__` (Method will be removed in 4.0.0, use self.wv.__getitem__() instead).\n",
" \n"
]
},
{
"data": {
"image/png": "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J8nNzeWhh+oQEvIiGs1N90ytwtWx8LLsGI1F3ltzXr6gPGO/fPkq167pS/V81+O3snIgJmYXaWlZALz00ih8fXvRp09QgfJpaVews1PG/5U5/96Acpe9UExicnZ2plGjRmzatInAwEA2bdpEo0aNCjTjAfj5+REeHk6PHj3IyMhg27ZtfP311/e1rTK4/oD6+ge2TTUNbQImMHt0RyxuaXIZN+4Nxo17o9AxNBp39uw5UOC9oKD+BAX1B278krdr175Aufr1Hym0X/36D7N8+aoC7w0a9Izp5+++iyh0/po1XQo0p93O9ecdBZss8593yGKDypWXl/fA9VYU905RvwlTp04lNDSUxYsXU61aNebMmQNASEgIY8eOpWnTpgQGBnLkyBF69OgBwJgxY/D09AS4522VQWX5wJbnHaWjuLOD79//KwsWzCUtLRUfn57Exf1jquVcH34QEbGBnJwc2rVrz/jxE6hatSoJCfHodAGEhk7iyy+X4epai0mTpqHTBbBz568sW/YZR48eJjb2Dz78cB49e/rz6qtvAnDgwD5ef30sGRkZ+Pj48eqrE7CwsCAqKoKIiPU0atSEqKgIHByqM3nydM6ePcPnn39Kbm4uY8a8Qs+e+a0Bv/yyh48/XkhSUhL29vYMGDCYwYOHlOt9FrenqMT08MMPEx4eXuj9pUuXmn5Wq9VMmzbttvvf67bKoDJ9YMuy7Pfv+uzgTk7O7NixjRkz3qZJkw0FymRkZDBp0pu89dYUOnbszLp14URErMfXtxcAUVERREdv4sMPP8XR0Yl33pnCggVzePvtGaZjHDp0kKioKNLSrhTogfv882M4duzIbZvyfv55D0uXruTKlSs899wzdOzozRNPdAAgNvY4/v5BREZuZ9myz5gyZSIdO3bm22/Xc/jwQd56awJdujyJnZ0d7747g+nT36V585ZcunSJhIT4Ur2HpV0LrEy1SsV0FxdlzxyXrBAVozizg//yyx7q1atPly5PYmlpiU43EGfnmqbtW7duJjj4aTw8amNnZ8cLL4xh27aYAlNMjRgxCjs7O2xsqhQ7tqefHoaDgwO1atWiZcvWptk6IL+5uXfvANRqNd279yA5OYnhw5/D2tqatm2fwMrKivPn8+d2VKstOX36H65cyaRatWo0aNDwTqcsoH//Pnz11Rc884yONm3aMGvWNHJycjh4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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%matplotlib inline\n",
"import pandas as pd\n",
"import seaborn as sns\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.decomposition import PCA\n",
"sns.set()\n",
"# fit a 2d PCA model to the vectors\n",
"X = model[model.wv.vocab]\n",
"pca = PCA(n_components=2)\n",
"result = pca.fit_transform(X)\n",
"dataset = pd.DataFrame(data=result, columns=['x','y'])\n",
"ax = sns.scatterplot(x=\"x\", y=\"y\", data=dataset)\n",
"words = list(model.wv.vocab)\n",
"for i, word in enumerate(words):\n",
"\tax.annotate(word, xy=(result[i, 0], result[i, 1]))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment