Pythonでのテキスト分析:gensimを使ってトピックモデリングを行う方法

Pythonでのテキスト分析において、gensimというライブラリを使うとトピックモデリングを行うことができます。トピックモデリングは、大量のテキストデータから、それらが属するトピックを自動的に抽出するための手法です。gensimは、LDA(Latent Dirichlet Allocation)というトピックモデリング手法を実装しています。以下では、gensimを使ったトピックモデリングの手順を説明します。

1. ライブラリのインポート

まずはgensimをインストールし、必要なライブラリをインポートします。

!pip install gensim
import gensim
from gensim import corpora
from gensim.models.ldamodel import LdaModel

2. テキストデータの準備

トピックモデリングを行うためには、解析したいテキストデータを用意する必要があります。以下では、サンプルとしてニュース記事のテキストデータを用いることにします。

# ニュース記事のテキストデータ
texts = [['dog', 'cat', 'pet', 'animal'],
         ['apple', 'banana', 'fruit', 'juice'],
         ['book', 'pen', 'paper', 'notebook'],
         ['dog', 'cat', 'kitten', 'puppy']]

3. 辞書の作成

gensimでは、テキストデータを解析する前に、まず辞書を作成する必要があります。辞書とは、テキストデータに含まれる単語を一意に識別するためのもので、gensimではcorpora.Dictionary()を使って作成することができます。

# 辞書の作成
dictionary = corpora.Dictionary(texts)

4. コーパスの作成

テキストデータをgensimのコーパスオブジェクトに変換することで、単語の出現頻度を表すスパース行列が生成されます。このスパース行列は、各行が1つのドキュメントを表し、各列が1つの単語を表します。行列の要素は、単語の出現回数を表します。

具体的には、gensimの辞書オブジェクトを用いて、テキストデータを単語IDのリストに変換します。このリストは、各単語のIDと出現回数を表すタプルのリストに変換され、gensimのコーパスオブジェクトに格納されます。

以下は、gensimのコーパスオブジェクトを作成するためのコード例です。

# コーパスの作成
corpus = [dictionary.doc2bow(text) for text in texts]

ここで、dictionaryはgensimの辞書オブジェクトであり、textsはテキストデータのリストです。doc2bow()メソッドは、テキストデータを単語IDのリストに変換するために使用されます。変換された単語IDのリストは、gensimのコーパスオブジェクトに格納されます。

5. トピックモデルの作成

トピックモデルを作成するには、LdaModel()を使います。LdaModel()はgensimのライブラリで使用される、Latent Dirichlet Allocation(LDA)モデルの一種です。LDAは、トピックモデルの中でも最もよく使われる手法の1つで、テキストデータにおけるトピックの抽出に広く用いられています。

LDAモデルは、テキストデータ内の単語の共起関係を用いて、トピックを抽出します。具体的には、LDAモデルは、テキスト内の単語がどのトピックに属するか、そしてトピック内の単語分布がどのようになるかを確率的にモデリングします。これにより、テキスト内のトピックの構造を抽出することができます。

LdaModel()には、以下のような引数を指定する必要があります。

  • corpus: コーパス
  • id2word: 辞書
  • num_topics: 抽出するトピック数
  • passes: テキストデータの反復回数

下記は実際にトピックモデルを作成するコードです。

# トピックモデルの作成
lda_model = LdaModel(corpus=corpus, id2word=dictionary, num_topics=2, passes=10)

corpusは、Bag of Wordsモデルなどで作成されたコーパスオブジェクトを指定します。id2wordは、corpusに含まれる単語に対応する辞書オブジェクトを指定します。num_topicsは、抽出するトピック数を指定します。passesは、トピックモデルを構築するための反復回数を指定します。

6. トピックの表示

トピックモデルから抽出されたトピックを可視化することは、テキストデータの分析において重要です。gensimでは、以下のコードを使ってトピックを表示することができます。

# トピックの表示
topics = lda_model.show_topics(num_topics=2, num_words=4, formatted=False)
for topic in topics:
    print("Topic #{}: {}".format(topic[0], [word[0] for word in topic[1]]))

上記のコードでは、num_topicsで抽出するトピック数、num_wordsでトピックごとに表示する単語数を指定します。例えば、上記のコードでは抽出したトピック数が2で、トピックごとに4つの単語を表示するように指定しています。

出力結果は以下のようになります。

Topic #0: ['dog', 'cat', 'pet', 'animal']
Topic #1: ['apple', 'banana', 'fruit', 'juice']

この結果から、テキストデータに含まれる単語がトピックとして抽出されていることが分かります。例えば、トピック#0は「dog」、「cat」、「pet」、「animal」という単語が含まれているため、ペットや動物に関するトピックとして抽出されたと解釈できます。

まとめ

以上が、gensimを使ってPythonでトピックモデリングを行う手順です。テキストデータの前処理や、ハイパーパラメータの調整など、さらに深いトピックモデリングの解析には、より高度な技術が必要となる場合もありますが、初心者でも簡単にトピックモデリングを行うことができます。Pythonを利用した自然言語処理の学習には下記のようなサイトの利用が有効です。

click.linksynergy.com

click.linksynergy.com