Skip to content

Instantly share code, notes, and snippets.

@sushantMoon
Created October 27, 2019 14:07
Show Gist options
  • Save sushantMoon/57f31738b730a4b5cbf28a5d3c9a9b2e to your computer and use it in GitHub Desktop.
Save sushantMoon/57f31738b730a4b5cbf28a5d3c9a9b2e to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"import os\n",
"import numpy as np\n",
"import pandas as pd\n",
"import tensorflow as tf\n",
"import tensorflow_hub as hub\n",
"from gensim.scripts.glove2word2vec import glove2word2vec\n",
"from gensim.models import KeyedVectors\n",
"from sklearn.decomposition import PCA\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Examples that we would work on"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"sentence_1 = \"This is Mr. River's Piggy bank.\"\n",
"sentence_2 = \"This Mr. Piggys is river bank.\""
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['this is mr rivers piggy bank', 'this mr piggys is river bank']\n"
]
}
],
"source": [
"# Cleaning the sentences, removing . and ,\n",
"sentence_1 = sentence_1.replace('.', '').replace(\"'\", '').lower()\n",
"sentence_2 = sentence_2.replace('.', '').lower()\n",
"sentences = [sentence_1, sentence_2]\n",
"print(sentences)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# GloVe Embedding"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Converting GloVe vectors in the format of word2vec so that gensim can be used to load them. "
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 2.11 s, sys: 5.91 s, total: 8.02 s\n",
"Wall time: 18.9 s\n"
]
},
{
"data": {
"text/plain": [
"(1917494, 300)"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"glove_vector_file = 'glove.42B.300d.txt'\n",
"glove_word2vec = 'glove.word2vec'\n",
"glove2word2vec(glove_vector_file, glove_word2vec)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"CPU times: user 10min 28s, sys: 4.8 s, total: 10min 33s\n",
"Wall time: 10min 33s\n"
]
}
],
"source": [
"%%time\n",
"model = KeyedVectors.load_word2vec_format(glove_word2vec, binary=False)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"# Calculating the word vectors for each word\n",
"vector_1 = np.array([model[x] for x in sentence_1.split()])\n",
"vector_2 = np.array([model[x] for x in sentence_2.split()])\n",
"\n",
"# Averaging the word vector to get the sentence vector\n",
"glove_x = [\n",
" sum(vector_1)/len(sentence_1.split()),\n",
" sum(vector_2)/len(sentence_2.split())\n",
"]\n",
"glove_y = PCA(n_components=2).fit_transform(glove_x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# ELMo Embeddings"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"INFO:tensorflow:Saver not created because there are no variables in the graph to restore\n",
"CPU times: user 5.18 s, sys: 552 ms, total: 5.74 s\n",
"Wall time: 2.17 s\n"
]
}
],
"source": [
"%%time\n",
"# url = \"https://tfhub.dev/google/elmo/3\" Downloaded the model\n",
"graph = tf.Graph()\n",
"graph.device(\"/cpu\")\n",
"\n",
"with graph.as_default():\n",
" elmo_model = hub.Module(\"elmov3/\", trainable=False)\n",
" embeddings = elmo_model(\n",
" sentences,\n",
" signature=\"default\",\n",
" as_dict=True\n",
" )[\"default\"]\n",
" with tf.Session() as sess:\n",
" sess.run(tf.global_variables_initializer())\n",
" sess.run(tf.tables_initializer())\n",
" elmo_x = sess.run(embeddings)\n",
"elmo_y = PCA(n_components=2).fit_transform(elmo_x)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Plotting the embeddings"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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wIIFC3DrrbciNjbW/GwAwP79+9GhQwfzMQ8OzkeRCxcuxF133YXu3bujRYsWePjhh81yb731llnvmDFjzCMiHx8fBAYGmo+WsExhd1deSwPv0C9ayu4U9Znpo5gOc/CZ6aMpu6teyv3Spqe/5ZZb9MyZM3rs2DGtW7euzps3T1VVJ02apC+88IK5/rFjx7rdjmnTpmmbNm30woUL5nb06tVLVVUnTpyo8+fPV1XVrVu3minm7777bnPbDh48qK1atXJb14QJEzTFyITw22+/mdOdATDLPP744+YjAYYPH67Lly/XixcvatOmTTUjI0NVVQcPHmy2b/z48frkk0+qqupHH32kAMx07VFRUaqqmpeXp0FBQZqTk+Oy3spOue/YpsDAQDPl/T333OOyfH4BAQH6/fffa4cOHVRVNTIyUvfs2WN+7p577jkzdf13332nzZo104sXLxbYTm9vb3OdERER+sknn5j7/sMPP1RVeyaBhIQEvXz5su7atUsjIiLMtjVq1EhzcnL0woULGhISotu3b9e9e/dq79699fLly6qqOnbsWF20aJEePXpUmzVrpseOHdPffvtN//znP5vb1qdPH120aJGqqr788svmYx6c/5cWLFigzZs311OnTunFixf15ptv1szMTD1y5IgGBATo8ePH9fLly3rbbbe57LMZM2boc889V2AfOmPKfbLc5A2TceGKa8r9C1cuYPKGqply36Ek6ek7d+4MX19fNGzYEPXq1UOfPn0A2FOnO6/fkUHXncTERLeZZJOTk81fzUuWLDHrWL9+PSZMmIDIyEgkJibizJkzZtJE57o6dOiAJ598Ek8//TQOHjzodh1eXl5mvc5p7x2+//57BAUFoXnz5gDg8ss9LS3NPKLr3r27meo+MDAQ/v7+2Llzp5mK3t+/4B0Anki5/+yzz5op7xeX4IF1/v7+qF+/PpYsWYLg4GD4+Pi4bL8jdX2rVq0QEBCAH3/8sUAdjtNijsHRj1OzZk10794dgP3z0qlTJ9SoUaPAZychIQH+/v6oVasW7rrrLqSlpWHDhg3YsWMHYmJiEBkZiQ0bNiAjIwNffvkl4uPj0bBhQ9SsWdPlc/fZZ5+Z759zzrX8unTpgnr16sHb2xutW7fGwYMHsW3bNnTq1AkNGjRAjRo1zKSdDlam2ndgcKFiZZ52n1q/sOllVdKU+/Hx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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.xlabel(\"X\")\n",
"plt.ylabel(\"Y\")\n",
"plt.title(\"Embeddings\")\n",
"for i in range(len(glove_y)):\n",
" plt.scatter(glove_y[i][0], glove_y[i][1], label=sentences[i]+'(Glove Embedding)', color='red')\n",
"for i in range(len(elmo_y)):\n",
" plt.scatter(elmo_y[i][0], elmo_y[i][1], label=sentences[i]+'(ELMo Embedding)', color='green')\n",
"\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Inferences\n",
"\n",
"1. Contextual Word Embedding would work better when faced with scenario where there may be two or more meaning of a word depending on the context it is being used.\n",
"2. The ouput from contextual word embedding model would then be used for creating the classification model to get better results. "
]
}
],
"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.6.6"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment