Cómo le enseñamos a Yandex a responder preguntas y ahorrar a los usuarios 20 mil horas al día



Cuando ingresamos una consulta en la barra de búsqueda, buscamos información, no enlaces. Además, a menudo necesitamos una oración corta o un hecho bien conocido. Por ejemplo, [la fórmula para el volumen de la pirámide truncada ] es la misma en todos los sitios: no se necesitan enlaces, solo responda.

Nadie puede sorprender a nadie con respuestas objetivas (informativas), pero pocas personas saben cómo se forman, cómo difieren y qué ha sucedido recientemente en esta área. Me llamo Anton Ivanov. Hoy, junto con mi colega Mikhail AgeevdminerContaremos la historia de las respuestas en la búsqueda y compartiremos algunos de los detalles de los que no hemos hablado antes. Espero que sea de ayuda.

La historia de Internet es la historia de simplificar la búsqueda de información. Érase una vez, las personas visitaron los catálogos en línea para encontrar respuestas donde los enlaces a sitios se agruparon por tema. Con el tiempo, aparecieron los motores de búsqueda, aprendieron a buscar sitios por palabras clave. La demanda de una búsqueda rápida de información estimuló el desarrollo de la tecnología: una búsqueda de palabras evolucionó gradualmente en una búsqueda por significado, cuando la respuesta se podía encontrar en una página con intersección cero por palabras clave. Pero incluso en este caso, tuve que hacer clic en los enlaces. La gente siempre ha soñado con más.

Primeros hechos


Ahora es difícil recordar cómo comenzaron las respuestas fácticas de Yandex. Podemos decir que la solución fue un formato especial del hechicero, que supone una respuesta de texto breve sin interactividad (en lugar de responder a las solicitudes [ mi dirección IP ] o [ color aqua ]). Como saben, implementar dicho formato no es difícil. La pregunta principal es diferente: ¿dónde obtener las respuestas?



Comenzamos con la forma técnica más fácil. Personas especiales (asesores) analizaron las consultas más populares, eligieron aquellas para las que puede encontrar una respuesta breve. Un ejemplo clásico de tal consulta es [ cuántas patas tiene una mosca ].



De esta manera, era posible cubrir solo las consultas más populares, y se ignoraba la larga cola de otras consultas. En parte, resolvimos este problema con la ayuda del crowdsourcing.

Hace unos años, los tolokers comenzaron a ayudarnos a reponer la base de datos de respuestas fácticas. Las solicitudes frecuentes se cargaron en la plataforma, los trabajadores vieron la tarea: “¿Es cierto que puede dar una respuesta exhaustiva a esta solicitud? Y si es verdad, entonces dáselo ”. Por supuesto, otros tolokers verificaron la adecuación de las respuestas, y descubrimos los errores con la ayuda de un guardia de búsqueda . Por cierto, los tolokers también nos ayudaron a descubrir que las respuestas reales con una imagen generalmente son del agrado de los usuarios más que solo texto.

La ayuda de los tolokers es significativa, pero incluso ellos no ayudarán a cubrir la larga cola de las consultas de baja frecuencia. Simplemente hay demasiadas solicitudes de este tipo para un marcado manual: ¡no hay decenas de miles, sino millones! Para resolver este problema, la experiencia de clasificación de búsqueda nos fue útil.

Fragmento de hecho


Cuando busca algo en la búsqueda de Yandex, ve no solo 10 enlaces, sino también un título, descripción, icono y otros datos.

Nos centramos en la descripción. Nuestra búsqueda lo crea automáticamente. Para resaltar el mejor fragmento de texto, se utiliza el modelo ligero CatBoost, que estima la proximidad de un fragmento de texto y una solicitud. Resulta que las descripciones de enlaces a veces ya contienen respuestas objetivas. Sería extraño no aprovechar esto, pero no tan simple.

Puede parecer que la tarea se reduce a elegir la descripción "más objetiva" entre todas las descripciones de páginas encontradas a pedido, pero este enfoque no funcionará bien. La razón es que la descripción informativa de la página no siempre coincide con una buena respuesta a la pregunta directa de una persona. Por lo tanto, nuestra tecnología Fact Snippet crea hechos en paralelo con las descripciones de las páginas, pero se basa en otros parámetros para que el resultado sea similar a la respuesta. Y ahora, entre ellos, debe elegir la respuesta de mayor calidad.

Ya le dijimosen Habré sobre algoritmos de búsqueda "Palekh", "Korolev" y sobre el enfoque DSSM. La tarea se redujo a encontrar textos que tenían un significado cercano al clasificar las páginas. De hecho, comparamos dos vectores: el vector de consulta y el vector de texto del documento. Cuanto más cerca están estos vectores en el espacio multidimensional, más cerca están los significados de los textos. Para elegir los hechos de mejor calidad, hicimos lo mismo. Nuestro modelo de red neuronal, capacitado en las respuestas que ya conocemos, crea vectores de respuesta para las páginas encontradas en la búsqueda y los compara con el vector de consulta. Entonces obtenemos la mejor respuesta.

Está claro que responder a todas las solicitudes de esta manera no vale la pena: la mayoría de las solicitudes no requieren una respuesta objetiva. Por lo tanto, utilizamos otro modelo para descartar solicitudes "no fácticas".

Fact Snippet 2.0


Todo lo que mencionamos anteriormente se refería a respuestas fácticas "clásicas": cortas, completas, como en la enciclopedia. Esta dirección ha sido durante mucho tiempo la única. Pero cuanto más lejos, más vimos que la división sobre la base de la existencia de una respuesta exhaustiva, por un lado, es muy inestable y, por el otro, opaca para el usuario: solo necesita resolver su problema más rápido. Me llevó ir más allá de los hechos habituales. Entonces apareció el proyecto Fact Snippet 2.0.



