TF-IDF とコサイン類似度によるテキストの類似性の測定
2 つのテキスト文書間の類似性の判定は、テキスト マイニングと情報において重要なタスクです検索。一般的なアプローチの 1 つは、TF-IDF (用語周波数-逆文書周波数) と コサイン類似度 を利用することです。
TF-IDF は重みを割り当てます。文書内の各単語は、その文書内の頻度と文書コーパス全体での希少性に基づいて決定されます。類似した単語パターンを持つドキュメントは、より高い TF-IDF ベクトルを共有します。
コサイン類似度 は 2 つのベクトル間の角度を測定し、0 (類似性なし) と 1 (完全な類似性) の間の値を提供します。この例では、2 つのドキュメントの TF-IDF ベクトルがこれらのベクトルを形成し、コサイン類似度によってそれらの角度が定量化されます。
Python の実装
Python では、 scikit-learn および Gensim パッケージでは、ペアごとの類似性の計算は簡単です:
<code class="python">from sklearn.feature_extraction.text import TfidfVectorizer documents = [open(f).read() for f in text_files] tfidf = TfidfVectorizer().fit_transform(documents) pairwise_similarity = tfidf * tfidf.T</code>
または、ドキュメントがすでに文字列である場合は、次を使用します:
<code class="python">corpus = ["I'd like an apple", "An apple a day keeps the doctor away", "..."] vect = TfidfVectorizer(min_df=1, stop_words="english") tfidf = vect.fit_transform(corpus) pairwise_similarity = tfidf * tfidf.T</code>
結果の解釈
pairwise_similarity は、各ドキュメント ペア間の類似性を表すスパース行列です。特定のドキュメントに最も類似したドキュメントを見つけるには、ドキュメント自体との類似性をマスクし (NaN に設定し)、np.nanargmax():
<code class="python">import numpy as np arr = pairwise_similarity.toarray() np.fill_diagonal(arr, np.nan) input_doc = "The scikit-learn docs are Orange and Blue" input_idx = corpus.index(input_doc) result_idx = np.nanargmax(arr[input_idx]) similar_doc = corpus[result_idx]</code>
その他の考慮事項
大規模なコーパスや語彙の場合、NumPy 配列に変換するよりもスパース行列を使用する方が効率的です。最小ドキュメントの min_df など、TfidfVectorizer のパラメーターを調整することで、追加リソース
以上がTF-IDF とコサイン類似度を使用してテキストの類似性を測定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。