Fonctionnement de l'apprentissage automatique dans Mail.ru Mail

Fonctionnement de l'apprentissage automatique dans Mail.ru Mail

Basé sur mes discours à Highload++ et DataFest Minsk 2019.

Aujourd’hui, pour beaucoup, le courrier fait partie intégrante de la vie en ligne. Avec son aide, nous effectuons la correspondance commerciale, stockons toutes sortes d'informations importantes liées aux finances, aux réservations d'hôtel, aux commandes et bien plus encore. Mi-2018, nous avons formulé une stratégie produit pour le développement du courrier. À quoi devrait ressembler le courrier moderne ?

Le courrier doit être intelligent, c'est-à-dire aider les utilisateurs à naviguer dans le volume croissant d'informations : les filtrer, les structurer et les fournir de la manière la plus pratique. Elle doit être utile, vous permettant de résoudre diverses tâches directement dans votre boîte aux lettres, par exemple payer des amendes (une fonction que j'utilise malheureusement). Et en même temps, bien sûr, le courrier doit assurer la protection des informations, en éliminant le spam et en protégeant contre le piratage, c'est-à-dire être en sécurité.

Ces domaines définissent un certain nombre de problèmes clés, dont beaucoup peuvent être résolus efficacement grâce à l’apprentissage automatique. Voici des exemples de fonctionnalités déjà existantes développées dans le cadre de la stratégie - une pour chaque direction.

  • Réponse intelligente. Mail dispose d'une fonction de réponse intelligente. Le réseau de neurones analyse le texte de la lettre, comprend sa signification et son objectif et propose ainsi les trois options de réponse les plus appropriées : positive, négative et neutre. Cela permet de gagner beaucoup de temps lors de la réponse aux lettres et de répondre souvent de manière non standard et amusante.
  • Regrouper les e-mailsliés aux commandes dans les magasins en ligne. Nous achetons souvent en ligne et, en règle générale, les magasins peuvent envoyer plusieurs e-mails pour chaque commande. Par exemple, depuis AliExpress, le plus grand service, de nombreuses lettres arrivent pour une seule commande, et nous avons calculé que dans le boîtier du terminal, leur nombre pourrait atteindre jusqu'à 29. Par conséquent, en utilisant le modèle de reconnaissance d'entité nommée, nous extrayons le numéro de commande. et d'autres informations du texte et regroupez toutes les lettres dans un seul fil. Nous affichons également les informations de base sur la commande dans un encadré séparé, ce qui facilite le travail avec ce type d'e-mail.

    Fonctionnement de l'apprentissage automatique dans Mail.ru Mail

  • Anti hameçonnage. Le phishing est un type d’e-mail frauduleux particulièrement dangereux, à l’aide duquel les attaquants tentent d’obtenir des informations financières (y compris les cartes bancaires de l’utilisateur) et des identifiants. De telles lettres imitent les vraies envoyées par le service, y compris visuellement. Par conséquent, avec l'aide de Computer Vision, nous reconnaissons les logos et le style de conception des lettres des grandes entreprises (par exemple, Mail.ru, Sber, Alfa) et en tenons compte ainsi que le texte et d'autres caractéristiques dans nos classificateurs de spam et de phishing. .

Apprentissage automatique

Un peu sur l'apprentissage automatique dans le courrier électronique en général. Le courrier est un système très chargé : en moyenne 1,5 milliard de lettres transitent chaque jour sur nos serveurs pour 30 millions d'utilisateurs de DAU. Environ 30 systèmes d'apprentissage automatique prennent en charge toutes les fonctions et fonctionnalités nécessaires.

Chaque lettre passe par tout un pipeline de classification. Tout d’abord, nous supprimons le spam et laissons de bons e-mails. Souvent, les utilisateurs ne remarquent pas le travail de l'antispam, car 95 à 99 % des spams ne finissent même pas dans le dossier approprié. La reconnaissance du spam est une partie très importante de notre système, et la plus difficile, car dans le domaine de l'anti-spam, il y a une adaptation constante entre les systèmes de défense et d'attaque, ce qui constitue un défi d'ingénierie continu pour notre équipe.

Ensuite, nous séparons les lettres des personnes et des robots. Les e-mails des personnes sont les plus importants, c'est pourquoi nous leur proposons des fonctionnalités telles que Smart Reply. Les lettres des robots sont divisées en deux parties : transactionnelle - ce sont des lettres importantes provenant de services, par exemple des confirmations d'achats ou de réservations d'hôtel, des finances et informationnelles - ce sont des publicités commerciales, des remises.

Nous pensons que les e-mails transactionnels sont tout aussi importants que la correspondance personnelle. Elles doivent être à portée de main, car nous avons souvent besoin de trouver rapidement des informations sur une commande ou une réservation de billet d'avion, et nous passons du temps à chercher ces lettres. Par conséquent, pour plus de commodité, nous les divisons automatiquement en six catégories principales : voyages, commandes, finances, billets, inscriptions et, enfin, amendes.

Les lettres d'information constituent le groupe le plus important et probablement le moins important, qui ne nécessitent pas de réponse immédiate, car rien de significatif ne changera dans la vie de l'utilisateur s'il ne lit pas une telle lettre. Dans notre nouvelle interface, nous les réduisons en deux fils : réseaux sociaux et newsletters, effaçant ainsi visuellement la boîte de réception et ne laissant visibles que les messages importants.

Fonctionnement de l'apprentissage automatique dans Mail.ru Mail

exploitation

Un grand nombre de systèmes entraîne de nombreuses difficultés de fonctionnement. Après tout, les modèles se dégradent avec le temps, comme tout logiciel : les fonctionnalités tombent en panne, les machines tombent en panne, le code devient tordu. De plus, les données changent constamment : de nouvelles sont ajoutées, les modèles de comportement des utilisateurs sont transformés, etc., de sorte qu'un modèle sans support approprié fonctionnera de moins en moins bien avec le temps.

Nous ne devons pas oublier que plus l’apprentissage automatique pénètre profondément dans la vie des utilisateurs, plus leur impact sur l’écosystème est grand et, par conséquent, plus les acteurs du marché peuvent subir de pertes financières ou de bénéfices. Ainsi, dans un nombre croissant de domaines, les acteurs s'adaptent au travail des algorithmes ML (des exemples classiques sont la publicité, la recherche et l'antispam déjà mentionné).

