Comment Yandex a appris à l'intelligence artificielle à trouver des erreurs dans les actualités

Nous parlons souvent de technologies et de bibliothèques qui ont vu le jour et se sont formées à Yandex. En fait, nous appliquons et développons au moins des solutions tierces.

Aujourd'hui, je vais parler à la communauté Habr d'un de ces exemples. Vous apprendrez pourquoi nous avons appris au réseau neuronal BERT à trouver des fautes de frappe dans les titres de l'actualité, et n'avons pas utilisé le modèle prêt à l'emploi, pourquoi vous ne pouvez pas prendre et exécuter BERT sur plusieurs cartes vidéo et comment nous avons utilisé la caractéristique clé de cette technologie - le mécanisme d'attention.



DĂ©fi


Yandex.News est un service qui recueille les actualités des publications qui nous sont liées. Il s'agit non seulement des nouvelles des médias les plus lues et les plus citées sur la page principale, mais aussi des sections thématiques ou même des sélections personnelles de toutes les publications. En tout cas, ce sont des milliers de sites et des millions de rubriques, à partir desquelles la machine doit former une sélection toutes les quelques minutes.

C'est la machine, car nous n'intervenons jamais dans l'image du jour: nous n'y ajoutons pas d'actualités manuellement, nous n'en supprimons pas (peu importe combien nous le voudrions), nous n'éditons pas les gros titres. Autour de cela a déjà été brisé de nombreuses copies. Une approche entièrement algorithmique présente des avantages et des inconvénients. Quelque chose que nous pouvons améliorer avec la technologie, quelque chose non. Même s'il y a des fautes d'orthographe ou des fautes de frappe dans les titres, nous ne les corrigeons pas. Nous avons ajouté les favicons des publications aux gros titres pour qu'il soit clair d'où viennent les nouvelles. Cela a aidé en partie, mais nous n'avons pas accepté les erreurs et avons commencé à chercher un moyen de les éliminer sans apporter de modifications au texte.

S'il est impossible de corriger l'erreur, vous pouvez entraîner la machine à trouver des en-têtes qui, en raison d'erreurs, ne conviennent pas au sommet. De plus, Yandex est spécialisé dans la morphologie russe depuis l'époque où le nom n'avait pas encore été inventé. Il semblerait que nous prenions un réseau de neurones - et le point est dans le chapeau.

Les outils


Yandex dispose de la technologie Speller pour rechercher et corriger les erreurs. Grâce à la bibliothèque d' apprentissage automatique CatBoost, Speller peut décrypter des mots méconnaissables («adjectifs» → «camarades de classe») et prendre en compte le contexte lors de la recherche de fautes de frappe («miss music» → «download music»). Il peut sembler que Speller est idéal pour notre tâche, mais non.

L'orthographe (connu en interne sous le nom de gardien de recherche) est déjà au niveau de l'architecture pour résoudre un problème complètement différent: pour aider les utilisateurs à restaurer le bon formulaire de demande. Dans la recherche, il n'est pas si important que le cas soit correctement sélectionné, une lettre majuscule ou une virgule soit posée. Là, il est plus important pour la requête de recherche "Haminguel" de deviner que la personne avait en tête Hemingway.

Des erreurs dans les gros titres sont faites par des personnes relativement instruites qui ont peu de chances d'écrire Haminguel. Mais une approbation incorrecte («le vol a été retardé»), des mots manquants («le jeune homme a essayé la voiture») et des lettres majuscules supplémentaires («président de la Banque») sont monnaie courante. Enfin, il y a une phrase formellement correcte: «Je réparerai la rue Gorki à Pskov», à laquelle un tuteur normal ne s’accroche pas (enfin, que se passe-t-il si c’est une promesse de l’auteur?), De plus, dans les News, la tâche n'était pas la même que dans la Recherche: non pas pour corriger les fautes de frappe et les erreurs, mais pour les détecter.

Nous avions d'autres options, par exemple, des modèles basés sur DSSM (si intéressants, nous avons brièvement parlé de cette approche dans un article sur l'algorithme de Palekh ), mais ils avaient aussi des limites. Par exemple, l'ordre des mots n'a pas été parfaitement pris en compte.

En général, les outils prêts à l'emploi n'étaient pas adaptés à notre tâche ou étaient limités. Donc, vous devez créer le vôtre - pour former votre modèle. Et c'était une bonne raison de travailler avec la technologie BERT, qui est devenue disponible aux développeurs en 2018 et a donné des résultats impressionnants.

Présentation de BERT


