Medição de similaridade de documentos

21

Para agrupar documentos (texto), você precisa de uma maneira de medir a semelhança entre pares de documentos.

Duas alternativas são:

  1. Compare documentos como vetores de termos usando Cosine Similarity - e TF / IDF como os pesos dos termos.

  2. Compare a distribuição de probabilidade de cada documento usando a divergência f, por exemplo, divergência Kullback-Leibler

Existe algum motivo intuitivo para preferir um método ao outro (assumindo tamanhos médios de documentos de 100 termos)?

Joel
fonte

Respostas:

23

Para documentos de texto, os vetores de recursos podem ter dimensões muito altas e esparsos em qualquer uma das representações padrão (conjunto de palavras ou TF-IDF etc.). Medir distâncias diretamente sob essa representação pode não ser confiável, pois é sabido que, em dimensões muito altas, a distância entre dois pontos começa a parecer a mesma. Uma maneira de lidar com isso é reduzir a dimensionalidade dos dados usando PCA ou LSA ( Análise Semântica Latente ; também conhecida como Indexação Semântica Latente ) e depois medir as distâncias no novo espaço. Usar algo como LSA sobre PCA é vantajoso, pois pode fornecer uma representação significativa em termos de "conceitos semânticos", além de medir distâncias em um espaço dimensional inferior.

A comparação de documentos com base nas distribuições de probabilidade geralmente é feita computando primeiro a distribuição de tópicos de cada documento (usando algo como Alocação Latente de Dirichlet ) e depois calculando algum tipo de divergência (por exemplo, divergência de KL) entre as distribuições de tópicos de pares de documentos. De certa forma, é realmente parecido com fazer o LSA primeiro e depois medir distâncias no espaço do LSA usando a divergência de KL entre os vetores (em vez da semelhança de cosseno).

A divergência de KL é uma medida de distância para comparar distribuições; portanto, pode ser preferível que a representação do documento seja em termos de alguma distribuição (o que geralmente é o caso - por exemplo, documentos representados como distribuição sobre tópicos, como na LDA). Observe também que, nessa representação, as entradas no vetor de recurso somariam uma (já que você basicamente trata o documento como uma distribuição sobre tópicos ou conceitos semânticos).

Veja também um tópico relacionado aqui .

ebony1
fonte
Obrigado. O LDA exige que você conheça os tópicos antecipadamente? No nosso caso, nós não sabemos para qual tópico Cada documento pertence e nós estaremos usando a medida de similaridade para executar agrupamento (em- G-meios, ou GAAC)
Joel
@ ebony1 Boa referência ao LSA, fiz uma resposta semelhante há algum tempo em stats.stackexchange.com/questions/369/…
chl
1
@ Joel: Não, a LDA não assume que você conhece os tópicos de cada documento de antemão. BTW, só para deixar claro, o LDA representa cada documento como uma mistura de tópicos, não apenas por um único tópico. Portanto, cada tópico contribuirá para alguma fração dos documentos (e as frações individuais serão somadas a 1). Basicamente, o LDA pressupõe que cada palavra no documento seja gerada por algum tópico.
precisa saber é o seguinte
@ebony - obrigado! Correndo o risco de reformular a pergunta e me repetir, a LDA exige que você saiba o número de tópicos discretos?
Joel
Sim. Mas existem variantes do LDA (HDP-LDA) que não requerem a especificação do número de tópicos. Veja este artigo: cse.buffalo.edu/faculty/mbeal/papers/hdp.pdf
ebony1
0

Convém tentar este serviço on-line para obter semelhança de documentos de cosseno 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
fonte
2
Por favor, forneça mais detalhes.
Xian