¿Cómo predecimos el futuro en la búsqueda de Yandex: desde correcciones de errores hasta consultas de descubrimiento?

Las personas no siempre formulan con precisión sus consultas, por lo que los motores de búsqueda deberían ayudarles con esto. Mi nombre es Sergey Yudin, lidero un grupo de análisis de funcionalidad de búsqueda en Yandex. Todos los días mejoramos algo a través del aprendizaje automático. El año pasado, hemos estado desarrollando tecnología que prevé intereses humanos.

Con una experta de mi equipo Anastasia GaidashenkoavgaydashenkoLes diré a los lectores de Habr cómo funciona esta tecnología, describiré la arquitectura y los algoritmos aplicados. También aprenderá cómo la predicción de la próxima solicitud difiere de la predicción de futuros intereses humanos.



¿Qué quiere el usuario?


Veamos cómo las tecnologías Yandex ayudan a resolver problemas, usando el ejemplo de un usuario imaginario. Supongamos que imprime "guardar ticket" en el cuadro de búsqueda. ¿Qué quiere encontrar? Para aprender sobre la acumulación de boletos, ¿o simplemente estaba equivocado?



Sí, estaba sellado. Él no quiere ahorrar, sino comprar un boleto. Yandex lo entendió, el tutor lo ayudó en esto : un sistema que corrige las solicitudes ingresadas incorrectamente . Matemáticamente, este sistema maximiza la probabilidad de una consulta ingresada correctamente, siempre que el usuario ingrese el texto. Este problema se ha resuelto en Yandex durante más de diez años. Y no solo en la búsqueda.

Entonces, nuestro usuario imaginario ingresó la solicitud "comprar un boleto". En este punto, entra en juego un sjest.(o sugerencias de búsqueda). Sajest ayuda al usuario a formular la solicitud, para completarla correctamente.



Nuestro más sajest ha recorrido un largo camino. Hace un par de años, complicamos la tarea. Quería mostrar no solo la finalización más lógica de la solicitud, sino también predecir qué solicitud ingresaría este usuario en particular al final y comenzaría su entrega antes del clic. Si está interesado en cómo funciona esto, puede mirar a Habré .

Nuestro usuario imaginario selecciona el final de la solicitud a partir de una serie de consejos: resulta que estaba buscando entradas para la Galería Tretyakov. Por lo tanto, el sistema de recomendaciones completó su primera tarea: ayudó al usuario a formular una solicitud .

Esta tarea se ha completado, pero el usuario aún tiene preguntas. ¿Qué buscará después? ¿Quizás quiere saber cómo llegar a la galería? Sí, imprime Lavrushinsky por 10 para verificar la dirección.



¿Podemos predecir esta solicitud? Si. Y hemos estado haciendo esto por bastante tiempo. Existe un bloqueo de este tipo: "También se preguntó" al final del problema. Muestra las consultas que las personas suelen hacer después de ingresar en el campo de búsqueda. Es allí donde veremos nuestra solicitud con la dirección de la Galería Tretyakov.



Maximizamos la probabilidad de una solicitud sujeta a una solicitud del usuario anterior. El sistema completó la segunda tarea: predijo la siguiente solicitud .

Y luego sucede algo muy interesante. El usuario imprime la solicitud "cuándo puedo visitar la Galería Tretyakov de forma gratuita". Esta solicitud es diferente del resto, se ejecuta en contra de la tarea del usuario, resuelve algunas tareas ortogonales.



Pero pensemos: si estuviéramos buscando entradas para la galería, ¿qué nos gustaría ver como recomendación? A un gran número de personas les gustaría saber que un boleto puede no ser necesario comprar. Esta es la tercera parte más difícil e interesante de la tarea: recomendar algo nuevo y útil para el usuario. Algo en lo que él mismo no había pensado todavía.

Llamamos a tales solicitudes descubrimiento. Aprendemos a identificarlos en nuestros registros de búsqueda, guardarlos y recomendarlos al final del problema. Y esta es precisamente la nueva y revolucionaria tarea en la que estamos trabajando activamente ahora. Para una persona que compra palos escandinavos, Yandex puede recomendar una solicitud sobre cómo recogerlos por altura. Si una persona viaja con frecuencia, entonces tal vez le interese la consulta de búsqueda "a dónde ir sin una visa". Etc.



La formulación matemática del problema en este caso se verá así: no maximizamos la probabilidad de la próxima solicitud, sino la probabilidad de hacer clic en la solicitud, que recomendamos al usuario en función de su sesión anterior.

¿Cómo funciona?


Veamos cómo se implementa nuestro sistema de recomendaciones, qué arquitectura se esconde detrás de él. Pero, para comenzar, determinaremos lo que generalmente queremos obtener del sistema de recomendaciones.

1. Recomendaciones útiles! Por supuesto, queremos que las solicitudes que recomendamos al usuario se adapten a sus intereses. Deben ser útiles y relevantes.

2. Escalabilidad. Esperamos que el sistema sea bueno: habrá más y más usuarios y la cantidad de solicitudes aumentará. Y queremos aumentar la cobertura para aquellos en los que podemos hacer recomendaciones.

