{"action":"created","comment":{"url":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/comments/74769426","id":74769426,"diff_hunk":"@@ -0,0 +1,1096 @@\n+#!/usr/bin/env python\n+# -*- coding: utf-8 -*-\n+#\n+# Licensed under the GNU LGPL v2.1 - http://www.gnu.org/licenses/lgpl.html\n+# Based on Copyright (C) 2016 Radim Rehurek <radimrehurek@seznam.cz>\n+\n+\n+\"\"\"\n+\n+Inspired by the Blei's original DTM code and paper.\n+Original DTM C/C++ code: https://github.com/blei-lab/dtm\n+DTM Paper: https://www.cs.princeton.edu/~blei/papers/BleiLafferty2006a.pdf\n+\n+\n+TODO:\n+The next steps to take this forward would be:\n+\n+    1) Include DIM mode. Most of the infrastructure for this is in place.\n+    2) See if LdaPost can be replaces by LdaModel completely without breakign anything.\n+    3) Heavy lifting going on in the sslm class - efforts can be made to cythonise mathematical methods.\n+    4) Try and make it distributed, especially around the E and M step.\n+\n+\"\"\"\n+\n+from gensim import interfaces, utils, matutils\n+from gensim.models import ldamodel\n+import numpy\n+import math\n+from scipy.special import digamma\n+from scipy import optimize\n+import sys\n+\n+\n+class seq_corpus(utils.SaveLoad):\n+\n+    \"\"\"\n+    `seq_corpus` is basically a wrapper class which contains information about the corpus.\n+    `vocab_len` is the length of the vocabulary.\n+    `max_doc_len` is the maximum number of terms a single document has.\n+    `num_time_slices` is the number of sequences, i.e number of time-slices.\n+    `corpus_len` is the number of documents present.\n+    `time_slice` is a list or numpy array which the user must provide which contains the number of documents in each time-slice.\n+    `corpus` is any iterable gensim corpus.\n+\n+    \"\"\"\n+    def __init__(self, corpus=None, time_slice=None, id2word=None):\n+        self.id2word = id2word\n+        if corpus is None and self.id2word is None:\n+            raise ValueError('at least one of corpus/id2word must be specified, to establish input space dimensionality')\n+\n+        if self.id2word is None:\n+            logger.warning(\"no word id mapping provided; initializing from corpus, assuming identity\")\n+            self.id2word = utils.dict_from_corpus(corpus)\n+            self.vocab_len = len(self.id2word)\n+        elif len(self.id2word) > 0:\n+            self.vocab_len = len(self.id2word)\n+        else:\n+            self.vocab_len = 0\n+\n+        self.corpus = corpus\n+        if self.corpus is not None:\n+            self.corpus_len = len(corpus)\n+\n+        self.time_slice = time_slice\n+        if self.time_slice is not None:\n+            self.num_time_slices = len(time_slice)\n+\n+        max_doc_len = 0\n+        for line_no, line in enumerate(corpus):\n+            if len(line) > max_doc_len:\n+                max_doc_len = len(line)\n+        self.max_doc_len = max_doc_len\n+\n+# endclass seq_corpus\n+\n+\n+class LdaSeqModel(utils.SaveLoad):\n+    \"\"\"\n+    The constructor estimates Dynamic Topic Model parameters based\n+    on a training corpus.\n+    If we have 30 documents, with 5 in the first time-slice, 10 in the second, and 15 in the third, we would\n+    set up our model like this:\n+\n+    >>> ldaseq = LdaSeqModel(corpus=corpus, time_slice= [5, 10, 15], num_topics=5)\n+\n+    Model persistency is achieved through inheriting utils.SaveLoad.\n+\n+    >>> ldaseq.save(\"ldaseq\")\n+\n+    saves the model to disk.\n+    \"\"\"\n+\n+    def __init__(self, corpus=None, time_slice=None, id2word=None, alphas=0.01, num_topics=10,\n+                initialize='gensim', sstats=None,  lda_model=None, obs_variance=0.5, chain_variance=0.005, passes=10):\n+        \"\"\"\n+        `corpus` is any iterable gensim corpus\n+\n+        `time_slice` as described above is a list which contains the number of documents in each time-slice\n+\n+        `id2word` is a mapping from word ids (integers) to words (strings). It is used to determine the vocabulary size and printing topics.\n+\n+        `alphas`  is a prior of your choice and should be a double or float value. default is 0.01\n+\n+        `num_topics` is the number of requested latent topics to be extracted from the training corpus.\n+\n+        `initalize` allows the user to decide how he wants to initialise the DTM model. Default is through gensim LDA.\n+        You can use your own sstats of an LDA model previously trained as well by specifying 'own' and passing a numpy matrix through sstats.\n+        If you wish to just pass a previously used LDA model, pass it through `lda_model`\n+        Shape of sstats is (vocab_len, num_topics)\n+\n+        `chain_variance` is a constant which dictates how the beta values evolve - it is a gaussian parameter defined in the\n+        beta distribution.\n+\n+        `passes` is the number of passes of the initial LdaModel.\n+        \"\"\"\n+        if corpus is not None:\n+            self.corpus = seq_corpus(corpus=corpus, id2word=id2word, time_slice=time_slice)\n+            self.vocab_len = len(self.corpus.id2word)\n+\n+        self.time_slice = time_slice\n+        self.num_topics = num_topics\n+        self.num_time_slices = len(time_slice)\n+        self.alphas = numpy.full(num_topics, alphas)\n+\n+        # topic_chains contains for each topic a 'state space language model' object which in turn has information about each topic\n+        # the sslm class is described below and contains information on topic-word probabilities and doc-topic probabilities.\n+        self.topic_chains = []\n+        for topic in range(0, num_topics):\n+            sslm_ = sslm(num_time_slices=self.num_time_slices, vocab_len=self.vocab_len, num_topics=self.num_topics, chain_variance=chain_variance, obs_variance=obs_variance)\n+            self.topic_chains.append(sslm_)\n+\n+        # the following are class variables which are to be integrated during Document Influence Model\n+        self.top_doc_phis = None\n+        self.influence = None\n+        self.renormalized_influence = None\n+        self.influence_sum_lgl = None\n+\n+        # if a corpus and time_slice is provided, depending on the user choice of initializing LDA, we start DTM.\n+        if self.corpus is not None and time_slice is not None:\n+            if initialize == 'gensim':\n+                lda_model = ldamodel.LdaModel(corpus, id2word=self.corpus.id2word, num_topics=self.num_topics, passes=passes, alpha=self.alphas)\n+                self.sstats = numpy.transpose(lda_model.state.sstats)\n+            if initialize == 'ldamodel':\n+                self.sstats = numpy.transpose(lda_model.state.sstats)\n+            if initialize == 'own':\n+                self.sstats = sstats\n+\n+            # initialize model from sstats\n+            self.init_ldaseq_ss(chain_variance, obs_variance, self.alphas, self.sstats)\n+\n+            # fit DTM\n+            self.fit_lda_seq(self.corpus)\n+\n+\n+    def init_ldaseq_ss(self, topic_chain_variance, topic_obs_variance, alpha, init_suffstats):\n+        \"\"\"\n+        Method to initialize State Space Language Model, topic wise.\n+        \"\"\"\n+        self.alphas = alpha\n+        for k in range(0, self.num_topics):\n+            sstats = init_suffstats[:, k]\n+            sslm.sslm_counts_init(self.topic_chains[k], topic_obs_variance, topic_chain_variance, sstats)\n+\n+            # initialize the below matrices only if running DIM\n+            # ldaseq.topic_chains[k].w_phi_l = numpy.zeros((ldaseq.vocab_len, ldaseq.num_time_slices))\n+            # ldaseq.topic_chains[k].w_phi_sum = numpy.zeros((ldaseq.vocab_len, ldaseq.num_time_slices))\n+            # ldaseq.topic_chains[k].w_phi_sq = numpy.zeros((ldaseq.vocab_len, ldaseq.num_time_slices))\n+\n+\n+    def fit_lda_seq(self, seq_corpus):\n+        \"\"\"\n+        fit an lda sequence model:\n+\n+        for each time period\n+            set up lda model with E[log p(w|z)] and \\alpha\n+            for each document\n+                perform posterior inference\n+                update sufficient statistics/likelihood\n+\n+        maximize topics\n+\n+       \"\"\"\n+        LDA_INFERENCE_MAX_ITER = 25\n+        LDASQE_EM_THRESHOLD = 1e-4\n+        LDA_SEQ_MIN_ITER = 6\n+        LDA_SEQ_MAX_ITER = 20\n+\n+        num_topics = self.num_topics\n+        vocab_len = self.vocab_len\n+        data_len = seq_corpus.num_time_slices\n+        corpus_len = seq_corpus.corpus_len\n+\n+        bound = 0\n+        convergence = LDASQE_EM_THRESHOLD + 1\n+        iter_ = 0\n+\n+        while iter_ < LDA_SEQ_MIN_ITER or ((convergence > LDASQE_EM_THRESHOLD) and iter_ <= LDA_SEQ_MAX_ITER):\n+\n+            print (\" EM iter \", iter_)\n+            print (\"E Step\")\n+\n+            old_bound = bound\n+\n+            # initiate sufficient statistics\n+            topic_suffstats = []\n+            for topic in range(0, num_topics):\n+                topic_suffstats.append(numpy.resize(numpy.zeros(vocab_len * data_len), (vocab_len, data_len)))\n+\n+            # set up variables\n+            gammas = numpy.resize(numpy.zeros(corpus_len * num_topics), (corpus_len, num_topics))\n+            lhoods = numpy.resize(numpy.zeros(corpus_len * num_topics + 1), (corpus_len, num_topics + 1))\n+            # compute the likelihood of a sequential corpus under an LDA\n+            # seq model and find the evidence lower bound. This is the E - Step\n+            bound, gammas = self.lda_seq_infer(seq_corpus, topic_suffstats, gammas, lhoods, iter_)\n+            self.gammas = gammas\n+\n+            print (\"M Step\")\n+\n+            # fit the variational distribution. This is the M - Step\n+            topic_bound = self.fit_lda_seq_topics(topic_suffstats)\n+            bound += topic_bound\n+\n+            if ((bound - old_bound) < 0):\n+                if LDA_INFERENCE_MAX_ITER < 10:\n+                    LDA_INFERENCE_MAX_ITER *= 2\n+                print (\"Bound went down, increasing iterations to\", LDA_INFERENCE_MAX_ITER)\n+\n+            # check for convergence\n+            convergence = numpy.fabs((bound - old_bound) / old_bound)\n+\n+            if convergence < LDASQE_EM_THRESHOLD:\n+\n+                LDA_INFERENCE_MAX_ITER = 500","path":"gensim/models/ldaseqmodel.py","position":233,"original_position":233,"commit_id":"d2ad4ab583085a9ed3529ae720552118dca639db","original_commit_id":"d2ad4ab583085a9ed3529ae720552118dca639db","user":{"login":"tmylk","id":1261528,"avatar_url":"https://avatars.githubusercontent.com/u/1261528?v=3","gravatar_id":"","url":"https://api.github.com/users/tmylk","html_url":"https://github.com/tmylk","followers_url":"https://api.github.com/users/tmylk/followers","following_url":"https://api.github.com/users/tmylk/following{/other_user}","gists_url":"https://api.github.com/users/tmylk/gists{/gist_id}","starred_url":"https://api.github.com/users/tmylk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tmylk/subscriptions","organizations_url":"https://api.github.com/users/tmylk/orgs","repos_url":"https://api.github.com/users/tmylk/repos","events_url":"https://api.github.com/users/tmylk/events{/privacy}","received_events_url":"https://api.github.com/users/tmylk/received_events","type":"User","site_admin":false},"body":"CAPITALs mean that it is a constant. If it changes then it should be a variable","created_at":"2016-08-15T14:28:19Z","updated_at":"2016-08-15T14:28:19Z","html_url":"https://github.com/RaRe-Technologies/gensim/pull/739#discussion_r74769426","pull_request_url":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/739","_links":{"self":{"href":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/comments/74769426"},"html":{"href":"https://github.com/RaRe-Technologies/gensim/pull/739#discussion_r74769426"},"pull_request":{"href":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/739"}}},"pull_request":{"url":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/739","id":73215846,"html_url":"https://github.com/RaRe-Technologies/gensim/pull/739","diff_url":"https://github.com/RaRe-Technologies/gensim/pull/739.diff","patch_url":"https://github.com/RaRe-Technologies/gensim/pull/739.patch","issue_url":"https://api.github.com/repos/RaRe-Technologies/gensim/issues/739","number":739,"state":"open","locked":false,"title":"[WIP] DTM sample classes, helper methods.","user":{"login":"bhargavvader","id":8374816,"avatar_url":"https://avatars.githubusercontent.com/u/8374816?v=3","gravatar_id":"","url":"https://api.github.com/users/bhargavvader","html_url":"https://github.com/bhargavvader","followers_url":"https://api.github.com/users/bhargavvader/followers","following_url":"https://api.github.com/users/bhargavvader/following{/other_user}","gists_url":"https://api.github.com/users/bhargavvader/gists{/gist_id}","starred_url":"https://api.github.com/users/bhargavvader/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bhargavvader/subscriptions","organizations_url":"https://api.github.com/users/bhargavvader/orgs","repos_url":"https://api.github.com/users/bhargavvader/repos","events_url":"https://api.github.com/users/bhargavvader/events{/privacy}","received_events_url":"https://api.github.com/users/bhargavvader/received_events","type":"User","site_admin":false},"body":"Contains sample classes and helper methods to use to create Dynamic Topic Models. This is a very, very rough draft and will go through many changes before resembling the final product.\r\n\r\n","created_at":"2016-06-09T13:42:34Z","updated_at":"2016-08-15T14:28:19Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b685c404bbce314a4b32b3d8a8f6a3fb2156982d","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/739/commits","review_comments_url":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/739/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/739/comments","statuses_url":"https://api.github.com/repos/RaRe-Technologies/gensim/statuses/d2ad4ab583085a9ed3529ae720552118dca639db","head":{"label":"bhargavvader:DTM","ref":"DTM","sha":"d2ad4ab583085a9ed3529ae720552118dca639db","user":{"login":"bhargavvader","id":8374816,"avatar_url":"https://avatars.githubusercontent.com/u/8374816?v=3","gravatar_id":"","url":"https://api.github.com/users/bhargavvader","html_url":"https://github.com/bhargavvader","followers_url":"https://api.github.com/users/bhargavvader/followers","following_url":"https://api.github.com/users/bhargavvader/following{/other_user}","gists_url":"https://api.github.com/users/bhargavvader/gists{/gist_id}","starred_url":"https://api.github.com/users/bhargavvader/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bhargavvader/subscriptions","organizations_url":"https://api.github.com/users/bhargavvader/orgs","repos_url":"https://api.github.com/users/bhargavvader/repos","events_url":"https://api.github.com/users/bhargavvader/events{/privacy}","received_events_url":"https://api.github.com/users/bhargavvader/received_events","type":"User","site_admin":false},"repo":{"id":54395982,"name":"gensim","full_name":"bhargavvader/gensim","owner":{"login":"bhargavvader","id":8374816,"avatar_url":"https://avatars.githubusercontent.com/u/8374816?v=3","gravatar_id":"","url":"https://api.github.com/users/bhargavvader","html_url":"https://github.com/bhargavvader","followers_url":"https://api.github.com/users/bhargavvader/followers","following_url":"https://api.github.com/users/bhargavvader/following{/other_user}","gists_url":"https://api.github.com/users/bhargavvader/gists{/gist_id}","starred_url":"https://api.github.com/users/bhargavvader/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bhargavvader/subscriptions","organizations_url":"https://api.github.com/users/bhargavvader/orgs","repos_url":"https://api.github.com/users/bhargavvader/repos","events_url":"https://api.github.com/users/bhargavvader/events{/privacy}","received_events_url":"https://api.github.com/users/bhargavvader/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/bhargavvader/gensim","description":"Topic Modelling for Humans","fork":true,"url":"https://api.github.com/repos/bhargavvader/gensim","forks_url":"https://api.github.com/repos/bhargavvader/gensim/forks","keys_url":"https://api.github.com/repos/bhargavvader/gensim/keys{/key_id}","collaborators_url":"https://api.github.com/repos/bhargavvader/gensim/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/bhargavvader/gensim/teams","hooks_url":"https://api.github.com/repos/bhargavvader/gensim/hooks","issue_events_url":"https://api.github.com/repos/bhargavvader/gensim/issues/events{/number}","events_url":"https://api.github.com/repos/bhargavvader/gensim/events","assignees_url":"https://api.github.com/repos/bhargavvader/gensim/assignees{/user}","branches_url":"https://api.github.com/repos/bhargavvader/gensim/branches{/branch}","tags_url":"https://api.github.com/repos/bhargavvader/gensim/tags","blobs_url":"https://api.github.com/repos/bhargavvader/gensim/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/bhargavvader/gensim/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/bhargavvader/gensim/git/refs{/sha}","trees_url":"https://api.github.com/repos/bhargavvader/gensim/git/trees{/sha}","statuses_url":"https://api.github.com/repos/bhargavvader/gensim/statuses/{sha}","languages_url":"https://api.github.com/repos/bhargavvader/gensim/languages","stargazers_url":"https://api.github.com/repos/bhargavvader/gensim/stargazers","contributors_url":"https://api.github.com/repos/bhargavvader/gensim/contributors","subscribers_url":"https://api.github.com/repos/bhargavvader/gensim/subscribers","subscription_url":"https://api.github.com/repos/bhargavvader/gensim/subscription","commits_url":"https://api.github.com/repos/bhargavvader/gensim/commits{/sha}","git_commits_url":"https://api.github.com/repos/bhargavvader/gensim/git/commits{/sha}","comments_url":"https://api.github.com/repos/bhargavvader/gensim/comments{/number}","issue_comment_url":"https://api.github.com/repos/bhargavvader/gensim/issues/comments{/number}","contents_url":"https://api.github.com/repos/bhargavvader/gensim/contents/{+path}","compare_url":"https://api.github.com/repos/bhargavvader/gensim/compare/{base}...{head}","merges_url":"https://api.github.com/repos/bhargavvader/gensim/merges","archive_url":"https://api.github.com/repos/bhargavvader/gensim/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/bhargavvader/gensim/downloads","issues_url":"https://api.github.com/repos/bhargavvader/gensim/issues{/number}","pulls_url":"https://api.github.com/repos/bhargavvader/gensim/pulls{/number}","milestones_url":"https://api.github.com/repos/bhargavvader/gensim/milestones{/number}","notifications_url":"https://api.github.com/repos/bhargavvader/gensim/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/bhargavvader/gensim/labels{/name}","releases_url":"https://api.github.com/repos/bhargavvader/gensim/releases{/id}","deployments_url":"https://api.github.com/repos/bhargavvader/gensim/deployments","created_at":"2016-03-21T14:33:07Z","updated_at":"2016-03-21T14:33:08Z","pushed_at":"2016-08-15T12:18:21Z","git_url":"git://github.com/bhargavvader/gensim.git","ssh_url":"git@github.com:bhargavvader/gensim.git","clone_url":"https://github.com/bhargavvader/gensim.git","svn_url":"https://github.com/bhargavvader/gensim","homepage":"http://radimrehurek.com/gensim/","size":35155,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"RaRe-Technologies:develop","ref":"develop","sha":"d9b5667b3f4e5df4021c196a022777ffbc38abfe","user":{"login":"RaRe-Technologies","id":12515886,"avatar_url":"https://avatars.githubusercontent.com/u/12515886?v=3","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,"name":"gensim","full_name":"RaRe-Technologies/gensim","owner":{"login":"RaRe-Technologies","id":12515886,"avatar_url":"https://avatars.githubusercontent.com/u/12515886?v=3","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":"2016-08-15T12:12:07Z","pushed_at":"2016-08-15T12:18:23Z","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":"http://radimrehurek.com/gensim/","size":26884,"stargazers_count":2842,"watchers_count":2842,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1023,"mirror_url":null,"open_issues_count":163,"forks":1023,"open_issues":163,"watchers":2842,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/739"},"html":{"href":"https://github.com/RaRe-Technologies/gensim/pull/739"},"issue":{"href":"https://api.github.com/repos/RaRe-Technologies/gensim/issues/739"},"comments":{"href":"https://api.github.com/repos/RaRe-Technologies/gensim/issues/739/comments"},"review_comments":{"href":"https://api.github.com/repos/RaRe-Technologies/gensim/pulls/739/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/739/commits"},"statuses":{"href":"https://api.github.com/repos/RaRe-Technologies/gensim/statuses/d2ad4ab583085a9ed3529ae720552118dca639db"}}}}
{"actor":{"display_login":"tmylk"}}