Aussi, les tâches de machine learning ont une particularité : tout changement, même mineur, dans le système peut générer beaucoup de travail avec le modèle : travail avec les données, recyclage, déploiement, ce qui peut prendre des semaines ou des mois. Par conséquent, plus l’environnement dans lequel vos modèles fonctionnent évolue rapidement, plus leur maintenance nécessite d’efforts. Une équipe peut créer de nombreux systèmes et s'en réjouir, mais ensuite consacrer la quasi-totalité de ses ressources à leur maintenance, sans avoir la possibilité de faire quoi que ce soit de nouveau. Nous avons déjà rencontré une telle situation au sein de l’équipe antispam. Et ils ont tiré la conclusion évidente que le support doit être automatisé.

Automation

Que peut-on automatiser ? Presque tout, en fait. J'ai identifié quatre domaines qui définissent l'infrastructure d'apprentissage automatique :

  • collecte de données;
  • entrainement supplémentaire;
  • déployer;
  • tests et surveillance.

Si l’environnement est instable et en constante évolution, alors l’ensemble de l’infrastructure autour du modèle s’avère bien plus important que le modèle lui-même. Il s'agit peut-être d'un bon vieux classificateur linéaire, mais si vous lui donnez les bonnes fonctionnalités et obtenez de bons retours de la part des utilisateurs, il fonctionnera bien mieux que les modèles de pointe avec toutes les fonctionnalités.

Boucle de rétroaction

Ce cycle combine la collecte de données, la formation supplémentaire et le déploiement – ​​en fait, l'ensemble du cycle de mise à jour du modèle. Pourquoi c'est important? Consultez le planning d'inscription par mail :

Fonctionnement de l'apprentissage automatique dans Mail.ru Mail

Un développeur de machine learning a mis en œuvre un modèle anti-bot qui empêche les robots de s'enregistrer dans les e-mails. Le graphique tombe à une valeur où seuls les utilisateurs réels restent. Tout est bon! Mais quatre heures s'écoulent, les robots peaufinent leurs scripts et tout redevient normal. Dans cette implémentation, le développeur a passé un mois à ajouter des fonctionnalités et à recycler le modèle, mais le spammeur a pu s'adapter en quatre heures.