3. Facilidad de implementación.Asumimos que nuestro sistema seguirá funcionando, y no queremos reescribirlo muchas veces. El sistema debería ser fácil de implementar, para que luego podamos mejorarlo, no lanzando una nueva versión, sino mejorando la actual.

Habiendo decidido nuestros deseos, veamos cómo puedes hacerlos realidad.

Tenemos alguna base de datos de descubrimiento, una base de datos de consultas que puede parecer interesante y útil para nuestros usuarios. Pero si comenzamos a clasificar toda esta base, no tendremos suficiente potencia informática. Los usuarios tienen muchas solicitudes, son diversas, por lo que primero debemos filtrar esta base de datos.



El filtrado puede hacerse por diferentes métodos. En Yandex, usamos kNN (k-vecinos más cercanos) para esto- El algoritmo de clasificación básico en aprendizaje automático, conocido como la "búsqueda de vecino más cercano". Con este algoritmo, queremos filtrar la base de datos: seleccione las consultas más cercanas a lo que pueda interesar al usuario. Para hacer esto, queremos comparar la solicitud del usuario y las solicitudes que estamos listos para recomendar en el espacio vectorial.

Pero para llevar estas solicitudes a un espacio vectorial, también tenemos que encontrar algo. Por ejemplo, puede usar DSSM (Modelo semántico estructurado profundo), un tipo de cuadro negro que puede traducir diferentes entidades en un espacio vectorial. Inicialmente, este enfoque fue propuesto en un artículo de Microsoft. Pero Yandex ya lo ha adaptado con bastante fuerza para sus tareas y se ha alejado mucho de la idea original. Si está interesado en leer más sobre esto, la información se puede encontrar, por ejemplo, en el artículo sobre el algoritmo de búsqueda de Palekh .



El siguiente paso es la clasificación. Cuando tenemos una lista de solicitudes que están cerca de lo que podría interesar al usuario, queremos entender qué será más interesante para él y qué es menos.

Por ejemplo, seleccionamos 100 consultas. Es poco probable que el usuario desplace los 100. Debe seleccionar los 5 mejores y recomendarlo. Para hacer esto, asignamos calificaciones a nuestras solicitudes. Obtenemos estas estimaciones en función de la probabilidad de hacer clic en una solicitud que recomendamos al usuario en función de su sesión anterior.

¿Cómo obtenemos la probabilidad del siguiente clic? Nuestro sistema ya está en funcionamiento, por lo que simplemente recopilamos comentarios de los usuarios y, por lo tanto, mejoramos gradualmente nuestro sistema de recomendaciones.



Ahora que hemos revisado todos los pasos por separado, volvamos al principio y armémoslo todo. Total: el usuario nos llega con alguna solicitud, y tenemos algún tipo de base de recomendaciones. Tomamos esta base de datos y la filtramos, recibiendo solicitudes que queremos organizar y recomendar al usuario.



Ahora recuerde que generalmente formulamos deseos para nuestro sistema de recomendaciones. Y veamos cómo podemos implementarlos en la arquitectura resultante.

Por ejemplo, queríamos escalabilidad en términos de mejorar la base. Nuestro método de implementación tiene todas las propiedades necesarias para tal escalamiento. No debemos mantener toda la base en la memoria: tan pronto como la base se expande tanto que no cabe en un clúster, podemos dividirla en dos. Y si antes pasamos por un grupo con kNN y seleccionamos los 100 mejores, que clasificaremos, ahora podemos pasar por dos grupos por separado y seleccionar, por ejemplo, los 50 mejores en cada uno. O, en general, divida los grupos por temas y camine con kNN solo en los temas deseados.

Para escalar el número de usuarios, simplemente puede agregar potencia informática adicional y procesar cada uno por separado, porque en nuestra arquitectura no hay lugares donde tendríamos que mantener a todos los usuarios en la memoria al mismo tiempo.

En algunos otros enfoques, hay lugares que se filtran, por ejemplo, al descomponer una matriz. La descomposición matricial es otro enfoque utilizado en las recomendaciones. De hecho, Yandex también lo usa, pero no para filtrar, sino como características adicionales para el entrenamiento, porque todavía hay mucha información útil para analizar.

Se pueden aplicar características adicionales, nuevos algoritmos y otros métodos al resto de la arquitectura. Cuando el sistema está en funcionamiento, podemos comenzar a mejorarlo.



Donde funciona


Dicha arquitectura ya se ha implementado en Yandex, y en comparación con las reformulaciones habituales, cuando intentamos aconsejar al usuario que averigüe la dirección de la Galería Tretyakov, ya podemos aconsejarle cómo llegar a la Galería Tretyakov sin esperar en línea o incluso sin cargo.



Este es un nuevo nivel de interacción entre el motor de búsqueda y los usuarios. No solo corregimos errores y complementamos solicitudes, sino que aprendemos a predecir los intereses de una persona y ofrecerle algo nuevo. Quizás esta sea la búsqueda del futuro. ¿Qué piensas?

All Articles