Skip to content

Instantly share code, notes, and snippets.

@mbednarski
Created August 10, 2018 09:38
Show Gist options
  • Save mbednarski/c24c683fa7d4f2148fc5fdfc51246b91 to your computer and use it in GitHub Desktop.
Save mbednarski/c24c683fa7d4f2148fc5fdfc51246b91 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import torch\n",
"from torch.optim import SGD\n",
"from torch.autograd import Variable, profiler\n",
"import numpy as np\n",
"import torch.functional as F\n",
"import torch.nn.functional as F"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"corpus = [\n",
" 'he is a king',\n",
" 'she is a queen',\n",
" 'he is a man',\n",
" 'she is a woman',\n",
" 'warsaw is poland capital',\n",
" 'berlin is germany capital',\n",
" 'paris is france capital', \n",
"]"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"# build vocabulary\n",
"words = []\n",
"for sentence in corpus:\n",
" for word in sentence.split():\n",
" if word not in words:\n",
" words.append(word)\n",
" \n",
"word2idx = {w:idx for (idx, w) in enumerate(words)}\n",
"idx2word = {idx:w for (idx, w) in enumerate(words)}\n",
"\n",
"vocabulary_size = len(word2idx)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"def get_word_embedding(word):\n",
" word_vec_one_hot = np.zeros(vocabulary_size)\n",
" word_vec_one_hot[word2idx[word]] = 1\n",
" return word_vec_one_hot"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"embedding_dims = 10\n",
"window_size = 2"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"def train_generator():\n",
" for sentence in corpus:\n",
" words = sentence.split()\n",
" indices = [word2idx[w] for w in words]\n",
" for i in range(len(indices)):\n",
" # center word, context\n",
" # i is center word index\n",
" for w in range(-window_size, window_size + 1):\n",
" context_idx = i + w\n",
" if context_idx < 0 or context_idx >= len(indices) or i == context_idx:\n",
" continue\n",
" center_vec_one_hot = np.zeros(vocabulary_size)\n",
" center_vec_one_hot[indices[i]] = 1\n",
" \n",
" context_idx = indices[context_idx]\n",
" yield center_vec_one_hot, context_idx\n",
" "
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5.015643062921507\n",
"1.7578562353338514\n",
"1.6352083325386046\n",
"1.6104002501283372\n",
"1.6013798773288728\n",
"1.597365347828184\n",
"1.5951904884406498\n",
"1.5937861749104092\n",
"1.5927484674113137\n",
"1.5919057164873396\n",
"1.5911775486809867\n"
]
}
],
"source": [
"# Network definition\n",
"W1 = Variable(torch.randn(embedding_dims, vocabulary_size).float(), requires_grad=True)\n",
"W2 = Variable(torch.randn(vocabulary_size, embedding_dims).float(), requires_grad=True)\n",
"\n",
"\n",
"for epo in range(501):\n",
" avg_loss = 0\n",
" samples = 0\n",
" for data, target in train_generator():\n",
" x = Variable(torch.from_numpy(data)).float()\n",
" y_true = Variable(torch.from_numpy(np.array([target])).long())\n",
" samples += len(y_true)\n",
" \n",
" a1 = torch.matmul(W1, x)\n",
" a2 = torch.matmul(W2, a1)\n",
"\n",
" log_softmax = F.log_softmax(a2, dim=0)\n",
"\n",
" network_pred_dist = F.softmax(log_softmax, dim=0)\n",
" loss = F.nll_loss(log_softmax.view(1,-1), y_true)\n",
" avg_loss += loss.item()\n",
" loss.backward()\n",
"\n",
" W1.data -= 0.01 * W1.grad.data\n",
" W2.data -= 0.01 * W2.grad.data\n",
"\n",
" W1.grad.data.zero_()\n",
" W2.grad.data.zero_()\n",
" \n",
" if epo % 50 == 0:\n",
" print(avg_loss / samples)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"from scikitplot.decomposition import plot_pca_2d_projection\n",
"from sklearn.decomposition import PCA"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\ncDuaX4yuW2tfBV4FSEtLq53fQERERERqkMM4iQlpHugwhFo4ZeUkFAINDtk/uF0QgFhERERERH6V\nujxCvgHoBLxbud8J2P3L6SoiIiIiEhiZmZmBDqFOqHUj5MaYIGNMGOAEnMaYMGPMkb44vPH/2bvz\n+CiqdP/jn5N09j0sCWDYBGRREAmCC0YUWVRQR3bBUQcH9aoI3t/oCGLQqw7ewcFt1BEFVBAYxQVw\n4CoCgqIQxqAisu9hTci+d5/fHx16wpoWukkg3/frVa/uOnWqzlPJHzw5nHoK+IMxpq0xJg4YB0w7\ni6GKiIiIiJyxGpeQ406si3CXNBxW8X2cMaaxMSbfGNMYwFq7EHgBWALsqNieqp6QRUREREROT41b\nsmKtTQVST3I48pi+LwIv+jkkERERERG/qYkz5CIiIiIitYYSchERERGRaqSEXERERERqFGMMmzdv\n9vl1ly5dygUX1Lza60rIRURERESqUY17qFNERERE/M/pcrKvaB+F5UWEO8JJDEsgMCCwusOqlTRD\nLiIiIlLLZJfksCRjKWkH1vBT5s+kHUhjScZSsktyfDpO06ZNef7552nbti1xcXHcfffdFBcXA/DW\nW2/RokUL4uPj6devHxkZGSe8xoIFC+jYsSPR0dEkJSWRmprqObZ9+3aMMUyfPp3GjRtTt25dnn32\nWc/xoqIi7rrrLuLi4mjbti2rV6/26f35ihJyERERkVrE6XKSdjCNwyXZFDtLsNZS7CzhcEk2aQfT\ncLqcPh1vxowZLFq0iC1btrBx40b+53/+h6+++oo///nPzJkzh71799KkSRMGDx58wvMjIiJ49913\nyc7OZsGCBbz++ut88sknR/VZsWIFGzZsYPHixTz99NOsX78egAkTJrBlyxa2bNnCokWLmD59uk/v\nzVeUkIuIiIjUIvuK9lNQVoDLuohwRBDqCCXCEYHLuigoK2Bf0X6fjvfggw+SlJREfHw8Y8eO5YMP\nPmDGjBncc889XHbZZYSEhPD888+zcuVKtm/fftz51157LZdccgkBAQG0b9+eIUOGsGzZsqP6PPXU\nU4SFhdGhQwc6dOjA2rVrAZgzZw5jx44lPj6epKQkHn74YZ/em68oIRcRERGpRQrLC3FaFw7jwBgD\nuKuaOIwDp3VRWF7o0/GSkpI835s0aUJGRgYZGRk0adLE0x4ZGUmdOnXYs2fPced///33dO/enXr1\n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\nlb4N/gx5+1Dmy0AEcDEQBlwChFe0i4iIiIj8Bk4gE8gACgH44IMPaNeuHT169PDqCnFxcce1hYSE\nUFxc7Nnfu3fvCf/3ICEh4XSC9htvE/LewHBr7UZrbYm1diNwd0W7iIiIiIiXCoCfgE3AdiALgMWL\n57Nr1y769OlDH3XicwAAIABJREFUfn6+T0Zq0KABBw4cOK59//79J+hdfbxNyIuBese01QVKfBuO\niIiIiJy/XLgT8XygrKLNCUC7dg6WLv2KTZs20bt3b/Ly8s54tK5du/L5559TWFjoadu7dy/ffPPN\nGV/bl7xNyKcAXxhj7jPG9DHG3AcsAv7hv9BERERE5PxyGPc8rwVCgWD+U2OkmDZtElm6dClbt271\nSVI+btw4cnJy6NWrF59++ilz5syhZ8+eJCQkEBBQc16n420kzwJ/AfoDkyo+X6hoFxERERHxQgnu\nWfJA3K+0odKnBUq46KKLWLZsGTt27KBnz57k5uae9mht27ZlwYIF5OXlMXDgQB5//HEefPBBOnXq\nRExMzalNYqy11R3DWZWcnGzT0tKqOwwRERGRWigT95KVMtwz5EfeM1kMBAEtgTp+jSA/P58WLVpw\n00038fbbb/t1LGPMGmttclX9TlmH3BjTF7jZWjvyBMfeAD611v7r9MMUERERkdojDnciXo47CQ/E\nvYbcVLQfXznlTD300ENceeWVNGzYkIyMDF566SUOHz7MqFGjfD7W6arqxUBjgPEnOfY+8DSghFxE\nREREvBCAexZ8E/9ZSx6EOxlviferqb1XXFzMY489xv79+wkODubyyy/nyy+/pH379j4f63SdcsmK\nMWa/tfaEhRqNMQbYd7LjNZWWrIiIiIhUNxfuBzxLgBDcM+M15yFLX/HJkhUgzBgTZa090SOukbhf\nEiQiIiIi8hsE4O+14ueSqv4U+QF3RZUT+R2Q7ttwRERERERql6pmyJ8D5hhj4oCPgL1AA+B24Elg\nkH/DExERERE5v50yIbfWLjLG/AF37fH/rXRoFzDCWvt//gxOREREROR8V9UMOdbaD4EPjTEX4V7s\nk2mt3eD3yEREREREaoEqE/IjlISLiIiIiPje+VdfRkRERETkHKKEXERERESkGikhFxERERGpRidd\nQ26Mae7NBay1W30XjoiIiIhI7XKqhzo3AxYwp+hjgUCfRiQiIiIiUoucNCG31mo5i4iIiIiInynp\n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\nq7ioCJmZ4qIi1LJBrG7t2kERfu5eVFsxQg4AAHCKaBFXT5P6XaC127K080DwPuSN4gnjtRyBHAAA\n4BQS4fcrtWmS12XgGDBlBQAAAPAQgRwAAADwEIEcAAAA8BCBHAAAAPAQgRwAAADwEIEcAAAA8BCB\nHAAAAPBFo9LhAAAgAElEQVQQgRwAAADwEIEcAAAA8BCBHAAAAPAQgRwAAADwEIEcAAAA8BCBHAAA\nAPAQgRwAAADwEIEcAAAA8BCBHAAAAPAQgRwAAADwEIEcAAAA8BCBHAAAAPAQgRwAAADwEIEcAAAA\n8BCBHAAAAPAQgRwAAADwEIEcAAAA8BCBHAAAAPAQgRwAAADwEIEcAAAA8BCBHAAAAPAQgRwAAADw\nEIEcAAAA8BCBHAAAAPAQgRwAAADwEIEcAAAA8BCBHDgB+fn5XpcAAABOcgRynPIWLFig9u3bKyoq\nSh07dtRf//pX9e7dW7179w612blzp0aNGqWmTZsqMjJS7du311NPPVWun7lz58rMtHz5cl177bWK\ni4vThRdeKEkaMWKEmjVrpvT0dHXr1k3R0dFq166d3n77bUnSY489ppSUFMXGxurKK6/Ujh07yvX9\nxBNP6OKLL1bDhg0VFxeniy66KLRtqYyMDJmZZs+erYkTJ6px48aKi4vTFVdcoR9//DHUbvDgwerc\nufMh52HDhg3y+XyaPXv2CZ1PAABQtcK8LgCoTu+//75uvPFGDRkyRNOnT9fOnTs1ZswY5eXlqW3b\ntpKkffv26Sc/+Ylyc3OVlpamli1b6t1339WoUaOUn5+vO+64o1yfN954o66//nq9+uqrKioqCq3f\nt2+fhg8frt/97ndq0qSJpkyZomuuuUajR4/WunXr9OSTTyozM1NjxozR6NGj9fLLL4e2zcjI0MiR\nI5WSkqKioiK9+eabGjx4sJYsWaLLLrus3P4ffPBBdevWTXPmzNH27dt111136cYbb9SHH34oSbrt\nttt0+eWX65NPPlHXrl1D2z311FOqU6eObrjhhio/zwAA4AQ4506rV5cuXRxOHxdffLHr0KGDKykp\nCa1bvXq1k+R69erlnHPu/vvvd5GRkW7dunXlth05cqSLj493hYWFzjnnnnvuOSfJjRkz5pD9/PKX\nv3SS3Icffhhat2bNGifJtW3b1hUVFYXWjx071oWFhZVbV1ZxcbErLCx0/fv3d0OGDAmt37Bhg5Pk\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7f76d510aac8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pca = PCA(n_components=2)\n",
"pca.fit(W1.data.numpy().T)\n",
"proj = pca.transform(W1.data.numpy().T)\n",
"ax = plot_pca_2d_projection(pca, W1.data.numpy().T, np.array(words), feature_labels=words, figsize=(12,12), text_fontsize=12)\n",
"# ax.legend(None)\n",
"for i, txt in enumerate(words):\n",
" ax.annotate(txt, (proj[i,0], proj[i,1]), size=16)"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [],
"source": [
"def get_word_vector_v(word):\n",
" return W1[:, word2idx[word]].data.numpy()\n",
"\n",
"def get_word_vector_u(word):\n",
" return W2[word2idx[word],:].data.numpy()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"# Poland to Warsaw is like Germany to ?"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [],
"source": [
"pol = 1 * get_word_vector_v('poland') + 1 * get_word_vector_u('poland')\n",
"ger = 1 * get_word_vector_v('germany') + 1 * get_word_vector_u('germany') \n",
"waw = 1 * get_word_vector_v('warsaw') + 1 * get_word_vector_u('warsaw') \n",
"\n",
"yyy = waw - pol + ger"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [],
"source": [
"from scipy.spatial.distance import cosine\n",
"distances = [(v, cosine(yyy, 1 * get_word_vector_u(v) + 1 * get_word_vector_v(v))) for v in words]"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [],
"source": [
"# Poland to Warsaw is like Germany to Berlin"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[('he', 1.0924464762210846),\n",
" ('is', 0.90759392082691193),\n",
" ('a', 1.2198887318372726),\n",
" ('king', 1.5453479886054993),\n",
" ('she', 1.4458335936069489),\n",
" ('queen', 0.8317188173532486),\n",
" ('man', 0.76118695735931396),\n",
" ('woman', 1.2478962540626526),\n",
" ('warsaw', 0.20671755075454712),\n",
" ('poland', 0.77579560875892639),\n",
" ('capital', 0.58962851762771606),\n",
" ('berlin', 0.15410685539245605),\n",
" ('germany', 0.19871729612350464),\n",
" ('paris', 1.0800471603870392),\n",
" ('france', 1.0123563436791301)]"
]
},
"execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"distances"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [],
"source": [
"# In what context Paris appears?"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"he: 0.00\n",
"is: 0.44\n",
"a: 0.00\n",
"king: 0.00\n",
"she: 0.00\n",
"queen: 0.00\n",
"man: 0.00\n",
"woman: 0.00\n",
"warsaw: 0.00\n",
"poland: 0.00\n",
"capital: 0.00\n",
"berlin: 0.00\n",
"germany: 0.00\n",
"paris: 0.00\n",
"france: 0.54\n"
]
}
],
"source": [
"context_to_predict = get_word_vector_v('paris')\n",
"hidden = Variable(torch.from_numpy(context_to_predict)).float()\n",
"a = torch.matmul(W2, hidden)\n",
"probs = F.softmax(a, dim=0).data.numpy()\n",
"for context, prob in zip(words, probs):\n",
" print(f'{context}: {prob:.2f}')"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {},
"outputs": [],
"source": [
"# In context of \"France\" and \"is\""
]
}
],
"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.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment