Mengukur Kesamaan Dokumen

21

Untuk mengelompokkan dokumen (teks) Anda perlu cara mengukur kesamaan antara pasangan dokumen.

Dua alternatif adalah:

  1. Bandingkan dokumen sebagai vektor istilah menggunakan Cosine Similarity - dan TF / IDF sebagai bobot untuk persyaratan.

  2. Bandingkan setiap distribusi probabilitas dokumen menggunakan f-divergence misalnya divergensi Kullback-Leibler

Apakah ada alasan intuitif untuk memilih satu metode ke yang lain (dengan asumsi ukuran dokumen rata-rata 100 istilah)?

Joel
sumber

Jawaban:

23

Untuk dokumen teks, vektor fitur dapat memiliki dimensi yang sangat tinggi dan jarang di bawah representasi standar mana pun (sekumpulan kata atau TF-IDF, dll.). Mengukur jarak langsung di bawah representasi seperti itu mungkin tidak dapat diandalkan karena itu adalah fakta yang diketahui bahwa dalam dimensi yang sangat tinggi, jarak antara dua titik mulai terlihat sama. Salah satu cara untuk mengatasinya adalah dengan mengurangi dimensi data dengan menggunakan PCA atau LSA ( Latent Semantic Analysis ; juga dikenal sebagai Latent Semantic Indexing ) dan kemudian mengukur jarak di ruang baru. Menggunakan sesuatu seperti LSA melalui PCA menguntungkan karena dapat memberikan representasi yang bermakna dalam hal "konsep semantik", selain mengukur jarak dalam ruang dimensi yang lebih rendah.

Membandingkan dokumen berdasarkan distribusi probabilitas biasanya dilakukan dengan terlebih dahulu menghitung topik distribusi dari setiap dokumen (menggunakan sesuatu seperti Latent Dirichlet Allocation ), dan kemudian menghitung beberapa jenis divergensi (misalnya, KL divergensi) antara distribusi topik sepasang dokumen. Di satu sisi, itu sebenarnya agak mirip dengan melakukan LSA pertama dan kemudian mengukur jarak di ruang LSA menggunakan KL-divergensi antara vektor (bukan kesamaan cosinus).

Divergensi-KL adalah ukuran jarak untuk membandingkan distribusi sehingga mungkin lebih disukai jika representasi dokumen dalam hal beberapa distribusi (yang seringkali sebenarnya merupakan kasus - misalnya, dokumen direpresentasikan sebagai distribusi atas topik, seperti dalam LDA). Perhatikan juga bahwa di bawah representasi seperti itu, entri dalam vektor fitur akan berjumlah satu (karena Anda pada dasarnya memperlakukan dokumen sebagai distribusi topik atau konsep semantik).

Lihat juga utas terkait di sini .

ebony1
sumber
Terima kasih. Apakah LDA mengharuskan Anda untuk mengetahui topik di muka? Dalam kasus kami, kami tidak tahu topik apa yang dimiliki masing-masing Dokumen dan kami akan menggunakan ukuran kesamaan untuk melakukan pengelompokan (EM-G-Means, atau GAAC)
Joel
@ ebony1 Referensi yang bagus untuk LSA, saya membuat jawaban serupa beberapa waktu lalu di stats.stackexchange.com/questions/369/…
chl
1
@ Joel: Tidak, LDA tidak berasumsi bahwa Anda mengetahui topik untuk setiap dokumen sebelumnya. BTW, hanya untuk memperjelas, LDA mewakili setiap dokumen sebagai campuran topik, bukan hanya dengan satu topik. Jadi setiap topik akan berkontribusi pada sebagian kecil dalam dokumen (dan pecahan individual akan berjumlah 1). Pada dasarnya, LDA mengasumsikan bahwa setiap kata dalam dokumen dihasilkan oleh beberapa topik.
ebony1
@ebony - terima kasih! Beresiko mengulang pertanyaan dan mengulangi diri saya sendiri, apakah LDA mengharuskan Anda untuk mengetahui jumlah topik rahasia?
Joel
Iya nih. Tetapi ada varian LDA (HDP-LDA) yang tidak mengharuskan menentukan jumlah topik. Lihat makalah ini: cse.buffalo.edu/faculty/mbeal/papers/hdp.pdf
ebony1
0

Anda mungkin ingin mencoba layanan online ini untuk kesamaan dokumen cosinus http://www.scurtu.it/documentSimilarity.html

import urllib,urllib2
import json
API_URL="http://www.scurtu.it/apis/documentSimilarity"
inputDict={}
inputDict['doc1']='Document with some text'
inputDict['doc2']='Other document with some text'
params = urllib.urlencode(inputDict)    
f = urllib2.urlopen(API_URL, params)
response= f.read()
responseObject=json.loads(response)  
print responseObject
Vitalie
sumber
2
Harap berikan detail lebih lanjut.
Xi'an