Le principal problème des problèmes modernes de traitement du langage naturel (PNL) est de trouver suffisamment d'exemples balisés par des personnes pour former un réseau neuronal. Si vous avez besoin d'une croissance de qualité, alors l'échantillon de formation devrait être très grand - des millions et des milliards d'exemples. En même temps, la PNL comporte de nombreuses tâches et elles sont toutes différentes. La collecte de données en volumes similaires pour chaque tâche est longue, coûteuse et souvent impossible. Même pour les plus grandes entreprises du monde.

Mais il existe une option pour contourner ce problème - à l'aide d'une formation en deux étapes. Dans un premier temps, le réseau neuronal apprend une structure de langage pendant une longue et coûteuse durée sur un énorme corps de milliards de mots (c'est la pré-formation). Ensuite, le réseau est rapidement et à moindre coût tordu pour une tâche spécifique - par exemple, pour diviser les avis en bons et mauvais (c'est un réglage fin). Environ 10 000 exemplaires balisés à Tolok .

La technologie BERT (Représentations des codeurs bidirectionnels des transformateurs) est basée sur cette idée. L'idée elle-même n'est pas nouvelle et a déjà été appliquée, mais il existe une différence significative. Transformer est une telle architecture de réseau neuronal qui vous permet de prendre en compte tout le contexte à la fois, y compris l'autre extrémité de la phrase et le roulement des participants quelque part au milieu. Et c'est sa différence par rapport aux architectures à la mode précédentes, qui tenaient compte du contexte. Par exemple, un réseau de neurones LSTM a une longueur de contexte de dizaines de mots au mieux, et ici c'est tout 200.

Sur GitHub , le code source TensorFlow et même un modèle universel pré-formé en 102 langues sont disponibles, du russe au volapyuk. Prenez, semble-t-il, la solution hors de la boîte - et obtenez le résultat immédiatement. Mais non.

Il s'est avéré que le modèle universel dans les textes russes a montré une qualité nettement inférieure à celle du modèle anglais, battant des records dans les textes anglais (ce qui, vous voyez, est logique). Dans les textes russes, elle a perdu face à nos modèles internes sur DSSM.

D'accord, vous pouvez vous pré-éduquer - heureusement, Yandex a suffisamment de textes russes et d'expérience en apprentissage automatique. Mais il y a une nuance. Il faut un an pour apprendre!

Le fait est que BERT est conçu pour les processeurs tenseurs de Google (TPU), donc hors de la boîte, il ne peut fonctionner qu'avec une seule carte vidéo (GPU). Et il est impossible de paralléliser son front avec n’importe quel horovod : transférer 400 mégaoctets de données d’une carte à une autre à chaque étape coûte très cher, la parallélisation deviendra inutile. Que faire

Optimisation


Ils ont commencé à rechercher des idées et des solutions susceptibles d'accélérer considérablement le dossier. Tout d'abord, nous avons remarqué que chaque nombre dans notre modèle occupait 32 bits de mémoire (le flotteur standard pour les nombres dans l'ordinateur). Il semble être petit, mais lorsque vous avez 100 millions de poids, cela est essentiel. Nous n'avions pas besoin d'une telle précision partout, nous avons donc décidé de convertir partiellement les nombres au format 16 bits (c'est ce qu'on appelle un entraînement de précision mixte).

En cours de route, avec l'aide de nombreux fichiers et béquilles, nous avons vissé la compilation XLA, en nous appuyant sur le commit NVIDIA alors encore brut. Grâce à cela, nos cartes NVIDIA Tesla V100 (un petit serveur d'entre elles se présente comme un appartement dans un quartier peu coûteux de Moscou) ont pu révéler pleinement leur potentiel grâce à l'arithmétique 16 bits sur les cœurs de tenseur.

Nous ne nous intéressions qu'aux titres en russe, mais le modèle multilingue, que nous avons pris comme base, a été formé dans des centaines de langues, y compris même un volapuk artificiel. Les mots de toutes les langues traduits en espace vectoriel ont été stockés dans le modèle. De plus, vous ne pouvez pas les prendre et simplement les retirer de là - j'ai dû transpirer pour réduire la taille du dictionnaire.

Et encore une chose. Si vous êtes un scientifique et que votre ordinateur est sous la table, vous pouvez tout reconfigurer pour chaque tâche spécifique. Mais dans un véritable cloud informatique, où des milliers de machines sont configurées de la même manière, il est assez problématique, par exemple, de reconstruire le noyau pour chaque nouvelle fonctionnalité TensorFlow. Par conséquent, nous avons consacré beaucoup d'efforts à la collecte de telles versions de packages que toutes les puces nouvellement conçues peuvent faire, et ne nécessitent pas de mise à jour et de reconfiguration radicales des cartes vidéo dans le cloud.