Afin de ne pas être si atrocement douloureux et de ne pas avoir à tout refaire plus tard, nous devons d'abord réfléchir à ce à quoi ressemblera la boucle de rétroaction et à ce que nous ferons si l'environnement change. Commençons par collecter des données : c'est le carburant de nos algorithmes.

Collecte de données

Il est clair que pour les réseaux de neurones modernes, plus il y a de données, mieux c'est, et elles sont en fait générées par les utilisateurs du produit. Les utilisateurs peuvent nous aider en marquant les données, mais nous ne pouvons pas en abuser, car à un moment donné, les utilisateurs en auront assez de compléter vos modèles et passeront à un autre produit.

L'une des erreurs les plus courantes (je fais ici référence à Andrew Ng) est de trop se concentrer sur les métriques de l'ensemble de données de test, et non sur les commentaires de l'utilisateur, qui est en fait la principale mesure de la qualité du travail, puisque nous créons un produit pour l'utilisateur. Si l'utilisateur ne comprend pas ou n'aime pas le travail du modèle, alors tout est gâché.

Par conséquent, l’utilisateur doit toujours pouvoir voter et doit disposer d’un outil de feedback. Si nous pensons qu'une lettre liée à la finance est arrivée dans la boîte aux lettres, nous devons la marquer « finance » et dessiner un bouton sur lequel l'utilisateur peut cliquer et dire qu'il ne s'agit pas de finance.

Qualité des commentaires

Parlons de la qualité des retours des utilisateurs. Premièrement, vous et l’utilisateur pouvez associer des significations différentes à un seul concept. Par exemple, vous et vos chefs de produit pensez que « finance » signifie des lettres de la banque, et l'utilisateur pense qu'une lettre de grand-mère concernant sa pension fait également référence à la finance. Deuxièmement, il y a des utilisateurs qui aiment appuyer sur des boutons sans aucune logique. Troisièmement, l'utilisateur peut se tromper profondément dans ses conclusions. Un exemple frappant de notre pratique est la mise en œuvre d'un classificateur Spam nigérian, un type de spam très amusant dans lequel l'utilisateur est invité à prendre plusieurs millions de dollars à un parent éloigné soudainement retrouvé en Afrique. Après avoir mis en œuvre ce classificateur, nous avons vérifié les clics « Pas de spam » sur ces e-mails, et il s'est avéré que 80 % d'entre eux étaient du spam nigérian juteux, ce qui suggère que les utilisateurs peuvent être extrêmement crédules.

Et n’oublions pas que les boutons peuvent être cliqués non seulement par des personnes, mais aussi par toutes sortes de robots qui se font passer pour un navigateur. Les commentaires bruts ne sont donc pas bons pour l’apprentissage. Que pouvez-vous faire avec ces informations ?

Nous utilisons deux approches :

  • Commentaires du ML lié. Par exemple, nous disposons d’un système anti-bot en ligne qui, comme je l’ai mentionné, prend une décision rapide sur la base d’un nombre limité de signes. Et il existe un deuxième système, lent, qui fonctionne après coup. Il contient plus de données sur l'utilisateur, son comportement, etc. En conséquence, la décision la plus éclairée est prise et, par conséquent, elle est plus précise et plus complète. Vous pouvez orienter la différence dans le fonctionnement de ces systèmes vers le premier en tant que données de formation. Ainsi, un système plus simple tentera toujours de se rapprocher des performances d’un système plus complexe.
  • Classement des clics. Vous pouvez simplement classer chaque clic d'utilisateur, évaluer sa validité et sa convivialité. Nous faisons cela dans le courrier antispam, en utilisant les attributs de l'utilisateur, son historique, les attributs de l'expéditeur, le texte lui-même et le résultat des classificateurs. En conséquence, nous obtenons un système automatique qui valide les commentaires des utilisateurs. Et comme il a besoin d'être recyclé beaucoup moins fréquemment, son travail peut devenir la base de tous les autres systèmes. La principale priorité de ce modèle est la précision, car entraîner le modèle sur des données inexactes est lourd de conséquences.

Pendant que nous nettoyons les données et perfectionnons nos systèmes ML, nous ne devons pas oublier les utilisateurs, car pour nous, des milliers, des millions d'erreurs sur le graphique sont des statistiques, et pour l'utilisateur, chaque bug est une tragédie. Outre le fait que l'utilisateur doit d'une manière ou d'une autre vivre avec votre erreur dans le produit, après avoir reçu des commentaires, il s'attend à ce qu'une situation similaire soit éliminée à l'avenir. Par conséquent, il vaut toujours la peine de donner aux utilisateurs non seulement la possibilité de voter, mais aussi de corriger le comportement des systèmes ML, en créant, par exemple, une heuristique personnelle pour chaque clic de feedback ; dans le cas du courrier, cela pourrait être la possibilité de filtrer ces lettres par expéditeur et titre pour cet utilisateur.

Vous devez également créer un modèle basé sur certains rapports ou demandes de support en mode semi-automatique ou manuel afin que les autres utilisateurs ne souffrent pas de problèmes similaires.

Heuristiques pour l'apprentissage

Ces heuristiques et ces béquilles posent deux problèmes. La première est que le nombre toujours croissant de béquilles est difficile à entretenir, sans parler de leur qualité et de leurs performances sur le long terme. Le deuxième problème est que l'erreur peut ne pas être fréquente et que quelques clics pour entraîner davantage le modèle ne suffiront pas. Il semblerait que ces deux effets non liés puissent être neutralisés de manière significative si l’approche suivante est appliquée.

  1. Nous créons une béquille temporaire.
  2. Nous en envoyons des données au modèle, il se met régulièrement à jour, y compris sur les données reçues. Ici, bien sûr, il est important que les heuristiques aient une grande précision afin de ne pas réduire la qualité des données dans l'ensemble de formation.
  3. Ensuite, nous réglons la surveillance pour déclencher la béquille, et si après un certain temps la béquille ne fonctionne plus et est complètement recouverte par le modèle, vous pouvez la retirer en toute sécurité. Il est peu probable que ce problème se reproduise.

Une armée de béquilles est donc très utile. L'essentiel est que leur service soit urgent et non permanent.

Entrainement supplémentaire

Le recyclage est le processus d'ajout de nouvelles données obtenues à la suite des commentaires des utilisateurs ou d'autres systèmes, et de formation d'un modèle existant sur celles-ci. Il peut y avoir plusieurs problèmes avec une formation complémentaire :

  1. Le modèle peut tout simplement ne pas prendre en charge une formation supplémentaire, mais apprendre uniquement à partir de zéro.
  2. Nulle part dans le livre de la nature il n'est écrit qu'une formation supplémentaire améliorera certainement la qualité du travail en production. Souvent, c'est le contraire qui se produit, c'est-à-dire que seule une détérioration est possible.
  3. Les changements peuvent être imprévisibles. C’est un point assez subtil que nous avons identifié nous-mêmes. Même si un nouveau modèle lors d’un test A/B montre des résultats similaires à celui actuel, cela ne signifie pas qu’il fonctionnera de manière identique. Leur travail peut différer d'un pour cent seulement, ce qui peut entraîner de nouvelles erreurs ou renvoyer d'anciennes erreurs déjà corrigées. Nous et les utilisateurs savons déjà comment vivre avec les erreurs actuelles, et lorsqu'un grand nombre de nouvelles erreurs surviennent, l'utilisateur peut également ne pas comprendre ce qui se passe, car il s'attend à un comportement prévisible.

Par conséquent, le plus important dans la formation complémentaire est de veiller à ce que le modèle soit amélioré, ou du moins pas détérioré.

La première chose qui vient à l’esprit lorsqu’on parle de formation complémentaire est l’approche Active Learning. Qu'est-ce que cela signifie? Par exemple, le classificateur détermine si un e-mail est lié à la finance, et autour de sa limite de décision, nous ajoutons un échantillon d'exemples étiquetés. Cela fonctionne bien, par exemple, dans la publicité, où il y a beaucoup de retours et où vous pouvez former le modèle en ligne. Et s'il y a peu de retours, nous obtenons alors un échantillon très biaisé par rapport à la distribution des données de production, sur la base duquel il est impossible d'évaluer le comportement du modèle en fonctionnement.

