Buscando frescura

El 20 de marzo de 2010, comenzó la erupción del volcán Eyjafjallajökull en Islandia. El 14 de julio de 2015, la estación interplanetaria New Horizons transmitió fotografías de Plutón a la Tierra. El 15 de abril de 2019, hubo un incendio en la catedral de Notre Dame. ¿Qué tienen estos casos en común?







Cada uno de estos eventos va acompañado de un gran interés por parte de los usuarios de Internet. La gente no solo quiere leer sobre lo que pasó, sino también mirar las imágenes. Van en busca de imágenes y esperan encontrar allí imágenes frescas y relevantes que pueden no haber existido hace unas horas. El interés surge inesperadamente y en pocos días se reduce a casi cero.



La peculiaridad de la situación es que los motores de búsqueda convencionales no están diseñados para tal escenario. Además, el criterio de la frescura del contenido contradice otras propiedades importantes de una buena búsqueda: relevancia, autoridad, etc. Se necesitan tecnologías especiales no solo para encontrar nuevos contenidos, sino también para mantener un equilibrio en los resultados.



Mi nombre es Denis Sakhnov, hoy hablaré sobre un nuevo enfoque para entregar contenido fresco a Yandex.Images. Y mi colega Dmitry KrivokonKrivokoncompartirá detalles sobre las métricas y la clasificación de imágenes frescas. Aprenderá sobre los enfoques nuevos y antiguos de la evaluación de la calidad. También le recordaremos sobre YT, Logbroker y RTMR.







Para que la búsqueda de imágenes funcione bien en esa parte de las solicitudes, cuyas respuestas deben contener contenido nuevo, debe resolver las siguientes tareas:



  1. Aprenda a buscar y descargar imágenes nuevas rápidamente.
  2. Aprenda a procesarlos rápidamente.
  3. Aprenda a recopilar documentos rápidamente para realizar búsquedas basándose en imágenes (este punto se aclarará a medida que avance la historia).
  4. Formular criterios para la calidad de la búsqueda de contenido fresco.
  5. Aprenda a clasificar y mezclar contenido en SERP según los requisitos de calidad.


Empecemos por el primer punto.



1. Obtener imágenes



Hay muchos sitios en Internet, muchos de ellos publican regularmente algo, incluidas imágenes. Para que la gente vea todo esto en la búsqueda de imágenes, el robot debe llegar al sitio y descargar el contenido. Por lo general, así es como funciona la búsqueda: recorremos los sitios que conocemos con relativa rapidez y obtenemos nuevas imágenes. Pero cuando se trata de contenido que de repente se vuelve relevante en este momento, este modelo falla. Debido a que Internet es enorme, es imposible descargar documentos HTML de todos los sitios del mundo "ahora mismo" y digerirlo todo rápidamente. Al menos nadie en el mundo ha resuelto ese problema todavía.



Alguien podría imaginar una solución al problema de esta manera: rastrear ráfagas de solicitudes y, en primer lugar, procesar solo aquellas fuentes que de alguna manera coincidan con las solicitudes. Pero eso solo suena bien en papel. Primero, para verificar la correspondencia de algo con algo, debe tener contenido a mano. En segundo lugar, si comenzamos a hacer algo después del pico de solicitudes, entonces ya llegamos tarde. Por loco que parezca, necesitas encontrar contenido nuevo antes de necesitarlo. Pero, ¿cómo predice lo inesperado?



La respuesta correcta no es posible. No sabemos nada sobre el momento de las erupciones volcánicas. Pero sabemos en qué sitios suele aparecer contenido nuevo y útil. Pasamos de este lado. Empezamos a utilizar una fórmula de aprendizaje automático que prioriza el rastreo de nuestro rastreador en función de la calidad y relevancia del contenido. Dejemos que los SEO nos perdonen: no entraremos en detalles aquí. La tarea del robot es entregarnos documentos HTML lo más rápido posible. Solo después de eso podemos echar un vistazo a su llenado y encontrar nuevos textos, enlaces a imágenes, etc.



Los enlaces de imágenes son buenos, pero hasta ahora no son particularmente útiles para las búsquedas. En primer lugar, debe descargarlos. Pero nuevamente, hay demasiados enlaces nuevos a imágenes para descargar instantáneamente. Y el problema aquí no está solo en nuestros recursos: los propietarios del sitio tampoco querrían que Yandex los moleste accidentalmente. Por lo tanto, utilizamos el aprendizaje automático para priorizar las descargas de imágenes. Los factores son diferentes, hay muchos de ellos, no vamos a explicarte todo, pero por ejemplo podemos decir que la frecuencia con la que aparece la imagen en diferentes recursos también afecta la prioridad.