En général, pressé tous les jus partout où ils le pouvaient. Et nous l'avons fait. L'année s'est transformée en une semaine.

La formation


Construire le bon jeu de données est généralement la partie la plus difficile du travail. Tout d'abord, nous avons appris le classificateur sur trois millions de rubriques marquées de tolokers. Cela semble être beaucoup, mais seulement 30 000 d'entre eux - avec des fautes de frappe. Où trouver plus d'exemples?

Nous avons décidé de voir quelles rubriques les médias eux-mêmes corrigent. Il y en a plus de 2 millions dans l'histoire de Yandex. Bingo! Bien qu'il soit trop tôt pour se réjouir.

Il s'est avéré que très souvent les médias refont les gros titres non à cause d'erreurs. De nouveaux détails sont apparus - et l'éditeur a remplacé une formulation correcte par une autre. Par conséquent, nous nous sommes limités aux corrections avec une différence entre les versions de jusqu'à trois lettres (bien qu'il y ait encore du bruit ici: il a été "trouvé deux" - il est devenu "trouvé trois"). Nous avons donc marqué un million de fautes de frappe. Nous avons étudié d'abord sur cette grande sélection avec bruit, puis sur un petit marquage tolker sans bruit.

La qualité


Dans de telles tâches, il est habituel de mesurer l'exactitude et l'exhaustivité. Dans notre cas, la précision est la proportion de verdicts corrects parmi tous les verdicts concernant une erreur dans l'en-tête. Exhaustivité - la proportion d'en-têtes d'erreur que nous avons détectés parmi tous les en-têtes d'erreur. Cela et un autre dans le monde idéal devraient aspirer à 100%. Mais dans les tâches d'apprentissage automatique, ces indicateurs ont tendance à entrer en conflit. Autrement dit, plus nous tordons la précision, plus l'exhaustivité diminue. Et vice versa.

Dans notre approche précédente basée sur DSSM, nous avons déjà atteint une précision de 95% (soit 5% de verdicts faux positifs). C'est déjà un indicateur assez élevé. Par conséquent, nous avons décidé de maintenir le même niveau de précision et de voir comment l'intégralité change avec le nouveau modèle. Et elle est passée de 21 à 78%. Et c'est définitivement un succès.

Ici, il serait possible d'y mettre un terme, mais je me souviens de la promesse de parler d'attention.

RĂ©seau neuronal avec feutre


Il est généralement admis qu'un réseau de neurones est une telle boîte noire. Nous alimentons quelque chose à l'entrée et obtenons quelque chose à la sortie. Pourquoi et comment est un mystère.

Cette limitation vise à contourner les réseaux de neurones interprétés. BERT est l'un d'entre eux. Son interprétabilité réside dans le mécanisme d'attention. En gros, dans chaque couche du réseau neuronal, nous répétons la même technique: nous regardons les mots voisins avec une «attention» différente et prenons en compte l'interaction avec eux. Par exemple, lorsqu'un réseau de neurones traite le pronom «il», il «regarde attentivement» le nom auquel «il» fait référence.

L'image ci-dessous montre dans différentes nuances de rouge les mots que le jeton "regarde", ce qui accumule des informations sur l'intégralité du titre pour la couche de classificateur final. Si une faute de frappe dans le mot - l'attention le met en évidence, si les mots sont incohérents - alors les deux (et, éventuellement, en dépendent).



À cet endroit, d'ailleurs, on peut discerner tout le potentiel des réseaux de neurones. À aucun stade de la formation, notre modèle ne sait exactement où se trouve la faute de frappe dans l'exemple: il sait seulement que l'intégralité du titre est incorrect. Et pourtant, elle apprend qu'il est incorrect d'écrire «une école pour 1224 places» en raison d'un chiffre incohérent, et elle met spécifiquement en évidence le chiffre 4.

Nous ne nous sommes pas arrêtés aux fautes de frappe et avons commencé à appliquer une nouvelle approche non seulement pour rechercher les erreurs, mais aussi pour identifier les en-têtes obsolètes. Mais c'est une histoire complètement différente avec laquelle nous espérons revenir à Habr dans un proche avenir.

Liens utiles pour ceux qui veulent approfondir le sujet


Source: https://habr.com/ru/post/fr479662/


All Articles