自然言語処理で用いられるTF-IDFの解説と使いどころ

TD-IDFとは

TF-IDFとは、テキストマイニングにおいてよく使われる単語の重要度を計算するための手法です。TFはTerm Frequency(単語出現頻度)の略で、IDFはInverse Document Frequency(逆文書頻度)の略です。

TFについて

TFは、ある文書中に単語が出現する頻度を表します。すなわち、ある単語が文書に多く出現するほど、その単語の重要度は高くなります。しかし、単語がある文書に多く出現するだけでは、その単語が文書全体で重要であるとは限りません。例えば、定冠詞や前置詞のように、ある文書中で頻繁に使われる単語は、その文書においては重要であっても、他の文書においては重要であるとは限りません。

TF(t, d) = 単語 t が文書 d に現れる回数 / 文書 d の全単語数

IDFについて

そこで、IDFを用いて、ある単語がどの程度重要であるかを計算します。IDFは、ある単語が出現する文書の数に逆比例する値です。すなわち、ある単語が多くの文書に出現するほど、その単語の重要度は低くなります。逆に、ある単語が少ない文書にしか出現しない場合、その単語は重要であると考えられます。

IDF(t, D) = log (総文書数 / 単語 t を含む文書数 +1)

TF-IDFの算出

TFとIDFを掛け合わせることで、ある単語の重要度を計算することができます。具体的には、ある文書中のある単語のTFを計算し、その単語が出現する文書の数をIDFとして計算し、TFとIDFを掛け合わせます。この値が、ある単語の重要度を表すTF-IDF値となります。

TF-IDF(t, d, D) = TF(t, d) × IDF(t, D)

TF-IDFの使いどころ

TF-IDFは、情報検索やテキスト分類などの分野で広く使われており、特定の単語がある文書で重要であるかどうかを判断するのに役立ちます。また、TF-IDFを用いることで、文書間の類似度を計算することもできます。具体的には、2つの文書のTF-IDF値を比較し、その値が近いほど2つの文書は類似していると判断することができます。

TF-IDFの注意点

TF-IDFは単語の出現頻度に基づいているため、文脈による適切な評価が難しい場合があります。また、TF-IDFは単語の位置や単語同士の関連性を考慮していません。さらに、コーパス全体の特性に依存するため、特定のドメインやテーマに特化した場合、適切な結果が得られない可能性があります。したがって、TF-IDFを使用する際は慎重に文脈やデータの特性を考慮し、必要に応じて他の手法と組み合わせることが重要です。

TF-IDFのサンプルコード

下記がサンプルコードとなります。pythonにはTFidfVectorizerというライブラリがあるため、簡単に使用することができます。

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer

# DataFrameの生成
data = pd.DataFrame({
    'id': [1, 2, 3, 4],
    'text': [
        'this is the first document',
        'this is this second document',
        'that is the third document',
        'it is the fourth document'
    ]
})

# TfidfVectorizerクラスのインスタンス化
vectorizer = TfidfVectorizer()

# データのベクトル化
tfidf = vectorizer.fit_transform(data['text'])

# データフレーム化
df = pd.DataFrame(tfidf.toarray(), columns=vectorizer.get_feature_names_out())

# 元のデータと結合
df = pd.concat([data['id'], df], axis=1)

# 結果を表示
display(df)

まとめ

TF-IDF(Term Frequency-Inverse Document Frequency)は、テキストデータ内の単語の重要度を評価する手法です。TFは単語の出現頻度を、IDFは文書全体における単語の希少性を表現し、これらを組み合わせて単語の重みを計算します。TF-IDFは情報検索やテキストマイニングで利用され、特定の文書における重要な単語を強調し、コーパス全体の一般的な単語を軽視することで、文書の特徴的な単語を抽出することができる手法です。他にもWord2Vec等のテキスト数値化手法がありますが、それらを合わせて言語を解析することがおススメです。

コメント

Copied title and URL