日本語の場合には分かち書きが必要になるが,gensim を使えば LDA によるトピックモデルを簡単に構築することができる.トピックモデルを使えば,ラベリングを行うことなく,大量のテキストをなんとなくグループに分割し,さらに各グループをうまく表すような単語を抽出することができる.
gensim をつかって LDA のモデルを作るのは以下の流れになる
List[List[str]]
から gensim 辞書を構築する- 1 の辞書から訓練用テキストデータの単語を id で置換する
- 2 でベクトル化されたテキストデータから LDA を学習する
これでモデルを作成してからは,好きなテキストデータを辞書でベクトル化すれば,そのトピック単語を推定することができる.
from gensim.corpora.dictionary import Dictionary
from gensim.models.ldamodel import LdaModel
texts = [["soccer", "baseball"], ["computer", "keybaord"], ["tree", "flower"]]
common_dict = Dictionary(texts)
common_corpus = [common_dict.doc2bow[t] for t in texts]
lda = LdaModel(
common_corpus,
num_topics=10,
id2word=common_dict,
random_state=1
)
# 入力ドキュメントのトピック単語を推定
target_doc = ["tennis", "ball"]
lda.get_document_topics(common_dict.doc2bow[target_doc])
参考
- https://qiita.com/Spooky_Maskman/items/0d03ea499b88abf56819
- https://ohke.hateblo.jp/entry/2017/11/14/230000