it-swarm-es.tech

¿Existe un algoritmo que diga la similitud semántica de dos frases?

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

61
btw0

Es posible que desee revisar este documento:

Similitud de oraciones basadas en redes semánticas y estadísticas de corpus (PDF)

He implementado el algoritmo descrito. Nuestro contexto fue muy general (en realidad dos oraciones en inglés) y encontramos que el enfoque adoptado fue demasiado lento y los resultados, aunque prometedores, no son lo suficientemente buenos (o probablemente lo serán sin un esfuerzo considerable y adicional).

No da mucho contexto, por lo que no puedo recomendar esto necesariamente, pero leer el documento podría ser útil para comprender cómo abordar el problema.

Saludos,

Mate.

41
Matt Mower

Hay una respuesta corta y larga a esto.

La respuesta corta:

Use el WordNet :: Similarity Perl package . Si Perl no es el idioma de su elección, verifique página de proyecto de WordNet en Princeton, o busque una biblioteca de contenido en google.

La respuesta larga:

Determinar la similitud de Word es un tema complicado, y la investigación aún es muy importante 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 mucho sobre esto, te torcerá la mente, te volverás un poco loco 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 tratado de encontrar una respuesta durante miles de años, y no hay un final a la vista.

Entonces, si está interesado en explorar este problema un poco más a fondo, le recomiendo que lea el Capítulo 20.7 en Procesamiento del habla y el lenguaje por Jurafsky y Martin, algunos de los cuales están disponibles a través de Google Books . Ofrece una muy buena visión general del estado del arte de los métodos de distribución, que utilizan las estadísticas de co-ocurrencia de Word para definir una medida de la similitud de Word. Sin embargo, no es probable que encuentre bibliotecas implementando estas.

32
nfelger

Es posible que desee registrarse en el proyecto WordNet en la Universidad de Princeton. Un posible enfoque sería ejecutar primero cada frase a través de una lista de palabras clave (para eliminar palabras "comunes" como "a", "a", "the", etc.). En cada frase, puede calcular la "similitud" semántica entre cada una de las palabras de la otra frase utilizando una medida de distancia basada en WordNet. La medida de la 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. Sólo un pensamiento rápido.

7
Chuck Wooters

Para cualquiera que venga a esto, sugeriría echar un vistazo a SEMILAR - http://www.semanticsimilarity.org/ . Implementan muchos de los métodos modernos de investigación para calcular la similitud de 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 de Dirichlet Latente (LDA), BLEU, Meteor, Información Mutua Pointwise (PMI), Métodos basados ​​en la dependencia, Métodos optimizados basados ​​en Asignación Cuadrática, etc. Y los métodos de similitud funcionan en diferentes granularidades: Palabra a palabra, frase a frase o textos más grandes.

5
kyrenia

Me gustaría ver en la indexación semántica latente para esto. Creo que se puede crear algo similar a un índice de búsqueda de espacio vectorial, pero con términos semánticamente relacionados, es decir, tener un ángulo más pequeño entre ellos. Si aprendo más voy a publicar aquí.

5
jonfm

Perdón por desenterrar una pregunta de 6 años, pero como acabo de encontrar este post de hoy, le daré 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 un API gratuita que proporciona acceso a la funcionalidad , por lo que puede usarlo en su propia aplicación sin tener que implementar el algoritmo usted mismo.

3
Hybrid System

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

Para calcular el vector n-gramo, simplemente seleccione un valor de n (por ejemplo, 3) y haga un hash de cada secuencia de 3 palabras de 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 la similitud.

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

3
Jonathan Betz

Try SimService , que proporciona un servicio para calcular las palabras top-n similares y la similitud de frase.

2
Lushan Han

Tendría 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 con menos frecuencia y que, por lo tanto, son un factor de mejor 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 encontramos 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 realmente estar hablando del mismo tema.

Resumiendo, sugeriría que eche un vistazo a: 1) Medidas de similitud de cuerdas; 2) Métodos estadísticos;

Espero que esto ayude.

2
Gia

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

1
Rik

Eche un vistazo a http://mkusner.github.io/publications/WMD.pdf Este documento describe un algoritmo llamado distancia de movimiento de palabras que intenta descubrir la similitud semántica. Se basa en las puntuaciones de similitud dictadas por Word2vec. Al integrar esto con GoogleNews-vectors-negative300 se obtienen resultados deseables.

0
Anonymous