テキスト分析の大通り#16: LDA、Gensim編
前回LDAをScikit-learnのライブラリで実施してみましたが、今回はGensimというライブラリを試してみます。前回のScikit-learn版LDAでこと足りてしまうので、特に意味はなく、単に使ってみたいという自分磨きでしかないのですが、唯一気になるのは、Perplexity以外でトピック数を決定する指標として使われるCoherenceなるものです。これを使ってみようと思います。
Gensimを利用したLDA
まずはスクリプトです。
利用するデータはScikit-learnと同じものです。その後Gensimの求める形式に合うよう配列に変換し、辞書(ユニークな単語のリスト)を作成し、単語と出現頻度のBOWをペアにした配列を作成します(コーパス)。そしてPerplexityとCoherenceの値をトピック数1から20にて取得しています。ここはよそ様のサイトで良いスクリプトがあったため、丸パクリさせていただいています。Perplexityは値が低い方が良く、反対にCoherenceは高い方が良いのですが、元の文書が少ないため、トピック数を増やすほどにPerplexityは高く、Coherenceは低いという結果になっています。残念ながら元の文書が少なく、しかも出現単語のほとんどが1回で他の文書との重なり合いが乏しいため、両指標ともに有効に働かないようです。
以降は単純に、Gensimでの動きや処理の流れを押さえておきたいという理由で、トピック数を5としてモデリング、スコアリングの処理を行っています。データフレームとしてモデル、つまり各単語とトピックに対する確率を含むデータをdfccとして取得しています。また同様にスコアリング結果をデータフレームとして整理してdfddとして取得しています。あとは好きに使えるのでここまでで満足して終わります。
以上Gensimを使ったLDAの処理手順を見ていきました。
おさらい
今回までで、もともとの文章データをSudachi、Mecabを利用して形態素解析し、出力された単語を整理(辞書登録、除外、nGram)し、BOWおよびTF-IDFで指標化し、これをナイーブベイズ(SQL, Scikit-learn)で判別し、コサイン類似度で文書間の類似度評価し、LDA(Scikit-learn, Gensim)で分類する手順を見ていきました。
大通りということで文書そのものを分析する手法に絞りましたが、実務上は単語そのものの出現トレンドを見たり、他の事象との関係を見たりするだけでも意味があるかと思います。また、何かしらの機械学習モデルを作る際に説明変数として利用することも可能です。
例えばコールセンターに寄せられる顧客の声や、営業やサービス担当者の議事メモなどが適用可能なデータ分野として考えられます。これらの場合単語にタイムスタンプが付き、顧客や商品、担当者などの識別子が付いた単語出現履歴として扱うことができるわけです。
労も多いですが、取引や行動ログに表出しない部分を定量的に見れるという意味で有用な手法だと思います。その意味でここまでの紹介記事が、何かしらの参考になれば幸いです。
(TeradataやPython、およびPythonライブラリのインストールや環境構築、辞書登録、参考にしたページ等は以下にまとめています)
///
#analytics #bow #lda #gensim #text #nlp #データ #分析 #teradata #sql #python