Skip to content

Instantly share code, notes, and snippets.

@Orbifold
Last active Sep 21, 2019
Embed
What would you like to do?
The wonderful Stellargraph shows explicitly how node2vec works via a random walk on graphs to generate 'word' sequences one can use for word2vec.
{
"cells": [
{
"cell_type": "markdown",
"source": [
"# Node2Vec embedding\n",
"\n",
"Embedding of nodes happens via word2vec by means of a smart trick: using randomg walks over the graph to generate 'word' sequences.\n",
"\n",
"Stellargraph has its own direct method to perform the embedding but the intermediate methods highlights better the process. So, below we generate the node2vec embedding via an explicit walk and show how it generates a really good community detection separation."
],
"metadata": {}
},
{
"cell_type": "code",
"source": [
"import networkx as nx\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"from sklearn.manifold import TSNE\n",
"%matplotlib inline"
],
"outputs": [],
"execution_count": 35,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "markdown",
"source": [
"We'll use the karater club to demonstrate the process. The graph consists of two sets of nodes which are a well-separated according to the 'club' property."
],
"metadata": {}
},
{
"cell_type": "code",
"source": [
"g_nx = nx.karate_club_graph()\n",
"cols = [\"green\" if g_nx.nodes[n][\"club\"]=='Officer' else \"orange\" for n in g_nx.nodes()]\n",
"nx.draw(g_nx, node_color=cols)"
],
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/Users/swa/conda/lib/python3.7/site-packages/networkx/drawing/nx_pylab.py:611: MatplotlibDeprecationWarning: isinstance(..., numbers.Number)\n",
" if cb.is_numlike(alpha):\n"
]
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
],
"image/png": [
"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\n"
]
},
"metadata": {}
}
],
"execution_count": 42,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "markdown",
"source": [
"From this graph we create a Stellargraph and perform a biased random walk on it. This generates word sequences, in this case the string value of the node index."
],
"metadata": {}
},
{
"cell_type": "code",
"source": [
"from stellargraph.data import BiasedRandomWalk\n",
"from stellargraph import StellarGraph\n",
"from gensim.models import Word2Vec\n",
"\n",
"rw = BiasedRandomWalk(StellarGraph(g_nx))\n",
"\n",
"walks = rw.run(\n",
" nodes=list(g_nx.nodes()), # root nodes\n",
" length=100, # maximum length of a random walk\n",
" n=10, # number of random walks per root node \n",
" p=0.5, # Defines (unormalised) probability, 1/p, of returning to source node\n",
" q=2.0 # Defines (unormalised) probability, 1/q, for moving away from source node\n",
")\n",
"walks = [list(map(str, walk)) for walk in walks]\n",
"model = Word2Vec(walks, size=128, window=5, min_count=0, sg=1, workers=2, iter=1)\n",
"\n"
],
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"WARNING: Logging before flag parsing goes to stderr.\n",
"W0920 20:17:43.064015 4718831040 base_any2vec.py:1386] under 10 jobs per worker: consider setting a smaller `batch_words' for smoother alpha decay\n"
]
}
],
"execution_count": 11,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "markdown",
"source": [
"The value of an embedding is for instance"
],
"metadata": {}
},
{
"cell_type": "code",
"source": [
"model.wv['29']"
],
"outputs": [
{
"output_type": "execute_result",
"execution_count": 12,
"data": {
"text/plain": [
"array([ 0.0283457 , 0.06906749, -0.09740856, 0.08761664, 0.0240158 ,\n",
" -0.04252268, 0.05366189, 0.12255755, -0.14192946, -0.12441556,\n",
" 0.14022443, 0.16821992, 0.01899681, 0.02525605, -0.129657 ,\n",
" -0.00075872, -0.10963597, -0.24603637, 0.14481993, 0.04069758,\n",
" -0.07761958, -0.20790713, 0.02872016, 0.02599382, -0.11296149,\n",
" -0.09854981, -0.04557071, 0.24646853, 0.00121522, 0.11991252,\n",
" 0.07983409, -0.08048143, 0.11442558, 0.21689218, -0.04602851,\n",
" -0.03846204, -0.14180224, -0.13806581, -0.2756952 , 0.21888009,\n",
" -0.2403047 , 0.10116432, -0.05692552, 0.29991767, 0.15323073,\n",
" -0.07367025, -0.22721468, 0.04121917, -0.1474215 , -0.12874171,\n",
" 0.11634433, 0.03715171, -0.02997661, 0.1846444 , 0.09240112,\n",
" -0.11611677, -0.05956773, 0.10450908, -0.0748686 , 0.0841886 ,\n",
" 0.00648758, -0.23513122, -0.03379333, -0.03147478, 0.15027955,\n",
" -0.2418554 , 0.03921422, 0.13003238, 0.1925577 , -0.02482169,\n",
" -0.17496283, -0.1193176 , 0.21379891, -0.06565908, -0.12362305,\n",
" -0.12427699, -0.1113233 , 0.0647103 , 0.2713958 , 0.28840208,\n",
" -0.08871546, 0.27347487, -0.15478794, -0.01204949, -0.07479579,\n",
" 0.05519324, -0.07719369, 0.37456694, -0.04905338, 0.10100004,\n",
" -0.26735783, 0.1140677 , 0.04411978, 0.0743799 , -0.20635152,\n",
" -0.1354365 , -0.09291358, 0.02883326, 0.1929327 , -0.03071002,\n",
" 0.20335366, -0.09941982, 0.04967964, 0.12711474, -0.09630557,\n",
" 0.07571112, -0.10136695, -0.13535073, -0.07481653, 0.01686542,\n",
" 0.0458274 , -0.15950125, -0.12564494, 0.09170009, 0.11469213,\n",
" -0.12933742, -0.07965938, 0.1902986 , 0.21146712, 0.08862376,\n",
" -0.08914143, -0.24147275, 0.02615149, 0.06191884, 0.04629293,\n",
" -0.03686432, 0.28888953, 0.06754036], dtype=float32)"
]
},
"metadata": {}
}
],
"execution_count": 12,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "markdown",
"source": [
"In order to visualize the embedding one has to somehow reduce the dimension. This is most easily done via t-SNE."
],
"metadata": {}
},
{
"cell_type": "code",
"source": [
"# Retrieve node embeddings and corresponding subjects\n",
"node_ids = model.wv.index2word # list of node IDs\n",
"node_embeddings = model.wv.vectors # numpy.ndarray of size number of nodes times embeddings dimensionality\n",
"node_targets = [ g_nx.node[int(node_id)]['club'] for node_id in node_ids]"
],
"outputs": [],
"execution_count": 18,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "code",
"source": [
"# Apply t-SNE transformation on node embeddings\n",
"tsne = TSNE(n_components=2)\n",
"node_embeddings_2d = tsne.fit_transform(node_embeddings)"
],
"outputs": [],
"execution_count": 21,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "code",
"source": [
"alpha=0.9\n",
"label_map = { l: i for i, l in enumerate(np.unique(node_targets))}\n",
"node_colours = [ label_map[target] for target in node_targets]\n",
"\n",
"plt.figure(figsize=(10,8))\n",
"plt.scatter(node_embeddings_2d[:,0], \n",
" node_embeddings_2d[:,1], \n",
" c=node_colours, cmap=\"jet\", alpha=alpha)"
],
"outputs": [
{
"output_type": "execute_result",
"execution_count": 28,
"data": {
"text/plain": [
"<matplotlib.collections.PathCollection at 0x1463cfc50>"
]
},
"metadata": {}
},
{
"output_type": "display_data",
"data": {
"text/plain": [
"<Figure size 720x576 with 1 Axes>"
],
"image/png": [
"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xCaY2UtmNsnMdmwa21nS0mbbvNM0BgAAUFa2a2rSzGZK6r2Zh34g6beSrpYUmr5eL+m8z/G9L5B0gST1799/e2ICaAdvv/2hpk9/TSFIY8bsrkGDdtz6kwCgzG1XEQshHLkt25nZbZIebLq7TFK/Zg/v0jT2ye99q6RbJammpiZsT04Abet3v3tRV1wxU1EUKwTpP/7jr/rBD76if/7ng7yjoYytXduge+55RQsWrNIBB/TWqafurU6dKr1jAS1YCG3TccysTwhhedPtf5V0YAjhDDPbR9JkNa4L6ytplqTBn7VYv6amJtTW1rZJTgDb591312vo0JslSalU42qHjwrZk0+ep8GDu3nGQ5l64401Ouqo/9GGDVlls5EqKpLq1q1as2adq759O3nHQ4kzszkhhJpt2bYt14j9t5m9bGYvSRot6V8lKYQwT9IUSfMlPSzpEs6YBIrXww8vUggflzBJSiYTyuViPfjga47JUM6++91H9MEHDUqlEtphh7RSqYTee69OV131mHc0oIU2u3xFCOHsz3jsGknXtNXfDaD9mG3pEVYUtIYQghYsWK1MJq/99uvVovBi8/L5WE888ZaqqpItxisqEpox43WnVMDm8YoGsF3GjNldZo2//D4SRbHS6aTGjdvDMVnxW7BglYYPv1WHH36Xjj12svbY40Y99thi71gFL5EwJZOmT668CUGqrExu/kmAE4oYgO3Sp08n/fSnR0mSMplImUykEKSrrvoq68O2QzYb6fjj79aSJWtl1njkcd26jM46634tW7bOO15BSyRMJ588RLlcpI/WQYcQFEVBZ599gHM6oKW2vrI+gDJw7rlDdfjhAzVjxuuKoqCxY3fXwIFcvmJ7zJr1purqsqqq+vjHdEVFUplMpHvvnafvfvdgx3SF77rrjtJrr72vBQtWK46DpKCRI/vpyitHeUcDWqCIAWgV/fp10YUXbtNJQtgG779frygKSqVaLsLL52OtWLHBKVXx6Nq1SrNnn6vnn39Xb775gfbcs5uGDu0t2/KiRsAFRQwACtDBB+8iSYrjoESisTyEEFRVldJhhw1wTFY8zEwjRuysESP48BYULtaIAUAB2m23nXT22fsrjoMaGvJqaMgrnw+qqemjo47azTsegFbCETEAKFA/+9nR+upXd9Wdd/5D9fU5nXbaPvrGN/bnEhZACaGIAUCB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\n"
]
},
"metadata": {
"needs_background": "light"
}
}
],
"execution_count": 28,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "markdown",
"source": [
"This looks like a clean separation indeed. The splitting is not 100% correct though, just by looking at the corresponding value of the 'club' property."
],
"metadata": {}
},
{
"cell_type": "code",
"source": [
"[g_nx.nodes[i] for i,v in enumerate(node_colours) if v==1]"
],
"outputs": [
{
"output_type": "execute_result",
"execution_count": 34,
"data": {
"text/plain": [
"[{'club': 'Mr. Hi'},\n",
" {'club': 'Mr. Hi'},\n",
" {'club': 'Mr. Hi'},\n",
" {'club': 'Officer'},\n",
" {'club': 'Mr. Hi'},\n",
" {'club': 'Officer'},\n",
" {'club': 'Officer'},\n",
" {'club': 'Officer'},\n",
" {'club': 'Mr. Hi'},\n",
" {'club': 'Officer'},\n",
" {'club': 'Officer'},\n",
" {'club': 'Officer'},\n",
" {'club': 'Officer'},\n",
" {'club': 'Officer'},\n",
" {'club': 'Officer'},\n",
" {'club': 'Officer'},\n",
" {'club': 'Officer'}]"
]
},
"metadata": {}
}
],
"execution_count": 34,
"metadata": {
"collapsed": false,
"outputHidden": false,
"inputHidden": false
}
},
{
"cell_type": "markdown",
"source": [
"Five out of senteen are incorrect. This is still remarkable considering the fact that node2vec process did not know anything at about the 'club' property but that it's an emergent feature of the embedding."
],
"metadata": {}
}
],
"metadata": {
"kernel_info": {
"name": "python3"
},
"language_info": {
"name": "python",
"version": "3.7.2",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
},
"kernelspec": {
"name": "python3",
"language": "python",
"display_name": "Python 3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment