Python
自然言語処理
gensim
LDA
トピックモデル

gensimのLDAで最適トピック数を決定する方法

筆者は書いていることをよく理解しないまま別ソース情報を鵜呑みにしているため、間違いがある可能性があります

LDAの性能評価

LDAの性能評価指針は一般に二つ提唱されているようです。
1.coherence
https://www.slideshare.net/hoxo_m/coherence-57598192/
2.perplexity
https://www.slideshare.net/hoxo_m/perplexity

coherence

coherenceを求める関数を調べたところいくつか方法が出てきました。

1. Coherencemodel

この関数は正の数値を出力します。たぶん大きい値が望ましいのでしょう。
でもよくわからないので誰かに教えてもらいたいです。

coherencemodel.py
lda = gensim.models.ldamodel.LdaModel(corpus=corpus, num_topics=topic_N, id2word=dictionary)
cm = gensim.models.ldamodel.CoherenceModel(model=lda,texts=wvl,dictionary=dictionary, coherence='c_v')
cm.get_coherenec()

結果
0.39626499439997492

https://markroxor.github.io/gensim/static/notebooks/gensim_news_classification.html#topic=3&lambda=0&term=
https://radimrehurek.com/gensim/models/coherencemodel.html
https://rare-technologies.com/what-is-topic-coherence/

2. top_topics

この関数は負の数値を出力するのですが解釈がわかりませんでした。
だれか教えてください

top_topics.py
lda = gensim.models.ldamodel.LdaModel(corpus=corpus, num_topics=topic_N, id2word=dictionary)
coh =  lda.top_topics(corpus, num_words= lda.num_topics)#coherence

結果
(抜粋)-11.124769223269601

perplexity

perplexityも意味不明です。いくつか手法があるらしいのですが、世界中でパッケージユーザーが混乱しています。

1. log_perplexity

負の小さい値がでます。なんで

log_perplexity.py
lda = gensim.models.ldamodel.LdaModel(corpus=corpus, num_topics=topic_N, id2word=dictionary)
perp =  lda.log_perplexity(corpus)

結果
-6.7323405441601407

2. bound

負の大きい値がでます。なんで

log_perplexity.py
lda = gensim.models.ldamodel.LdaModel(corpus=corpus, num_topics=topic_N, id2word=dictionary)
perp =  lda.bound(corpus)

結果
-548746.5699309269

https://markroxor.github.io/gensim/static/notebooks/lda_training_tips.html
https://qiita.com/morley628/items/d075a91f20a8c541881f
https://qiita.com/suchowan/items/a4231d1c63c835ae88e2

結論

僕は理解していないのですが、わかってそうな人の書いたよくわからない記事をリンクとしてまとめているので、今後わかりうる人が調べる際に効率的なindexを提供できたと思います。
わかった方は教えてください。
よろしくお願いいたします。