これまで数回に渡ってトピックモデルについて様々な考察を行ってきましたが、今回は鳥居が実装したトピックモデルのライブラリが既存ライブラリ(gensim.ldamodel)よりも高い精度を示したので、この二つの比較について解説していきます。
この二つのライブラリで大きく異るのがLDAの学習手法です。 既存ライブラリのgensimでは変分ベイズ法を用いていますが、今回SD/Tで作成したライブラリはギブスサンプリングを採用しています。この学習手法の違いによって異なる結果が得られました。
学習手法
トピックモデルの中でも広く使われているLDAモデルの学習手法として主に、ギブスサンプリング法と変分ベイズ法の2つがあります。ギブスサンプリングはMCMCの一種で、求める変数以外の変数を固定した条件付き確率によって潜在変数、トピック分布、単語分布をサンプリングしていきます。一方、変分ベイズ法は決定論的手法で、それら3つの同時事後分布をそれぞれの確率変数が因子分解可能な事後分布で近似し、その近似事後分布を本来の同時事後分布とのKLダイバージェンスが最小になるように求めます。
一般的に、事後分布に基づいたサンプリングの方がより高い精度を示すことが知られています。これは、変分ベイズ法のような決定論的手法では事後分布を近似する際に様々な仮定を置くため、本来の事後分布と異なる分布と可能性があるからです。一方で、サンプリングは収束までにより多くの反復回数を必要とするため、計算速度が遅くなるという欠点もあります。しかし、今回考えるトピックモデルでは多くのデータを早く処理する必要がないケースがほとんどなので、精度の高いサンプリング手法を採用する方が妥当だと思います。
学習結果
分析対象はSEEDATAがこれまで社内で共有したニュース約6000件の本文で、トピック数を25としてそれぞれのライブラリで学習させました。それぞれのトピック0~24における出現確率の高い上位10個の単語を以下に示します(左側の単語の方が確率が高い)。
Gensimを使用した結果
SD/Tのライブラリを使用した結果
それぞれの行の10個の単語はそのトピックを意味づけする単語集合となっているので、その単語集合を一言で言い表すことができるかが上手く分類できているかの基準となります。
Gensimを用いた結果を見ると、「サービス」という単語がどのトピックにおいても多く出現していることがわかります。「サービス」以外にも「ユーザー」や「ロボット」といった単語も複数のトピックに現れています。また、それぞれのトピックを表す単語10個を見てみても、それぞれのトピックが何を表しているかほとんど分からないような結果となっています。一方で、我々が作成したライブラリを使用した結果では、複数のトピックで現れる単語は存在せず、さらに殆どのトピックにおいてそのトピックの意味を単語から推測することができます。例えば、トピック7はファッション、トピック14は料理、トピック20はモビリティに関するトピックだということが推測できます。
このように学習手法によって結果に大きな違いが出たのは下の図によって直感的に理解することができます。
SD/Tが作成したライブラリでは学習にギブスサンプリングを使用しているため本来の事後分布を再現でき、上図左のように単語集合をトピックに上手く分類できています。一方、Gensimでは変分ベイズ法を用いて事後分布を近似しているので、その近似事後分布は本来の事後分布を完全には再現できず、上図右のように複数のトピックに共通した単語が存在してしまい、単語集合をトピックごとに分類しきれていません。
まとめ
LDAの実装にあたり、学習手法としてギブスサンプリングを採用することで既存のライブラリよりも高い精度を示すことができました。また、ライブラリをC++で実装することで計算速度を向上させ、約6000件の文書データに対しても10分以内で学習を完了することができました。