Pomiar podobieństwa dokumentu

21

Do grupowania dokumentów (tekstowych) potrzebny jest sposób pomiaru podobieństwa między parami dokumentów.

Dwie alternatywy to:

  1. Porównaj dokumenty jako wektory terminów za pomocą podobieństwa Cosinus - i TF / IDF jako ważenia terminów.

  2. Porównaj rozkład prawdopodobieństwa każdego dokumentu za pomocą rozbieżności f, np. Rozbieżności Kullbacka-Leiblera

Czy jest jakiś intuicyjny powód, aby preferować jedną metodę od drugiej (zakładając średni rozmiar dokumentu wynoszący 100 terminów)?

Joel
źródło

Odpowiedzi:

23

W przypadku dokumentów tekstowych wektory cech mogą mieć bardzo duże wymiary i być rzadkie w ramach dowolnej standardowej reprezentacji (worek słów lub TF-IDF itp.). Pomiar odległości bezpośrednio pod taką reprezentacją może nie być wiarygodny, ponieważ wiadomo, że w bardzo dużych wymiarach odległość między dowolnymi dwoma punktami zaczyna wyglądać tak samo. Jednym ze sposobów rozwiązania tego problemu jest zmniejszenie wymiarowości danych za pomocą PCA lub LSA ( Latent Semantic Analysis ; znana również jako Latent Semantic Indexing ), a następnie pomiar odległości w nowej przestrzeni. Zastosowanie czegoś takiego jak LSA w porównaniu z PCA jest korzystne, ponieważ może dać sensowną reprezentację w kategoriach „pojęć semantycznych”, oprócz pomiaru odległości w przestrzeni o niższych wymiarach.

Porównywanie dokumentów na podstawie rozkładów prawdopodobieństwa zwykle odbywa się najpierw przez obliczenie rozkładu tematów każdego dokumentu (przy użyciu czegoś takiego jak Latent Dirichlet Allocation ), a następnie obliczenie pewnego rodzaju rozbieżności (np. Rozbieżności KL) między rozkładami tematycznymi pary dokumentów. W pewnym sensie przypomina to najpierw wykonanie LSA, a następnie pomiar odległości w przestrzeni LSA za pomocą rozbieżności KL między wektorami (zamiast podobieństwa cosinus).

Rozbieżność KL jest miarą odległości służącą do porównywania rozkładów, więc może być preferowane, jeśli reprezentacja dokumentu dotyczy niektórych rozkładów (co często ma miejsce - np. Dokumenty reprezentowane jako podział na tematy, jak w LDA). Zauważ też, że w takiej reprezentacji wpisy w wektorze cech byłyby sumą do jednego (ponieważ zasadniczo traktujesz dokument jako podział na tematy lub pojęcia semantyczne).

Zobacz także powiązany wątek tutaj .

ebony1
źródło
Dzięki. Czy LDA wymaga znajomości tematów z góry? W naszym przypadku nie wiemy, do którego tematu należy każdy Dokument i będziemy używać miary podobieństwa do przeprowadzania grupowania (EM-G-Means lub GAAC)
Joel
@ ebony1 Przyjemne odniesienie do LSA, zrobiłem podobną odpowiedź jakiś czas temu na stats.stackexchange.com/questions/369/…
chl
1
@Joel: Nie, LDA nie zakłada, że ​​znasz wcześniej tematy każdego dokumentu. BTW, dla jasności, LDA reprezentuje każdy dokument jako mieszankę tematów, a nie tylko jednego tematu. Tak więc każdy temat przyczyni się do ułamka w dokumentach (a poszczególne ułamki sumują się do 1). Zasadniczo LDA zakłada, że ​​każde słowo w dokumencie jest generowane przez jakiś temat.
ebony1
@ebony - dzięki! Czy istnieje ryzyko ponownego sformułowania pytania i powtórzenia się, czy LDA wymaga znajomości liczby dyskretnych tematów?
Joel
Tak. Istnieją jednak warianty LDA (HDP-LDA), które nie wymagają podania liczby tematów. Zobacz ten artykuł: cse.buffalo.edu/faculty/mbeal/papers/hdp.pdf
ebony1
0

Możesz wypróbować tę usługę online dla podobieństwa dokumentów cosinusowych 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
Witalij
źródło
2
Podaj więcej szczegółów.
Xi'an,