Skip to content

KChikai/TopicModelforReadingSociety

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

Topic models for the NLP lecture in my turn.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published