Fonctionnement de l'apprentissage automatique dans Mail.ru Mail

En effet, notre objectif est de conserver les anciens modèles, les modèles déjà connus, et d'en acquérir de nouveaux. La continuité est importante ici. Le modèle, que nous avons souvent déployé avec beaucoup de soin, fonctionne déjà et nous pouvons donc nous concentrer sur ses performances.

Différents modèles sont utilisés dans le courrier : arbres, linéaires, réseaux de neurones. Pour chacun, nous créons notre propre algorithme de formation supplémentaire. Au cours du processus de formation complémentaire, nous recevons non seulement de nouvelles données, mais aussi souvent de nouvelles fonctionnalités, que nous prendrons en compte dans tous les algorithmes ci-dessous.

Modèles linéaires

Disons que nous avons une régression logistique. Nous créons un modèle de perte à partir des composants suivants :

  • LogLoss sur les nouvelles données ;
  • on régularise les poids des nouvelles fonctionnalités (on ne touche pas aux anciennes) ;
  • nous apprenons également des anciennes données afin de préserver les anciens modèles ;
  • et, peut-être, la chose la plus importante : nous ajoutons la régularisation harmonique, qui garantit que les poids ne changeront pas beaucoup par rapport à l'ancien modèle selon la norme.

Étant donné que chaque composant de perte a des coefficients, nous pouvons sélectionner les valeurs optimales pour notre tâche par validation croisée ou en fonction des exigences du produit.

Fonctionnement de l'apprentissage automatique dans Mail.ru Mail

Деревья

Passons aux arbres de décision. Nous avons compilé l'algorithme suivant pour une formation supplémentaire des arbres :

  1. La production exploite une forêt de 100 à 300 arbres, entraînée sur un ancien ensemble de données.
  2. A la fin nous supprimons M = 5 morceaux et en ajoutons 2M = 10 nouveaux, entraînés sur l'ensemble des données, mais avec un poids élevé pour les nouvelles données, ce qui garantit naturellement un changement incrémentiel dans le modèle.

Évidemment, avec le temps, le nombre d'arbres augmente considérablement et il faut les réduire périodiquement afin de respecter les délais. Pour ce faire, nous utilisons la désormais omniprésente Knowledge Distillation (KD). En bref sur le principe de son fonctionnement.

  1. Nous avons le modèle « complexe » actuel. Nous l'exécutons sur l'ensemble de données d'entraînement et obtenons la distribution de probabilité de classe en sortie.
  2. Ensuite, nous entraînons le modèle étudiant (le modèle avec moins d’arbres dans ce cas) pour qu’il répète les résultats du modèle en utilisant la distribution des classes comme variable cible.
  3. Il est important de noter ici que nous n’utilisons en aucun cas le balisage des ensembles de données et que nous pouvons donc utiliser des données arbitraires. Bien entendu, nous utilisons un échantillon de données du flux de combat comme échantillon de formation pour le modèle étudiant. Ainsi, l'ensemble d'apprentissage nous permet de garantir l'exactitude du modèle, et l'échantillon de flux garantit une performance similaire sur la distribution de production, compensant le biais de l'ensemble d'apprentissage.

Fonctionnement de l'apprentissage automatique dans Mail.ru Mail

