【Python】TF-IDFを計算する方法と応用例:NLP入門

Python

はじめに

TF-IDF(Term Frequency-Inverse Document Frequency)は、テキストデータの重要な単語を見つけるための手法で、検索エンジン、文書分類、キーワード抽出など、さまざまな自然言語処理(NLP)タスクで利用されます。

本記事では、TF-IDFの概念と計算方法を解説し、Pythonでの実装方法を紹介します。また、文書分類やキーワード抽出への応用方法についても解説します。

TF-IDFとは?

TF-IDFは、単語の重要度を測る指標で、以下の2つの要素から成り立っています。

  1. TF(Term Frequency):単語の出現頻度(文書内での単語の出現回数)。
  2. IDF(Inverse Document Frequency):逆文書頻度(単語が登場する文書の割合の逆数)。

TF-IDFは、**「特定の文書内で頻繁に出現するが、多くの文書には現れない単語」**を高く評価します。

TF-IDFの計算式

\(TF−IDF(t,d)=TF(t,d) \times IDF(t)\)

\(TF(t, d) = \frac{\text{単語} t \text{ の出現回数}}{\text{文書} d \text{ の総単語数}}\)

\(IDF(t) = \log\frac{N}{DF(t)}\)
  • NN:全文書数
  • DF(t)DF(t):単語 tt が登場する文書数

必要なライブラリのインストール

PythonでTF-IDFを計算するために、以下のライブラリをインストールします。

pip install pandas scikit-learn nltk
  • pandas:データの操作
  • scikit-learn:TF-IDFの計算
  • nltk:テキスト前処理

ステップ1:データの準備

サンプルテキストデータを用意します。

import pandas as pd

data = {'text': ['私はPythonが好きです', 'Pythonは機械学習で使われます', '自然言語処理ではTF-IDFが重要です']}
df = pd.DataFrame(data)

ステップ2:TF-IDFの計算(scikit-learn)

from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer()
X = vectorizer.fit_transform(df['text'])

print(pd.DataFrame(X.toarray(), columns=vectorizer.get_feature_names_out()))

ステップ3:TF-IDFを使った文書分類

TF-IDFを使って、Naive Bayesモデルを構築し、文書分類を行います。

from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import train_test_split

labels = ['プログラミング', '機械学習', '自然言語処理']
df['label'] = labels

X_train, X_test, y_train, y_test = train_test_split(X, df['label'], test_size=0.2, random_state=42)

model = MultinomialNB()
model.fit(X_train, y_train)

print('モデルの精度:', model.score(X_test, y_test))

ステップ4:TF-IDFを使ったキーワード抽出

TF-IDFを使って、文書ごとに重要な単語を抽出します。

feature_array = vectorizer.get_feature_names_out()
tfidf_sorting = X.toarray().argsort(axis=1)[:, ::-1]

for i, doc in enumerate(df['text']):
    top_n_words = [feature_array[idx] for idx in tfidf_sorting[i, :3]]
    print(f'文書 {i+1}: {top_n_words}')

まとめ

  • TF-IDFは単語の重要度を測る指標であり、NLPにおいて広く活用される
  • scikit-learnを使えば、簡単にTF-IDFを計算できる
  • 文書分類やキーワード抽出など、多くの応用が可能

この方法を活用すれば、検索エンジンの最適化や文書要約など、さまざまな用途に応用できます。

この記事が参考になったら、ぜひシェアをお願いします!

コメント

タイトルとURLをコピーしました