Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Mengira Kesamaan Antara Dokumen Teks Menggunakan TF-IDF dan Kesamaan Kosinus?

Bagaimana Mengira Kesamaan Antara Dokumen Teks Menggunakan TF-IDF dan Kesamaan Kosinus?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-23 06:47:02426semak imbas

How to Calculate Similarity Between Text Documents Using TF-IDF and Cosine Similarity?

Cara Mengira Persamaan Dokumen Teks

Mengira Persamaan Berpasangan

Kaedah yang paling biasa untuk menentukan persamaan antara dua dokumen teks ialah menukarnya menjadi vektor TF-IDF (Term Frequency-Inverse Document Frequency) dan kemudian gunakan persamaan kosinus untuk membandingkannya. Pendekatan ini diliputi dalam buku teks tentang perolehan maklumat dan diperincikan dalam "Pengenalan kepada Pendapatan Maklumat."

Perpustakaan Python seperti Gensim dan scikit-learn menyediakan pelaksanaan penukaran TF-IDF dan pengiraan persamaan kosinus. Dengan scikit-learn, coretan kod berikut melaksanakan pengiraan persamaan kosinus:

<code class="python">from sklearn.feature_extraction.text import TfidfVectorizer

# Extract documents from text files
documents = [open(f).read() for f in text_files]

# Create a TF-IDF vectorizer
tfidf = TfidfVectorizer().fit_transform(documents)

# Calculate pairwise cosine similarity
pairwise_similarity = tfidf * tfidf.T</code>

Sebagai alternatif, untuk dokumen teks biasa:

<code class="python">corpus = ["I'd like an apple", 
           "An apple a day keeps the doctor away", 
           "Never compare an apple to an orange", 
           "I prefer scikit-learn to Orange", 
           "The scikit-learn docs are Orange and Blue"]                                                                                                                                                                                                   

# Create a TF-IDF vectorizer with minimum frequency and exclusion of stop words
vect = TfidfVectorizer(min_df=1, stop_words="english")                                                                                                                                                                                                   

# Apply TF-IDF transformation
tfidf = vect.fit_transform(corpus)                                                                                                                                                                                                                       

# Calculate pairwise cosine similarity
pairwise_similarity = tfidf * tfidf.T </code>

Mentafsir Keputusan

persamaan_berpasangan ialah matriks jarang di mana setiap baris dan lajur mewakili dokumen dalam korpus. Menukar matriks jarang kepada tatasusunan NumPy mendedahkan bahawa setiap sel mewakili persamaan antara dua dokumen yang sepadan.

Sebagai contoh, untuk menentukan dokumen yang paling serupa dengan "Dokumen scikit-learn ialah Jingga dan Biru", cari indeksnya dalam korpus dan kemudian gunakan np.nanargmax pada baris yang sepadan selepas menutup pepenjuru (mewakili persamaan diri) dengan np.fill_diagonal():

<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])                                                                                                                                                                                                                
print(corpus[result_idx])</code>

Perhatikan bahawa untuk set data yang besar, menggunakan matriks jarang memelihara ingatan. Sebagai alternatif, pertimbangkan untuk menggunakan pairwise_similarity.shape untuk menutup persamaan diri dan argmax() secara langsung:

<code class="python">n, _ = pairwise_similarity.shape                                                                                                                                                                                                                         
pairwise_similarity[np.arange(n), np.arange(n)] = -1.0
pairwise_similarity[input_idx].argmax()  </code>

Atas ialah kandungan terperinci Bagaimana Mengira Kesamaan Antara Dokumen Teks Menggunakan TF-IDF dan Kesamaan Kosinus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn