Comment j'ai aidé Alice à ne pas répondre à d'autres noms. Stage Yandex

Salut, Habr. Je m'appelle Aleksey Rak, je suis le développeur de l'assistant vocal Alice au bureau de Minsk de Yandex. J'ai obtenu ce poste en allant ici dans la même équipe pour un stage de trois mois l'année dernière. Je vais te parler d'elle. Si vous souhaitez l'essayer vous-même, voici un lien vers le stage 2019 .



Comment me suis-je installé


Je suis un étudiant de 4e année à BSU, en 2018 je suis diplômé de la School of Data Analysis, je vis et vis à Minsk.

Tout d'abord, comme d'autres diplômés du SHAD, j'ai reçu un lien vers un stage en 2018. Dans la semaine suivant l'envoi du questionnaire, il a fallu allouer du temps, 6 heures d'affilée, pour terminer le concours en ligne. Il contenait des tâches sur la théorie des probabilités, la capacité de coder, de proposer des algorithmes. Il était possible d'écrire le code dans la langue dans laquelle vous savez comment. J'ai écrit plusieurs tâches en C ++, plusieurs en Python, j'ai choisi le langage en fonction de la facilité d'utilisation pour une tâche particulière.

Lorsque vous soumettez une décision, un verdict arrive immédiatement, après quoi la tâche peut être à nouveau résolue pour obtenir une réponse plus correcte. Il m'a fallu quelques heures pour terminer toutes les tâches. Je n'ai pas résolu certains des problèmes du premier coup.

Quelques jours plus tard, les recruteurs m'ont contacté et ont appelé à un premier entretien en face à face au bureau de Minsk. C'était avec Alexei Kolesov - le chef de l'équipe des modèles acoustiques et de la biométrie, où j'ai dû travailler. L'entretien consistait à résoudre des problèmes sur une feuille de papier ou sur un tableau noir et à répondre à des questions sur la théorie des probabilités, les algorithmes et l'apprentissage automatique. Je pense que le contexte de la programmation de l'Olympiade me permettrait de faire face au concours en ligne, même si je n'avais pas étudié au ShAD, mais lors de l'entretien, l'expérience ShAD m'a été vraiment utile.

Quelques jours plus tard, la deuxième réunion a eu lieu, où on m'a demandé deux autres tâches sur la connaissance des algorithmes: échauffement et base. Pour chaque tâche, c'était comme ceci: j'ai proposé une solution, répondu à plusieurs questions sur cette solution, puis écrit le code sur une feuille de papier.