Para simplificar las cosas, Fact Snippet 2.0 es el mismo Fact Snippet, pero sin el requisito de encontrar una "respuesta integral". De hecho, todo es algo más complicado.

Déjame recordarte que Fact Snippet funciona en dos etapas. En la primera etapa, utilizando un modelo fácil, evaluamos la "naturaleza objetiva" de la solicitud: ¿significa una respuesta objetiva o no? En caso afirmativo, en la segunda etapa estamos buscando una respuesta, que aparece en los resultados de búsqueda. Para Fact Snippet 2.0, adaptamos ambos pasos para encontrar respuestas a una gama más amplia de preguntas. Tales respuestas no pretenden ser enciclopédicas en su totalidad, pero siguen siendo útiles.

Es posible, pero no siempre necesario, seleccionar un párrafo de texto para cualquier solicitud. A veces los textos encontrados no son lo suficientemente relevantes para la consulta. A veces ya tenemos buenas respuestas de otras fuentes, y tenemos que decidir cuál elegir. Por ejemplo, ¿por qué ofrecer la dirección de la organización en texto si puede mostrar un mapa interactivo, número de teléfono y comentarios? Resolvemos este problema con la ayuda de un clasificador blender, con el que Andrei Styskin ya conocía a los lectores de Habr . Y la respuesta no debe ser grosera, insultante. Casi todas estas restricciones razonables tienen su propio clasificador, y hacer que funcione en tiempo de ejecución en una fracción de segundo es otra misión.

Reformulaciones de consultas


Cubrieron otra parte de la larga cola, pero muchas solicitudes "únicas" quedaron atrás. Una proporción significativa de ellos son otras formulaciones de consultas que ya conocemos. Por ejemplo, [ cuando un lucio cambia los dientes ] y [a qué hora el lucio cambia los dientes ] son ​​casi lo mismo.



Para resolver este problema, se nos ocurrió un mecanismo que sobre la marcha comprende que la solicitud entrante es un alias (significa lo mismo) de otra solicitud, la respuesta a la que ya tenemos. Esto es más fácil y rápido que generar independientemente dos respuestas objetivas.

Tomamos todas las solicitudes para las que hay respuestas, las convertimos en vectores y las colocamos en el índice k-NN (más precisamente, en su versión optimizada de HNSWque te permite buscar mucho más rápido). A continuación, construimos vectores de consulta para los que no hay respuesta por coincidencia directa, y buscamos las N consultas más similares en nuestra k-NN.

A continuación, vamos a través de esta parte superior y ejecutamos el clasificador katbust del triple:

- solicitud del usuario;
- solicitud de k-NN;
- respuesta a una solicitud de k-NN.

Si el verificador verificador es positivo, la solicitud se considera un alias de la solicitud de k-NN, podemos devolver la respuesta ya conocida.

La parte creativa principal de este diseño es escribir factores para el clasificador. Aquí probamos muchas ideas diferentes. Entre los factores más fuertes:

- vectores de consulta;
- Levenshtein distancias;
- incrustaciones palabra por palabra;
- factores basados ​​en una variedad de hechiceros para cada una de las solicitudes;
- distancia entre palabras de consulta.

Por separado, hablaré sobre un truco usando la red neuronal BERT. Tenemos restricciones bastante fuertes en el tiempo para buscar un alias: un máximo de unos pocos milisegundos. Es imposible realizar BERT en ese momento con una carga de varios miles de RPS en los recursos actuales. Por lo tanto, con nuestro modelo BERT recolectamos una gran cantidad (cientos de millones) de estimaciones artificiales y capacitamos en ellas una red neuronal DSSM más simple, que funciona muy rápido en tiempo de ejecución. Como resultado, con cierta pérdida de precisión, se obtuvo un factor fuerte.

De hecho, se puede determinar la proximidad semántica de las solicitudes de otras maneras. Por ejemplo, si dos consultas difieren entre sí en una palabra, compruebe cómo difieren los resultados de búsqueda para estas consultas (observe el número de enlaces coincidentes en la parte superior). Si repite esto millones de veces y promedia los resultados, obtendrá una estimación bastante buena de cuánto cambia el significado de la consulta si cambia una palabra por otra en ella. Después de eso, puede agregar todos los datos en una estructura (por ejemplo, trie) y calcular la medida de la proximidad de las consultas a través de la distancia generalizada de Levenshtein. Puede ampliar este enfoque y considerar no solo las palabras, sino también los pares de palabras (pero el trie se obtiene mucho más debido al crecimiento exponencial de los datos).

Que sigue


Según nuestras estimaciones, gracias a las respuestas objetivas / informativas, ahorramos a los usuarios 20 mil horas todos los días, ya que no tienen que mirar a través de los enlaces en los resultados de búsqueda (y esto no cuenta el tiempo que dedicarían a encontrar una respuesta en los sitios). Esto es bueno, pero siempre hay espacio para crecer. Por ejemplo, ahora usamos el texto que encontramos en Internet para obtener respuestas, pero el texto terminado no siempre se puede encontrar en un lugar o en la forma correcta. Con la ayuda de las redes neuronales se puede resolver este problema: generar una respuesta para que coincida con la solicitud y no contenga innecesaria. Este es nuestro proyecto de búsqueda de neurosummarización, del cual, espero, hablaremos la próxima vez.

All Articles