Ahora tenemos una lista de enlaces a imágenes. Luego los descargamos a nosotros mismos. Usamos nuestro propio servicio Logbroker. Esta cosa actúa como un autobús de transporte, sobreviviendo con éxito a grandes volúmenes de tráfico. Hace varios años, nuestro colega Alexey Ozeritsky ya habló sobre esta tecnología en Habré.



Aquí es donde lógicamente se completa la primera etapa. Hemos identificado las fuentes y hemos extraído con éxito algunas imágenes. Solo queda un poquito: aprender a trabajar con ellos.



2. Imágenes de proceso



Las imágenes en sí mismas son, por supuesto, útiles, pero aún deben estar preparadas.



Funciona así: 1. En el servicio informático sin estado RTHub, se preparan versiones de diferentes tamaños. Esto es necesario para la búsqueda, donde es conveniente mostrar miniaturas en los resultados y dar el contenido original del sitio de origen al hacer clic.



2. Se calculan las características de la red neuronal. Fuera de línea (es decir, por adelantado, y no en el momento de la clasificación) en máquinas con una GPU, se lanzan redes neuronales, cuyo resultado serán vectores de características de imagen. Y también se calculan los valores de clasificadores útiles: belleza, estética, contenido inapropiado y muchos otros. Todavía necesitamos todo esto.



3. Y luego, utilizando la información contada de la imagen, se pegan los duplicados. Esto es importante: es poco probable que el usuario esté satisfecho con los resultados de búsqueda en los que prevalecerán las mismas imágenes. Al mismo tiempo, pueden diferir ligeramente: en algún lugar cortaron el borde, en algún lugar agregaron una marca de agua, etc. Realizamos el pegado de duplicados en dos etapas. Primero, hay un agrupamiento aproximado de imágenes cercanas usando vectores de redes neuronales. En este caso, es posible que las imágenes en el grupo ni siquiera coincidan en significado, pero esto nos permite paralelizar el trabajo posterior con ellas. Luego, dentro de cada grupo, pegamos duplicados buscando puntos de anclaje en las imágenes. Tenga en cuenta: las redes neuronales son excelentes para buscar imágenes similares, pero las herramientas menos "modernas" son más eficaces para encontrar duplicados completos; Las redes neuronales pueden ser demasiado inteligentes y ver "lo mismo en diferentes".



Entonces, al final de esta etapa, tenemos imágenes listas para usar en diferentes versiones, pasadas por el pegado de duplicados, con redes neuronales precalculadas y otras características. ¿Presentarse al ranking? No, es demasiado pronto.



3. Recopilamos imágenes en documentos



Documento es nuestro nombre para la entidad que participa en el ranking. Desde el lado del usuario, puede parecer un enlace a una página (buscar en sitios), una imagen (buscar imágenes), un video (buscar un video), una cafetera (buscar productos) u otra cosa. Pero adentro, detrás de cada unidad en los resultados de búsqueda, hay un montón de información heterogénea. En nuestro caso, no solo la imagen en sí, su red neuronal y otras características, sino también información sobre las páginas donde se coloca, los textos que la describen en estas páginas, estadísticas del comportamiento del usuario (por ejemplo, clics en la imagen). Todos juntos, este es el documento. Y antes de proceder directamente a la búsqueda, se debe recoger el documento. Y el mecanismo de formar la base de búsqueda habitual de imágenes no es adecuado aquí.



El principal desafío es que los diferentes componentes de un documento se generan en diferentes momentos y en diferentes lugares. El mismo Logbroker puede descargar información sobre páginas y textos, pero no simultáneamente con imágenes. Los datos de comportamiento del usuario en tiempo real se obtienen a través del sistema de procesamiento de registros RTMR . Y todo esto se almacena independientemente de las imágenes. Para recopilar un documento, debe omitir constantemente diferentes fuentes de datos.



Usamos MapReduce para formar la base de búsqueda principal de imágenes. Es una forma eficiente y confiable de trabajar con grandes cantidades de datos. Pero para la tarea de la frescura, no es adecuado: necesitamos recibir muy rápidamente del almacenamiento todos los datos necesarios para la formación de cada documento, que no corresponde a MapReduce. Por lo tanto, en el ciclo de frescura, utilizamos un método diferente: la información heterogénea ingresa al sistema de procesamiento de datos de transmisión RTRobot, que usa el almacenamiento KV para sincronizar diferentes flujos de procesamiento de datos y tolerancia a fallas.