La combinaison de ces deux techniques (ajout d'arbres et réduction périodique de leur nombre grâce à la Distillation des Connaissances) assure l'introduction de nouveaux modèles et une continuité complète.

Avec l'aide de KD, nous effectuons également différentes opérations sur les fonctionnalités du modèle, telles que la suppression de fonctionnalités et le travail sur les lacunes. Dans notre cas, nous avons un certain nombre de fonctionnalités statistiques importantes (par expéditeurs, hachages de texte, URL, etc.) stockées dans la base de données, qui ont tendance à échouer. Bien entendu, le modèle n'est pas prêt pour un tel développement d'événements, car les situations d'échec ne se produisent pas dans l'ensemble de formation. Dans de tels cas, nous combinons les techniques de KD et d'augmentation : lors de la formation d'une partie des données, nous supprimons ou réinitialisons les fonctionnalités nécessaires, et nous prenons les étiquettes d'origine (sorties du modèle actuel), et le modèle étudiant apprend à répéter cette distribution .

Fonctionnement de l'apprentissage automatique dans Mail.ru Mail

Nous avons remarqué que plus la manipulation du modèle est sérieuse, plus le pourcentage d'échantillon de thread requis est élevé.

La suppression de fonctionnalités, l'opération la plus simple, ne nécessite qu'une petite partie du flux, car seules quelques fonctionnalités changent et le modèle actuel a été formé sur le même ensemble - la différence est minime. Pour simplifier le modèle (en réduisant plusieurs fois le nombre d'arbres), il en faut déjà 50 à 50. Et pour les omissions de caractéristiques statistiques importantes qui affecteront sérieusement les performances du modèle, encore plus de flux est nécessaire pour niveler le travail du nouveau modèle résistant aux omissions sur tous types de lettres.

Fonctionnement de l'apprentissage automatique dans Mail.ru Mail

Texte rapide

Passons à FastText. Permettez-moi de vous rappeler que la représentation (Embedding) d'un mot consiste en la somme de l'incorporation du mot lui-même et de toutes ses lettres N-grammes, généralement des trigrammes. Comme il peut y avoir un grand nombre de trigrammes, le Bucket Hashing est utilisé, c'est-à-dire convertir tout l'espace en une certaine table de hachage fixe. En conséquence, la matrice de poids est obtenue avec la dimension de la couche interne par nombre de mots + seaux.

Avec une formation complémentaire, de nouveaux signes apparaissent : des mots et des trigrammes. Rien d’important ne se passe dans la formation de suivi standard de Facebook. Seuls les anciens poids avec entropie croisée sont recyclés sur les nouvelles données. Ainsi, les nouvelles fonctionnalités ne sont pas utilisées ; bien entendu, cette approche présente tous les inconvénients décrits ci-dessus associés à l'imprévisibilité du modèle en production. C'est pourquoi nous avons légèrement modifié FastText. Nous ajoutons tous les nouveaux poids (mots et trigrammes), développons la matrice entière avec entropie croisée et ajoutons une régularisation harmonique par analogie avec le modèle linéaire, qui garantit un changement insignifiant dans les anciens poids.

Fonctionnement de l'apprentissage automatique dans Mail.ru Mail

CNN

Les réseaux convolutifs sont un peu plus compliqués. Si les dernières couches sont complétées dans le CNN, alors, bien sûr, vous pouvez appliquer une régularisation harmonique et garantir la continuité. Mais si une formation supplémentaire de l’ensemble du réseau est nécessaire, alors une telle régularisation ne peut plus s’appliquer à toutes les couches. Cependant, il existe une option pour former des intégrations complémentaires via Triplet Loss (article original).

Triple perte

En prenant comme exemple une tâche anti-phishing, examinons la perte de triplet en termes généraux. Nous prenons notre logo, ainsi que des exemples positifs et négatifs de logos d'autres entreprises. Nous minimisons la distance entre les premiers et maximisons la distance entre les seconds, nous le faisons avec un petit écart pour assurer une plus grande compacité des classes.

Fonctionnement de l'apprentissage automatique dans Mail.ru Mail

Si nous entraînons davantage le réseau, alors notre espace métrique change complètement et il devient complètement incompatible avec le précédent. Il s’agit d’un problème sérieux dans les problèmes utilisant des vecteurs. Pour contourner ce problème, nous mélangerons d’anciens plongements lors de la formation.

Nous avons ajouté de nouvelles données à l'ensemble de formation et formons la deuxième version du modèle à partir de zéro. Lors de la deuxième étape, nous formons davantage notre réseau (Finetuning) : d'abord la dernière couche est complétée, puis l'ensemble du réseau est dégelé. Dans le processus de composition des triplets, nous calculons seulement une partie des plongements à l'aide du modèle formé, le reste - en utilisant l'ancien. Ainsi, dans le cadre d'une formation complémentaire, nous nous assurons de la compatibilité des espaces métriques v1 et v2. Une version unique de régularisation harmonique.

Fonctionnement de l'apprentissage automatique dans Mail.ru Mail

Architecture entière

Si l’on considère l’ensemble du système en utilisant l’antispam comme exemple, alors les modèles ne sont pas isolés, mais imbriqués les uns dans les autres. Nous prenons des photos, du texte et d'autres fonctionnalités, en utilisant CNN et Fast Text, nous obtenons des intégrations. Ensuite, des classificateurs sont appliqués au-dessus des intégrations, qui fournissent des scores pour différentes classes (types de lettres, spam, présence d'un logo). Les signaux et panneaux pénètrent déjà dans la forêt d'arbres pour que la décision finale soit prise. Les classificateurs individuels de ce schéma permettent de mieux interpréter les résultats du système et plus spécifiquement de recycler les composants en cas de problèmes, plutôt que d'introduire toutes les données dans des arbres de décision sous une forme brute.

Fonctionnement de l'apprentissage automatique dans Mail.ru Mail

Nous garantissons ainsi la continuité à tous les niveaux. Au niveau inférieur dans CNN et Fast Text, nous utilisons la régularisation harmonique, pour les classificateurs du milieu, nous utilisons également la régularisation harmonique et l'étalonnage du taux pour assurer la cohérence de la distribution de probabilité. Eh bien, la stimulation des arbres est entraînée progressivement ou en utilisant la distillation des connaissances.

En général, maintenir un tel système d’apprentissage automatique imbriqué est généralement pénible, car tout composant situé au niveau inférieur entraîne une mise à jour de l’ensemble du système situé au-dessus. Mais comme dans notre configuration, chaque composant change légèrement et est compatible avec le précédent, l'ensemble du système peut être mis à jour pièce par pièce sans qu'il soit nécessaire de recycler l'ensemble de la structure, ce qui lui permet d'être pris en charge sans frais généraux importants.

Déployer

Nous avons discuté de la collecte de données et de la formation supplémentaire sur différents types de modèles, nous passons donc à leur déploiement dans l'environnement de production.

Tests A/B

Comme je l'ai dit plus tôt, lors du processus de collecte de données, nous obtenons généralement un échantillon biaisé, à partir duquel il est impossible d'évaluer les performances de production du modèle. Ainsi, lors du déploiement, il faut comparer le modèle avec la version précédente afin de comprendre comment les choses se passent réellement, c'est-à-dire réaliser des tests A/B. En fait, le processus de déploiement et d’analyse des graphiques est assez routinier et peut être facilement automatisé. Nous déployons progressivement nos modèles à 5 %, 30 %, 50 % et 100 % des utilisateurs, tout en collectant toutes les mesures disponibles sur les réponses des modèles et les commentaires des utilisateurs. Dans le cas de certaines valeurs aberrantes graves, nous annulons automatiquement le modèle, et pour d'autres cas, après avoir collecté un nombre suffisant de clics d'utilisateurs, nous décidons d'augmenter le pourcentage. En conséquence, nous apportons le nouveau modèle à 50 % des utilisateurs de manière entièrement automatique, et le déploiement auprès de l'ensemble du public sera approuvé par une personne, bien que cette étape puisse être automatisée.

Cependant, le processus de test A/B offre une marge d’optimisation. Le fait est que tout test A/B est assez long (dans notre cas, cela prend de 6 à 24 heures selon le nombre de retours), ce qui le rend assez coûteux et avec des ressources limitées. De plus, un pourcentage de flux suffisamment élevé pour le test est requis pour accélérer essentiellement la durée globale du test A/B (le recrutement d'un échantillon statistiquement significatif pour évaluer les métriques à un faible pourcentage peut prendre très longtemps), ce qui rend le nombre d'emplacements A/B extrêmement limité. Évidemment, nous devons tester uniquement les modèles les plus prometteurs, dont nous recevons beaucoup au cours du processus de formation complémentaire.

Pour résoudre ce problème, nous avons formé un classificateur distinct qui prédit le succès d'un test A/B. Pour ce faire, nous prenons comme caractéristiques les statistiques de prise de décision, la précision, le rappel et d'autres métriques sur l'ensemble d'entraînement, sur l'ensemble différé et sur l'échantillon du flux. Nous comparons également le modèle avec celui actuellement en production, avec des heuristiques, et prenons en compte la complexité du modèle. Grâce à toutes ces fonctionnalités, un classificateur formé à l'historique des tests évalue les modèles candidats, dans notre cas il s'agit de forêts d'arbres, et décide lequel utiliser dans le test A/B.

Fonctionnement de l'apprentissage automatique dans Mail.ru Mail

Au moment de la mise en œuvre, cette approche nous a permis d’augmenter plusieurs fois le nombre de tests A/B réussis.

Tests et surveillance

Curieusement, les tests et la surveillance ne nuisent pas à notre santé, bien au contraire, ils l'améliorent et nous soulagent d'un stress inutile. Les tests vous permettent de prévenir une panne et la surveillance vous permet de la détecter à temps pour réduire l'impact sur les utilisateurs.

Il est important de comprendre ici que tôt ou tard, votre système fera toujours des erreurs - cela est dû au cycle de développement de tout logiciel. Au début du développement du système, il y a toujours beaucoup de bugs jusqu'à ce que tout se stabilise et que l'étape principale de l'innovation soit terminée. Mais au fil du temps, l'entropie fait des ravages et des erreurs réapparaissent - en raison de la dégradation des composants et des modifications des données, dont j'ai parlé au début.

Ici, je voudrais souligner que tout système d'apprentissage automatique doit être considéré du point de vue de son profit tout au long de son cycle de vie. Le graphique ci-dessous montre un exemple de la manière dont le système fonctionne pour détecter un type rare de spam (la ligne du graphique est proche de zéro). Un jour, à cause d’un attribut mal mis en cache, elle est devenue folle. Par chance, aucun déclenchement anormal n'a été surveillé et le système a donc commencé à enregistrer de grandes quantités de courriers dans le dossier « spam » au niveau de la limite de prise de décision. Même s’il a corrigé les conséquences, le système a déjà commis tellement d’erreurs qu’il ne sera pas rentabilisé, même en cinq ans. Et c'est un échec complet du point de vue du cycle de vie du modèle.

Fonctionnement de l'apprentissage automatique dans Mail.ru Mail

Par conséquent, une chose aussi simple que la surveillance peut devenir essentielle dans la vie d’un modèle. En plus des métriques standard et évidentes, nous considérons la distribution des réponses et des scores du modèle, ainsi que la distribution des valeurs des caractéristiques clés. En utilisant la divergence KL, nous pouvons comparer la distribution actuelle avec la distribution historique ou les valeurs du test A/B avec le reste du flux, ce qui nous permet de remarquer des anomalies dans le modèle et d'annuler les modifications en temps opportun.

Dans la plupart des cas, nous lançons nos premières versions de systèmes en utilisant des heuristiques ou des modèles simples que nous utiliserons comme surveillance à l'avenir. Par exemple, nous surveillons le modèle NER par rapport aux modèles habituels pour des magasins en ligne spécifiques, et si la couverture du classificateur diminue par rapport à eux, nous en comprenons les raisons. Une autre utilisation utile de l’heuristique !

Les résultats de

Reprenons les idées clés de l'article.

  • Fibdeck. Nous pensons toujours à l'utilisateur : comment il vivra avec nos erreurs, comment il pourra les signaler. N'oubliez pas que les utilisateurs ne sont pas une source de pur retour d'information pour les modèles de formation et qu'il doit être effacé à l'aide de systèmes ML auxiliaires. S'il n'est pas possible de collecter un signal de l'utilisateur, nous recherchons alors des sources alternatives de retour, par exemple des systèmes connectés.
  • Entrainement supplémentaire. L’essentiel ici est la continuité, c’est pourquoi nous nous appuyons sur le modèle de production actuel. Nous formons de nouveaux modèles afin qu'ils ne diffèrent pas beaucoup du précédent en raison de la régularisation harmonique et d'astuces similaires.
  • Déployer. Le déploiement automatique basé sur des métriques réduit considérablement le temps de mise en œuvre des modèles. Suivi des statistiques et répartition des prises de décision, le nombre de chutes des utilisateurs est obligatoire pour votre sommeil réparateur et votre week-end productif.

Eh bien, j'espère que cela vous aidera à améliorer vos systèmes ML plus rapidement, à les commercialiser plus rapidement et à les rendre plus fiables et moins stressants.

Source: habr.com

Ajouter un commentaire