algorithm nlp semantics

algorithm - ¿Hay algún algoritmo que indique la similitud semántica de dos frases?



nlp semantics (11)

entrada: frase 1, frase 2

salida: valor de similitud semántica (entre 0 y 1), o la probabilidad de que estas dos frases estén hablando de lo mismo


Echaré un vistazo a las técnicas estadísticas que toman en consideración la probabilidad de que cada palabra aparezca dentro de una oración. Esto le permitirá dar menos importancia a las palabras populares como ''y'', ''o'', ''el'' y dar más importancia a las palabras que aparecen menos regurosamente, y que por lo tanto son un mejor factor de discriminación. Por ejemplo, si tienes dos oraciones:

1) El algoritmo smith-waterman le da una medida de similitud entre dos cadenas. 2) Hemos revisado el algoritmo smith-waterman y hemos encontrado que es lo suficientemente bueno para nuestro proyecto.

El hecho de que las dos oraciones compartan las palabras "smith-waterman" y las palabras "algoritmos" (que no son tan comunes como ''y'', ''o'', etc.), le permitirá decir que las dos oraciones podrían estar hablando sobre el mismo tema

Resumiendo, sugiero que eche un vistazo a: 1) Medidas de similitud de cadenas; 2) métodos estadísticos;

Espero que esto ayude.


Eche un vistazo a http://mkusner.github.io/publications/WMD.pdf Este documento describe un algoritmo llamado Word Mover distancia que intenta descubrir la similitud semántica. Se basa en los puntajes de similitud dictados por word2vec. Integrar esto con GoogleNews-vectors-negative300 produce resultados deseables.


Es posible que desee ver este documento:

Similitud de frases basada en redes semánticas y estadísticas de corpus (PDF)

Implementé el algoritmo descrito. Nuestro contexto fue muy general (de hecho, dos oraciones en inglés) y encontramos que el enfoque fue demasiado lento y los resultados, aunque prometedores, no fueron lo suficientemente buenos (o probablemente lo serían sin un esfuerzo considerable, adicional).

No le da mucho contexto, así que no necesariamente puedo recomendarlo, pero leer el documento podría serle útil para comprender cómo abordar el problema.

Saludos,

Mate.


Esto requiere que su algoritmo realmente sepa de lo que está hablando. Se puede hacer de forma rudimentaria simplemente comparando palabras y buscando sinónimos, etc., pero cualquier tipo de resultado preciso requeriría algún tipo de inteligencia.


Hay una breve y larga respuesta a esto.

La respuesta corta:

Use el paquete WordNet :: Similarity Perl . Si Perl no es su idioma de elección, consulte la página del proyecto de WordNet en Princeton, o google para obtener una biblioteca contenedora.

La respuesta larga:

La determinación de la similitud de palabras es un tema complicado, y la investigación todavía está muy caliente en esta área. Para calcular la similitud, necesita una representación adecuada del significado de una palabra. Pero, ¿cuál sería una representación del significado de, digamos, "silla"? De hecho, ¿cuál es el significado exacto de ''silla''? Si piensas detenidamente sobre esto, te costará la cabeza, te enloquecerás un poco y finalmente emprenderás una carrera de investigación en Filosofía o Lingüística Computacional para encontrar la verdad ™. Tanto los filósofos como los lingüistas han intentado encontrar una respuesta durante literalmente miles de años, y no hay final a la vista.

Por lo tanto, si está interesado en explorar este problema con más profundidad, le recomiendo leer el Capítulo 20.7 en Procesamiento del habla y el lenguaje de Jurafsky y Martin, algunos de los cuales están disponibles a través de Google Books . Ofrece una muy buena descripción del estado del arte de los métodos de distribución, que usan estadísticas de co-ocurrencia de palabras para definir una medida de similitud de palabras. Sin embargo, no es probable que encuentres bibliotecas que implementen esto.


Me gustaría investigar la indexación semántica latente para esto. Creo que puede crear algo similar a un índice de búsqueda de espacio vectorial, pero con términos semánticamente relacionados más cercanos, es decir, que tengan un ángulo menor entre ellos. Si aprendo más, lo publicaré aquí.


Para cualquiera que quiera llegar a esto, le sugiero que eche un vistazo a SEMILAR - http://www.semanticsimilarity.org/ . Implementan muchos de los métodos modernos de investigación para calcular la similitud entre palabras y oraciones. Está escrito en Java.

SEMILAR API viene con varios métodos de similitud basados ​​en Wordnet, análisis semántico latente (LSA), asignación latente de Dirichlet (LDA), BLEU, Meteor, información mutua puntual (PMI), métodos basados ​​en dependencia, métodos optimizados basados ​​en la asignación cuadrática, etc. los métodos de similitud funcionan en diferentes granularidades: palabra por palabra, oración por oración o textos más grandes.


Perdón por desenterrar una pregunta de hace 6 años, pero como acabo de encontrar esta publicación hoy, voy a arrojar una respuesta en caso de que alguien más esté buscando algo similar.

cortical.io ha desarrollado un proceso para calcular la similitud semántica de dos expresiones y tienen una demostración de ello en su sitio web . Ofrecen una API gratuita que proporciona acceso a la funcionalidad , por lo que puede usarla en su propia aplicación sin tener que implementar el algoritmo usted mismo.


Pruebe SimService , que proporciona un servicio para el cálculo de palabras y similitud de frase top-n.


Una solución simple es usar el producto de puntos de vectores n-gram de caracteres. Esto es robusto en comparación con los cambios en los pedidos (que muchas métricas de distancia de edición no) y captura muchos problemas en torno a la derivación. También previene el problema de completa comprensión semántica de AI.

Para calcular el vector n-gramo, simplemente elija un valor de n (por ejemplo, 3) y clasifique cada secuencia de 3 palabras en la frase en un vector. Normalice el vector a la longitud de la unidad, luego tome el producto de puntos de diferentes vectores para detectar similitudes.

Este enfoque ha sido descrito en J. Mitchell y M. Lapata, "Composición en modelos distribucionales de semántica", Cognitive Science, vol. 34, no. 8, pp. 1388-1429, noviembre de 2010., DOI 10.1111 / j.1551-6709.2010.01106.x


Es posible que desee registrarse en el proyecto de WordNet en la Universidad de Princeton. Un enfoque posible para esto sería ejecutar primero cada frase a través de una lista de palabras prohibidas (para eliminar palabras "comunes" como "a", "a", "la", etc.) Luego, para cada una de las palabras restantes en cada frase, puede calcular la "similitud" semántica entre cada una de las palabras en la otra frase usando una medida de distancia basada en WordNet. La medida de distancia podría ser algo así como: la cantidad de arcos que debe atravesar en WordNet para pasar de word1 a word2.

Lo siento, esto es bastante alto nivel. Obviamente nunca he intentado esto. Solo un pensamiento rápido.