Skip to content

Latest commit

 

History

History
152 lines (97 loc) · 6.13 KB

README.md

File metadata and controls

152 lines (97 loc) · 6.13 KB

Topic Model for the lecture in Onizuka Lab. NLP Team 2017

このレポジトリに輪講で紹介したトピックモデルについてのサンプルプログラムを設置( ☝՞ਊ ՞)☝. 参考図書はレジュメの最後にも記載しているが,2016年の輪講本である実践 機械学習システム(研究室の本棚にある).

Requirements

Data Set

今回使用するデータセットとして,Associated Press (AP) データセット (トピックモデル研究の初期から使われている,ニュースレポートのデータセット) を使用する.データのダウンロードは./dataディレクトリ内で以下のシェルスクリプトを実行.

$ cd data
$ ./download_ap.sh

解凍されたディレクトリ内にap.dat, ap.txt, vocab.txtの三つのファイルが生成される.

Packages

スクリプト群は全てPythonの3系で動作する. 必要なパッケージは以下の通り.

Features

  • word_cloud/lda_model.py

    • LDAモデルの構築,モデルが生成するトピックのワードクラウド結果を可視化.
  • word_cloud/hdp_model.py

    • HDPモデルの構築,モデルが生成するトピックのワードクラウド結果を可視化.
  • figure/figure.py

    • 雑多(上記二つと被っている部分有)
    • 生成したモデルの類似文書を計算
    • 類似トピックのワードクラウド化
    • トピック分布の出力
    • perplexityの計算

Create LDA or HDP Model

ダウンロードしたデータからLDA,HDPモデルの作成を行う. データセットからgensimライブラリを用いてコーパスを作成するコードは以下の通り.

from gensim import corpora
corpus = corpora.BleiCorpus('./data/ap/ap.dat', './data/ap/vocab.txt')

コーパスからgensimを用いてLDAモデルを作成するコードは以下の通り(生成トピック数: 100個).

model = models.ldamodel.LdaModel(corpus, num_topics=100, id2word=corpus.id2word)

生成されたモデルからある文書のトピックの構成を観測する.

topics = [model[c] for c in corpus]
print(topics[0])

[(3, 0.023607255776894751),
  (13, 0.11679936618551275),
  (19, 0.075935855202707139),
  (92, 0.10781541687001292)]

上記のコードでは文書のインデックスが0番目の文書のトピックの構成を確率値で出力している. model[doc]はdocが持つトピックを(topic_index, topic_weight)のリスト形式で返す. HDPのモデル生成もLDAとほぼ同様に実装が可能である. 所々関数の使用が異なるので注意(詳しくはドキュメントを参照).

Create Word Cloud

単語群からワードクラウドをwordcloudパッケージを用いて生成する. 画像の生成は以下のコードで実現可能.

import matplotlib.pyplot as plt
from wordcoud import WordCloud        
wordcloud = WordCloud(background_color="black", font_path=fpath,
                  width=900, height=500).generate_from_frequencies(text)
plt.imshow(wordcloud)
plt.show()

WordCloudクラスを呼び出す時にfontのpathの指定が必要である. また画像の表示にmatplotlibが必要である.

Result

実際のサンプル結果を示す.

One of the topic in LDA model:

lda_topic

上図は実際に生成されたLDAモデルのトピックの一つをwordcloudに出力した例である. データセットが昔のニュース記事であるので,1988年アメリカ合衆国大統領選挙の候補者であった マイケル・デュカキスとジョージ・H・W・ブッシュの名前が同一topic内に含まれていることがわかる.

Alpha Parameter of LDA model:

lda_alpha

AlphaはLDAモデル内のディリクレ分布のパラメータであり,数値を大きくすることでトピック数を増やすことができる. 上図グラフでは,Alphaの数値を大きくすることでトピック数の偏りが平滑化されている. Alphaのgensimデフォルト値は1.0 / len(corpus)

Number of topics between LDA model and HDP model:

lda_hdp

同一コーパスでモデルを生成した時のLDAとHDPのトピック分布の違いを示す. LDAは手動で100トピックと設定,HDPはトピック数は自動決定であり150トピックとなった.

Reference