À la recherche de fraîcheur

Le 20 mars 2010, l'éruption du volcan Eyjafjallajökull en Islande a commencé. Le 14 juillet 2015, la station interplanétaire New Horizons a transmis des photographies de Pluton à la Terre. Le 15 avril 2019, un incendie s'est déclaré dans la cathédrale Notre-Dame. Qu'est-ce que ces cas ont en commun?







Chacun de ces événements s'accompagne d'un regain d'intérêt de la part des internautes. Les gens veulent non seulement lire ce qui s'est passé, mais aussi regarder les photos. Ils partent à la recherche d'images et s'attendent à y trouver des images fraîches et pertinentes qui n'existaient peut-être pas il y a quelques heures. L'intérêt survient de façon inattendue et en quelques jours, il tombe presque à zéro.



La particularité de la situation est que les moteurs de recherche conventionnels ne sont pas conçus pour un tel scénario. De plus, le critère de fraîcheur du contenu contredit d'autres propriétés importantes d'une bonne recherche: pertinence, autorité, etc. Des technologies spéciales sont nécessaires non seulement pour trouver de nouveaux contenus, mais aussi pour maintenir un équilibre dans les résultats.



Je m'appelle Denis Sakhnov, aujourd'hui je vais parler d'une nouvelle approche pour fournir du nouveau contenu à Yandex.Kartinki. Et mon collègue Dmitry KrivokonKrivokonpartagera des détails sur les métriques et le classement des images fraîches. Vous découvrirez l'ancienne et la nouvelle approche de l'évaluation de la qualité. Nous vous rappellerons également YT, Logbroker et RTMR.







Pour que la recherche d'images fonctionne correctement sur cette partie des requêtes, dont les réponses doivent contenir du nouveau contenu, vous devez résoudre les tâches suivantes:



  1. Apprenez à trouver et télécharger rapidement de nouvelles images.
  2. Apprenez à les traiter rapidement.
  3. Apprenez à collecter rapidement des documents à rechercher à partir d'images (ce point deviendra plus clair au fur et à mesure que l'histoire progresse)
  4. Formulez des critères pour la qualité de la recherche de nouveaux contenus.
  5. Apprenez à classer et à mélanger le contenu dans le SERP en fonction des exigences de qualité.


Commençons par le premier point.



1. Obtenir des photos



Il existe de nombreux sites sur Internet, dont beaucoup publient régulièrement quelque chose, y compris des images. Pour que les gens puissent voir tout cela dans la recherche d'images, le robot doit atteindre le site et télécharger le contenu. C'est généralement ainsi que fonctionne la recherche: nous parcourons les sites que nous connaissons relativement rapidement et obtenons de nouvelles photos. Mais quand il s'agit de contenu qui devient soudainement pertinent en ce moment, ce modèle échoue. Parce qu'Internet est énorme, il est impossible de télécharger les documents HTML de tous les sites du monde «en ce moment» et de tout digérer rapidement. Au moins personne dans le monde n'a encore résolu ce problème.



Quelqu'un pourrait imaginer une solution au problème de cette manière: suivre les rafales de requêtes et tout d'abord ne traiter que les sources qui correspondent d'une manière ou d'une autre aux requêtes. Mais cela ne sonne bien que sur papier. Tout d'abord, pour vérifier la correspondance entre quelque chose et quelque chose, vous devez déjà avoir du contenu sous la main. Deuxièmement, si nous commençons à faire quelque chose après le pic de demandes, alors nous sommes déjà en retard. Aussi fou que cela puisse paraître, vous devez trouver du nouveau contenu avant d'en avoir besoin. Mais comment prédire l'inattendu?



La bonne réponse n'est pas possible. Nous ne savons rien du moment des éruptions volcaniques. Mais nous savons sur quels sites un contenu frais et utile apparaît généralement. Nous sommes partis de ce côté. Nous avons commencé à utiliser une formule apprise par machine qui donne la priorité à l'exploration de notre robot d'exploration en fonction de la qualité et de la pertinence du contenu. Laissez les référenceurs nous pardonner: nous n'entrerons pas dans les détails ici. La tâche du robot est de nous livrer les documents HTML le plus rapidement possible. Ce n'est qu'après cela que nous pouvons regarder leur remplissage et trouver de nouveaux textes, des liens vers des images, etc.



Les liens d'image sont bons, mais pas particulièrement utiles pour les recherches jusqu'à présent. Tout d'abord, vous devez nous les télécharger. Mais encore une fois, il y a trop de nouveaux liens vers des images à télécharger instantanément. Et le problème ici n'est pas seulement dans nos ressources: les propriétaires de sites ne voudraient pas non plus que Yandex les dérange accidentellement. Par conséquent, nous utilisons l'apprentissage automatique pour prioriser les téléchargements d'images. Les facteurs sont différents, ils sont nombreux, nous ne vous expliquerons pas tout, mais par exemple nous pouvons dire que la fréquence à laquelle l'image apparaît sur différentes ressources affecte également la priorité.



