¿Qué algoritmos se pueden usar para determinar si dos preguntas (como las de Quora) son de alguna manera similares?

Siento que la representación del Análisis Semántico Explícito de las preguntas dará la descripción más cercana a la noción humana de similitud. Como ya se mencionó en respuestas anteriores, las similitudes simples basadas en palabras no dan las nociones correctas de similitud. Entonces un simple algo puede ser: –

  1. Elimine las palabras vacías en la pregunta y tome las palabras necesarias.
  2. Suponga que el número de palabras únicas en ambas preguntas es n. Por lo tanto, cada pregunta se puede representar como un vector binario n-dim / tf-idf.
  3. Para cada palabra, expréselo como un vector de páginas de wikipedia, es decir, si la palabra aparece entonces 1 más 0. También puede ser un peso tf-idf del término wrt en las páginas de wikipedia, lo que podría dar mejores pesos para los términos. Entonces, suponiendo que el número de páginas de Wikipedia sea N, obtienes una matriz n-por-N.
  4. Multiplique cada uno de los vectores de preguntas en esta matriz para obtener una representación 1 por N de la pregunta proyectada en el espacio wiki.
  5. Para estas representaciones se puede usar la similitud coseno / Jaccard.

    Así que estoy ignorando los diversos problemas de estructura de datos y complejidad que surgirán con este algoritmo. La idea de ESA se toma de este sitio que contiene el código también (Análisis semántico explícito).

Con el modelo de espacio vectorial (y medidas de similitud como coseno u okapi) o medidas de distancia (como Jaccard), el problema es que dos preguntas pueden ser similares por términos, pero muy diferentes por significado. Por ejemplo: “Cuánto dura el gran arrecife” tendrá una similitud exacta con “Qué tan grande es el largo arrecife”.

Puede ser, con algunas preguntas como las de Quora, debería ser bueno introducir en el algoritmo una evaluación de las relaciones entre palabras (lógica de predicado) dentro de la oración, para evitar tales interpretaciones erróneas de similitud debido a preocupaciones léxicas. Por ejemplo, con una DRT (teoría de la representación del discurso) como representación.

Puede echar un vistazo a los clasificadores creados para la tarea compartida CoNLL 2008 y 2009 (“roles sintácticos” y “dependencias semánticas”) para encontrar documentos y clasificadores creados para generar tales anotaciones semánticas.

Es posible que desee una expansión del núcleo. Aquí hay una idea llamada núcleo de Wikipedia. proyectar toda la Wikipedia en un espacio de Hilbert (por ejemplo, dimensión 10 ^ 8)
Luego cree un índice invertido usando Lucene, o simplemente use el cuadro de búsqueda de Wikipedia. O usa Google. Para cada pregunta, recopile los mejores resultados de N. Calcule la similitud de coseno en las URL resultantes.