Pregunta

Cuando digo "documento", que tengo en mente las páginas web como artículos de Wikipedia y noticias. Yo prefiero dar respuestas ya sea de vainilla léxica métricas de distancia o métrica de distancia semántica del estado de la técnica, con mayor preferencia por este último.

¿Fue útil?

Solución

Hay un número de maneras diferentes de ir sobre esto dependiendo de exactamente la cantidad de información semántica desea conservar y lo fácil que sus documentos están a tokenize (html documentos probablemente sería bastante difícil tokenize, pero que posiblemente podría hacer algo con las etiquetas y el contexto.)

Algunos de ellos han sido mencionados por ffriend, y los vectores de párrafo por user1133029 es una muy sólida, pero yo sólo pensé que iría a un poco más de profundidad sobre ventajas y desventajas de diferentes enfoques.

  • coseno Distancia - optó por una verdadera, distancia coseno es, probablemente, la distancia métrica común más utilizado genéricamente a través de múltiples dominios. Dicho esto, hay muy poca información en la distancia coseno que en realidad puede ser asignado de nuevo a nada semántica, lo que parece ser no ideal para esta situación.
  • Levenshtein Distancia - También conocido como edit distance, esto generalmente se usa sólo en el nivel de señal individuales (palabras, bigramas, etc ...). En general, no recomendaría este indicador, ya que no sólo desecha cualquier información semántica, sino que también tiende a tratar muy diferentes alteraciones de palabras muy similar, pero es una métrica muy común para este tipo de cosas
  • LSA - ¿Es una parte de un gran arsenal de técnicas cuando se trata de evaluar la similitud documento denominado topic modeling. LSA ha pasado de moda bastante recientemente, y en mi experiencia, no es exactamente el enfoque más fuerte tema de modelado, pero es relativamente sencillo de implementar y tiene algunas implementaciones de código abierto
  • LDA - ¿Es también una técnica utilizada para topic modeling, pero es diferente de LSA ya que en realidad se entera de que las representaciones internas tienden a ser más fácil e intuitiva. En general, los resultados que obtiene de LDA son mejores para el modelado de similitud de documentos que LSA, pero no es tan bueno para aprender a discriminar fuertemente entre los temas.
  • Asignación Pachinko - ¿Es una extensión muy ordenado en la parte superior de LDA. En general, esto es sólo una versión mejorada significativamente de LDA, siendo el único inconveniente de que se necesita un poco más de tiempo para entrenar y de código abierto implementaciones son un poco más difíciles de conseguir
  • word2vec - Google ha estado trabajando en una serie de técnicas para reducir de forma inteligente las palabras y los documentos a los vectores más razonables que los vectores de escaso produjeron mediante técnicas tales como Count Vectorizers y TF-IDF. Word2vec es grande, ya que tiene una serie de implementaciones de código abierto. Una vez que tenga el vector, cualquier otra métrica de similitud (como la distancia del coseno) puede ser utilizado en la parte superior de la misma con bastante más eficacia.
  • doc2vec - También conocido como paragraph vectors, esta es la última y mejor en una serie de documentos por parte de Google , mirando en representaciones vectoriales densas de documentos. La biblioteca gensim en Python tiene una implementación de word2vec que es lo suficientemente sencillo que puede ser aprovechado bastante razonable para construir doc2vec, pero asegúrese de mantener la licencia en cuenta si se quiere ir por este camino

Espero que ayude, que me haga saber si tienes alguna pregunta.

Otros consejos

Hay una serie de medidas de distancia semántica, cada uno con sus ventajas y desventajas. Éstos son sólo algunos de ellos:

  • distancia coseno , producto interno entre los vectores de características de documentos;
  • LSA , otro modelo basado en el vector, pero SVD utilizando para el original y eliminación de ruido término matriz-documento;
  • WordNet basado, humana verificada, aunque difícilmente extensible.

Comenzar con un enfoque más sencillo y luego pasar basa además en cuestiones para su caso específico.

Empíricamente he encontrado LSA muy superior a LDA cada vez y en cada conjunto de datos que he probado en. He hablado con otras personas que han dicho lo mismo. También se ha utilizado para ganar una serie de competiciones SemEval para medir la similitud semántica entre documentos, a menudo en combinación con una medida basada wordnet, así que no diría que está pasando de moda, o es sin duda inferior a LDA, que es mejor para el modelado tema y la similitud semántica no en mi experiencia, contrariamente a lo que algunos han afirmado que respondieron.

Si utiliza gensim (una biblioteca de Python), que tiene LSA, LDA y word2vec, por lo que puede comparar fácilmente los 3. doc2vec es una idea genial, pero no escala muy bien y es probable que tendrá que aplicar por sí mismo como estoy al tanto de ninguna implementaciones de código abierto. No escala así como para cada documento, una nueva y separada modelo tiene que ser construido usando SGD, un algoritmo de aprendizaje automático lento. Pero probablemente le dará los resultados más precisos. BAE y LDA también no se escalan bien (word2vec hace sin embargo), LDA escalas peor en general. implementaciones de Gensim son muy rápidos sin embargo, ya que utiliza SVD iterativo.

Una nota aparte, si se utiliza word2vec, todavía se tendrá que determinar una forma de vectores de redacción de documentos, ya que le da un vector diferente por palabra. La forma más sencilla de hacer esto es para normalizar cada vector y tomar la media sobre todos los vectores de palabras en el documento, o tomar una media ponderada por ponderación IDF de cada palabra. Así que no es tan simple como 'uso word2vec', tendrá que hacer algo más de similitud de documentos de cálculo.

Yo personalmente iría con LSA, como he visto que funciona bien empíricamente, y las escalas de la biblioteca de gensim muy bien. Sin embargo, no hay almuerzo gratis, a fin de tratar de preferencia cada método y ver lo que funciona mejor para sus datos.

Estado de la técnica parece ser "vectores de párrafo" introducidos en un artículo reciente: http: //cs.stanford.edu/~quocle/paragraph_vector.pdf. Coseno / distancia euclídea entre vectores párrafo probable que funcionaría mejor que cualquier otro enfoque. Esto probablemente no es factible sin embargo, debido a la falta de implementaciones de código abierto.

Lo más parecido es la distancia entre los vectores del coseno LSA o coseno distancia entre los vectores BOW primas. A veces funciona mejor elegir diferentes esquemas de ponderación, como TF-IDF.

Es útil tener en que la bolsa de herramientas de la familia de localidad hash sensibles algoritmos . Esta familia no es semántica en absoluto. En realidad es considerar el texto como una secuencia de bits. Me resulta útil en conjuntos de datos sucios cuando el mismo texto aparece muchas veces con ligeras diferencias.

Se puede usar ssdeep (que se basa en Nilsimsa de hash ) para identificar dichos documentos. Ssdeep fue planeada originalmente para el dominio de correo no deseado. Los spammers suelen hacer pequeños cambios en el mensaje (añadir un espacio) con el fin de evitar la detección por la firma exacta (por ejemplo, md5 ).

Dado que muchos versión de casi el mismo documento en el mismo conjunto de datos causará estragos en métodos estadísticos que serán aplicadas en él, haciendo una limpieza tal puede ser muy beneficioso.

Licenciado bajo: CC-BY-SA con atribución
scroll top