Pregunta

aporte:frase 1, frase 2

producción:valor de similitud semántica (entre 0 y 1), o la probabilidad de que estas dos frases hablen de lo mismo

¿Fue útil?

Solución


Es posible que desee consultar este documento:

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

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

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

Saludos,

Mate.

Otros consejos

Hay una respuesta corta y larga para esto.

La respuesta corta:

Utilizar el WordNet::Paquete Perl de similitud.Si Perl no es su idioma preferido, consulte el página del proyecto WordNet en Princeton, o busque en Google una biblioteca contenedora.

La respuesta larga:

Determinar la similitud de palabras es un tema complicado y la investigación todavía está muy activa en esta área.Para calcular la similitud, necesita una representación adecuada de la significado de una palabra.Pero ¿cuál sería una representación del significado de, digamos, "silla"?De hecho, ¿qué es ¿El significado exacto de "silla"?Si piensas mucho en esto, tu mente se torcerá, 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 intentado encontrar una respuesta durante literalmente miles de años, y no se vislumbra un final.

Por lo tanto, si está interesado en explorar este problema un poco más en profundidad, le recomiendo leer 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 libros de Google.Ofrece una muy buena descripción general del estado del arte de los métodos de distribución, que utilizan estadísticas de coocurrencia de palabras para definir una medida de similitud de palabras.Sin embargo, no es probable que encuentre bibliotecas que los implementen.

Es posible que desee consultar el WordNet proyecto en la Universidad de Princeton.Una posible solución a esto sería ejecutar primero cada frase a través de una lista de palabras vacías (para eliminar palabras "comunes" como "a", "to", "the", etc.) y luego, para cada una de las palabras restantes 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 distancia podría ser algo como:la cantidad de arcos que debe atravesar en WordNet para pasar de la palabra 1 a la palabra 2.

Lo siento, esto es de un nivel bastante alto.Obviamente nunca he probado esto.Sólo un pensamiento rápido.

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

Para cualquiera que esté empezando a entender esto, sugeriría echar un vistazo a SEMILAR: http://www.semanticsimilarity.org/ .Implementan muchos de los métodos de investigación modernos 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 latente de Dirichlet (LDA), BLEU, Meteor, información mutua puntual (PMI), métodos basados ​​en dependencia, métodos optimizados basados ​​en asignación cuadrática, etc.Y los métodos de similitud funcionan en diferentes granularidades: palabra a palabra, oración a oración o textos más grandes.

Lamento desenterrar una pregunta de hace 6 años, pero como encontré esta publicación hoy, 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.Ellos ofrecen un API gratuita que proporciona acceso a la funcionalidad., para que puedas usarlo en tu propia aplicación sin tener que implementar el algoritmo tú mismo.

Una solución sencilla es utilizar el producto escalar de vectores de n-gramas de caracteres.Esto es sólido en cuanto a ordenar los cambios (que muchas métricas de distancia de edición no lo son) y captura muchos problemas relacionados con la derivación.También evita el problema de la comprensión semántica completa de la IA.

Para calcular el vector de n-gramas, simplemente elija un valor de n (digamos, 3) y convierta cada secuencia de 3 palabras en la frase en un vector.Normalice el vector a una unidad de longitud, luego tome el producto escalar de diferentes vectores para detectar similitudes.

Este enfoque ha sido descrito enJ.Mitchell y M.Lapata, “Composición en modelos distributivos de semántica”, Cognitive Science, vol.34, núm.8, págs.1388-1429, noviembre.2010., DOI 10.1111/j.1551-6709.2010.01106.x

Echarí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á darle menos importancia a palabras populares como 'y', 'o', 'el' y darle más importancia a palabras que aparecen con menos regularidad y que, por tanto, son un mejor factor de discriminación.Por ejemplo, si tienes dos oraciones:

1) El algoritmo de Smith-Waterman le brinda una medida de similitud entre dos cadenas.2) Revisamos el algoritmo de Smith-Waterman y descubrimos 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 de hecho podrían estar hablando del mismo tema.

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

Espero que esto ayude.

Intentar Servicio Sim, que proporciona un servicio para calcular la similitud de frases y palabras similares entre las n principales.

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

Echa un vistazo a http://mkusner.github.io/publications/WMD.pdf Este artículo describe un algoritmo llamado distancia Word Mover que intenta descubrir similitudes semánticas.Se basa en las puntuaciones de similitud dictadas por word2vec.La integración de esto con GoogleNews-vectors-negative300 produce resultados deseables.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top