10

ドキュメントの長さが非常に異なる場合のtfグレードの正規化についてWebを検索しました(たとえば、ドキュメントの長さが500ワードから2500ワードまでさまざまです)

私が見つけた唯一の正規化は、用語の頻度をドキュメントの長さで分割することについて話しているため、ドキュメントの長さに意味がありません。

ただし、この方法は tf の正規化には非常に適していません。存在する場合、各ドキュメントの tf グレードに非常に大きな偏りが生じます (すべてのドキュメントがほぼ同じ辞書から構築されている場合を除きます。これは、tf-idf を使用する場合には当てはまりません)。

たとえば、2 つのドキュメントを考えてみましょう。1 つは 100 個の一意の単語で構成され、もう 1 つは 1000 個の一意の単語で構成されています。doc1 の各単語の tf は 0.01 ですが、doc2 の各単語の tf は 0.001 です。

これにより、単語を doc2 よりも doc1 に一致させると、tf-idf グレードが自動的に大きくなります。

より適切な正規化式の提案はありますか?

ありがとうございました

編集 私はまた、各ドキュメントのドキュメントの最大用語頻度で用語頻度を分割する必要があることを示す方法を見ましたが、これも私の問題を解決していません

私が考えていたのは、すべてのドキュメントから最大用語頻度を計算し、各用語頻度を最大で割ってすべての用語を正規化することです

あなたの考えを知りたいです

4

1 に答える 1

15

分析の目的は何ですか?

最終的な目標がドキュメント間の類似性を比較することである場合 (et simila)、tfidf 計算段階でドキュメントの長さを気にする必要はありません。これが理由です。

tfidfは、ドキュメントを共通のベクトル空間で表します次に、これらのベクトル間のコサイン類似度を計算すると、コサイン類似度によって、異なるドキュメントの長さの影響が補正されます。その理由は、コサイン類似度はベクトルの大きさではなく方向を評価するためです。Python を使用してポイントをお見せします: 以下の (ダム) ドキュメントを検討してください。

document1 = "apple apple banana"
document2 = "apple apple apple apple banana banana"

documents = (
    document1,
    document2)

これらのドキュメントの長さは異なりますが、内容は同じです。より正確には、2 つのドキュメントの用語の相対的な分布は同じですが、絶対的な用語の頻度は同じではありません。

ここで、tfidfを使用して、これらのドキュメントを共通のベクトル空間で表現します。

from sklearn.feature_extraction.text import TfidfVectorizer
tfidf_vectorizer = TfidfVectorizer()
tfidf_matrix = tfidf_vectorizer.fit_transform(documents)

そして、余弦類似度を使用して、大きさ (つまり、長さ) を気にせずに方向 (または向き) だけを見て、これらのベクトル化されたドキュメントの類似性を評価します。ドキュメント 1 とドキュメント 2 のコサイン類似度を評価しています。

from sklearn.metrics.pairwise import cosine_similarity
cosine_similarity(tfidf_matrix[0], tfidf_matrix[1])

結果は 1です。2 つのベクトル間の余弦類似度は、2 つのベクトルがまったく同じ方向を向いている場合は 1、直交している場合は 0、ベクトルが反対の方向を向いている場合は -1 に等しいことに注意してください。

この場合、コサイン類似度はドキュメントの長さの影響を受けず、元のドキュメントの用語の相対的な分布が同一であるという事実を捉えていることがわかります! この情報をドキュメント間の「距離」として表現したい場合は、次のように簡単に実行できます。

1 - cosine_similarity(tfidf_matrix[0], tfidf_matrix[1])

この値は、ドキュメントが (長さに関係なく) 類似している場合は 0 になり、類似していない場合は 1 になります。

于 2016-11-19T17:22:08.903 に答える