2009-05-21 14 views
26

Las preguntas relacionadas que aparecen después de ingresar el título, y las que están en la barra lateral derecha cuando se ve una pregunta parecen sugerir preguntas muy acertadas.Stack Overflow Algoritmo de preguntas relacionadas

Stack Overflow solo hace una búsqueda SQL y no utiliza algoritmos especiales, dijo Spolsky en una charla.

Qué algoritmos existen para dar buenas respuestas en tal caso. ¿Cómo se puede hacer una búsqueda en la base de datos en tal caso? ¿Se puede buscar el título y buscar las palabras clave o buscar en las etiquetas y esas preguntas con muchos votos en la parte superior?

Respuesta

7

La pregunta barra lateral relacionada será la construcción de las etiquetas para cada pregunta (probablemente clasificándolos basado en la superposición de etiquetas, por lo que 5 etiquetas en común> 4 Etiquetas en común, etc.).

El resto se basará en la heurística y los algoritmos adecuados para el procesamiento del lenguaje natural. Normalmente, estos no son muy buenos en el lenguaje de uso general, pero la mayoría de ellos son MUY buenos una vez que el vocabulario se reduce a un área técnica única, como la programación.

+0

superposición de etiquetas probablemente no sea lo único involucrado; ya que la pregunta relacionada con esta pregunta no tiene ninguna etiqueta en común con esta pregunta :) –

+1

La pregunta principal (¿Hay algún algoritmo que le indique ...?) tiene la etiqueta nlp, la misma que esta pregunta y otras dos etiquetas. El siguiente que tiene nlp y 4 otras etiquetas. # 3 tiene nlp, 4 etiquetas más y menos votos positivos que # 2. Sin embargo, hay algo más, ya que el n. ° 4 tiene nlp, 3 etiquetas más y más votos ascendentes que n. ° 3, por lo que probablemente también haya procesamiento en el título :) – workmad3

6

Eche un vistazo a Porter para un algoritmo stemming si está buscando entrar en algoritmos "relacionados".

una despalilladora de Inglés, por ejemplo, debe identificar la cadena "gatos" (y posiblemente "felina", "maliciosa", etc.) como basado en la raíz "gato", y "despalilladora "," deriva "," deriva "como según" raíz ". Un algoritmo de origen reduce las palabras "pesca", "pescado", "pez" y "pescador" a la palabra raíz, "pez".

Una vez que haya procesado un documento y hecho derivando de él, puede indexar las palabras derivadas por conteo y luego compararlas con otros documentos. Este es el enfoque más básico para abordar este problema.

También tenga cuidado de no hacer caso stop words como "el", "una", "de", etc.

-1

Use la función de búsqueda de texto completo de SQL Server.

0

Tales problemas se resuelven haciendo una "bolsa de palabras" de las palabras derivadas. Eso es básicamente un vector de conteo de palabras. Esas palabras son preprocesadas (derivadas) y ponderadas con su probabilidad de ocurrir en una oración ("el" tiene una probabilidad más alta que "probabilidad" y, por lo tanto, deben ponderarse menos). Entonces puede percibir esta bolsa de palabras como un vector en el espacio euclidiano o como una muestra de una densidad de probabilidad.

Puede aplicar algoritmos como búsqueda de vecino más cercano o hash semántico. El último parece ser SOTA (ver http://www.cs.toronto.edu/~rsalakhu/papers/semantic_final.pdf).

18

Si escuchas el Stack Overflow podcast 32 (desafortunadamente la transcripción no tiene mucho) puedes escuchar a Jeff Atwood decir un poco sobre cómo lo hace.

Parece que el algoritmo es algo así como:

  • Tome la pregunta
  • Retire las palabras más comunes en Inglés (de una lista que obtuvo de Google)
  • presentar una búsqueda de texto completo de el servidor SQL 2008 texto completo motor de búsqueda

Más detalles acerca de la búsqueda de texto completo se puede encontrar aquí: http://msdn.microsoft.com/en-us/library/ms142571.aspx

Esto puede estar desactualizado ahora; estaban hablando de pasar a una búsqueda de texto completo mejor/más rápida como Lucene, y recuerdo vagamente a Jeff diciendo en el podcast que esto se había hecho.

Cuestiones relacionadas