En el ciclo de frescura, utilizamos tablas dinámicas basadas en nuestro sistema YT como almacenamiento de KV... De hecho, este es un repositorio de todo el contenido que podamos necesitar. Con acceso muy rapido. Es desde allí que solicitamos puntualmente todo lo que pueda ser útil para buscar imágenes, recopilar documentos y, mediante LogBroker, transferirlos a los servidores de búsqueda, desde donde se agregan los datos preparados a la base de datos de búsqueda.







Gracias a un circuito separado para trabajar con frescura, que cubre todas las etapas (desde la búsqueda de imágenes en la web hasta la preparación de documentos), podemos procesar cientos de nuevas imágenes por segundo y entregarlas para buscar, en promedio, en unos minutos desde su aparición.



Pero llevar imágenes a la búsqueda no es suficiente. Debe poder mostrarlos en los resultados de búsqueda cuando sean útiles. Y aquí pasamos al siguiente paso: determinar la utilidad. Le doy la palabra a dmitryKrivokon...



4. Medimos la calidad



Un enfoque general para optimizar la calidad de búsqueda comienza con la elección de una métrica. En la búsqueda de imágenes de Yandex, el tipo de métrica es aproximadamente el siguiente:







donde

n es el número de las primeras imágenes (documentos) del problema que evaluamos;

p_i - peso de la posición en los resultados de búsqueda (cuanto más alta es la posición, más peso);

r_i - relevancia (qué tan cerca la imagen coincide con la solicitud);

w_i… m_i - otros componentes de la calidad de respuesta (frescura, belleza, tamaño ...);

f (...) es un modelo que agrega estos componentes.



En pocas palabras, cuanto más altas sean las imágenes más útiles en los resultados de búsqueda, mayor será la cantidad de esta expresión.



Algunas palabras sobre el modelo f (...). Aprende de la comparación de imágenes por parejas con los jugadores de polo. Una persona ve una solicitud y dos imágenes, y luego elige la mejor. Si repite esto muchas, muchas veces, el modelo aprenderá a predecir qué componente de calidad es más importante para una solicitud en particular.



Por ejemplo, si se solicitan fotografías recientes de un agujero negro, el componente de frescura tiene el coeficiente más alto. Y si se trata de una isla tropical, entonces belleza, porque pocas personas buscan fotografías de aficionados de islas feas, por lo general necesitan imágenes atractivas. Cuanto mejor se vea visualmente la entrega de imágenes en tales casos, es más probable que una persona continúe utilizando el servicio. Pero no nos distraigamos con esto.



Entonces, la tarea de los algoritmos de clasificación es optimizar esta métrica. Pero no puede estimar todos los millones de solicitudes diarias: esta es una carga enorme y, en primer lugar, para los tolokers. Por lo tanto, para el control de calidad, asignamos una muestra aleatoria (canasta) durante un período de tiempo fijo.



Parecería que hay una métrica en la que ya se tiene en cuenta el componente de frescura, y hay una selección de solicitudes de control de calidad. Puedes cerrar el tema sobre esto e ir al ranking. Pero no.



En el caso de fotografías frescas, surge un problema. Al evaluar algoritmos, debemos ser capaces de entender que respondemos bien a la solicitud de un usuario en el mismo momento en que se ingresa la solicitud en la búsqueda. La nueva solicitud del año pasado puede no ser así ahora. Y otra cosa sería una buena respuesta. Por lo tanto, una canasta fija de solicitudes (por ejemplo, por año) no es adecuada.



Como primer enfoque para resolver este problema, intentamos prescindir de la canasta. Siguiendo una cierta lógica, comenzamos a mezclar imágenes nuevas en la salida y luego estudiamos el comportamiento del usuario. Si cambió para mejor (por ejemplo, las personas hicieron clic más activamente en los resultados), entonces la mezcla fue útil. Pero este enfoque tiene un defecto: la evaluación de la calidad dependía directamente de la calidad de nuestros algoritmos. Por ejemplo, si para alguna solicitud nuestro algoritmo falla y no mezcla contenido, entonces no habrá nada que comparar, lo que significa que no entenderemos si se necesitaba contenido nuevo allí. Entonces llegamos al entendimiento de que se requiere un sistema de evaluación independiente que muestre la calidad actual de nuestros algoritmos y no dependa de ellos.



Nuestro segundo enfoque fue el siguiente. Sí, no podemos usar un carrito fijo debido a la variabilidad de solicitudes nuevas. Pero podemos dejar para la base esa parte de la canasta para la que no hay requisitos de frescura, y agregar allí la parte fresca diariamente. Para hacer esto, hemos creado un algoritmo que selecciona aquellos en el flujo de solicitudes de los usuarios que probablemente requieran una respuesta con imágenes nuevas. Estas consultas suelen tener detalles inesperados. Por supuesto, utilizamos la validación manual para filtrar el ruido y los escombros y adaptarnos a situaciones especiales. Por ejemplo, una consulta puede ser relevante solo para un país específico. En este caso, ya no nos ayudan los tolokers, sino los evaluadores: este trabajo requiere experiencia y conocimientos especiales.





