Medición de similitud de documentos

21

Para agrupar documentos (de texto) necesita una forma de medir la similitud entre pares de documentos.

Dos alternativas son:

  1. Compare documentos como vectores de términos usando Cosine Similarity - y TF / IDF como las ponderaciones de los términos.

  2. Compare la distribución de probabilidad de cada documento utilizando la divergencia f, por ejemplo, la divergencia Kullback-Leibler

¿Hay alguna razón intuitiva para preferir un método al otro (suponiendo un tamaño promedio de documento de 100 términos)?

Joel
fuente

Respuestas:

23

Para documentos de texto, los vectores de características pueden ser de dimensiones muy altas y dispersos bajo cualquiera de las representaciones estándar (bolsa de palabras o TF-IDF, etc.). La medición de distancias directamente bajo tal representación puede no ser confiable ya que es un hecho conocido que en dimensiones muy altas, la distancia entre dos puntos cualquiera comienza a verse igual. Una forma de lidiar con esto es reducir la dimensionalidad de los datos mediante PCA o LSA ( Análisis semántico latente ; también conocido como indexación semántica latente ) y luego medir las distancias en el nuevo espacio. Usar algo como LSA sobre PCA es ventajoso, ya que puede proporcionar una representación significativa en términos de "conceptos semánticos", además de medir distancias en un espacio dimensional inferior.

La comparación de documentos basada en las distribuciones de probabilidad generalmente se realiza calculando primero la distribución de temas de cada documento (usando algo como Asignación de Dirichlet Latente ), y luego calculando algún tipo de divergencia (por ejemplo, divergencia KL) entre las distribuciones de temas de un par de documentos. En cierto modo, en realidad es algo similar a hacer LSA primero y luego medir distancias en el espacio LSA usando la divergencia KL entre los vectores (en lugar de la similitud del coseno).

La divergencia KL es una medida de distancia para comparar distribuciones, por lo que puede ser preferible si la representación del documento es en términos de alguna distribución (que a menudo es el caso, por ejemplo, documentos representados como distribución sobre temas, como en LDA). También tenga en cuenta que bajo tal representación, las entradas en el vector de características sumarían uno (ya que básicamente está tratando el documento como una distribución sobre temas o conceptos semánticos).

También vea un hilo relacionado aquí .

ébano1
fuente
Gracias. ¿LDA requiere que conozcas los temas por adelantado? En nuestro caso, no sabemos a qué tema pertenece cada documento y utilizaremos la medida de similitud para realizar la agrupación (EM-G-Means, o GAAC)
Joel
@ ebony1 Bonita referencia a LSA, hice una respuesta similar hace algún tiempo en stats.stackexchange.com/questions/369/…
chl
1
@ Joel: No, LDA no asume que conoces los temas de cada documento de antemano. Por cierto, para ser claros, LDA representa cada documento como una mezcla de temas, no por un solo tema. Por lo tanto, cada tema contribuirá a alguna fracción en los documentos (y las fracciones individuales sumarán 1). Básicamente, LDA supone que cada palabra en el documento es generada por algún tema.
ebony1
@ebony - ¡gracias! A riesgo de reformular la pregunta y repetirme, ¿LDA requiere que sepas la cantidad de temas discretos?
Joel
Sí. Pero hay variantes de LDA (HDP-LDA) que no requieren especificar el número de temas. Vea este documento: cse.buffalo.edu/faculty/mbeal/papers/hdp.pdf
ebony1
0

Es posible que desee probar este servicio en línea para la similitud de documentos coseno 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
fuente
2
Por favor proporcione más detalles.
Xi'an