From 1f1be51a5cce6929df5ab34f7a1ec6fe01932ba9 Mon Sep 17 00:00:00 2001 From: Daniel Roudnitsky Date: Wed, 20 Jul 2016 08:25:54 -0400 Subject: [PATCH] tutorial update --- docs/notebooks/annoytutorial.ipynb | 110 ++++++++++++----------------- 1 file changed, 44 insertions(+), 66 deletions(-) diff --git a/docs/notebooks/annoytutorial.ipynb b/docs/notebooks/annoytutorial.ipynb index d3782fc433..f50f95f937 100644 --- a/docs/notebooks/annoytutorial.ipynb +++ b/docs/notebooks/annoytutorial.ipynb @@ -32,13 +32,13 @@ "outputs": [], "source": [ "#Set up the model and vector that we are using in the comparison\n", - "from gensim.similarities.index import SimilarityIndex\n", + "from gensim.similarities.index import AnnoyIndexer\n", "from gensim.models.word2vec import Word2Vec\n", "\n", "model = Word2Vec.load(\"/tmp/leemodel\")\n", "model.init_sims()\n", "vector = model.syn0norm[0]\n", - "annoy_index = SimilarityIndex.build_from_word2vec(model, 500)" + "annoy_index = AnnoyIndexer(model, 500)" ] }, { @@ -53,18 +53,18 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 0 ns, sys: 8 ms, total: 8 ms\n", - "Wall time: 2.65 ms\n" + "CPU times: user 4 ms, sys: 0 ns, total: 4 ms\n", + "Wall time: 1.34 ms\n" ] }, { "data": { "text/plain": [ - "[('the', 1.0),\n", - " ('in', 0.9998433589935303),\n", - " ('two', 0.9998430609703064),\n", - " ('its', 0.9998421669006348),\n", - " ('an', 0.9998258352279663)]" + "[('the', 0.9999999403953552),\n", + " ('on', 0.9999382495880127),\n", + " ('two', 0.9999366998672485),\n", + " ('world', 0.9999361038208008),\n", + " ('an', 0.9999345541000366)]" ] }, "execution_count": 2, @@ -90,18 +90,19 @@ "output_type": "stream", "text": [ "('the', 1.0)\n", - "('in', 0.9911517966538668)\n", - "('its', 0.9911181787028909)\n", - "('a', 0.9905823720619082)\n", - "('at', 0.9905792083591223)\n", - "CPU times: user 0 ns, sys: 4 ms, total: 4 ms\n", - "Wall time: 651 µs\n" + "('on', 0.9944407725706697)\n", + "('two', 0.9943768098019063)\n", + "('world', 0.9943451005965471)\n", + "('an', 0.9942796020768583)\n", + "CPU times: user 0 ns, sys: 0 ns, total: 0 ns\n", + "Wall time: 886 µs\n" ] } ], "source": [ "%%time\n", - "neighbors = annoy_index.most_similar(vector, 5)\n", + "#Annoy implementation:\n", + "neighbors = model.most_similar([vector], topn=5, indexer=annoy_index)\n", "for neighbor in neighbors:\n", " print neighbor" ] @@ -186,7 +187,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "Word2Vec(vocab=806, size=100, alpha=0.025)\n" + "Word2Vec(vocab=1723, size=100, alpha=0.025)\n" ] } ], @@ -201,18 +202,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Using the SimilarityIndex class\n", - "An instance of `SimilarityIndex` needs to be created in order to use Annoy in gensim. The `SimilarityIndex` class is located in `gensim.similarities.index`\n", + "### Creating an indexer\n", + "An instance of `AnnoyIndexer` needs to be created in order to use Annoy in gensim. The `AnnoyIndexer` class is located in `gensim.similarities.index`\n", "\n", - "Currently, there is only support for word2vec models and doc2vec models in gensim when it comes to using annoy for similarity queries. A word2vec model is being used in this tutorial, so `SimilarityIndex.build_from_word2vec()` is being called, but if you are using a doc2vec model `SimilarityIndex.build_from_doc2vec()` should be called.\n", + "`AnnoyIndexer()` takes two parameters:\n", "\n", - "`SimilarityIndex.build_from_word2vec()` takes two parameters:\n", + "**`model`**: A w`Word2Vec` or `Doc2Vec` model\n", "\n", - "**`model`**: A word2vec model\n", - "\n", - "**`num_trees`**: A positive integer. `num_trees` effects the build time and the index size. **A larger value will give more accurate results, but larger indexes**. More information on what trees in Annoy do can be found [here](https://github.com/spotify/annoy#how-does-it-work). The relationship between `num_trees`, build time, and accuracy will be investigated later in the tutorial. \n", - "\n", - "*Note: The parameters for `build_from_doc2vec` are the same, all you need to do is pass a doc2vec model instead of a word2vec model like demonstrated above*" + "**`num_trees`**: A positive integer. `num_trees` effects the build time and the index size. **A larger value will give more accurate results, but larger indexes**. More information on what trees in Annoy do can be found [here](https://github.com/spotify/annoy#how-does-it-work). The relationship between `num_trees`, build time, and accuracy will be investigated later in the tutorial. \n" ] }, { @@ -223,16 +220,16 @@ }, "outputs": [], "source": [ - "from gensim.similarities.index import SimilarityIndex\n", + "from gensim.similarities.index import AnnoyIndexer\n", "# 100 trees are being used in this example\n", - "annoy_index = SimilarityIndex.build_from_word2vec(model,100)" + "annoy_index = AnnoyIndexer(model,100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "Now that we are ready to make a query, lets find the top 5 most similar words to \"army\" in the lee corpus. To make a similarity query we call `most_similar` which takes two parameters, a vector, and `num_neighbors`" + "Now that we are ready to make a query, lets find the top 5 most similar words to \"army\" in the lee corpus. To make a similarity query we call `Word2Vec.most_similar` like we would traditionally, but with an added parameter, `indexer`. The only supported indexer in gensim as of now is Annoy. " ] }, { @@ -246,19 +243,19 @@ "name": "stdout", "output_type": "stream", "text": [ - "('army', 1.0)\n", - "('who', 0.9871613550931215)\n", - "('any', 0.9868250954896212)\n", - "('\"the', 0.9867796087637544)\n", - "('an', 0.986699846573174)\n" + "('which', 0.9894100921228528)\n", + "('an', 0.9893329823389649)\n", + "('on', 0.9891384858638048)\n", + "('police', 0.9889771118760109)\n", + "('just', 0.9888260643929243)\n" ] } ], "source": [ "# Derive the vector for the word \"army\" in our model\n", "vector = model[\"army\"]\n", - "# Call most_similar() to find the 5 approximate nearest neighbors for the vector representing \"army\"\n", - "approximate_neighbors = annoy_index.most_similar(vector, 5)\n", + "# The instance of AnnoyIndexer we just created is passed \n", + "approximate_neighbors = model.most_similar([vector], topn=5, indexer=annoy_index)\n", "# Neatly print the approximate_neighbors and their corresponding cosine similarity values\n", "for neighbor in approximate_neighbors:\n", " print neighbor" @@ -294,9 +291,9 @@ "outputs": [ { "data": { - "image/png": "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\nbX2BXKntAAAAAElFTkSuQmCC\n", + "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -310,7 +307,7 @@ "y_cor = []\n", "for x in range(200):\n", " start_time = time.time()\n", - " SimilarityIndex.build_from_word2vec(model, x)\n", + " AnnoyIndexer(model, x)\n", " y_cor.append(time.time()-start_time)\n", " x_cor.append(x)\n", "\n", @@ -337,16 +334,16 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { - "image/png": "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\nFfR/gFDBbLNP8XgAAAAASUVORK5CYII=\n", + "image/png": "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\n", "text/plain": [ - "" + "" ] }, "metadata": {}, @@ -354,15 +351,15 @@ } ], "source": [ - "%matplotlib inline\n", "exact_results = [element[0] for element in model.most_similar([model.syn0norm[0]], topn=100)]\n", "x_axis = []\n", "y_axis = []\n", "for x in range(1,30):\n", - " annoy_index = SimilarityIndex.build_from_word2vec(model, x)\n", - " approximate_results = [result[0] for result in annoy_index.most_similar(model.syn0norm[0], 100)]\n", + " annoy_index = AnnoyIndexer(model, x)\n", + " approximate_results = model.most_similar([model.syn0norm[0]],topn=100, indexer=annoy_index)\n", + " top_words = [result[0] for result in approximate_results]\n", " x_axis.append(x)\n", - " y_axis.append(len(set(approximate_results).intersection(exact_results)))\n", + " y_axis.append(len(set(top_words).intersection(exact_results)))\n", " \n", "plt.plot(x_axis, y_axis)\n", "plt.title(\"num_trees vs accuracy\")\n", @@ -375,26 +372,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This was again done with the lee corpus, a relatively small corpus. Results will vary from corpus to corpus " - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Word2Vec(vocab=806, size=100, alpha=0.025)\n" - ] - } - ], - "source": [ - "print model" + "This was again done with the lee corpus, a relatively small corpus. Results will vary from corpus to corpus" ] } ],