Solicitar [foto de agujero negro]



Al mismo tiempo, no solo agregamos solicitudes nuevas al carrito para evaluar la calidad, sino que también guardamos los resultados de nuestra búsqueda en el momento en que se encuentran las solicitudes. Por lo tanto, podemos evaluar no solo la calidad primaria de la respuesta, sino también la rapidez con la que nuestra búsqueda reaccionó al evento.



Entonces, resumamos los resultados preliminares. Para responder bien a las nuevas consultas, no solo garantizamos una entrega rápida para la búsqueda y el procesamiento de imágenes, sino que también reinventamos la forma en que medimos la calidad. Queda por descubrir la calidad que estamos midiendo.



5. Clasificación



Permítame recordarle que anteriormente describimos la transición desde el primer enfoque para evaluar la calidad de la búsqueda de imágenes hasta el segundo: desde mezclar los resultados hasta la reposición diaria de la canasta de aceptación con solicitudes nuevas. El paradigma ha cambiado: los propios algoritmos necesitaban cambios. Es bastante difícil de explicar a los lectores desde fuera, pero lo intentaré. Si tiene alguna pregunta, no dude en hacerla en los comentarios.



Anteriormente, los métodos se implementaban por analogía con la solución de la que estaba hablandonuestro colega Alexey Shagraev. Existe una fuente principal de documentos (índice de búsqueda principal). Y también hay una fuente adicional de documentos nuevos, para los que la velocidad de entrada en la búsqueda es fundamental. Los documentos de diferentes fuentes no se podían clasificar de acuerdo con una única lógica, por lo que utilizamos un esquema bastante no trivial para mezclar documentos de una fuente nueva con el problema principal. A continuación, comparamos las métricas de los principales resultados de búsqueda sin y con documentos adicionales.



Ahora la situación es diferente. Sí, las fuentes siguen siendo físicamente diferentes, pero en términos de métricas, no importa de dónde venga la imagen nueva. También se puede obtener de la fuente principal, si un robot ordinario logró llegar a ella. En este caso, las métricas serán idénticas a la situación en la que la misma imagen llegó al problema a través de una fuente separada. El nuevo enfoque tiene una frescura significativa de la consulta y el resultado, y la arquitectura de origen ya no es tan importante. Como resultado, tanto los documentos principales como los recientes se clasifican utilizando el mismo modelo, lo que nos permite mezclar imágenes nuevas en la salida utilizando una lógica mucho más simple que antes: simplemente clasificando por valor en la salida de un solo modelo. Por supuesto, esto también afectó la calidad.



Siga adelante. Para clasificar algo, necesita un conjunto de datos en el que se entrenará el modelo. Para imágenes frescas: un conjunto de datos con ejemplos de contenido nuevo. Ya tenemos un conjunto de datos básico, necesitábamos aprender cómo agregarle ejemplos de actualización. Y aquí se nos recuerda la canasta receptora, que ya usamos para el control de calidad. Las solicitudes nuevas en él varían todos los días, lo que significa que al día siguiente podemos tomar las solicitudes nuevas de ayer y agregarlas al conjunto de datos para el entrenamiento. Al mismo tiempo, no corremos el riesgo de reentrenamiento, ya que los mismos datos no se utilizan simultáneamente para entrenamiento y control.



Debido a la transición a un nuevo esquema, la calidad de los resultados de búsqueda de imágenes frescas ha aumentado significativamente. Si la capacitación anterior se basaba principalmente en estadísticas de usuarios sobre solicitudes nuevas y, debido a esto, teníamos comentarios con el algoritmo de clasificación actual, ahora la base de la capacitación son canastas de solicitudes recopiladas objetivamente, que dependen únicamente del flujo de solicitudes de los usuarios. Esto nos permitió aprender a mostrar resultados frescos incluso cuando antes no los había. Además, debido a la fusión de las tuberías de clasificación de los contornos principal y fresco, este último comenzó a desarrollarse notablemente más rápido (todas las mejoras en una fuente ahora llegan automáticamente a la segunda).






Es imposible contar en detalle en una publicación todo el trabajo que ha realizado el equipo de búsqueda de imágenes de Yandex. Esperamos haber tenido éxito en explicar cuáles son las características de encontrar imágenes nuevas. Y por qué se necesitan cambios en todas las etapas de la búsqueda, para que los usuarios puedan encontrar rápidamente fotos frescas de Plutón o cualquier otra información relevante.



All Articles