He estado desarrollando un sitio web interno para una herramienta de gestión de cartera. Hay muchos datos de texto, nombres de compañías, etc. Me ha impresionado mucho la capacidad de algunos motores de búsqueda para responder rápidamente a las consultas con "¿Quiso decir: xxxx"?
Necesito poder tomar de forma inteligente una consulta del usuario y responder no solo con resultados de búsqueda sin formato, sino también con un "¿Quiso decir?" respuesta cuando hay una respuesta alternativa muy probable, etc.
[Estoy desarrollando en ASP.NET (VB - ¡no lo tengas en mi contra!)]
ACTUALIZACIÓN: OK, ¿cómo puedo imitar esto sin los millones de 'usuarios no remunerados'?
- ¿Generar errores tipográficos para cada término 'conocido' o 'correcto' y realizar búsquedas?
- ¿Algún otro método más elegante?
algorithm
machine-learning
nlp
spell-checking
text-search
Andrew Harry
fuente
fuente
Respuestas:
Aquí está la explicación directamente de la fuente (casi)
Buscar 101!
al mínimo 22:03
¡Vale la pena ver!
Básicamente y de acuerdo con Douglas Merrill, ex director de tecnología de Google, es así:
1) Escribe una palabra (mal escrita) en google
2) No encuentras lo que buscabas (no hagas clic en ningún resultado)
3) Te das cuenta de que escribiste mal la palabra y reescribes la palabra en el cuadro de búsqueda.
4) Encuentra lo que buscas (haces clic en los primeros enlaces)
Este patrón multiplicado millones de veces, muestra cuáles son los errores ortográficos más comunes y cuáles son las correcciones más "comunes".
De esta forma, Google puede, casi instantáneamente, ofrecer corrección ortográfica en todos los idiomas.
Esto también significa que si de la noche a la mañana todos comienzan a deletrear la noche como "noche", Google sugeriría esa palabra.
EDITAR
@ThomasRutter: Douglas lo describe como "aprendizaje automático de estadística".
Saben quién corrige la consulta, porque saben qué consulta proviene de qué usuario (usando cookies)
Si los usuarios realizan una consulta, y solo el 10% de los usuarios hacen clic en un resultado y el 90% regresa y escribe otra consulta (con la palabra corregida) y esta vez ese 90% hace clic en un resultado, entonces saben que han encontrado Una corrección.
También pueden saber si esas son consultas "relacionadas" de dos diferentes, porque tienen información de todos los enlaces que muestran.
Además, ahora están incluyendo el contexto en el corrector ortográfico, por lo que incluso pueden sugerir palabras diferentes según el contexto.
Vea esta demostración de google wave (@ 44m 06s) que muestra cómo se tiene en cuenta el contexto para corregir automáticamente la ortografía.
Aquí se explica cómo funciona el procesamiento del lenguaje natural.
Y finalmente, aquí hay una demostración impresionante de lo que se puede hacer agregando traducción automática (@ 1h 12m 47s) a la mezcla.
Agregué anclas de minutos y segundos a los videos para saltar directamente al contenido; si no funcionan, intente volver a cargar la página o desplazarse manualmente hasta la marca.
fuente
Encontré este artículo hace algún tiempo: Cómo escribir un corrector ortográfico , escrito por Peter Norvig (Director de investigación de Google Inc.).
Es una lectura interesante sobre el tema "corrección ortográfica". Los ejemplos están en Python, pero es claro y simple de entender, y creo que el algoritmo se puede traducir fácilmente a otros idiomas.
A continuación sigue una breve descripción del algoritmo. El algoritmo consta de dos pasos, preparación y verificación de palabras.
Paso 1: preparación: configuración de la base de datos de Word
Lo mejor es si puede usar palabras de búsqueda reales y su aparición. Si no tiene eso, puede usar un gran conjunto de texto en su lugar. Cuente la ocurrencia (popularidad) de cada palabra.
Paso 2. Verificación de palabras: encontrar palabras similares a la marcada
Similar significa que la distancia de edición es baja (típicamente 0-1 o 0-2). La distancia de edición es el número mínimo de inserciones / eliminaciones / cambios / intercambios necesarios para transformar una palabra en otra.
Elija la palabra más popular del paso anterior y sugiérala como una corrección (si no es la palabra en sí).
fuente
Para la teoría del algoritmo "quiso decir", puede consultar el Capítulo 3 de Introducción a la recuperación de información. Está disponible en línea de forma gratuita. La sección 3.3 (página 52) responde exactamente a su pregunta. Y para responder específicamente a su actualización, solo necesita un diccionario de palabras y nada más (incluidos millones de usuarios).
fuente
Hmm ... pensé que Google usaba su gran conjunto de datos (Internet) para hacer un serio PNL (procesamiento del lenguaje natural).
Por ejemplo, tienen tantos datos de Internet que pueden contar la cantidad de veces que ocurre una secuencia de tres palabras (conocida como trigrama ). Entonces, si ven una oración como: "concierto rosa frugr", podrían ver que tiene pocos éxitos, y luego encontrarán el "concierto rosa *" más probable en su corpus.
Sin embargo, aparentemente solo hacen una variación de lo que Davide Gualano estaba diciendo, así que definitivamente lean ese enlace. Por supuesto, Google usa todas las páginas web que conoce como un corpus, por lo que su algoritmo es particularmente efectivo.
fuente
Supongo que usan una combinación de un algoritmo de distancia de Levenshtein y la gran cantidad de datos que recopilan sobre las búsquedas que se ejecutan. Podrían extraer un conjunto de búsquedas que tengan la distancia de Levenshtein más corta desde la cadena de búsqueda ingresada, luego elegir la que tenga más resultados.
fuente
Normalmente, un corrector ortográfico de producción utiliza varias metodologías para proporcionar una sugerencia ortográfica. Algunos son:
Decida una forma de determinar si se requiere corrección ortográfica. Estos pueden incluir resultados insuficientes, resultados que no son lo suficientemente específicos o precisos (según alguna medida), etc. Luego:
Use un gran cuerpo de texto o un diccionario, donde se sepa que todos o la mayoría están escritos correctamente. Estos se encuentran fácilmente en línea, en lugares como LingPipe . Luego, para determinar la mejor sugerencia, busque una palabra que sea la coincidencia más cercana en función de varias medidas. El más intuitivo son los personajes similares. Lo que se ha demostrado a través de la investigación y la experimentación es que las coincidencias de secuencia de dos o tres caracteres funcionan mejor. (bigrams y trigrams). Para mejorar aún más los resultados, evalúe una puntuación más alta en un partido al principio o al final de la palabra. Por razones de rendimiento, indexe todas estas palabras como trigramas o bigramas, de modo que cuando realice una búsqueda, se convierta a n-gramo y busque mediante tabla hash o trie.
Utilice la heurística relacionada con posibles errores de teclado en función de la ubicación del personaje. De modo que "hwllo" debería ser "hola" porque 'w' está cerca de 'e'.
Use una tecla fonética (Soundex, Metaphone) para indexar las palabras y buscar posibles correcciones. En la práctica, esto normalmente arroja peores resultados que el uso de la indexación de n-gram, como se describió anteriormente.
En cada caso, debe seleccionar la mejor corrección de una lista. Esta puede ser una métrica de distancia, como levenshtein, la métrica del teclado, etc.
Para una frase de varias palabras, solo una palabra puede estar mal escrita, en cuyo caso puede usar las palabras restantes como contexto para determinar una mejor coincidencia.
fuente
Use la distancia de Levenshtein , luego cree un árbol métrico (o árbol delgado) para indexar palabras. Luego ejecute una consulta de 1 vecino más cercano y obtendrá el resultado.
fuente
Al parecer, Google sugiere consultas con mejores resultados, no con las que están escritas correctamente. Pero en este caso, probablemente un corrector ortográfico sería más factible. Por supuesto, podría almacenar algún valor para cada consulta, en función de alguna métrica de los buenos resultados que devuelve.
Entonces,
Necesita un diccionario (inglés o basado en sus datos)
Genere una palabra enrejada y calcule las probabilidades para las transiciones usando su diccionario.
Agregue un decodificador para calcular la distancia mínima de error usando su enrejado. Por supuesto, debe tener cuidado con las inserciones y eliminaciones al calcular distancias. Lo divertido es que el teclado QWERTY maximiza la distancia si presionas las teclas una cerca de la otra (cae cae al carro, cay gira al gato)
Devuelve la palabra que tiene la distancia mínima.
Luego, podría compararlo con su base de datos de consultas y verificar si hay mejores resultados para otras coincidencias cercanas.
fuente
Aquí está la mejor respuesta que encontré , el corrector ortográfico implementado y descrito por el Director de Investigación de Google, Peter Norvig.
Si quieres leer más sobre la teoría detrás de esto, puedes leer el capítulo de su libro .
La idea de este algoritmo se basa en el aprendizaje automático estadístico.
fuente
Vi algo sobre esto hace unos años, por lo que puede haber cambiado desde entonces, pero aparentemente lo comenzaron analizando sus registros para los mismos usuarios que enviaron consultas muy similares en un corto espacio de tiempo, y utilizaron el aprendizaje automático en función de cómo los usuarios habían corregido sí mismos.
fuente
Como una suposición ... podría
Podría ser algo de AI como la red Hopfield o la red de propagación inversa, o algo más que "identifique huellas digitales", restaure datos rotos o corrija la ortografía como ya mencionó Davide ...
fuente
Simple. Tienen toneladas de datos. Tienen estadísticas para cada término posible, en función de la frecuencia con la que se consulta, y qué variaciones de la misma generalmente producen resultados en los que los usuarios hacen clic ... así que, cuando ven que escribiste un error ortográfico frecuente para un término de búsqueda, continúan y proponen La respuesta más habitual.
En realidad, si el error ortográfico es el término buscado más frecuente, el algoritmo lo tomará como el correcto.
fuente
con respecto a su pregunta sobre cómo imitar el comportamiento sin tener toneladas de datos, ¿por qué no usar toneladas de datos recopilados por google? Descargue los resultados de Google Sarch para la palabra mal escrita y busque "Quiso decir:" en el HTML.
Supongo que eso se llama mashup hoy en día :-)
fuente
Además de las respuestas anteriores, en caso de que desee implementar algo usted mismo rápidamente, aquí hay una sugerencia:
Algoritmo
Puede encontrar la implementación y la documentación detallada de este algoritmo en GitHub .
fuente
¿Quieres decir corrector ortográfico? Si se trata de un corrector ortográfico en lugar de una frase completa, entonces tengo un enlace sobre la corrección ortográfica donde se desarrolla el algoritmo en Python. Mira este enlace
Mientras tanto, también estoy trabajando en un proyecto que incluye la búsqueda de bases de datos utilizando texto. Supongo que esto resolvería tu problema
fuente
Esta es una vieja pregunta, y me sorprende que nadie sugirió el OP usando Apache Solr.
Apache Solr es un motor de búsqueda de texto completo que, además de muchas otras funciones, también proporciona correcciones ortográficas o sugerencias de consulta. De la documentación :
fuente
Existe una estructura de datos específica, el árbol de búsqueda ternario , que naturalmente admite coincidencias parciales y coincidencias cercanas al vecino.
fuente
La forma más fácil de resolverlo es mediante la programación dinámica de Google.
Es un algoritmo que se ha tomado prestado de Recuperación de información y se usa mucho en la bioinformática moderna para ver cuán similares son dos secuencias de genes.
La solución óptima utiliza programación dinámica y recursividad.
Este es un problema muy resuelto con muchas soluciones. Simplemente busque en Google hasta que encuentre algún código fuente abierto.
fuente