Belge Benzerliğini Ölçme


21

Belgeleri kümelemek için (metin), belge çiftleri arasındaki benzerliği ölçmek için bir yol gerekir.

İki alternatif:

  1. Cosine Benzerliği - ve TF / IDF kullanarak terimleri ağırlık olarak kullanarak belgeleri vektörler olarak karşılaştırın .

  2. Her belgenin olasılık dağılımını f-diverjans kullanarak karşılaştırın, örn. Kullback-Leibler diverjansı

Bir yöntemi diğerine tercih etmek için sezgisel bir neden var mı (ortalama 100 terim boyutunda belge varsayarsak)?

Yanıtlar:


23

Metin belgeleri için, özellik vektörleri çok yüksek olabilir ve standart gösterimlerden herhangi biri altında (kelime çantası veya TF-IDF vb.) Seyrek olabilir. Doğrudan böyle bir sunum altında mesafeleri ölçmek güvenilir olmayabilir, çünkü çok yüksek boyutlarda, herhangi iki nokta arasındaki mesafenin aynı gibi görünmeye başladığı bilinen bir gerçektir. Bununla başa çıkmanın bir yolu, PCA veya LSA ( Latent Semantic Analysis ; Latent Semantic Indexing olarak da bilinir) kullanarak veri boyutlandırmasını azaltmak ve ardından yeni alandaki mesafeleri ölçmektir. PCA üzerinden LSA gibi bir şey kullanmak avantajlıdır, çünkü daha düşük boyutlu bir boşluktaki mesafeleri ölçmekten başka "anlamsal kavramlar" anlamında anlamlı bir ifade verebilir.

Olasılık dağılımlarına göre belgeleri karşılaştırmak genellikle ilk önce her bir belgenin konu dağılımını hesaplayarak ( Latent Dirichlet Allocation gibi bir şey kullanarak ) ve daha sonra da bir çift belge dağıtımı arasında bir tür sapma hesaplayarak yapılır. Bir bakıma, aslında ilk önce LSA yapmak ve daha sonra, vektörler arasında KL-uzaklığı kullanarak (kosinüs benzerliği yerine) LSA uzayındaki mesafeleri ölçmekle aynı tür.

KL-diverjans, dağılımları karşılaştırmak için bir mesafe ölçütüdür, bu nedenle belge gösteriminin bazı dağılımlar açısından olması tercih edilebilir. Ayrıca, böyle bir gösterimin altında, özellik vektöründeki girişlerin bir toplanacağına dikkat edin (temelde belgeyi konular veya semantik kavramlar üzerine bir dağıtım olarak ele alıyorsunuz ).

Ayrıca burada ilgili bir konuya bakın .


Teşekkürler. LDA konuları önceden bilmenizi ister mi? Bizim durumumuzda, her bir Dokümanın hangi konuya ait olduğunu bilmiyoruz ve kümelenme yapmak için benzerlik ölçütünü kullanacağız (EM- G-Means veya GAAC)
Joel

@ ebony1 LSA için güzel referans, bir süre önce stats.stackexchange.com/questions/369/…
chl

1
@Joel: Hayır, LDA, önceden her bir belgenin konularını bildiğinizi varsaymaz. BTW, açık olmak gerekirse, LDA her dokümanı yalnızca tek bir konu değil, bir konu karışımı olarak temsil eder. Böylece her konu belgelerde bazı kesimlere katkıda bulunacaktır (ve bireysel kesirler 1 olarak toplanacaktır). Temel olarak, LDA belgedeki her kelimenin bir konu tarafından oluşturulduğunu varsayar.
ebony1

@ebony - teşekkürler! Sorunun tekrarlanması ve kendimin tekrarlanması riski altında olan LDA, gizli konuların sayısını bilmenizi ister mi?
Joel,

Evet. Ancak, konu sayısının belirlenmesini gerektirmeyen LDA (HDP-LDA) değişkenleri vardır. : Bu kağıdı Bkz cse.buffalo.edu/faculty/mbeal/papers/hdp.pdf
ebony1

0

Bu çevrimiçi hizmeti kosinüs belgesi benzerliği için denemek isteyebilirsiniz 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

2
Lütfen daha fazla ayrıntı verin.
Xi'an
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.