¿Existen motores / algoritmos que puedan equiparar el significado de dos oraciones?

El análisis semántico latente (LSA) y la indexación aleatoria (RI) son dos métodos diferentes que pueden usarse para tratar de identificar los conceptos clave en una oración y, en última instancia, intentar compararlo con otra oración.

Lo que haría en ambos métodos es crear una firma única para cada oración. Esa firma única se compararía con firmas únicas de otras oraciones mediante una simple medida de similitud, como la similitud del coseno, para determinar qué tan semánticamente relacionadas están.

De estos dos métodos, es probable que el análisis semántico latente sea más preciso para textos breves, pero la indexación aleatoria será mucho menos intensiva computacionalmente. En aras de la simplicidad, describiré solo el proceso general del análisis semántico latente:

1. Toma un corpus de oraciones grandes y crea una matriz de documentos a término.

2. Descompone la matriz y trunca los valores singulares.

3. Multiplique los vectores del documento por la matriz diagonal y luego compárelos para obtener similitud.

Este proceso esencialmente encontrará relaciones entre palabras y luego lo representará en el vector del documento. Digamos que si una oración es “fui a la tienda”, entonces los valores en la matriz de términos y documentos para esa oración serán 1 para cada una de las palabras i, fui, a, y comprar, porque cada una de esas palabras aparece una vez cada uno en la oración. Después de descomponer la matriz de término-documento y truncar los valores singulares, si reconstruye la matriz, en función de las relaciones que se encontraron, el vector de documento ahora podría tener un valor de .25 para “almacenar”, que estaría relacionado con “comprar” , y .1 para “ir”, que está relacionado con “fue”.

Esto permite una comparación semánticamente más relevante con otras oraciones. Sin embargo, LSA se basa en un gran corpus de entrada para la precisión, y puede ser bastante lento para descomponer la matriz.

Puede encontrar un buen artículo sobre LSA en http://lsa.colorado.edu/papers/d…, y un buen artículo sobre indexación aleatoria en http://www.idi.ntnu.no/~gamback/ …

La tarea se puede dividir en cinco partes.

  • Analizar la oración y llenar la plantilla del marco del verbo: – Identificar sujeto, objeto, frase verbal y componentes adicionales de la oración, y llenar la plantilla. Puede usar analizador de dependencias o herramientas de etiquetado de rol semántico para eso.
  • Identifique el género de la oración: – Necesita identificar qué tipo de oración es. La oración meteorológica es orden, solicitud, declaración, etc. Puede usar el clasificador para identificar el tipo de oración. Por ejemplo, las tres oraciones “¿Puedo obtener un poco de agua?”, “Tengo ganas de beber agua”, “¿Puedo obtener un poco de agua” son solicitudes y la oración base también es una solicitud. Por lo tanto, debe generar una oración objetivo del mismo género / tipo.
  • Reemplazar sujeto, objeto, frase verbal con sus sinónimos: – Esta es la fase más difícil. Debe reemplazar sujeto, objeto o frase verbal con sus sinónimos. Puede crear una lista de sinónimos o utilizar recursos como word net ( http://wordnet.princeton.edu/ ).
  • Generación de oraciones: – Necesita generar oraciones a partir de una plantilla modificada / marco de verbo usando la generación de lenguaje natural ( http://en.wikipedia.org/wiki/Nat …)
  • Filtrar instancias incorrectas: – Necesita filtrar instancias incorrectas de la lista de la lista generada.

Hay varias formas de hacerlo. Una forma es realizada por un motor de relevancia semántica que mi compañía lanzó recientemente. Puedes probar una demostración aquí http://roistr.com/planned_cats pero tengo que advertirte: es solo una versión alfa / sigilosa y no funciona bien con frases tan cortas (esto es algo en lo que estamos trabajando). Cuanto más largo y complejo sea cada “documento”, mejor será el resultado que obtendrá.

Utiliza una combinación de métodos (análisis semántico latente, asignación de dirichlet latente, algunas cosas de Wordnet y similares). El resultado neto es (generalmente) una forma de entender la similitud entre 2 o más documentos.

Puede comparar una serie de documentos con uno (o más) otros y los resultados son la similitud semántica entre los 2 documentos (0.0 – 1.0: 0.0 = sin coincidencia, 1.0 = coincidencia perfecta) y el orden de clasificación de cada documento comparado.

Por cierto, si puede pensar en mejores demostraciones para mostrar cuán útil es comprender la similitud semántica, personalmente me gustaría escuchar sobre ellas y estar muy agradecido.