Quelques jours plus tard, j'ai été informé que j'avais été accepté pour un stage. Elle devait durer trois mois complets (en conséquence, c'est arrivé). Ils n'ont pas promis de passer à un poste permanent, mais ont déclaré qu'une telle option était possible.

Pour commencer


Le premier jour, après avoir réglé les problèmes d'organisation et obtenu un ordinateur portable, je suis allé déjeuner avec mes collègues. Nous avons parlé, puis j'ai mis en place un référentiel d'équipe et pris la première tâche - compiler un simple script Python pour commencer à exécuter un programme déjà terminé dans plusieurs threads et accélérer ainsi son exécution. Au cours de la création du script, j'ai pris connaissance du système de révision du code - lorsque d'autres membres de l'équipe vérifient votre code. Sachant que vos collègues les plus proches le traiteront en premier, et à l'avenir d'autres développeurs, vous essayez d'écrire plus clairement. Dans la programmation d'olympiades, tout est quelque peu différent: la vitesse à laquelle vous programmez est importante, et vous n'aurez probablement même pas besoin de regarder ce que vous avez écrit. D'un autre côté, quand j'ai dû faire face à une situation avant Yandex où je dois encore lire le code, j'ai aussi essayé de le rendre plus ou moins clair.

Pendant le stage, j'ai résolu plusieurs fois des problèmes similaires à ce script, mais mon temps principal a été consacré à un projet beaucoup plus important - un nouveau décodeur pour Alice.

Pour que les appareils et applications Yandex puissent appeler l'assistant par la voix, tout fonctionne comme le souhaite l'utilisateur, vous avez besoin d'un dispositif de repérage de haute qualité - un mécanisme d'activation vocale. Le plus souvent, la phrase d'activation (que vous devez prononcer pour lancer Alice) contient le mot "Alice" lui-même.

Spotter comprend la préparation de fonctionnalités (fonctionnalités pour l'apprentissage automatique), un réseau de neurones et un décodeur.

Décodeur précédent


La version précédente du décodeur fonctionnait en traitant des vecteurs de probabilité. Il existe un modèle acoustique - un réseau de neurones qui, pour chaque trame (un fragment de discours d'une durée de 10 à 20 millisecondes), renvoie la probabilité qu'il soit désormais prononcé. Les cadres peuvent se chevaucher. Le décodeur contenait une matrice avec des probabilités pour les 100 dernières images "entendues" par l'appareil. Le son de chaque lettre correspond à un certain vecteur de probabilités. Dans le vecteur de la lettre A, l'algorithme a trouvé l'élément ayant la probabilité la plus élevée, après quoi il n'a considéré que la partie droite de la matrice par rapport à cet élément. Ensuite, l'opération a été répétée pour les lettres L, I, C et A - chaque fois que la matrice a été "coupée" par l'élément trouvé. Les sons de A au début et à la fin du mot sont en fait différents - le second d'entre eux est généralement appelé Shva, il ressemble à A, E et O en même temps.

Si la probabilité finale s'avérait supérieure à la valeur seuil, alors l'algorithme considérait que le mot était réellement prononcé et activait Alice pour l'utilisateur.



Un tel schéma a conduit au fait que l'assistant s'activait parfois spontanément non seulement lorsque les gens disaient «Alice», mais aussi lorsqu'il entendait d'autres mots, par exemple, «Alexander». Les sons de la première partie de ce mot («Alex») suivent dans le même ordre et coïncident essentiellement avec les sons du mot «Alice». La différence n'est que dans les lettres E et K, mais E dans son son est très proche de I, et l'algorithme n'a pas pris en compte la présence de la lettre K.



En théorie, vous pouvez rechercher dans le discours prononcé non seulement le mot "Alice", mais aussi des mots similaires. Il n'y en a pas tellement: «Alexandre», «Alexa», «arrêté», «escaliers», «aristarque». Si l'algorithme croyait que l'utilisateur avec une forte probabilité a dit l'un d'entre eux, il serait possible d'interdire l'activation, quel que soit le résultat du décodeur principal.

Cependant, l'activation vocale devrait fonctionner même sans Internet. Par conséquent, le décodeur est un mécanisme local. Il fonctionne grâce à un réseau de neurones, qui s'exécute à chaque fois directement sur l'appareil de l'utilisateur (par exemple, sur le téléphone), sans communiquer avec les serveurs Yandex. Et comme tout se passe localement, les performances (du même téléphone par rapport à l'ensemble du datacenter) laissent à désirer. Reconnaître non seulement le mot «Alice» signifierait compliquer considérablement le travail de ce petit réseau de neurones et dépasser les limites de performance. L'activation commencerait à fonctionner plus lentement, l'assistant répondrait avec un long retard.

Un décodeur fondamentalement différent était nécessaire. Des collègues m'ont suggéré de mettre en œuvre l'idée du modèle de Markov caché, HMM: au début de mon stage, il était déjà bien décrit par la communauté et a également trouvé une application dans l'assistant Alexa d'Amazon.

Nouveau décodeur HMM


Le décodeur HMM construit un graphique de 6 sommets: un pour chaque son du mot "Alice", plus un de plus pour tous les autres sons - un autre discours ou bruit. Les probabilités de transitions entre sommets sont estimées sur un échantillon de parole enregistrée et annotée. Pour chaque son entendu, 6 probabilités sont considérées: coïncider avec chacune des cinq lettres et jusqu'au sixième sommet (c'est-à-dire avec tout son autre que ceux trouvés dans le mot "Alice"). Si l'utilisateur dit «Alexander», le décodeur tombera en K: la probabilité que le son parlé ne fasse pas partie de la phrase d'activation sera trop grande et l'assistant ne fonctionnera pas.



Dans un proche avenir, ces modifications seront disponibles pour tous les utilisateurs de la bibliothèque Alice et SpeechKit.

Achèvement du stage et transition vers un emploi permanent


Sur les trois mois de stage, il m'a fallu un an et demi pour écrire un décodeur HMM. Au terme de ces mois et demi, le manager m'a dit que le passage à un poste permanent et à un contrat à durée indéterminée serait possible (bien que non garanti) si je continuais à travailler de manière aussi productive. À peu près à la même époque, j'ai pris deux semaines de vacances pour aller au camp de programmation de l'Olympiade. De retour, j'ai commencé une nouvelle tâche: former des observateurs pour divers appareils: Yandex.Phone, ordinateur de bord avec Yandex.Auto et autres.

Après quelques semaines, environ un mois avant la fin du stage, ma première entrevue a eu lieu concernant un poste permanent, et quelques jours plus tard - la deuxième, finale. J'ai parlé avec les chefs d'équipes apparentées. Lors du premier entretien, on m'a posé des questions théoriques: apprentissage machine, réseaux de neurones, régression logistique, méthodes d'optimisation. De plus, ils ont posé des questions sur la régularisation, c'est-à-dire sur la réduction du degré de recyclage d'un algorithme donné et sur les algorithmes auxquels les méthodes de régularisation sont appliquées. La deuxième interview a été pratique: nous avons parlé sur Skype avec un collègue de Moscou, et dans le processus, j'ai tapé le code dans un simple éditeur en ligne.

De ma propre initiative, je n'ai pas obtenu d'emploi à temps plein, mais le ¾ - le fait est que mes études à BSU ne sont pas encore terminées. En position constante, je suis également engagé dans la sélection automatique des valeurs seuils et autres hyperparamètres. À chaque instant, le système gagne la probabilité que le mot-clé "Alice" soit prononcé. Le classificateur final compare cette probabilité à une valeur de seuil et, si le seuil est dépassé, active Alice. Auparavant, le seuil était sélectionné par les développeurs, la tâche actuelle consiste à apprendre à le faire automatiquement.

Je suis donc arrivé à Yandex, en conservant ma place dans l'équipe d'Alice.

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


All Articles