はじめに
TF-IDF(Term Frequency-Inverse Document Frequency)は、テキストデータの重要な単語を見つけるための手法で、検索エンジン、文書分類、キーワード抽出など、さまざまな自然言語処理(NLP)タスクで利用されます。
本記事では、TF-IDFの概念と計算方法を解説し、Pythonでの実装方法を紹介します。また、文書分類やキーワード抽出への応用方法についても解説します。
日本では現在、ITエンジニアの人材不足が深刻化しており、
それに伴いエンジニアの需要が急速に高まっています。
プログラミングスキルを身につけることで、以下のような多くのメリットが得られます。
✅ 転職市場での競争力が向上し、収入アップのチャンスが広がる
✅ 副業として活用でき、収入源を増やせる
✅ プログラマーに限らず、IT時代を生き抜く武器になる
もし少しでも興味があるなら、まずはプログラミングスクールの無料体験を試してみるのがおすすめです。
TF-IDFとは?
TF-IDFは、単語の重要度を測る指標で、以下の2つの要素から成り立っています。
- TF(Term Frequency):単語の出現頻度(文書内での単語の出現回数)。
- 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を計算できる。
- 文書分類やキーワード抽出など、多くの応用が可能。
この方法を活用すれば、検索エンジンの最適化や文書要約など、さまざまな用途に応用できます。
この記事が参考になったら、ぜひシェアをお願いします!
コメント