{"action":"created","comment":{"url":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/comments/202496624","pull_request_review_id":137218383,"id":202496624,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMjQ5NjYyNA==","diff_hunk":"@@ -0,0 +1,107 @@\n+#!/usr/bin/env python\n+# -*- coding: utf-8 -*-\n+#\n+# Copyright (C) 2018 Vit Novotny <witiko@mail.muni.cz>\n+# Licensed under the GNU LGPL v2.1 - http://www.gnu.org/licenses/lgpl.html\n+\n+\"\"\"\n+This module provides a namespace for functions that use the Levenshtein distance.\n+\"\"\"\n+\n+import logging\n+\n+# If python-Levenshtein is available, import it.\n+# If python-Levenshtein is unavailable, ImportError will be raised in levsim.\n+try:\n+    from Levenshtein import distance\n+    LEVENSHTEIN_EXT = True\n+except ImportError:\n+    LEVENSHTEIN_EXT = False\n+\n+from gensim.similarities.termsim import TermSimilarityIndex\n+\n+logger = logging.getLogger(__name__)\n+\n+\n+def levsim(t1, t2, alpha=1.8, beta=5.0):","path":"gensim/similarities/levenshtein.py","position":null,"original_position":26,"commit_id":"ac60615d64602edc67e92c51c4f989eac3271e25","original_commit_id":"f8ff4c742e9774df317e867d63b6d9e563de3222","user":{"login":"Witiko","id":603082,"node_id":"MDQ6VXNlcjYwMzA4Mg==","avatar_url":"https://avatars2.githubusercontent.com/u/603082?v=4","gravatar_id":"","url":"https://api.github.com/users/Witiko","html_url":"https://github.com/Witiko","followers_url":"https://api.github.com/users/Witiko/followers","following_url":"https://api.github.com/users/Witiko/following{/other_user}","gists_url":"https://api.github.com/users/Witiko/gists{/gist_id}","starred_url":"https://api.github.com/users/Witiko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Witiko/subscriptions","organizations_url":"https://api.github.com/users/Witiko/orgs","repos_url":"https://api.github.com/users/Witiko/repos","events_url":"https://api.github.com/users/Witiko/events{/privacy}","received_events_url":"https://api.github.com/users/Witiko/received_events","type":"User","site_admin":false},"body":"I added the `max_distance` parameter in commit ac60615. Currently, [the Levenshtein distance library I use](https://pypi.org/project/python-Levenshtein/) does not support early termination, but it should be a straightforward future addition ([`_levenshtein.c`](https://github.com/ztane/python-Levenshtein/blob/master/Levenshtein/_levenshtein.c) at lines [2304](https://github.com/ztane/python-Levenshtein/blob/master/Levenshtein/_levenshtein.c#L2304), [2332](https://github.com/ztane/python-Levenshtein/blob/master/Levenshtein/_levenshtein.c#L2332), [2352](https://github.com/ztane/python-Levenshtein/blob/master/Levenshtein/_levenshtein.c#L2352), [2448](https://github.com/ztane/python-Levenshtein/blob/master/Levenshtein/_levenshtein.c#L2448), [2483](https://github.com/ztane/python-Levenshtein/blob/master/Levenshtein/_levenshtein.c#L2483), [2511](https://github.com/ztane/python-Levenshtein/blob/master/Levenshtein/_levenshtein.c#L2511), [2531](https://github.com/ztane/python-Levenshtein/blob/master/Levenshtein/_levenshtein.c#L2531), [3223](https://github.com/ztane/python-Levenshtein/blob/master/Levenshtein/_levenshtein.c#L3223), [3856](https://github.com/ztane/python-Levenshtein/blob/master/Levenshtein/_levenshtein.c#L3856), [4815](https://github.com/ztane/python-Levenshtein/blob/master/Levenshtein/_levenshtein.c#L4815), [4935](https://github.com/ztane/python-Levenshtein/blob/master/Levenshtein/_levenshtein.c#L4935), [5810](https://github.com/ztane/python-Levenshtein/blob/master/Levenshtein/_levenshtein.c#L5810), and [5999](https://github.com/ztane/python-Levenshtein/blob/master/Levenshtein/_levenshtein.c#L5999)).","created_at":"2018-07-13T23:53:34Z","updated_at":"2018-07-13T23:53:34Z","html_url":"https://github.com/RaRe-Technologies/gensim/pull/2016#discussion_r202496624","pull_request_url":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/2016","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/comments/202496624"},"html":{"href":"https://github.com/RaRe-Technologies/gensim/pull/2016#discussion_r202496624"},"pull_request":{"href":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/2016"}},"in_reply_to_id":202326763},"pull_request":{"url":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/2016","id":179533981,"node_id":"MDExOlB1bGxSZXF1ZXN0MTc5NTMzOTgx","html_url":"https://github.com/RaRe-Technologies/gensim/pull/2016","diff_url":"https://github.com/RaRe-Technologies/gensim/pull/2016.diff","patch_url":"https://github.com/RaRe-Technologies/gensim/pull/2016.patch","issue_url":"https://api.github.com/repos/RaRe-Technologies/gensim/issues/2016","number":2016,"state":"open","locked":false,"title":"Implement Levenshtein term similarity matrix and fast SCM between corpora","user":{"login":"Witiko","id":603082,"node_id":"MDQ6VXNlcjYwMzA4Mg==","avatar_url":"https://avatars2.githubusercontent.com/u/603082?v=4","gravatar_id":"","url":"https://api.github.com/users/Witiko","html_url":"https://github.com/Witiko","followers_url":"https://api.github.com/users/Witiko/followers","following_url":"https://api.github.com/users/Witiko/following{/other_user}","gists_url":"https://api.github.com/users/Witiko/gists{/gist_id}","starred_url":"https://api.github.com/users/Witiko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Witiko/subscriptions","organizations_url":"https://api.github.com/users/Witiko/orgs","repos_url":"https://api.github.com/users/Witiko/repos","events_url":"https://api.github.com/users/Witiko/events{/privacy}","received_events_url":"https://api.github.com/users/Witiko/received_events","type":"User","site_admin":false},"body":"This is a follow-up of #1827 (Implement Soft Cosine Measure). This PR is a work in progress and not yet ready to merge (although the tests should pass). Its intended purpose is to discuss and improve the current implementation.\r\n\r\n## Introduction\r\nThe original implementation included only a single term similarity matrix based on word embeddings. The new commits add a Levenshtein term similarity matrix. To prevent code duplication and to reduce complexity, I have separated the matrix building algorithm from the code that retrieves most similar terms. In reaction to #1955, the Soft Cosine Measure (SCM) can now be computed not only between a pair of vectors, but also between a corpus, and a vector and between a pair of corpora. This last point is also the future work suggested in #1827. Issues to discuss are with regards to the placement of new code, deprecation of old code, and speeding up the Levenshtein distance implementation.\r\n\r\n## TODO list\r\n- ~~The `gensim.models.term_similarity` module~~\r\n  - ~~Decide on the final location of the `gensim.models.term_similarity` module~~\r\n    - ~~@menshikh-iv suggests moving to `gensim.similarity.term_similarity`, or the less redundant `gensim.similarity.terms`, or `gensim.similarity.termsim`.~~\r\n  - ~~Profile the `SparseTermSimilarityMatrix` constructor.~~\r\n  - ~~Cherry-pick non-contiguous dictionary support from #2047.~~\r\n- The `gensim.models.levenshtein` module\r\n  - ~~Decide on the final location of the `gensim.models.levenshtein` module~~\r\n    - ~~@menshikh-iv suggests moving to `gensim.similarity.levenshtein`.~~\r\n  - ~~Decide whether to deprecate or to keep and maintain the `similarity_matrix` [facade][facade].~~\r\n  - ~~Profile the speed of the `LevenshteinSimilarityIndex.most_similar` method.~~\r\n  - Improve the speed of the `LevenshteinSimilarityIndex.most_similar` method.\r\n- ~~The `gensim.models.keyedvectors` module~~\r\n  - ~~Decide whether to deprecate or to keep and maintain the `WordEmbeddingsKeyedVectors.similarity_matrix` [facade][].~~\r\n  - ~~Profile the `WordEmbeddingSimilarityIndex.most_similar` method.~~\r\n- ~~The `SparseTermSimilarityMatrix.inner_product` method~~\r\n  - ~~Decide whether to keep or deprecate the `gensim.matutils.softcossim` function.~~\r\n  - ~~Update the implementation of `gensim.similarities.docsim.SoftCosineSimilarity` using the `inner_product` method.~~\r\n  - ~~Profile the `SparseTermSimilarityMatrix.inner_product` method.~~\r\n      - ~~When computing a document × corpus inner product, use the document × document inner product dense matrix trick. Then, profile the `inner_product` method again.~~\r\n- Miscellaneous\r\n  - ~~Update the [`soft_cosine_benchmark.ipynb`][soft-cosine-benchmark] for `inner_product` between between a document and a corpus, and for the non-parallelized Levenshtein similarity.~~\r\n  - ~~Update the [`soft_cosine_tutorial.ipynb`][soft-cosine-tutorial] Jupyter notebook.~~\r\n  - ~~Add examples to the documentation of `SparseTermSimilarityMatrix`.~~\r\n\r\n [soft-cosine-tutorial]: https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/soft_cosine_tutorial.ipynb (Finding similar documents with Word2Vec and Soft Cosine Measure)\r\n [soft-cosine-benchmark]: https://github.com/Witiko/gensim/blob/aa7becd/docs/notebooks/soft_cosine_benchmark.ipynb (Benchmark: Implement Levenshtein term similarity matrix and fast SCM between corpora)\r\n [facade]: https://en.wikipedia.org/wiki/Facade_pattern (Facade pattern)\r\n\r\n## The `gensim.similarities.termsim` module\r\nA major structural change is the addition of the `gensim.similarities.termsim` module. Before this addition, there existed the `WordEmbeddingsKeyedVectors.similarity_matrix` method that contained both the matrix building algorithm and the algorithm for retriving most similar terms for a given term. Now the matrix building algorithm has been moved into a separate `SparseTermSimilarityMatrix` [director][builder] class and the algorithm for retrieving most similar terms has been moved into a separate `WordEmbeddingSimilarityIndex` [builder][] class that implements the `TermSimilarityIndex` interface. This change follows the [single responsibility principle][srp].\r\n\r\n [builder]: https://en.wikipedia.org/wiki/Builder_pattern (Builder pattern)\r\n [srp]: https://en.wikipedia.org/wiki/Single_responsibility_principle (Single responsibility principle)\r\n\r\nTwo new classes implementing the `TermSimilarityIndex` interface have also been added. The `LevenshteinSimilarityIndex` retrieves the most similar terms according to the “Levenshtein similarity” described by Charlet and Damnati, 2017 [[1][], sec.&nbsp;2.2]. The `UniformTermSimilarityIndex` assumes all distinct terms are equally similar and its main use is in testing `SparseTermSimilarityMatrix`.\r\n\r\nThe following UML class diagram captures the new structure:\r\n\r\n![soft-cosine-uml](https://user-images.githubusercontent.com/603082/38626151-4990d108-3dac-11e8-816d-d4e2345fa8d8.png \"An UML class diagram of the new modules, classes, and interfaces\")\r\n\r\nThe `WordEmbeddingsKeyedVectors.similarity_matrix` method and the `similarity_matrix` function in the `gensim.similarities.levenshtein` module currently serve as [facades][facade] that construct a `SparseTermSimilarityMatrix` using the appropriate `TermSimilarityIndex` behind the scenes. This keeps the code backwards-compatible. I marked the functions for deprecation in 4.0.0, but if the Gensim policies allow, we can get rid of them sooner. Besides backwards compatibility, the facades are also convenient for the users, but there is an associated maintenance cost if we decided to keep them.\r\n\r\n## The `gensim.similarities.levenshtein` module\r\nThe `gensim.similarities.levenshtein` module contains code for computing the “Levenshtein similarity” described by Charlet and Damnati, 2017 [[1][]]. See [the benchmark][benchmark] for a detailed performance analysis.\r\n\r\n [benchmark]: https://github.com/Witiko/gensim/blob/aa7becd/docs/notebooks/soft_cosine_benchmark.ipynb (Benchmark: Implement Levenshtein term similarity matrix and fast SCM between corpora)\r\n\r\n## The `SparseTermSimilarityMatrix.inner_product` method\r\nThe `SparseTermSimilarityMatrix.inner_product` method contains code for computing the inner product between two vectors or corpora expressed in a non-orthogonal basis.\r\n\r\nThere is a bit of “smart” linear algebra involved in computing the inner product between two L2-normalized m×n corpus matrices **X** and **Y**, which I will briefly describe here. We need to normalize each column document vector **x** in **X** by sqrt(**x**ᵀ ⋅ **S** ⋅ **x**), which is equivalent to the [entrywise (Hadamard) division][hadamard] of each row in **X** by the diagonal of sqrt(**X**ᵀ ⋅ **S** ⋅ **X**), where **S** is the m×m term similarity matrix. However, sqrt(**X**ᵀ ⋅ **S** ⋅ **X**) is an O(mn² ≈ m⁵) operation. We can instead directly compute the column vector of the diagonal as **X**ᵀ ⋅ **S** \\* **X**ᵀ summed along the row axis, where \\* is the [entrywise product][hadamard], which is an O(m²n ≈ m⁴) operation.\r\n\r\n [hadamard]: https://en.wikipedia.org/wiki/Hadamard_product_(matrices) \"Hadamard product (matrices)\"\r\n\r\nThe `SparseTermSimilarityMatrix.inner_product` method method is a more general variant of the `gensim.matutils.softcossim` function, which only computes the inner product between two normalized vectors, not general vectors or corpora. I marked the `matutils.softcossim` function for deprecation in 4.0.0, but if the Gensim policies allow, we can get rid of it sooner.\r\n\r\nSince the `gensim.similarities.termsim` model imports the `corpus2csc` function from the `matutils` module, importing `SparseTermSimilarityMatrix.inner_product` from `gensim.matutils` would result in a cross-dependency. Therefore, the `softcossim` function carries all the old code instead of calling `inner_product`.\r\n\r\nIf we prefered not to deprecate the `softcossim` function, an alternative solution would be to move the `SparseTermSimilarityMatrix.inner_product` method to a `gensim.matutils.softdot` function, and make `softcossim` a [facade][] for `softdot`.\r\n\r\n## Future work\r\nThe `SparseTermSimilarityMatrix` class constructor uses the dictionary of keys (DOK) sparse matrix format to incrementally build a sparse matrix. This is convenient, but, [as explained by Maciej][kula15], space-inefficient. I observed a 100-fold increase in RAM usage compared to using three dynamic arrays (two for indices, and one for the data) with the shortest possible unsigned integer data types.\r\n\r\n [kula15]: http://maciejkula.github.io/2015/02/22/incremental-sparse-matrices/\r\n\r\n## References\r\n1. Delphine Charlet and Geraldine Damnati, *SimBow at SemEval-2017 Task 3: Soft-Cosine Semantic Similarity between Questions for Community Question Answering*, 2017. ([link to PDF][1])\r\n\r\n [1]: http://www.aclweb.org/anthology/S17-2051 (Simbow at semeval-2017 task 3: Soft-cosine semantic similarity between questions for community question answering)","created_at":"2018-04-04T22:57:29Z","updated_at":"2018-07-13T23:53:34Z","closed_at":null,"merged_at":null,"merge_commit_sha":"240878e85d48bb128e0d71952f730f46974ecbaf","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/2016/commits","review_comments_url":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/2016/comments","review_comment_url":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/comments{/number}","comments_url":"https://api.github.com/repos/RaRe-Technologies/gensim/issues/2016/comments","statuses_url":"https://api.github.com/repos/RaRe-Technologies/gensim/statuses/ac60615d64602edc67e92c51c4f989eac3271e25","head":{"label":"Witiko:levenshtein-softcossim","ref":"levenshtein-softcossim","sha":"ac60615d64602edc67e92c51c4f989eac3271e25","user":{"login":"Witiko","id":603082,"node_id":"MDQ6VXNlcjYwMzA4Mg==","avatar_url":"https://avatars2.githubusercontent.com/u/603082?v=4","gravatar_id":"","url":"https://api.github.com/users/Witiko","html_url":"https://github.com/Witiko","followers_url":"https://api.github.com/users/Witiko/followers","following_url":"https://api.github.com/users/Witiko/following{/other_user}","gists_url":"https://api.github.com/users/Witiko/gists{/gist_id}","starred_url":"https://api.github.com/users/Witiko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Witiko/subscriptions","organizations_url":"https://api.github.com/users/Witiko/orgs","repos_url":"https://api.github.com/users/Witiko/repos","events_url":"https://api.github.com/users/Witiko/events{/privacy}","received_events_url":"https://api.github.com/users/Witiko/received_events","type":"User","site_admin":false},"repo":{"id":115628804,"node_id":"MDEwOlJlcG9zaXRvcnkxMTU2Mjg4MDQ=","name":"gensim","full_name":"Witiko/gensim","owner":{"login":"Witiko","id":603082,"node_id":"MDQ6VXNlcjYwMzA4Mg==","avatar_url":"https://avatars2.githubusercontent.com/u/603082?v=4","gravatar_id":"","url":"https://api.github.com/users/Witiko","html_url":"https://github.com/Witiko","followers_url":"https://api.github.com/users/Witiko/followers","following_url":"https://api.github.com/users/Witiko/following{/other_user}","gists_url":"https://api.github.com/users/Witiko/gists{/gist_id}","starred_url":"https://api.github.com/users/Witiko/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Witiko/subscriptions","organizations_url":"https://api.github.com/users/Witiko/orgs","repos_url":"https://api.github.com/users/Witiko/repos","events_url":"https://api.github.com/users/Witiko/events{/privacy}","received_events_url":"https://api.github.com/users/Witiko/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Witiko/gensim","description":"Topic Modelling for Humans","fork":true,"url":"https://api.github.com/repos/Witiko/gensim","forks_url":"https://api.github.com/repos/Witiko/gensim/forks","keys_url":"https://api.github.com/repos/Witiko/gensim/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Witiko/gensim/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Witiko/gensim/teams","hooks_url":"https://api.github.com/repos/Witiko/gensim/hooks","issue_events_url":"https://api.github.com/repos/Witiko/gensim/issues/events{/number}","events_url":"https://api.github.com/repos/Witiko/gensim/events","assignees_url":"https://api.github.com/repos/Witiko/gensim/assignees{/user}","branches_url":"https://api.github.com/repos/Witiko/gensim/branches{/branch}","tags_url":"https://api.github.com/repos/Witiko/gensim/tags","blobs_url":"https://api.github.com/repos/Witiko/gensim/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Witiko/gensim/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Witiko/gensim/git/refs{/sha}","trees_url":"https://api.github.com/repos/Witiko/gensim/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Witiko/gensim/statuses/{sha}","languages_url":"https://api.github.com/repos/Witiko/gensim/languages","stargazers_url":"https://api.github.com/repos/Witiko/gensim/stargazers","contributors_url":"https://api.github.com/repos/Witiko/gensim/contributors","subscribers_url":"https://api.github.com/repos/Witiko/gensim/subscribers","subscription_url":"https://api.github.com/repos/Witiko/gensim/subscription","commits_url":"https://api.github.com/repos/Witiko/gensim/commits{/sha}","git_commits_url":"https://api.github.com/repos/Witiko/gensim/git/commits{/sha}","comments_url":"https://api.github.com/repos/Witiko/gensim/comments{/number}","issue_comment_url":"https://api.github.com/repos/Witiko/gensim/issues/comments{/number}","contents_url":"https://api.github.com/repos/Witiko/gensim/contents/{+path}","compare_url":"https://api.github.com/repos/Witiko/gensim/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Witiko/gensim/merges","archive_url":"https://api.github.com/repos/Witiko/gensim/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Witiko/gensim/downloads","issues_url":"https://api.github.com/repos/Witiko/gensim/issues{/number}","pulls_url":"https://api.github.com/repos/Witiko/gensim/pulls{/number}","milestones_url":"https://api.github.com/repos/Witiko/gensim/milestones{/number}","notifications_url":"https://api.github.com/repos/Witiko/gensim/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Witiko/gensim/labels{/name}","releases_url":"https://api.github.com/repos/Witiko/gensim/releases{/id}","deployments_url":"https://api.github.com/repos/Witiko/gensim/deployments","created_at":"2017-12-28T14:03:59Z","updated_at":"2017-12-28T14:04:02Z","pushed_at":"2018-07-13T23:31:23Z","git_url":"git://github.com/Witiko/gensim.git","ssh_url":"git@github.com:Witiko/gensim.git","clone_url":"https://github.com/Witiko/gensim.git","svn_url":"https://github.com/Witiko/gensim","homepage":"","size":63587,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"lgpl-2.1","name":"GNU Lesser General Public License v2.1","spdx_id":"LGPL-2.1","url":"https://api.github.com/licenses/lgpl-2.1","node_id":"MDc6TGljZW5zZTEx"},"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"RaRe-Technologies:develop","ref":"develop","sha":"408a714e836484e914a7e3622b4f0f99a6d27ddd","user":{"login":"RaRe-Technologies","id":12515886,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyNTE1ODg2","avatar_url":"https://avatars3.githubusercontent.com/u/12515886?v=4","gravatar_id":"","url":"https://api.github.com/users/RaRe-Technologies","html_url":"https://github.com/RaRe-Technologies","followers_url":"https://api.github.com/users/RaRe-Technologies/followers","following_url":"https://api.github.com/users/RaRe-Technologies/following{/other_user}","gists_url":"https://api.github.com/users/RaRe-Technologies/gists{/gist_id}","starred_url":"https://api.github.com/users/RaRe-Technologies/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RaRe-Technologies/subscriptions","organizations_url":"https://api.github.com/users/RaRe-Technologies/orgs","repos_url":"https://api.github.com/users/RaRe-Technologies/repos","events_url":"https://api.github.com/users/RaRe-Technologies/events{/privacy}","received_events_url":"https://api.github.com/users/RaRe-Technologies/received_events","type":"Organization","site_admin":false},"repo":{"id":1349775,"node_id":"MDEwOlJlcG9zaXRvcnkxMzQ5Nzc1","name":"gensim","full_name":"RaRe-Technologies/gensim","owner":{"login":"RaRe-Technologies","id":12515886,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyNTE1ODg2","avatar_url":"https://avatars3.githubusercontent.com/u/12515886?v=4","gravatar_id":"","url":"https://api.github.com/users/RaRe-Technologies","html_url":"https://github.com/RaRe-Technologies","followers_url":"https://api.github.com/users/RaRe-Technologies/followers","following_url":"https://api.github.com/users/RaRe-Technologies/following{/other_user}","gists_url":"https://api.github.com/users/RaRe-Technologies/gists{/gist_id}","starred_url":"https://api.github.com/users/RaRe-Technologies/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RaRe-Technologies/subscriptions","organizations_url":"https://api.github.com/users/RaRe-Technologies/orgs","repos_url":"https://api.github.com/users/RaRe-Technologies/repos","events_url":"https://api.github.com/users/RaRe-Technologies/events{/privacy}","received_events_url":"https://api.github.com/users/RaRe-Technologies/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/RaRe-Technologies/gensim","description":"Topic Modelling for Humans","fork":false,"url":"https://api.github.com/repos/RaRe-Technologies/gensim","forks_url":"https://api.github.com/repos/RaRe-Technologies/gensim/forks","keys_url":"https://api.github.com/repos/RaRe-Technologies/gensim/keys{/key_id}","collaborators_url":"https://api.github.com/repos/RaRe-Technologies/gensim/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/RaRe-Technologies/gensim/teams","hooks_url":"https://api.github.com/repos/RaRe-Technologies/gensim/hooks","issue_events_url":"https://api.github.com/repos/RaRe-Technologies/gensim/issues/events{/number}","events_url":"https://api.github.com/repos/RaRe-Technologies/gensim/events","assignees_url":"https://api.github.com/repos/RaRe-Technologies/gensim/assignees{/user}","branches_url":"https://api.github.com/repos/RaRe-Technologies/gensim/branches{/branch}","tags_url":"https://api.github.com/repos/RaRe-Technologies/gensim/tags","blobs_url":"https://api.github.com/repos/RaRe-Technologies/gensim/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/RaRe-Technologies/gensim/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/RaRe-Technologies/gensim/git/refs{/sha}","trees_url":"https://api.github.com/repos/RaRe-Technologies/gensim/git/trees{/sha}","statuses_url":"https://api.github.com/repos/RaRe-Technologies/gensim/statuses/{sha}","languages_url":"https://api.github.com/repos/RaRe-Technologies/gensim/languages","stargazers_url":"https://api.github.com/repos/RaRe-Technologies/gensim/stargazers","contributors_url":"https://api.github.com/repos/RaRe-Technologies/gensim/contributors","subscribers_url":"https://api.github.com/repos/RaRe-Technologies/gensim/subscribers","subscription_url":"https://api.github.com/repos/RaRe-Technologies/gensim/subscription","commits_url":"https://api.github.com/repos/RaRe-Technologies/gensim/commits{/sha}","git_commits_url":"https://api.github.com/repos/RaRe-Technologies/gensim/git/commits{/sha}","comments_url":"https://api.github.com/repos/RaRe-Technologies/gensim/comments{/number}","issue_comment_url":"https://api.github.com/repos/RaRe-Technologies/gensim/issues/comments{/number}","contents_url":"https://api.github.com/repos/RaRe-Technologies/gensim/contents/{+path}","compare_url":"https://api.github.com/repos/RaRe-Technologies/gensim/compare/{base}...{head}","merges_url":"https://api.github.com/repos/RaRe-Technologies/gensim/merges","archive_url":"https://api.github.com/repos/RaRe-Technologies/gensim/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/RaRe-Technologies/gensim/downloads","issues_url":"https://api.github.com/repos/RaRe-Technologies/gensim/issues{/number}","pulls_url":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls{/number}","milestones_url":"https://api.github.com/repos/RaRe-Technologies/gensim/milestones{/number}","notifications_url":"https://api.github.com/repos/RaRe-Technologies/gensim/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/RaRe-Technologies/gensim/labels{/name}","releases_url":"https://api.github.com/repos/RaRe-Technologies/gensim/releases{/id}","deployments_url":"https://api.github.com/repos/RaRe-Technologies/gensim/deployments","created_at":"2011-02-10T07:43:04Z","updated_at":"2018-07-13T19:41:26Z","pushed_at":"2018-07-13T23:31:28Z","git_url":"git://github.com/RaRe-Technologies/gensim.git","ssh_url":"git@github.com:RaRe-Technologies/gensim.git","clone_url":"https://github.com/RaRe-Technologies/gensim.git","svn_url":"https://github.com/RaRe-Technologies/gensim","homepage":"","size":62534,"stargazers_count":7345,"watchers_count":7345,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2809,"mirror_url":null,"archived":false,"open_issues_count":202,"license":{"key":"lgpl-2.1","name":"GNU Lesser General Public License v2.1","spdx_id":"LGPL-2.1","url":"https://api.github.com/licenses/lgpl-2.1","node_id":"MDc6TGljZW5zZTEx"},"forks":2809,"open_issues":202,"watchers":7345,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/2016"},"html":{"href":"https://github.com/RaRe-Technologies/gensim/pull/2016"},"issue":{"href":"https://api.github.com/repos/RaRe-Technologies/gensim/issues/2016"},"comments":{"href":"https://api.github.com/repos/RaRe-Technologies/gensim/issues/2016/comments"},"review_comments":{"href":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/2016/comments"},"review_comment":{"href":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/2016/commits"},"statuses":{"href":"https://api.github.com/repos/RaRe-Technologies/gensim/statuses/ac60615d64602edc67e92c51c4f989eac3271e25"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"Witiko"}}