Nous avons maintenant une liste de liens vers des images. Ensuite, nous les téléchargeons nous-mêmes. Nous utilisons notre propre service Logbroker. Cette chose agit comme un bus de transport, survivant avec succès à d'énormes volumes de trafic. Il y a plusieurs années, notre collègue Alexey Ozeritsky parlait déjà de cette technologie sur Habré.



C'est là que la première étape s'achève logiquement. Nous avons identifié les sources et extrait avec succès quelques images. Il ne reste qu'un petit peu: apprendre à travailler avec eux.



2. Images de process



Les images elles-mêmes sont, bien sûr, utiles, mais elles doivent encore être préparées. Cela



fonctionne comme ceci: 1. Dans le service informatique sans état RTHub, des versions de différentes tailles sont préparées. Ceci est nécessaire pour la recherche, où il est pratique d'afficher des miniatures dans les résultats et de donner le contenu original du site source en un clic.



2. Les caractéristiques du réseau neuronal sont calculées. Hors ligne (c'est-à-dire à l'avance et non au moment du classement) sur les machines équipées d'un GPU, des réseaux de neurones sont lancés, dont le résultat sera des vecteurs de caractéristiques d'image. Et aussi les valeurs des classificateurs utiles sont calculées: beauté, esthétique, contenu inapproprié et bien d'autres. Nous avons encore besoin de tout cela.



3. Et puis en utilisant les informations comptées à partir de l'image, les doublons sont collés ensemble. Ceci est important: il est peu probable que l'utilisateur soit satisfait des résultats de recherche dans lesquels les mêmes images prévaudront. En même temps, ils peuvent différer légèrement: quelque part ils coupent le bord, quelque part ils ajoutent un filigrane, etc. Nous réalisons le collage des doublons en deux étapes. Premièrement, il y a un regroupement grossier d'images proches à l'aide de vecteurs de réseau neuronal. Dans ce cas, les images de la grappe peuvent même ne pas avoir de sens, mais cela nous permet de paralléliser le travail avec elles. Ensuite, à l'intérieur de chaque cluster, nous collons des doublons en recherchant des points d'ancrage dans les images. Remarque: les réseaux de neurones sont parfaits pour rechercher des images similaires, mais des outils moins «à la mode» sont plus efficaces pour trouver des doublons complets; les réseaux de neurones peuvent être trop intelligents et voir «la même chose dans différents».



Ainsi, à la fin de cette étape, nous avons des images toutes faites dans différentes versions, passées par le collage de doublons, avec un réseau de neurones précalculé et d'autres fonctionnalités. Soumettre au classement? Non, c'est trop tôt.



3. Mettre des images dans des documents



Document est notre nom pour l'entité qui participe au classement. Du côté de l'utilisateur, cela peut ressembler à un lien vers une page (recherche sur des sites), une image (recherche d'images), une vidéo (recherche d'une vidéo), une cafetière (recherche de produits), ou autre chose. Mais à l'intérieur, derrière chaque unité dans les résultats de recherche, il y a tout un tas d'informations hétérogènes. Dans notre cas - non seulement l'image elle-même, son réseau de neurones et d'autres fonctionnalités, mais aussi des informations sur les pages où elle est placée, les textes qui la décrivent sur ces pages, des statistiques de comportement de l'utilisateur (par exemple, des clics sur l'image). Tous ensemble - c'est le document. Et avant de procéder directement à la recherche, le document doit être collecté. Et le mécanisme de formation de la base de recherche habituelle des images ne convient pas ici.



Le principal défi est que différents composants d'un document sont générés à des moments et à des endroits différents. Le même Logbroker peut télécharger des informations sur les pages et les textes, mais pas simultanément avec des images. Les données de comportement des utilisateurs en temps réel proviennent du système de traitement des journaux RTMR . Et tout cela est stocké indépendamment des images. Pour collecter un document, vous devez systématiquement contourner différentes sources de données.



Nous utilisons MapReduce pour former la base de recherche principale des images. C'est un moyen efficace et fiable de travailler avec d'énormes quantités de données. Mais pour la tâche de fraîcheur, cela ne convient pas: il faut recevoir très rapidement du stockage toutes les données nécessaires à la formation de chaque document, ce qui ne correspond pas à MapReduce. Par conséquent, dans la boucle de fraîcheur, nous utilisons une méthode différente: des informations hétérogènes entrent dans le système de traitement de données en continu RTRobot, qui utilise le stockage KV pour synchroniser différents flux de traitement de données et la tolérance aux pannes.



