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

Python

はじめに

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

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

日本では現在、ITエンジニアの人材不足が深刻化しており、
それに伴いエンジニアの需要が急速に高まっています。
プログラミングスキルを身につけることで、以下のような多くのメリットが得られます。
転職市場での競争力が向上し、収入アップのチャンスが広がる
副業として活用でき、収入源を増やせる
✅ プログラマーに限らず、IT時代を生き抜く武器になる

もし少しでも興味があるなら、まずはプログラミングスクールの無料体験を試してみるのがおすすめです。
スクール名特徴主な学習内容対象者
AI・データサイエンス特Python/AIに特化した実践カリキュラム。現役エンジニアの手厚いサポートと「学び放題」制度が特徴。専門実践教育訓練給付金適用可能。Python, 機械学習, データ分析AI・データ分析初心者~中級者
完全マンツーマン指導。オーダーメイドカリキュラムとトリプルサポート体制(講師+コーチ+Q&A掲示板)。挫折率2.1%の継続性。Web開発, AI, アプリ開発
キャリアチェンジ志望者
AI/機械学習専門。E資格合格率83.1%。カリキュラムが無期限に閲覧可能。卒業生コミュニティが強み。AI特化の転職サポートあり。Python, 機械学習, データ分析AIエンジニア志望者
転職保証付きの短期集中型スクール。未経験者向けのサポートが充実。Web開発, プログラミング全般未経験からのエンジニア転職志望者

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をコピーしました