自然言語処理

自然言語関係のメモ

465 views

概要

TF-IDF(Term Frequency-Inverse Document Frequency)は、テキストマイニングや情報検索などで使用されます。
TF-IDF法は、単語の重要度を評価するための手法です。
TFは単語の出現頻度を、IDFは逆文書頻度を示します。
これらの値を組み合わせて、文書内での単語の重要度を算出します。

TF-IDFの計算式は以下の通りです:

1. TF(Term Frequency):
・ある単語(term)が文書内で出現する回数をカウントします。
・文書内の単語の総数で割ることで、正規化された出現頻度を計算します。

TF(term) = (単語termの文書内出現回数) / (文書内の総単語数)

2.IDF(Inverse Document Frequency):

・ある単語がどれだけ多くの文書に出現するかを評価します。より多くの文書に出現する単語は、一般的な単語である可能性が高く、逆に特定の文書にしか出現しない単語は重要度が高いとされます。
・文書集合内の文書数を単語の出現する文書数で割ることで計算します。これを逆数を取って得られる値です。

IDF(term) = log((文書集合内の総文書数) / (単語termの出現する文書数))

3.TF-IDF(Term Frequency-Inverse Document Frequency):
・TFとIDFを掛け合わせて、単語の重要度を計算します。

TF-IDF(term) = TF(term) * IDF(term)

TF-IDFは、文書内で頻繁に出現する単語(例: "the", "and"など)は低い重要度を持つ一方で、特定の文書やドメインに特有の単語は高い重要度を持つという性質を持ちます。この手法を使って、文書の特徴を捉えたり、情報検索時の検索結果のランキングを向上させたりすることができます。

TF-IDFのサンプルプログラム

以下は、PythonでTF-IDF(Term Frequency-Inverse Document Frequency)法を計算するためのサンプルコードです。このコードは、scikit-learnライブラリを使用して、文書集合における各単語のTF-IDF値を計算します。
まず、scikit-learnのライブラリをインストールしていない場合は、以下のコマンドでインストールしてください。

pip install scikit-learn

次に、以下のコードを実行します。

from sklearn.feature_extraction.text import TfidfVectorizer

# サンプルの文書集合
documents = [
    "The quick brown fox jumps over the lazy dog.",
    "Never jump over the lazy dog quickly.",
    "A quick brown dog outpaces a quick fox."
]

# TfidfVectorizerを初期化
tfidf_vectorizer = TfidfVectorizer()

# 文書集合からTF-IDF行列を計算
tfidf_matrix = tfidf_vectorizer.fit_transform(documents)

# 単語の一覧
feature_names = tfidf_vectorizer.get_feature_names_out()

# 結果を表示
for doc_index, doc in enumerate(documents):
    print(f"Document {doc_index+1}:")
    for word_index, word in enumerate(feature_names):
        tfidf_value = tfidf_matrix[doc_index, word_index]
        if tfidf_value > 0:
            print(f"{word}: {tfidf_value}")
    print()

このコードの説明:

  • TfidfVectorizerを使って文書集合からTF-IDF行列を作成します。
  • fit_transformメソッドで文書集合を学習し、TF-IDF行列を計算します。
  • 各文書ごとに、単語とそのTF-IDFスコアを表示します。

サンプルの出力例(文書内の単語ごとのTF-IDF値)は次のようになります。

Document 1:
brown: 0.396
dog: 0.396
fox: 0.396
jumps: 0.396
lazy: 0.396
over: 0.396
quick: 0.396
the: 0.280

Document 2:
dog: 0.445
jump: 0.445
lazy: 0.445
never: 0.445
over: 0.445
quickly: 0.445
the: 0.315

Document 3:
brown: 0.401
dog: 0.401
fox: 0.401
outpaces: 0.401
quick: 0.582

このコードを使えば、各文書内の単語の重要度を数値化して比較することができます。

Page 1 of 6.

次のページ



[添付ファイル]


お問い合わせ

プロフィール

すぺぺぺ

自己紹介

本サイトの作成者。
プログラムは趣味と勉強を兼ねて、のんびり本サイトを作っています。
フレームワークはdjango。
ChatGPTで自動プログラム作成に取り組み中。

サイト/ブログ

https://www.osumoi-stdio.com/novel/

ツイッター

@darkimpact0626