Dans la boucle de fraîcheur, nous utilisons des tables dynamiques basées sur notre système YT comme stockage KV... En fait, il s'agit d'un référentiel de tout le contenu dont nous pourrions avoir besoin. Avec un accès très rapide. C'est à partir de là que nous demandons rapidement tout ce qui peut être utile pour rechercher des images, collecter des documents et, à l'aide de LogBroker, les transférer vers des serveurs de recherche, à partir desquels les données préparées sont ajoutées à la base de données de recherche.







Grâce à un circuit séparé pour travailler la fraîcheur, qui couvre toutes les étapes (de la recherche d'images sur le web à la préparation des documents), nous sommes en mesure de traiter des centaines de nouvelles images par seconde et de les livrer à la recherche, en moyenne, en quelques minutes à compter de leur apparition.



Mais apporter des images à la recherche ne suffit pas. Vous devez pouvoir les afficher dans les résultats de recherche lorsqu'ils sont utiles. Et ici, nous passons à l'étape suivante - déterminer l'utilité. Je donne la parole à DmitryKrivokon...



4. Nous mesurons la qualité



Une approche générale pour optimiser la qualité de la recherche commence par le choix d'une métrique. Dans la recherche d'images Yandex, le type de métrique est approximativement le suivant:









n est le nombre des premières images (documents) du problème que nous évaluons;

p_i - poids de la position dans les résultats de la recherche (plus la position est élevée, plus il y a de poids);

r_i - pertinence (dans quelle mesure l'image correspond à la demande);

w_i… m_i - autres composants de la qualité de réponse (fraîcheur, beauté, taille ...);

f (...) est un modèle qui agrège ces composants.



En termes simples, plus les images sont utiles dans les résultats de la recherche, plus la quantité de cette expression est élevée.



Quelques mots sur le modèle f (...). Elle est formée par comparaison par paires d'images avec des polokers. Une personne voit une demande et deux images, puis choisit la meilleure. Si vous répétez cela de nombreuses fois, le modèle apprendra à prédire quel composant de qualité est le plus important pour une demande particulière.



Par exemple, si une demande de photos fraîches d'un trou noir, alors la composante de fraîcheur a le coefficient le plus élevé. Et s'il s'agit d'une île tropicale, alors beauté, car peu de gens recherchent des photos d'amateurs d'îles laides, des images généralement attrayantes sont nécessaires. Plus la livraison des images est visuellement meilleure dans de tels cas, plus il est probable qu'une personne continuera à utiliser le service. Mais ne soyons pas distraits par cela.



Ainsi, la tâche des algorithmes de classement est d'optimiser cette métrique. Mais vous ne pouvez pas estimer tous les millions de demandes quotidiennes: c'est une charge énorme, et tout d'abord, sur les fumeurs. Par conséquent, pour le contrôle de la qualité, nous attribuons un échantillon aléatoire (panier) pour une période de temps fixe.



Il semblerait qu'il existe une métrique dans laquelle la composante fraîcheur est déjà prise en compte, et il y a une sélection de demandes de contrôle qualité. Vous pouvez fermer le sujet à ce sujet et accéder au classement. Mais non.



Dans le cas d'images fraîches, un problème se pose. Lors de l'évaluation des algorithmes, nous devons être en mesure de comprendre que nous répondons bien à la demande d'un utilisateur au moment même où la demande est introduite dans la recherche. La nouvelle demande de l'année dernière ne l'est peut-être pas maintenant. Et autre chose serait une bonne réponse. Par conséquent, un panier fixe de demandes (par exemple, par an) ne convient pas.



Comme première approche pour résoudre ce problème, nous avons essayé de nous passer du panier du tout. Suivant une certaine logique, nous avons commencé à mélanger des images fraîches dans la sortie, puis nous avons étudié le comportement des utilisateurs. Si cela a changé pour le mieux (par exemple, les gens cliquaient plus activement sur les résultats), alors le mixage était utile. Mais cette approche a un défaut: l'évaluation de la qualité dépendait directement de la qualité de nos algorithmes. Par exemple, si pour une demande, notre algorithme échoue et ne mélange pas le contenu, alors il n'y aura rien à comparer, ce qui signifie que nous ne comprendrons pas si un nouveau contenu était nécessaire. Nous avons donc compris qu'un système d'évaluation indépendant est nécessaire pour montrer la qualité actuelle de nos algorithmes et ne pas en dépendre.



Notre deuxième approche était la suivante. Oui, nous ne pouvons pas utiliser de panier fixe en raison de la variabilité des nouvelles demandes. Mais on peut laisser à la base la partie du panier pour laquelle il n'y a pas d'exigences de fraîcheur, et y ajouter la partie fraîche quotidiennement. Pour ce faire, nous avons créé un algorithme qui sélectionne dans le flux de demandes des utilisateurs celles qui nécessitent le plus probablement une réponse avec de nouvelles images. Ces requêtes comportent généralement des détails inattendus. Bien entendu, nous utilisons la validation manuelle pour filtrer le bruit et les débris et s'adapter à des situations particulières. Par exemple, une demande peut n'être pertinente que pour un pays spécifique. Dans ce cas, nous ne sommes plus aidés par les fumeurs, mais par les évaluateurs: un tel travail nécessite une expérience et des connaissances particulières.





Demander [photo du trou noir]



Ce faisant, nous ajoutons non seulement ces nouvelles demandes au panier pour l'évaluation de la qualité, mais nous sauvegardons également les résultats de notre recherche au moment où les demandes sont trouvées. De cette façon, nous pouvons évaluer non seulement la qualité primaire de la réponse, mais aussi la rapidité avec laquelle notre recherche a réagi à l'événement.



Alors, résumons les résultats préliminaires. Pour bien répondre aux nouvelles demandes, nous avons non seulement assuré une livraison rapide de la recherche et du traitement d'images, mais également réinventé la façon dont nous mesurons la qualité. Il reste à déterminer la qualité que nous mesurons.



5. Classement



Je vous rappelle que nous avons décrit ci-dessus le passage de la première approche d'évaluation de la qualité de la recherche d'images à la seconde: du mélange des résultats au réapprovisionnement quotidien du panier d'acceptation avec de nouvelles demandes. Le paradigme a changé - les algorithmes eux-mêmes avaient besoin de changements. C'est assez difficile à expliquer aux lecteurs de l'extérieur, mais je vais essayer. Si vous avez des questions, n'hésitez pas à les poser dans les commentaires.



Auparavant, les méthodes étaient implémentées par analogie avec la solution dont je parlaisnotre collègue Alexey Shagraev. Il existe une source principale de documents (index de recherche principal). Et il existe également une source supplémentaire de nouveaux documents, pour lesquels la rapidité de la recherche est essentielle. Les documents provenant de sources différentes ne pouvaient pas être classés selon une seule logique, nous avons donc utilisé un schéma plutôt non trivial pour mélanger les documents d'une nouvelle source dans le problème principal. Ensuite, nous avons comparé les métriques des principaux résultats de recherche sans et avec des documents supplémentaires.



Maintenant, la situation est différente. Oui, les sources sont toujours physiquement différentes, mais en termes de métriques, peu importe d'où vient la nouvelle image. Il peut également provenir de la source principale si un robot ordinaire a réussi à y accéder. Dans ce cas, les métriques seront identiques à la situation lorsque la même image parvient au problème via une source distincte. La nouvelle approche a une actualité significative de la requête et du résultat, et l'architecture source n'est plus aussi importante. En conséquence, les documents principaux et récents sont classés en utilisant le même modèle, ce qui nous permet de mélanger des images fraîches dans les résultats de la recherche en utilisant une logique beaucoup plus simple qu'auparavant: en triant simplement par valeur à la sortie d'un seul modèle. Bien sûr, cela a également affecté la qualité.



Passez. Pour classer quelque chose, vous avez besoin d'un ensemble de données sur lequel le modèle sera entraîné. Pour des images fraîches - un ensemble de données avec des exemples de contenu frais. Nous avons déjà un jeu de données de base, nous devions apprendre à y ajouter des exemples de fraîcheur. Et ici, nous nous rappelons le panier de réception, que nous utilisons déjà pour le contrôle de la qualité. Les nouvelles demandes varient chaque jour, ce qui signifie que le lendemain, nous pouvons prendre les nouvelles demandes d'hier et les ajouter à l'ensemble de données pour la formation. Dans le même temps, on ne risque pas de se recycler, puisque les mêmes données ne sont pas utilisées simultanément pour la formation et le contrôle.



En raison de la transition vers un nouveau schéma, la qualité des résultats de recherche pour les images fraîches a considérablement augmenté. Si la formation précédente était principalement basée sur les statistiques des utilisateurs sur les nouvelles demandes, et pour cette raison, nous avons eu des retours avec l'algorithme de classement actuel, maintenant la base de la formation est des paniers de demandes collectés objectivement, qui dépendent uniquement du flux de demandes des utilisateurs. Cela nous a permis d'apprendre à montrer de nouveaux résultats même quand il n'y en avait pas auparavant. De plus, en raison de la fusion des pipelines de classement des contours principaux et frais, ces derniers ont commencé à se développer sensiblement plus rapidement (toutes les améliorations d'une source atteignent désormais automatiquement la seconde).






Il est impossible de raconter en détail dans un seul article tout le travail effectué par l'équipe de recherche d'images Yandex. Nous espérons avoir réussi à expliquer quelles sont les caractéristiques de trouver de nouvelles images. Et pourquoi des changements sont-ils nécessaires à toutes les étapes de la recherche afin que les utilisateurs puissent trouver rapidement de nouvelles photos de Pluton ou toute autre information pertinente.



All Articles