L’industrialisation est l’un des défis les plus complexes pour une start-up comme la nôtre. En effet, le monde de la recherche n’a pas les mêmes priorités en matière d’optimisation du temps et des coûts. Alors que l’industrie est limitée par ces facteurs. Et cette question nous a frappés lorsque nous avons envisagé de construire massivement des modèles linguistiques (LM), notamment en ce qui concerne la sélection des données.
Historiquement, nos LM étaient fabriqués un par un avec amour, avec une agréable touche d’intervention humaine entre chaque… Cela signifie que nous devions expérimenter pour trouver le meilleur système empiriquement. Et cela n’est absolument pas compatible avec l’automatisation.
Mais qu’est-ce que la sélection des données, pourriez-vous demander ? Cependant, commençons par le commencement.
ASR : Prélude à la reconnaissance automatique de la parole
En ASR, nous considérons généralement la construction de deux modules indépendants qui seront mélangés plus tard. Chaque module est très dépendant de la langue que nous voulons reconnaître.
- Le premier s’appelle le modèle acoustique. Il représente la manière de parler. Quels sons peuvent être rassemblés pour former un mot, une phrase. En fait, nous représentons la langue par une série de phonèmes. Si nous regardons dans Wiktionary, c’est plus clair, n’est-ce pas ? Ne confondez pas avec la syllabe. Prenons un exemple. Le mot « through » (1 syllabe) se compose de trois sons, trois phonèmes : « th » « r » « oo ». Donc, l’objectif est de modéliser les sons comme une séquence de phonèmes.
- Le deuxième est le modèle de langue, que nous voulons construire automatiquement. Il modélise la distribution des mots pour une langue donnée. Grâce à ces probabilités, le LM aide à choisir la meilleure correspondance entre une séquence de phonèmes et les mots/phrases.
Pour construire ces modules, nous avons besoin de données et plus nous en avons et plus elles sont pertinentes, mieux c’est ! C’est pourquoi nous avons besoin de la sélection des données : nous avons besoin d’un moyen de récupérer des données pertinentes adaptées au contexte de la reconnaissance. En effet, un avocat et un boulanger ne parlent pas la même langue : ils n’utilisent pas le même lexique. La sélection des données consiste à choisir les bonnes données qui correspondent au domaine parmi des millions d’exemples grâce à l’utilisation de divers algorithmes automatiques.
Comment faisions-nous auparavant ?
Comme nous l’avons discuté précédemment, la sélection des données est une étape très importante lors de la construction d’un système. Comme beaucoup, nous utilisions la méthode Moore-Lewis, qui a également été adaptée pour une utilisation bilingue (comme la traduction) par Axelrod et al. dans Domain Adaptation via Pseudo In-Domain Data Selection. Ce sont des moyens très efficaces de sélectionner des données en utilisant deux corpus (dans et hors domaine) en comparant les entropies croisées. En domaine signifie que le corpus contient des données spécifiques, qui sont pertinentes avec le contexte, le domaine de reconnaissance comme expliqué précédemment avec l’exemple de l’avocat/boulanger. Alors que hors domaine est juste un ensemble de données aléatoires, ce qui signifie qu’il y a des données pertinentes et non pertinentes ! Ensuite, en ce qui concerne l’entropie croisée, c’est une mesure qui aide à choisir des données bien adaptées pour la sortie désirée. Grâce à un segment pertinent, nous comparons chaque segment dans l’ensemble de données pour récupérer les plus proches des données initiales.
Par exemple de sélection des données
Donc, utiliser l’entropie croisée pour sélectionner, ce n’est pas vraiment évolutif car l’algorithme ne peut pas décider quand s’arrêter de lui-même et il a une tendance ennuyeuse à promouvoir des phrases très courtes, ce qui signifie que notre corpus n’est pas vraiment pertinent pour les conversations. De plus, quelque chose nous a frappés durement.
P10-2041
Ce document a eu huit ans cette année et nous n’avons jamais cherché une autre méthode avant. Alors nous nous sommes demandés : y a-t-il eu de nouveaux travaux en matière de sélection des données depuis ce document ? Et y a-t-il des travaux pertinents prêts pour un virage plus industrialisé ?
Recherche…. Trouvailles !
Après avoir parcouru 178 articles citant le document Moore-Lewis, un titre a attiré notre attention : Cynical Selection of Language Model Training Data. Le nom était si accrocheur que nous avons décidé de l’explorer. Écrit par Amittai Axelrod (nous l’avons mentionné ci-dessus), nous avons décidé de lui donner une chance ici car le document était plein de bonnes promesses… Et semblait compatible avec l’industrialisation ! Contrairement aux méthodes précédentes, l’algorithme s’arrête de lui-même lorsqu’il a la sélection optimale (supposée), nous permettant de continuer notre route vers l’automatisation.
Comment ça marche ? Comment l’avons-nous fait fonctionner ?
L’objectif est de sélectionner des données à partir de nos corpus hors domaine qui peuvent étendre nos données en domaine. Supposons que vous ayez un petit corpus en domaine, dont vous êtes sûr à cent pour cent qu’il est représentatif. L’algorithme prendra ce corpus et un autre plus générique, où vous ne savez pas ce qui est pertinent ou non. Il sélectionnera ensuite les phrases qui correspondent à la spécifique en utilisant une implémentation du document d’Axelrod mentionné ci-dessus. Le script peut prendre des arguments qui sont détaillés dans l’en-tête du script. Il nécessite seulement les deux corpus pour fonctionner :
./cynical-selection.py --task inDomainFile.txt --unadapted outDomainFile.txt
et vous renvoie une liste de phrases avec leurs scores dans un fichier ‘.jaded’ construit comme suit :
model score phrase score (penalty + gain) length penalty phrase gain phrase ID (in selection) phrase ID (in unadapted corpora) best word phrase gain
Par exemple :
2.659289425334946 2.659289425334946 5.71042701737487 -3.0511375920399235 1 1 vous -0.12597986190092164 merci à vous tous
5.318578850669892 2.659289425334946 5.71042701737487 -3.0511375920399235 2 26978 vous -0.12597986190092164 et vous avez maintenant
7.9778682760048385 2.659289425334946 5.71042701737487 -3.0511375920399235 3 26979 vous -0.12597986190092164 puisque vous avez des
En fin de compte, nous n’avons pas perdu en performance en utilisant cette méthode, nous avons même gagné en précision la plupart du temps. Mais la partie importante est qu’elle nous a permis d’automatiser ce traitement, nous rapprochant ainsi un peu plus de l’industrialisation.
Pour conclure
Cette méthode nous permet de nous concentrer sur d’autres parties de nos systèmes, nous rendant plus productifs et plus sereins vis-à-vis de la construction du modèle linguistique. Donc c’est un succès, capitaine !