gensimのLdaModelバグ

Pocket

gensimのLdaModelでtop_topic()を使おうとしたらいろいろバグが残っていたので、とりあえず手元で動くようにしてみました。詳細はMLに報告しましたが、これが正しい解法かは自信がありません。

問題は複数ありますが、まずは名前空間に不備があります。”np”と”ifilter”という2つの関数をglobalで利用しようとして失敗します。これは以下のように無理やり定義してやれば問題を回避できます。

import gensim
gensim.models.ldamodel.np = gensim.models.ldamodel.numpy
import itertools
gensim.models.ldamodel.ifilter = itertools.ifilter # for python2.x
#gensim.models.ldamodel.ifilter = itertools.filter # for python3

これ以外に、LdaModel.top_topics()に与えたcorpusによってはKeyErrorが発生する問題があります。これはMLにも書いたようなパッチで回避できました。

--- ldamodel.py.old     2015-06-01 22:40:03.484170877 +0900
+++ ldamodel.py 2015-06-01 22:42:06.016170862 +0900
@@ -776,9 +776,14 @@
         for topic in xrange(len(topics)):
             topic_coherence_sum = 0.0
             for word_m in topics[topic][1:]:
-                doc_frequency_m = len(doc_word_list[word_m])
-                m_set = set(doc_word_list[word_m])
+               x = doc_word_list.get(word_m, None)
+               if x is None:
+                       continue
+                doc_frequency_m = len(x)
+                m_set = set(x)
                 for word_l in topics[topic][:-1]:
+                   if doc_word_list.get(word_l, None) is None:
+                       continue
                     l_set = set(doc_word_list[word_l])
                     co_doc_frequency = len(m_set.intersection(l_set))
                     topic_coherence_sum += numpy.log(

私の環境では、これでgensim 0.11.1においてtop_topicsが機能するようになりました。

Published
Categorized as NLP

By knok

I am a Debian Developer and a board member of Free Software Initiative (FSIJ).