{"id":53143,"date":"2019-11-24T00:00:00","date_gmt":"2019-11-23T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru"},"modified":"2020-02-18T14:01:00","modified_gmt":"2020-02-18T11:01:00","slug":"ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru","status":"publish","type":"post","link":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru","title":{"rendered":"Exploitation de l'apprentissage automatique au sein de Mail.ru","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Exploitation de l&#039;apprentissage automatique au sein de Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/ee5728dccb94b849ad3bfd9cf84ad74d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>S'inspirant de mes interventions lors de Highload++ et DataFest Minsk 2019.<\/i><\/p>\n<p>Pour beaucoup aujourd'hui, le courrier \u00e9lectronique est une partie int\u00e9grante de la vie en ligne. Gr\u00e2ce \u00e0 lui, nous menons des correspondances professionnelles, stockons diverses informations importantes li\u00e9es aux finances, aux r\u00e9servations d'h\u00f4tels, aux commandes et bien plus encore. Au milieu de l'ann\u00e9e 2018, nous avons formul\u00e9 une strat\u00e9gie produit pour le d\u00e9veloppement du courrier \u00e9lectronique. \u00c0 quoi devrait ressembler le courrier \u00e9lectronique moderne ?<\/p>\n<p>Le courrier \u00e9lectronique doit \u00eatre <b>intelligent<\/b>, c'est-\u00e0-dire aider les utilisateurs \u00e0 naviguer dans le volume croissant d'informations : filtrer, structurer et fournir celles-ci de la mani\u00e8re la plus conviviale possible. Il doit \u00eatre <b>utile<\/b>, permettant de r\u00e9soudre diverses t\u00e2ches directement dans la bo\u00eete mail, par exemple, payer des amendes (une fonctionnalit\u00e9 que je, regrettablement, utilise). Et bien s\u00fbr, le courrier \u00e9lectronique doit garantir la protection des informations, filtrant le spam et prot\u00e9geant contre les piratages, c'est-\u00e0-dire \u00eatre <b>s\u00e9curis\u00e9<\/b>.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nCes orientations d\u00e9terminent un certain nombre de t\u00e2ches cl\u00e9s, dont beaucoup peuvent \u00eatre efficacement r\u00e9solues par l'apprentissage automatique. Voici des exemples de fonctionnalit\u00e9s d\u00e9j\u00e0 en place, d\u00e9velopp\u00e9es dans le cadre de la strat\u00e9gie - une pour chaque orientation.<\/p>\n<ul>\n<li><b>R\u00e9ponse intelligente<\/b>. Le courrier \u00e9lectronique dispose d'une fonction de r\u00e9ponse intelligente. Le r\u00e9seau neuronal analyse le texte du message, comprend son sens et son objectif, et propose ainsi trois r\u00e9ponses les plus appropri\u00e9es : positive, n\u00e9gative et neutre. Cela permet de gagner beaucoup de temps pour r\u00e9pondre aux e-mails, tout en \u00e9tant souvent cr\u00e9atif et amusant dans les r\u00e9ponses.\n<\/li>\n<li><b>Regroupement d'e-mails<\/b>, li\u00e9s aux commandes dans les boutiques en ligne. Nous effectuons souvent des achats en ligne, et en g\u00e9n\u00e9ral, les magasins peuvent envoyer plusieurs e-mails pour chaque commande. Par exemple, AliExpress, le plus grand service, envoie beaucoup d'e-mails pour une seule commande, et nous avons constat\u00e9 qu'en situation terminale, leur nombre peut atteindre jusqu'\u00e0 29. C'est pourquoi, gr\u00e2ce \u00e0 un mod\u00e8le de reconnaissance d'entit\u00e9s nomm\u00e9es, nous extrayons le num\u00e9ro de commande et d'autres informations \u00e0 partir du texte et regroupons tous les e-mails dans une seule conversation. Nous affichons \u00e9galement les informations principales sur la commande dans un encadr\u00e9 s\u00e9par\u00e9, ce qui facilite la gestion de ce type d'e-mails.\n<p><img decoding=\"async\" alt=\"Exploitation de l&#039;apprentissage automatique au sein de Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/8b37b0bf0c0d152498027bc25d476128.jpg\" style=\"display:block;margin: 0 auto;\" \/>\n<\/li>\n<li><b>Anti-phishing<\/b>. Le phishing est un type de fraude particuli\u00e8rement dangereux, par lequel des malfaiteurs tentent de s'emparer d'informations financi\u00e8res (y compris des donn\u00e9es de cartes bancaires des utilisateurs) et de leurs identifiants. Ces courriers imitent les v\u00e9ritables messages envoy\u00e9s par des services, y compris visuellement. Gr\u00e2ce \u00e0 la vision par ordinateur, nous reconnaissons les logos et le style des courriers des grandes entreprises (comme Mail.ru, Sber, Alfa) et prenons cela en compte avec le texte et d'autres signes dans nos classificateurs de spam et de phishing.\n<\/li>\n<\/ul>\n<p><\/p>\n<h2>Apprentissage automatique<\/h2>\n<p>\nUn peu sur l'apprentissage automatique dans les courriers en g\u00e9n\u00e9ral. Les courriers sont un syst\u00e8me \u00e0 forte charge : en moyenne, environ 1,5 milliard de messages transitent par nos serveurs chaque jour pour 30 millions d'utilisateurs actifs quotidiens. Environ 30 syst\u00e8mes d'apprentissage automatique g\u00e8rent toutes les fonctions et fonctionnalit\u00e9s n\u00e9cessaires. <\/p>\n<p>Chaque message passe par un v\u00e9ritable processus de classification. D'abord, nous filtrons le spam et conservons les bons messages. Les utilisateurs ne remarquent souvent pas le fonctionnement de l'anti-spam, car 95 \u00e0 99 % du spam ne parvient m\u00eame pas dans le dossier appropri\u00e9. La d\u00e9tection du spam est une partie tr\u00e8s importante de notre syst\u00e8me, et la plus complexe, car dans le domaine de l'anti-spam, il y a une adaptation constante entre les syst\u00e8mes de protection et d'attaque, ce qui pr\u00e9sente un d\u00e9fi technique continu pour notre \u00e9quipe.<\/p>\n<p>Ensuite, nous s\u00e9parons les courriers des humains et des robots. Les courriers des humains sont les plus importants, c'est pourquoi nous leur proposons des fonctionnalit\u00e9s telles que la r\u00e9ponse intelligente. Les courriers des robots se divisent en deux cat\u00e9gories : transactionnels \u2014 ce sont des messages importants de services, par exemple, des confirmations d'achats ou de r\u00e9servations d'h\u00f4tel, des finances, et informatifs \u2014 ce sont des publicit\u00e9s commerciales, des r\u00e9ductions. <\/p>\n<p>Nous pensons que les courriers transactionnels sont aussi importants que les correspondances personnelles. Ils doivent \u00eatre facilement accessibles, car il est souvent n\u00e9cessaire de retrouver rapidement des informations sur une commande ou une r\u00e9servation de vol, et nous perdons du temps \u00e0 chercher ces messages. C'est pourquoi, pour plus de commodit\u00e9, nous les classons automatiquement en six cat\u00e9gories principales : voyages, commandes, finances, billets, inscriptions et, enfin, amendes.<\/p>\n<p>Les courriers d'information repr\u00e9sentent le groupe le plus nombreux et probablement le moins important, n'exigeant pas de r\u00e9action imm\u00e9diate, car rien de substantiel ne changera dans la vie de l'utilisateur s'il ne lit pas un tel message. Dans notre nouvelle interface, nous les regroupons en deux fils : les r\u00e9seaux sociaux et les newsletters, nettoyant visuellement la bo\u00eete de r\u00e9ception et n'affichant que les courriers importants.<\/p>\n<p><img decoding=\"async\" alt=\"Exploitation de l&#039;apprentissage automatique au sein de Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/175773879daaa29d1542a98070cb7972.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Exploitation<\/h3>\n<p>\nUn grand nombre de syst\u00e8mes entra\u00eene de nombreuses difficult\u00e9s d'exploitation. En effet, les mod\u00e8les se d\u00e9gradent avec le temps, tout comme tout logiciel : les fonctionnalit\u00e9s \u00e9chouent, les machines tombent en panne, et du code d\u00e9fectueux s'accumule. De plus, les donn\u00e9es \u00e9voluent constamment : de nouvelles donn\u00e9es sont ajout\u00e9es, le comportement des utilisateurs se transforme, etc. C'est pourquoi un mod\u00e8le sans le soutien appropri\u00e9 fonctionnera de moins en moins bien avec le temps. <\/p>\n<p>Il ne faut pas non plus oublier que plus l'apprentissage automatique p\u00e9n\u00e8tre dans la vie des utilisateurs, plus ces derniers influencent l'\u00e9cosyst\u00e8me, et par cons\u00e9quent, plus les pertes financi\u00e8res ou les b\u00e9n\u00e9fices peuvent \u00eatre importants pour les acteurs du march\u00e9. Ainsi, de plus en plus de secteurs s'adaptent au fonctionnement des algorithmes de ML (des exemples classiques incluent la publicit\u00e9, la recherche et le filtrage anti-spam d\u00e9j\u00e0 mentionn\u00e9).<\/p>\n<p>Les t\u00e2ches li\u00e9es \u00e0 l'apprentissage automatique ont \u00e9galement une particularit\u00e9 : m\u00eame un changement minime dans le syst\u00e8me peut entra\u00eener beaucoup de travail sur le mod\u00e8le : manipulation des donn\u00e9es, r\u00e9entra\u00eenement, d\u00e9ploiement, ce qui peut prendre des semaines ou des mois. Donc, plus l'environnement dans lequel vos mod\u00e8les op\u00e8rent change rapidement, plus leur support n\u00e9cessite d'efforts. L'\u00e9quipe peut cr\u00e9er de nombreux syst\u00e8mes et s'en r\u00e9jouir, puis d\u00e9penser presque toutes ses ressources pour les soutenir, sans possibilit\u00e9 de cr\u00e9er quelque chose de nouveau. Une fois, nous avons fait face \u00e0 une telle situation dans l'\u00e9quipe anti-spam. Et nous en sommes venus \u00e0 la conclusion \u00e9vidente que l'accompagnement doit \u00eatre automatis\u00e9.<\/p>\n<h3>Automatisation<\/h3>\n<p>\nQue peut-on automatiser ? En r\u00e9alit\u00e9, presque tout. J'ai identifi\u00e9 quatre domaines d\u00e9finissant l'infrastructure de l'apprentissage automatique :<\/p>\n<ul>\n<li>collecte de donn\u00e9es ;\n<\/li>\n<li>r\u00e9entra\u00eenement ;\n<\/li>\n<li>d\u00e9ploiement ;\n<\/li>\n<li>test &amp; monitoring.\n<\/li>\n<\/ul>\n<p>\nSi l'environnement est instable et en constante \u00e9volution, alors toute l'infrastructure autour du mod\u00e8le devient bien plus importante que le mod\u00e8le lui-m\u00eame. Cela peut \u00eatre un ancien et bon vieux classificateur lin\u00e9aire, mais si les caract\u00e9ristiques sont correctement int\u00e9gr\u00e9es et qu'un bon retour d'information des utilisateurs est \u00e9tabli, il fonctionnera beaucoup mieux que des mod\u00e8les \u00e0 la pointe de la technologie avec tous les accessoires.<\/p>\n<h4>Cycle de r\u00e9troaction<\/h4>\n<p>\nCe cycle r\u00e9unit la collecte de donn\u00e9es, le r\u00e9entra\u00eenement et le d\u00e9ploiement \u2014 en gros, tout le cycle de mise \u00e0 jour du mod\u00e8le. Pourquoi est-ce important ? Regardez le graphique des inscriptions par e-mail :<\/p>\n<p><img decoding=\"async\" alt=\"Exploitation de l&#039;apprentissage automatique au sein de Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/f3c98bd49a101754cf299821a40e2b8e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe d\u00e9veloppeur d'apprentissage automatique a impl\u00e9ment\u00e9 un mod\u00e8le anti-bot qui emp\u00eache les bots de s'inscrire par e-mail. Le graphique chute \u00e0 un niveau o\u00f9 seuls les utilisateurs r\u00e9els restent. Tout va bien ! Mais au bout de quatre heures, les spammeurs ajustent leurs scripts, et tout revient comme avant. Dans cette impl\u00e9mentation, le d\u00e9veloppeur a pass\u00e9 un mois \u00e0 ajouter des caract\u00e9ristiques et \u00e0 r\u00e9entra\u00eener le mod\u00e8le, mais le spammeur a pu s'adapter en quatre heures.<\/p>\n<p>Pour que cela ne devienne pas si douloureux et qu'il ne faille pas tout recommencer, il faut penser d\u00e8s le d\u00e9part \u00e0 la mani\u00e8re dont le cycle de r\u00e9troaction sera con\u00e7u et ce que nous ferons si l'environnement change. Commen\u00e7ons par la collecte de donn\u00e9es \u2014 c'est le carburant de nos algorithmes.<\/p>\n<h2>Collecte des donn\u00e9es<\/h2>\n<p>\nIl est clair qu'aux r\u00e9seaux neuronaux modernes, plus de donn\u00e9es il y a, mieux c'est, et elles sont, en fait, g\u00e9n\u00e9r\u00e9es par les utilisateurs du produit. Les utilisateurs peuvent nous aider en annotant des donn\u00e9es, mais il ne faut pas en abuser, car \u00e0 un moment donn\u00e9, les utilisateurs en auront assez de former vos mod\u00e8les et passeront \u00e0 un autre produit. <\/p>\n<p>Une des erreurs les plus fr\u00e9quentes (ici, je fais r\u00e9f\u00e9rence \u00e0 Andrew Ng) est une trop forte orientation sur les m\u00e9triques sur le jeu de test, et non sur le retour d'information des utilisateurs, qui est en r\u00e9alit\u00e9 la principale mesure de la qualit\u00e9 du travail, car nous cr\u00e9ons un produit pour l'utilisateur. Si l'utilisateur ne comprend pas ou n'aime pas le fonctionnement du mod\u00e8le, cela signifie que tout est vain. <\/p>\n<p>Ainsi, l'utilisateur doit toujours avoir la possibilit\u00e9 de voter, il faut lui donner un outil pour le retour d'information. Si nous pensons qu'un e-mail re\u00e7u concerne les finances, il doit \u00eatre \u00e9tiquet\u00e9 \u00ab finances \u00bb, et nous devons dessiner un bouton que l'utilisateur peut cliquer pour dire que ce n'est pas des finances.<\/p>\n<h3>Qualit\u00e9 du retour d'information<\/h3>\n<p>\nDiscutons de la qualit\u00e9 des retours utilisateurs. Tout d'abord, vous et l'utilisateur pouvez avoir des significations diff\u00e9rentes pour le m\u00eame concept. Par exemple, vous et les chefs de produit consid\u00e9rez que \u00ab finances \u00bb signifie des courriers de la banque, alors que l'utilisateur consid\u00e8re qu'une lettre de sa grand-m\u00e8re au sujet de la pension appartient aussi aux finances. Deuxi\u00e8mement, certains utilisateurs cliquent sans r\u00e9fl\u00e9chir sur des boutons sans aucune logique. Troisi\u00e8mement, l'utilisateur peut avoir de fausses conclusions. Un exemple frappant de notre exp\u00e9rience est l'impl\u00e9mentation d'un classificateur <noindex><a rel=\"nofollow\" href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9D%D0%B8%D0%B3%D0%B5%D1%80%D0%B8%D0%B9%D1%81%D0%BA%D0%B8%D0%B5_%D0%BF%D0%B8%D1%81%D1%8C%D0%BC%D0%B0\">de spam nig\u00e9rian<\/a><\/noindex>, un type de spam plut\u00f4t amusant, o\u00f9 l'utilisateur se voit proposer de r\u00e9cup\u00e9rer plusieurs millions de dollars d'un lointain parent soudainement trouv\u00e9 en Afrique. Apr\u00e8s l'impl\u00e9mentation de ce classificateur, nous avons v\u00e9rifi\u00e9 les clics sur \u00ab Non spam \u00bb pour ces courriers, et il s'est av\u00e9r\u00e9 que 80 % d'entre eux \u00e9taient du v\u00e9ritable spam nig\u00e9rian, ce qui indique que les utilisateurs peuvent \u00eatre extr\u00eamement na\u00effs.<\/p>\n<p>Et n'oublions pas que les boutons peuvent \u00eatre cliqu\u00e9s non seulement par des humains, mais aussi par des bots qui se font passer pour des navigateurs. Par cons\u00e9quent, un retour brut n'est pas acceptable pour l'apprentissage. Que peut-on faire avec ces informations ?<\/p>\n<p>Nous appliquons deux approches : <\/p>\n<ul>\n<li><b>Le retour d'un ML associ\u00e9<\/b>. Par exemple, nous avons un syst\u00e8me anti-bot en ligne qui, comme je l'ai d\u00e9j\u00e0 mentionn\u00e9, prend des d\u00e9cisions rapides sur la base d'un nombre limit\u00e9 de caract\u00e9ristiques. Et il existe un deuxi\u00e8me syst\u00e8me, plus lent, qui fonctionne a posteriori. Il a plus de donn\u00e9es sur l'utilisateur, son comportement, etc. Par cons\u00e9quent, il prend la d\u00e9cision la plus r\u00e9fl\u00e9chie, ayant ainsi une meilleure pr\u00e9cision et exhaustivit\u00e9. On peut rediriger la diff\u00e9rence de fonctionnement de ces syst\u00e8mes vers le premier comme donn\u00e9es d'apprentissage. Ainsi, le syst\u00e8me plus simple cherchera toujours \u00e0 se rapprocher de la performance du syst\u00e8me plus complexe.\n<\/li>\n<li><b>Classification des clics<\/b>. On peut simplement classer chaque clic utilisateur, \u00e9valuer sa validit\u00e9 et son potentiel d'utilisation. C'est ce que nous faisons dans l'anti-spam des e-mails, en utilisant des caract\u00e9ristiques de l'utilisateur, son historique, des attributs de l'exp\u00e9diteur, le texte lui-m\u00eame et le r\u00e9sultat du travail des classificateurs. Au final, nous obtenons un syst\u00e8me automatis\u00e9 qui valide les retours d'exp\u00e9rience des utilisateurs. Et comme il doit \u00eatre r\u00e9entra\u00een\u00e9 beaucoup moins souvent, son fonctionnement peut devenir la base pour tous les autres syst\u00e8mes. La priorit\u00e9 principale dans ce mod\u00e8le est la pr\u00e9cision, car entra\u00eener le mod\u00e8le sur des donn\u00e9es inexactes peut avoir des cons\u00e9quences. \n<\/li>\n<\/ul>\n<p>\nTant que nous nettoyons les donn\u00e9es et que nous r\u00e9entra\u00eenons nos syst\u00e8mes de ML, nous ne devons pas oublier les utilisateurs, car pour nous des milliers, des millions d'erreurs sur le graphique repr\u00e9sentent des statistiques, alors que pour l'utilisateur, chaque bug est une trag\u00e9die. En plus du fait que l'utilisateur doit vivre avec votre erreur dans le produit, il s'attend \u00e0 ce qu'apr\u00e8s un retour d'exp\u00e9rience, une telle situation soit \u00e9vit\u00e9e \u00e0 l'avenir. Il est donc toujours important d'offrir aux utilisateurs non seulement la possibilit\u00e9 de voter, mais aussi de corriger le comportement des syst\u00e8mes de ML, en cr\u00e9ant, par exemple, des heuristiques personnalis\u00e9es pour chaque clic de retour, dans le cas des emails, cela pourrait \u00eatre la possibilit\u00e9 de filtrer de tels messages par exp\u00e9diteur et par sujet pour cet utilisateur.<\/p>\n<p>Il est \u00e9galement n\u00e9cessaire, sur la base de certains rapports ou demandes au support, de bricoler le mod\u00e8le de mani\u00e8re semi-automatique ou manuelle, afin que d'autres utilisateurs ne souffrent pas de probl\u00e8mes similaires.<\/p>\n<h3>Heuristiques pour l'apprentissage<\/h3>\n<p>\nAvec ces heuristiques et bricolages, il existe deux probl\u00e8mes. Le premier est que le nombre croissant de bricolages est difficile \u00e0 maintenir, sans parler de leur qualit\u00e9 et de leur fonctionnement \u00e0 long terme. Le deuxi\u00e8me probl\u00e8me est que l'erreur peut ne pas \u00eatre fr\u00e9quente, et quelques clics pour r\u00e9entra\u00eener le mod\u00e8le peuvent ne pas suffire. Il semblerait que ces deux effets non li\u00e9s pourraient \u00eatre consid\u00e9rablement att\u00e9nu\u00e9s en appliquant l'approche suivante.<\/p>\n<ol>\n<li>Cr\u00e9ons un bricolage temporaire. \n<\/li>\n<li>Nous envoyons les donn\u00e9es de celui-ci dans le mod\u00e8le, il est r\u00e9guli\u00e8rement r\u00e9entra\u00een\u00e9, y compris sur les donn\u00e9es obtenues. Ici, il est bien s\u00fbr important que l'heuristique ait une haute pr\u00e9cision pour ne pas diminuer la qualit\u00e9 des donn\u00e9es dans l'ensemble d'entra\u00eenement. \n<\/li>\n<li>Ensuite, nous mettons en place un suivi pour le contournement, et si apr\u00e8s un certain temps le contournement ne fonctionne plus et est enti\u00e8rement couvert par le mod\u00e8le, alors nous pouvons le supprimer sans crainte. Il est peu probable que ce probl\u00e8me se reproduise maintenant.\n<\/li>\n<\/ol>\n<p>\nAinsi, l'arm\u00e9e de contournements est tr\u00e8s utile. L'essentiel est que leur service soit temporaire et non permanent. <\/p>\n<h2>Apprentissage suppl\u00e9mentaire<\/h2>\n<p>\nL'apprentissage suppl\u00e9mentaire est le processus d'ajout de nouvelles donn\u00e9es, obtenues gr\u00e2ce aux retours des utilisateurs ou d'autres syst\u00e8mes, et d'apprentissage sur ces donn\u00e9es \u00e0 partir du mod\u00e8le existant. L'apprentissage suppl\u00e9mentaire peut pr\u00e9senter plusieurs probl\u00e8mes :<\/p>\n<ol>\n<li>Le mod\u00e8le peut simplement ne pas supporter l'apprentissage suppl\u00e9mentaire et ne pouvoir apprendre que depuis le d\u00e9but. \n<\/li>\n<li>Nulle part dans la nature il n'est \u00e9crit que l'apprentissage suppl\u00e9mentaire am\u00e9liorera n\u00e9cessairement la qualit\u00e9 du travail en production. Il arrive souvent que ce soit le contraire qui se produise, c'est-\u00e0-dire qu'une d\u00e9gradation soit possible.\n<\/li>\n<li>Les changements peuvent \u00eatre impr\u00e9visibles. C'est un point assez d\u00e9licat que nous avons identifi\u00e9. M\u00eame si un nouveau mod\u00e8le dans un test A\/B montre des r\u00e9sultats similaires \u00e0 ceux de l'actuel, cela ne signifie pas qu'il fonctionnera de la m\u00eame mani\u00e8re. Leur fonctionnement peut diff\u00e9rer d'un petit pourcentage, ce qui pourrait introduire de nouvelles erreurs ou ramener d'anciennes erreurs d\u00e9j\u00e0 corrig\u00e9es. Avec les erreurs actuelles, nous, ainsi que les utilisateurs, savons d\u00e9j\u00e0 vivre, et lorsque de nombreuses nouvelles erreurs apparaissent, l'utilisateur peut \u00e9galement \u00eatre perdu, car il s'attend \u00e0 un comportement pr\u00e9visible.\n<\/li>\n<\/ol>\n<p>\nAinsi, le plus important dans l'apprentissage suppl\u00e9mentaire est d'am\u00e9liorer le mod\u00e8le de mani\u00e8re garantie, ou au moins de ne pas le d\u00e9grader. <\/p>\n<p>La premi\u00e8re chose qui vient \u00e0 l'esprit quand nous parlons d'apprentissage suppl\u00e9mentaire est l'approche de l'apprentissage actif. Que cela signifie-t-il ? Par exemple, un classificateur d\u00e9termine si un e-mail concerne les finances, et autour de sa fronti\u00e8re de prise de d\u00e9cision, nous ajoutons un \u00e9chantillon d'exemples annot\u00e9s. Cela fonctionne bien, par exemple, en publicit\u00e9, o\u00f9 il y a beaucoup de retours et o\u00f9 l'on peut former le mod\u00e8le en ligne. Mais si les retours sont rares, nous obtenons un \u00e9chantillon tr\u00e8s biais\u00e9 par rapport \u00e0 la distribution des donn\u00e9es en production, sur lequel il est impossible d'\u00e9valuer le comportement du mod\u00e8le en exploitation.<\/p>\n<p><img decoding=\"async\" alt=\"Exploitation de l&#039;apprentissage automatique au sein de Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/fd1b3e07bfaf896dde3248e43537f61a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn r\u00e9alit\u00e9, notre objectif est de maintenir les anciens mod\u00e8les d\u00e9j\u00e0 connus et d'en acqu\u00e9rir de nouveaux. La continuit\u00e9 est essentielle ici. Le mod\u00e8le que nous avons souvent d\u00e9ploy\u00e9 avec beaucoup de difficult\u00e9 est d\u00e9j\u00e0 op\u00e9rationnel, donc nous pouvons nous baser sur ses performances. <\/p>\n<p>Dans les emails, nous utilisons diff\u00e9rents mod\u00e8les : arbres, lin\u00e9aires, r\u00e9seaux de neurones. Pour chacun, nous d\u00e9veloppons notre propre algorithme de raffinement. Au cours de ce processus, nous acqu\u00e9rons non seulement de nouvelles donn\u00e9es, mais souvent de nouvelles caract\u00e9ristiques que nous prendrons en compte dans tous les algorithmes suivants.<\/p>\n<h3>Mod\u00e8les lin\u00e9aires<\/h3>\n<p>\nPrenons par exemple une r\u00e9gression logistique. Nous construisons la perte du mod\u00e8le \u00e0 partir des composants suivants :<\/p>\n<ul>\n<li>LogLoss sur de nouvelles donn\u00e9es ;\n<\/li>\n<li>nous r\u00e9gularisons les poids des nouvelles caract\u00e9ristiques (nous ne touchons pas aux anciennes) ;\n<\/li>\n<li>nous apprenons \u00e9galement sur les anciennes donn\u00e9es pour conserver les anciens mod\u00e8les ;\n<\/li>\n<li>et, sans doute, le plus important : nous appliquons l'Harmonique Regularization, qui garantit que les poids ne changent pas trop par rapport au mod\u00e8le ancien selon la norme.\n<\/li>\n<\/ul>\n<p>\nPuisque chaque composant de perte a des coefficients, nous pouvons choisir les valeurs optimales pour notre t\u00e2che lors de la validation crois\u00e9e ou en fonction des exigences produit.<\/p>\n<p><img decoding=\"async\" alt=\"Exploitation de l&#039;apprentissage automatique au sein de Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/00ae86d23afb780f5e260e61f833d4bd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Arbres<\/h3>\n<p>\nPassons aux arbres de d\u00e9cision. Nous avons \u00e9labor\u00e9 l'algorithme suivant pour le raffinement des arbres :<\/p>\n<ol>\n<li>En production, il y a une for\u00eat de 100 \u00e0 300 arbres, entra\u00een\u00e9e sur l'ancien jeu de donn\u00e9es.\n<\/li>\n<li>\u00c0 la fin, nous en supprimons M = 5 et ajoutons 2M = 10 nouveaux, entra\u00een\u00e9s sur tout le jeu de donn\u00e9es, mais avec un poids \u00e9lev\u00e9 sur les nouvelles donn\u00e9es, ce qui garantit naturellement un changement incr\u00e9mentiel du mod\u00e8le.\n<\/li>\n<\/ol>\n<p>\nIl est \u00e9vident qu'avec le temps, le nombre d'arbres augmente consid\u00e9rablement, et il est n\u00e9cessaire de les r\u00e9duire p\u00e9riodiquement pour rester dans les d\u00e9lais. Pour cela, nous utilisons le d\u00e9sormais omnipr\u00e9sent Knowledge Distillation (KD). Un bref expos\u00e9 sur son principe de fonctionnement.<\/p>\n<ol>\n<li>Nous avons le mod\u00e8le \u00ab complexe \u00bb actuel. Nous le lan\u00e7ons sur le jeu de donn\u00e9es d'entra\u00eenement et obtenons la distribution des probabilit\u00e9s des classes en sortie.\n<\/li>\n<li>Ensuite, nous enseignons au mod\u00e8le \u00e9l\u00e8ve (un mod\u00e8le avec moins d'arbres dans ce cas) \u00e0 reproduire les r\u00e9sultats du mod\u00e8le en utilisant la distribution des classes comme variable cible.\n<\/li>\n<li>Il est important de noter que nous n'utilisons pas de structure de jeu de donn\u00e9es, ce qui nous permet d'utiliser des donn\u00e9es arbitraires. \u00c9videmment, nous utilisons un \u00e9chantillon de donn\u00e9es du flux de production comme jeu d'entra\u00eenement pour le mod\u00e8le apprenant. Ainsi, l'ensemble d'entra\u00eenement nous permet d'assurer la pr\u00e9cision du mod\u00e8le, tandis que l'\u00e9chantillon du flux garantit une performance similaire en production, compensant le biais de l'ensemble d'entra\u00eenement.\n<\/li>\n<\/ol>\n<p>\n<img decoding=\"async\" alt=\"Exploitation de l&#039;apprentissage automatique au sein de Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/3fdfcb9b1e5a6fa824226a429afc475a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa combinaison de ces deux m\u00e9thodologies (ajout d'arbres et r\u00e9duction p\u00e9riodique de leur nombre gr\u00e2ce \u00e0 la distillation des connaissances) assure l'introduction de nouveaux mod\u00e8les et une continuit\u00e9 compl\u00e8te.<\/p>\n<p>Gr\u00e2ce \u00e0 la distillation des connaissances, nous effectuons \u00e9galement des op\u00e9rations de distinction sur les caract\u00e9ristiques du mod\u00e8le, par exemple, la suppression de caract\u00e9ristiques et le traitement des valeurs manquantes. Dans notre cas, nous avons un certain nombre de caract\u00e9ristiques statistiques importantes (concernant les exp\u00e9diteurs, les hachages de texte, les URL, etc.) qui sont stock\u00e9es dans une base de donn\u00e9es pr\u00e9sentant des risques de refus. Naturellement, le mod\u00e8le n'est pas pr\u00e9par\u00e9 \u00e0 cette situation, car il n'y a pas de cas de refus dans l'ensemble d'entra\u00eenement. Dans de tels cas, nous combinons les techniques de distillation des connaissances et d'augmentation : lors de l'entra\u00eenement, pour une partie des donn\u00e9es, nous supprimons ou mettons \u00e0 z\u00e9ro les caract\u00e9ristiques n\u00e9cessaires, alors que les \u00e9tiquettes (sorties du mod\u00e8le actuel) restent initiales, le mod\u00e8le apprenant apprend \u00e0 reproduire cette distribution.<\/p>\n<p><img decoding=\"async\" alt=\"Exploitation de l&#039;apprentissage automatique au sein de Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/5e1f5af9a359646a49f4fe88ffed1025.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNous avons remarqu\u00e9 que plus une manipulation des mod\u00e8les est s\u00e9rieuse, plus il est n\u00e9cessaire d'avoir un \u00e9chantillon de flux en pourcentage.<\/p>\n<p>Pour la suppression de caract\u00e9ristiques, l'op\u00e9ration la plus simple, il suffit d'une petite partie du flux, car seules quelques caract\u00e9ristiques changent et le mod\u00e8le actuel a \u00e9t\u00e9 form\u00e9 sur le m\u00eame ensemble - la diff\u00e9rence est minimale. Pour simplifier le mod\u00e8le (r\u00e9duire le nombre d'arbres de plusieurs fois), il faut d\u00e9j\u00e0 50 pour 50. Et pour les valeurs manquantes des caract\u00e9ristiques statistiques importantes, qui affectent s\u00e9rieusement la performance du mod\u00e8le, il faut encore plus de flux pour \u00e9quilibrer le travail du nouveau mod\u00e8le robuste face aux valeurs manquantes sur tous les types de courriers. <\/p>\n<p><img decoding=\"async\" alt=\"Exploitation de l&#039;apprentissage automatique au sein de Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/8f3729cfff43be9ecdc47d532daa8d6f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>FastText<\/h3>\n<p>\nPassons \u00e0 FastText. Je rappelle que la repr\u00e9sentation (Embedding) d'un mot consiste en la somme de l'embedding du mot lui-m\u00eame et de tous ses N-grams de lettres, g\u00e9n\u00e9ralement des trigrammes. \u00c9tant donn\u00e9 qu'il peut y avoir beaucoup de trigrammes, on utilise le Bucket Hashing, c'est-\u00e0-dire la transformation de tout l'espace en une certaine table de hachage fixe. En fin de compte, la matrice de poids obtient une dimension du nombre de mots + nombre de seaux pour la couche interne. <\/p>\n<p>Lors du r\u00e9entra\u00eenement, de nouvelles caract\u00e9ristiques apparaissent : des mots et des trigrammes. Lors du r\u00e9entra\u00eenement standard propos\u00e9 par Facebook, rien de substantiel ne se passe. Seuls les anciens poids sont r\u00e9entra\u00een\u00e9s avec la cross-entropy sur de nouvelles donn\u00e9es. Ainsi, de nouvelles caract\u00e9ristiques ne sont pas utilis\u00e9es, ce qui, bien s\u00fbr, entra\u00eene tous les inconv\u00e9nients mentionn\u00e9s ci-dessus, li\u00e9s \u00e0 l'impr\u00e9visibilit\u00e9 du mod\u00e8le en production. C'est pourquoi nous avons l\u00e9g\u00e8rement am\u00e9lior\u00e9 FastText. Nous ajoutons tous les nouveaux poids (mots et trigrammes), nous r\u00e9entra\u00eenons toute la matrice avec la cross-entropy et nous ajoutons une r\u00e9gularisation harmonique, en analogie avec le mod\u00e8le lin\u00e9aire, qui garantit un changement insignifiant des anciens poids.<\/p>\n<p><img decoding=\"async\" alt=\"Exploitation de l&#039;apprentissage automatique au sein de Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/4491639587d1c91ac91d77b587ee0111.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>CNN<\/h3>\n<p>\nIl est un peu plus complexe de travailler avec des r\u00e9seaux de neurones convolutifs. Si dans les CNN les derni\u00e8res couches sont r\u00e9entra\u00een\u00e9es, alors bien s\u00fbr, on peut appliquer une r\u00e9gularisation harmonique et garantir la continuit\u00e9. Cependant, si un r\u00e9entra\u00eenement du r\u00e9seau entier est n\u00e9cessaire, il devient impossible d'appliquer cette r\u00e9gularisation \u00e0 toutes les couches. Toutefois, il existe une option d'apprentissage d'embeddings compl\u00e9mentaires via Triplet Loss (<noindex><a rel=\"nofollow\" href=\"https:\/\/arxiv.org\/abs\/1503.03832\">article original<\/a><\/noindex>).<\/p>\n<h4>Triplet Loss<\/h4>\n<p>\nPrenons l'exemple de la t\u00e2che d'anti-phishing pour discuter en termes g\u00e9n\u00e9raux du Triplet Loss. Prenons notre logo, ainsi que des exemples positifs et n\u00e9gatifs de logos d'autres entreprises. Nous minimisons la distance entre les premiers et maximisons la distance entre les seconds, en laissant un l\u00e9ger \u00e9cart pour assurer une plus grande compacit\u00e9 des classes. <\/p>\n<p><img decoding=\"async\" alt=\"Exploitation de l&#039;apprentissage automatique au sein de Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/dc8547fa042286798eb5c2f0887c4da6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSi nous r\u00e9entra\u00eenons le r\u00e9seau, l'espace m\u00e9trique change compl\u00e8tement, devenant compl\u00e8tement incompatible avec le pr\u00e9c\u00e9dent. C'est un probl\u00e8me s\u00e9rieux dans les t\u00e2ches utilisant des vecteurs. Pour contourner ce probl\u00e8me, nous allons m\u00e9langer les anciens embeddings pendant l'apprentissage.<\/p>\n<p>Nous avons ajout\u00e9 de nouvelles donn\u00e9es au jeu d'entra\u00eenement et nous entra\u00eenons la deuxi\u00e8me version du mod\u00e8le depuis le d\u00e9but. Lors de la deuxi\u00e8me \u00e9tape, nous proc\u00e9dons au fine-tuning de notre r\u00e9seau : d'abord, nous entra\u00eenons la derni\u00e8re couche, puis nous d\u00e9gelons tout le r\u00e9seau. Dans le processus de cr\u00e9ation des triplets, seules certaines des embeddings sont calcul\u00e9es \u00e0 l'aide du mod\u00e8le entra\u00een\u00e9, les autres le sont avec l'ancien mod\u00e8le. Ainsi, lors du fine-tuning, nous assurons la compatibilit\u00e9 des espaces m\u00e9triques v1 et v2. C'est une sorte de regularisation harmonique.<\/p>\n<p><img decoding=\"async\" alt=\"Exploitation de l&#039;apprentissage automatique au sein de Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/854d4fcc97775b24e6863cc38743cd27.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Architecture globale<\/h3>\n<p>\nSi l'on consid\u00e8re l'ensemble du syst\u00e8me \u00e0 travers l'exemple de l'anti-spam, les mod\u00e8les ne sont pas isol\u00e9s, mais imbriqu\u00e9s les uns dans les autres. Nous prenons des images, du texte et d'autres caract\u00e9ristiques, puis nous obtenons des embeddings gr\u00e2ce \u00e0 CNN et Fast Text. Ensuite, des classificateurs sont appliqu\u00e9s sur les embeddings, qui produisent des scores pour diff\u00e9rentes classes (types de courriers, spam, pr\u00e9sence de logo). Les scores et les caract\u00e9ristiques sont ensuite pass\u00e9s dans une for\u00eat d'arbres pour prendre la d\u00e9cision finale. Des classificateurs distincts dans ce sch\u00e9ma permettent une meilleure interpr\u00e9tation des r\u00e9sultats du syst\u00e8me et un fine-tuning plus pr\u00e9cis des composants en cas de probl\u00e8me, plut\u00f4t que de soumettre toutes les donn\u00e9es brutes aux arbres de d\u00e9cision.<\/p>\n<p><img decoding=\"async\" alt=\"Exploitation de l&#039;apprentissage automatique au sein de Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/30effc5ef7398db5f085b6dd415647d3.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn fin de compte, nous garantissons la continuit\u00e9 \u00e0 chaque niveau. Au niveau inf\u00e9rieur dans CNN et Fast Text, nous utilisons la regularisation harmonique, pour les classificateurs au milieu \u2014 \u00e9galement la regularisation harmonique et l'\u00e9talonnage des scores pour la compatibilit\u00e9 de la distribution des probabilit\u00e9s. Quant au boosting des arbres, il est entra\u00een\u00e9 de mani\u00e8re incr\u00e9mentale ou par le biais de la distillation des connaissances.<\/p>\n<p>Dans l'ensemble, le support d'un tel syst\u00e8me de machine learning imbriqu\u00e9 pose g\u00e9n\u00e9ralement des probl\u00e8mes, car tout composant au niveau inf\u00e9rieur entra\u00eene la mise \u00e0 jour de tout le syst\u00e8me au-dessus. Cependant, comme dans notre configuration, chaque composant change l\u00e9g\u00e8rement et est compatible avec le pr\u00e9c\u00e9dent, l'ensemble du syst\u00e8me peut \u00eatre mis \u00e0 jour par petits morceaux sans avoir besoin de r\u00e9-entra\u00eener toute la structure, ce qui permet de le maintenir sans un s\u00e9rieux overhead. <\/p>\n<h2>D\u00e9ployer<\/h2>\n<p>\nNous avons examin\u00e9 la collecte de donn\u00e9es et le fine-tuning de diff\u00e9rents types de mod\u00e8les, nous allons donc passer \u00e0 leur d\u00e9ploiement en environnement de production.<\/p>\n<h3>A\/B testing<\/h3>\n<p>\nComme je l'ai mentionn\u00e9 pr\u00e9c\u00e9demment, lors de la collecte des donn\u00e9es, nous avons g\u00e9n\u00e9ralement un \u00e9chantillon biais\u00e9, ce qui rend impossible l'\u00e9valuation des performances en production du mod\u00e8le. Par cons\u00e9quent, lors du d\u00e9ploiement, il est imp\u00e9ratif de comparer le mod\u00e8le avec la version pr\u00e9c\u00e9dente pour comprendre comment les choses se passent r\u00e9ellement, c'est-\u00e0-dire de r\u00e9aliser des tests A\/B. En fait, le processus de d\u00e9ploiement et d'analyse des graphiques est assez routinier et se pr\u00eate parfaitement \u00e0 l'automatisation. Nous d\u00e9ployons nos mod\u00e8les progressivement sur 5 %, 30 %, 50 % et 100 % des utilisateurs, tout en collectant toutes les m\u00e9triques disponibles sur les r\u00e9ponses du mod\u00e8le et les retours des utilisateurs. En cas d'explosions s\u00e9rieuses, nous r\u00e9tablissons automatiquement le mod\u00e8le, et pour les autres cas, apr\u00e8s avoir obtenu suffisamment de clics des utilisateurs, nous prenons la d\u00e9cision d'augmenter le pourcentage. Au final, nous amenons le nouveau mod\u00e8le \u00e0 50 % des utilisateurs enti\u00e8rement automatiquement, et le d\u00e9ploiement \u00e0 l'ensemble du public est approuv\u00e9 par une personne, bien que cette \u00e9tape puisse \u00e9galement \u00eatre automatis\u00e9e.<\/p>\n<p>Cependant, le processus des tests A\/B repr\u00e9sente un champ d'optimisation. En effet, chaque test A\/B est assez long (dans notre cas, il dure entre 6 et 24 heures en fonction de la quantit\u00e9 de retours), ce qui le rend assez co\u00fbteux et avec des ressources limit\u00e9es. De plus, un pourcentage \u00e9lev\u00e9 de flux est n\u00e9cessaire pour le test, afin d'acc\u00e9l\u00e9rer le temps total du test A\/B (obtenir un \u00e9chantillon statistiquement significatif pour \u00e9valuer les m\u00e9triques avec un petit pourcentage peut prendre beaucoup de temps), ce qui rend le nombre de slots A\/B extr\u00eamement limit\u00e9. Il est \u00e9vident que nous devons uniquement tester les mod\u00e8les les plus prometteurs, dont nous obtenons beaucoup lors du processus de r\u00e9entra\u00eenement.<\/p>\n<p>Pour r\u00e9soudre ce probl\u00e8me, nous avons form\u00e9 un classificateur distinct qui pr\u00e9dit le succ\u00e8s du test A\/B. Pour cela, nous utilisons des statistiques de prise de d\u00e9cision, la pr\u00e9cision, le rappel et d'autres m\u00e9triques sur l'ensemble d'apprentissage, sur l'ensemble de validation et sur un \u00e9chantillon du flux. Nous comparons \u00e9galement le mod\u00e8le avec celui actuellement en production, avec des heuristiques, et prenons en compte la complexit\u00e9 du mod\u00e8le. En utilisant toutes ces caract\u00e9ristiques, le classificateur form\u00e9 sur l'historique des tests \u00e9value les mod\u00e8les candidats, dans notre cas, ce sont des for\u00eats d'arbres, et prend la d\u00e9cision de savoir lequel d'entre eux doit \u00eatre inclus dans le test A\/B. <\/p>\n<p><img decoding=\"async\" alt=\"Exploitation de l&#039;apprentissage automatique au sein de Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/41b121987209a663075be399e83f5a50.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGr\u00e2ce \u00e0 cette approche, nous avons pu multiplier par plusieurs fois le nombre de tests A\/B r\u00e9ussis.<\/p>\n<h3>Test et surveillance<\/h3>\n<p>\n\u00c9tonnamment, tester et surveiller ne nuisent pas \u00e0 notre sant\u00e9, au contraire, cela am\u00e9liore les choses et r\u00e9duit le stress. Les tests permettent de pr\u00e9venir les pannes, tandis que la surveillance permet de les d\u00e9tecter \u00e0 temps, minimisant ainsi leur impact sur les utilisateurs.<\/p>\n<p>Il est important de comprendre qu'\u00e0 un moment donn\u00e9, votre syst\u00e8me fera toujours des erreurs \u2014 cela fait partie du cycle de d\u00e9veloppement de tout logiciel. Au d\u00e9but du d\u00e9veloppement, de nombreux bogues affligent le syst\u00e8me tant que la phase des innovations majeures n'est pas termin\u00e9e. Cependant, avec le temps, l'entropie prend le dessus, et les erreurs r\u00e9apparaissent \u2014 en raison de la d\u00e9gradation des composants environnants et des changements dans les donn\u00e9es, comme je l'ai mentionn\u00e9 au d\u00e9but.<\/p>\n<p>Je voudrais souligner que tout syst\u00e8me d'apprentissage automatique doit \u00eatre \u00e9valu\u00e9 en termes de rentabilit\u00e9 sur l'ensemble de son cycle de vie. Le graphique ci-dessous montre un exemple du fonctionnement d'un syst\u00e8me de d\u00e9tection d'un type rare de spam (la ligne est proche de z\u00e9ro sur le graphique). \u00c0 un moment donn\u00e9, \u00e0 cause d'une caract\u00e9ristique mal mise en cache, le syst\u00e8me a dysfonctionn\u00e9. Malheureusement, il n'y avait pas de surveillance pour d\u00e9tecter l'activation anormale, ce qui a conduit le syst\u00e8me \u00e0 classer un grand nombre de courriers dans le dossier \"spam\" juste \u00e0 la limite de prise de d\u00e9cision. Malgr\u00e9 la correction des cons\u00e9quences, le syst\u00e8me a d\u00e9j\u00e0 fait tant d'erreurs qu'il ne sera pas rentable m\u00eame apr\u00e8s cinq ans. C'est un \u00e9chec total du point de vue du cycle de vie du mod\u00e8le. <\/p>\n<p><img decoding=\"async\" alt=\"Exploitation de l&#039;apprentissage automatique au sein de Mail.ru\" src=\"\/wp-content\/uploads\/2019\/11\/65efd799537ceea3761cabc3a764ba90.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAinsi, une chose aussi simple que la surveillance peut devenir cruciale pour la vie du mod\u00e8le. En plus des m\u00e9triques standard et \u00e9videntes, nous examinons la distribution des r\u00e9ponses et des scores du mod\u00e8le, ainsi que la distribution des valeurs des caract\u00e9ristiques cl\u00e9s. \u00c0 l'aide de la divergence KL, nous pouvons comparer la distribution actuelle avec l'historique ou les valeurs d'un test A\/B avec le reste du flux, ce qui permet de d\u00e9tecter des anomalies dans le mod\u00e8le et de revenir en arri\u00e8re sur les modifications en temps opportun.<\/p>\n<p>Dans la plupart des cas, nous lan\u00e7ons nos premi\u00e8res versions de syst\u00e8mes \u00e0 l'aide d'heuristiques simples ou de mod\u00e8les que nous utilisons ensuite pour la surveillance. Par exemple, nous surveillons un mod\u00e8le NER par rapport aux expressions r\u00e9guli\u00e8res pour des magasins en ligne sp\u00e9cifiques, et si la couverture du classificateur diminue par rapport \u00e0 celles-ci, nous enqu\u00eatons sur les raisons. Une autre utilisation utile des heuristiques !<\/p>\n<h2>R\u00e9sultats<\/h2>\n<p>\nRepassons sur les id\u00e9es cl\u00e9s de l'article.<\/p>\n<ul>\n<li><b>Fibd\u00e9c<\/b>. Nous pensons toujours \u00e0 l'utilisateur : comment il vivra avec nos erreurs, comment il pourra les signaler. N'oublions pas que les utilisateurs ne sont pas une source de feedback pur pour l'apprentissage des mod\u00e8les, et il est n\u00e9cessaire de le filtrer \u00e0 l'aide de syst\u00e8mes ML auxiliaires. S'il n'est pas possible de recueillir de signaux de l'utilisateur, nous recherchons des sources alternatives de feedback, par exemple, des syst\u00e8mes connexes. \n<\/li>\n<li><b>Apprentissage suppl\u00e9mentaire<\/b>. Ici, l'essentiel est la continuit\u00e9, donc nous nous appuyons sur le mod\u00e8le de production actuel. Nous formons les nouveaux mod\u00e8les de mani\u00e8re \u00e0 ce qu'ils ne diff\u00e8rent pas trop de l'ancien gr\u00e2ce \u00e0 la r\u00e9gularisation harmonique et \u00e0 des astuces similaires.<\/li>\n<li><b>D\u00e9ployer<\/b>. L'auto-d\u00e9ploiement bas\u00e9 sur les m\u00e9triques r\u00e9duit consid\u00e9rablement le temps n\u00e9cessaire \u00e0 la mise en \u0153uvre des mod\u00e8les. La surveillance des statistiques et de la distribution des d\u00e9cisions, ainsi que le nombre de faux positifs de la part des utilisateurs, est indispensable pour votre tranquillit\u00e9 d'esprit et vos week-ends productifs.\n<\/li>\n<\/ul>\n<p>\nEh bien, j'esp\u00e8re que ce que vous avez lu vous aidera \u00e0 am\u00e9liorer plus rapidement vos syst\u00e8mes ML, \u00e0 acc\u00e9l\u00e9rer leur mise sur le march\u00e9 et \u00e0 les rendre plus fiables, r\u00e9duisant ainsi le stress li\u00e9 au travail.<br \/>\n<br \/>Source : <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/476714\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043c\u043e\u0438\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0439 \u043d\u0430 Highload++ \u0438 DataFest Minsk 2019 \u0433. \u0414\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u0441\u0435\u0433\u043e\u0434\u043d\u044f \u043f\u043e\u0447\u0442\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u043e\u0442\u044a\u0435\u043c\u043b\u0435\u043c\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0436\u0438\u0437\u043d\u0438 \u0432 \u0441\u0435\u0442\u0438. \u0421 \u0435\u0435 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u044b \u0432\u0435\u0434\u0435\u043c \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0435\u0440\u0435\u043f\u0438\u0441\u043a\u0443, \u0445\u0440\u0430\u043d\u0438\u043c \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0443\u044e \u0432\u0430\u0436\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u0443\u044e \u0441 \u0444\u0438\u043d\u0430\u043d\u0441\u0430\u043c\u0438, \u0431\u0440\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043e\u0442\u0435\u043b\u0435\u0439, \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435\u043c \u0437\u0430\u043a\u0430\u0437\u043e\u0432 \u0438 \u043c\u043d\u043e\u0433\u0438\u043c \u0434\u0440\u0443\u0433\u0438\u043c. \u0412 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 2018 \u0433\u043e\u0434\u0430 \u043c\u044b \u0441\u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432\u0443\u044e \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u043f\u043e\u0447\u0442\u044b. \u041a\u0430\u043a\u043e\u0439 \u0436\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-53143","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043c\u043e\u0438\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0439 \u043d\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0432 \u041f\u043e\u0447\u0442\u0435 Mail.ru | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043c\u043e\u0438\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0439 \u043d\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-11-23T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:01:00+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47L'exploitation de l'apprentissage automatique chez Mail.ru | ProHoster","description":"Inspir\u00e9 de mes interventions sur.","canonical_url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"fr_FR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u042d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044f \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0433\u043e \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0432 \u041f\u043e\u0447\u0442\u0435 Mail.ru | ProHoster","og:description":"\u041f\u043e \u043c\u043e\u0442\u0438\u0432\u0430\u043c \u043c\u043e\u0438\u0445 \u0432\u044b\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0439 \u043d\u0430.","og:url":"https:\/\/prohoster.info\/fr\/blog\/administrirovanie\/ekspluatatsiya-mashinnogo-obucheniya-v-pochte-mail-ru","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-11-23T21:00:00+00:00","article:modified_time":"2020-02-18T11:01:00+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"53143","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 06:14:20","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:30:25","updated":"2026-01-24 06:14:20","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/53143","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=53143"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/53143\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=53143"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=53143"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=53143"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}