Techniques de NLP avec peu de données étiquetées
17 septembre 2020
Machine Learning
Introduction et Plan de la Présentation
Je m'appelle Adam et, avec Szymon, nous allons vous présenter quelques techniques utilisables pour obtenir de bons résultats dans les tâches de traitement du langage naturel lorsque l'on manque de données étiquetées.
Voici le plan de la présentation. Je ferai très rapidement une brève introduction au traitement du langage naturel. Ensuite, je présenterai quelques modèles de NLP qui seront utilisés dans la dernière partie de cet exposé. Je terminerai en vous exposant notre motivation pour aborder ces problèmes. Enfin, Szymon vous présentera la partie consistante, en exposant differentes techniques que vous pouvez utiliser pour traiter ces problèmes ainsi que quelques résultats expérimentaux.
Les Applications du NLP au Quotidien
Les technologies de NLP sont omniprésentes de nos jours. Vous avez ici quelques exemples. Elles sont utilisées dans les agents conversationnels ou vocaux, dans les assistants personnels comme Siri ou Google Assistant. Elles sont utilisées dans les traducteurs, tels que Google Traduction, dans les moteurs de recherche comme Google, Yandex ou Baidu. Elles sont également utilisées pour le traitement automatisé de documents et la génération de texte, par exemple pour la génération de fausses informations.
Catégories de Problèmes en NLP
Le traitement du langage naturel se compose de nombreux problèmes différents qui peuvent être grossièrement divisés en trois catégories. La première catégorie concerne les problèmes de classification de base où vous avez du texte en entrée et vous voulez prédire une étiquette de classe ou des étiquettes lors de la résolution d'une classification multi-étiquettes. Voici deux exemples de tels problèmes. Le premier est l'analyse de sentiment, où l'on souhaite prédire le sentiment d'une déclaration particulière. L'autre est l'analyse d'intention, où l'on veut prédire l'intention de l'auteur de la déclaration.
Dans le groupe suivant, au lieu de classifier le texte dans son ensemble, vous voulez classifier chaque mot du texte individuellement. Voici deux exemples de tels problèmes. Le premier est la reconnaissance d'entités nommées. Vous utilisez ces techniques pour extraire des informations utiles du texte en classifiant chaque mot. Par exemple, vous pouvez classifier qu'un mot se rapporte à une personne, une adresse, une date, et ainsi de suite. L'autre est la résolution de coréférence. Vous voulez trouver des mots qui se rapportent au même objet. Dans cet exemple, vous avez Paul Allen, qui reçoit l'étiquette zéro. Ensuite, vous avez Allen, il, lui et Paul. Tous ces mots font référence à la même personne.
Le dernier groupe se compose de problèmes de texte à texte où vous avez du texte à la fois en entrée et en sortie. La traduction automatique est l'un de ces problèmes ; vous avez une entrée dans une langue et vous générez une sortie dans une autre langue. Un autre exemple est le résumé de texte, où vous avez un texte long en entrée et vous générez un résumé court ou un condensé en sortie.
Pipeline de Deep Learning pour le NLP
L'apprentissage profond est l'état de l'art pour la plupart des problèmes de NLP. Voici à quoi ressemble un pipeline NLP typique d'apprentissage profond. Vous avez du texte brut en entrée suivi de trois étapes consécutives. La première étape est la tokenisation, qui consiste à diviser le texte brut en morceaux, tels que des mots ou des parties de mots. Plusieurs techniques peuvent être utilisées ici, comme l'encodage par paires d'octets, WordPiece, le modèle de langage universel ou SentencePiece. L'étape suivante consiste à transformer les tokens en représentations à valeurs réelles. Vous pouvez utiliser des méthodes de base comme les plongements lexicaux neuronaux ou des modèles plus sophistiqués comme BERT, XLNet ou GPT-2. La dernière étape est la partie modélisation où vous entraînez un modèle spécifique à la tâche. Selon la puissance du modèle à la deuxième étape, si vous utilisez BERT, vous n'aurez peut-être besoin que d'une couche linéaire pour la classification. Si vous utilisez des plongements plus simples comme Word2Vec, GloVe ou FastText, vous utiliseriez un modèle plus puissant comme des réseaux de neurones récurrents ou des transformeurs.
Plongements Lexicaux et FastText
Pour ceux qui ne sont pas familiers avec les plongements neuronaux, voici une idée générale de leur fonctionnement. Les plongements neuronaux placent les mots dans un espace euclidien de sorte que les mots ayant des significations ou des contextes similaires se situent proches les uns des autres. Par exemple, des équipements de cuisine comme un four, un réfrigérateur ou un micro-ondes apparaîtraient probablement dans des contextes similaires et auraient donc des représentations à valeurs réelles en deux dimensions similaires.
Une technique pour générer de tels plongements est FastText. Vous pouvez visiter la page web du projet et télécharger des plongements pour presque toutes les langues, y compris le polonais. Je recommande d'essayer cela.
Modèles Récurrents : RNN, LSTM et GRU
En passant à la partie modélisation, vous connaissez probablement les réseaux de neurones récurrents. Voici les équations pour un réseau de neurones récurrent de base. De tels réseaux souffrent du problème de disparition du gradient, ce qui signifie que les réseaux de neurones récurrents classiques ne sont pas capables de capturer les dépendances à long terme, ce qui est crucial lors de la modélisation de données textuelles.
Plutôt que d'utiliser des réseaux de neurones récurrents classiques, nous utilisons des techniques comme les mémoires à court et long terme (LSTM) ou les unités récurrentes à porte (GRU) car elles ne souffrent pas du problème de disparition du gradient et sont capables de capturer les dépendances à long terme.
En utilisant les LSTM, vous pouvez construire des modèles de bout en bout puissants pour les problèmes de texte à texte, comme le modèle séquence à séquence. L'idée est que vous prenez du texte brut en entrée et le traitez avec un encodeur. Cela crée une représentation latente de l'entrée, que le décodeur utilise ensuite pour générer la sortie.
L'Architecture Transformeur et l'Auto-attention
Le problème avec les LSTM est qu'ils ne sont pas bons pour la parallélisation. On ne peut pas les entraîner efficacement, et l'entraînement est généralement lent. Il y a quelques années, l'article 'Attention Is All You Need' a été publié, ce qui a changé la donne. Il proposait une architecture encodeur-décodeur pour résoudre les problèmes de texte à texte en utilisant un mécanisme d'auto-attention plutôt que la récurrence. Un tel modèle peut être facilement parallélisé pendant l'entraînement, permettant des architectures beaucoup plus profondes. Cela a ouvert de nombreuses nouvelles directions en NLP.
Voici l'idée de base de l'auto-attention. Chaque mot d'entrée est représenté par son plongement. Vous les traitez à l'aide du mécanisme d'auto-attention, en calculant un nouveau plongement pour chaque mot comme une somme pondérée de tous les plongements de mots, les poids étant déterminés par le mécanisme d'attention. Pour chaque mot, vous calculez une requête, une clé et une valeur basées sur trois transformations linéaires différentes du plongement d'entrée. Vous calculez ensuite le produit scalaire entre chaque paire de requête et de clé pour déterminer le vecteur d'attention, qui est utilisé avec les valeurs pour calculer le nouveau plongement.
BERT et Transformeurs Hiérarchiques
Les transformeurs sont les blocs de construction de nombreuses architectures NLP célèbres, comme BERT. BERT est un modèle profond construit à partir d'encodeurs transformeurs empilés. C'est un modèle multi-tâches qui peut être ajusté finement pour de nombreuses tâches différentes, telles que la classification, la reconnaissance d'entités nommées ou la réponse aux questions. BERT est entraîné de manière auto-supervisée ; vous entraînez d'abord cette architecture profonde sans étiquettes, puis vous l'ajustez pour votre tâche spécifique.
Il convient de mentionner que BERT peut être utilisé comme un extracteur de caractéristiques pour les données textuelles. Vous pouvez prendre une entrée textuelle, la traiter à l'aide de BERT pour obtenir des caractéristiques pour chaque mot, puis les traiter plus en détail avec un autre modèle.
C'est le modèle que nous utiliserons dans la suite de cet exposé. Il est différent de BERT. C'est notre idée pour combiner les transformeurs afin de les rendre adaptés à de très longs documents. Notre objectif est de classer de longs documents en construisant une hiérarchie de transformeurs. Dans la première étape, vous avez des transformeurs au niveau des mots, suivis de transformeurs au niveau des phrases. Si nécessaire, vous pouvez ajouter des transformeurs au niveau des paragraphes. Pour réduire le nombre de paramètres, nous utilisons le partage de poids dans chaque couche.
Motivation : Le Défi des Données Étiquetées
Quelle était notre motivation pour travailler sur de tels problèmes ? L'apprentissage profond fonctionne bien avec beaucoup de données étiquetées, mais la vie est souvent plus compliquée. Fréquemment, la première phase d'un projet est une preuve de concept où le client souhaite un projet court pour vérifier si le problème est soluble et pour établir une limite inférieure de performance. Pour ces projets de POC, les clients ne veulent généralement pas investir beaucoup d'efforts ou d'argent dans la préparation des données. L'étiquetage est coûteux et nécessite des connaissances spécialisées. De plus, des problèmes juridiques signifient souvent que les documents doivent être anonymisés, ce qui est encore plus coûteux que l'étiquetage. Par conséquent, vous vous retrouvez généralement avec une petite quantité de données étiquetées.
Je vais vous montrer deux exemples de projets réels que nous avons réalisés chez Alphamoon. Le premier visait à extraire des informations utiles d'actes notariés, un problème de reconnaissance d'entités nommées. Les documents ont dû être anonymisés avant que nous les recevions, nous nous sommes donc retrouvés avec moins de 50 documents pour la phase de preuve de concept. Pourtant, nous avons obtenu un F-score d'environ 0,75 en utilisant les techniques que Szymon présentera sous peu.
Dans un autre exemple, l'objectif était de classer les motifs de plaintes, un problème standard de classification de texte. Il y avait plus de 250 classes à reconnaître. Nous avions beaucoup de données non étiquetées mais seulement quelques exemples étiquetés par classe. En combinant les données non étiquetées et étiquetées, nous avons obtenu un macro F-score de plus de 0,9.
C'est la fin de ma partie ; maintenant Szymon va vous montrer le reste.
Approches de Classification et Benchmarks
Bonjour, je m'appelle Szymon. Je vais vous montrer les approches et les résultats que nous avons utilisés dans ces deux projets.
Je m'occuperai des problèmes de classification et je vous montrerai quatre approches de base pour entraîner un modèle de classification supervisé. La première est l'apprentissage supervisé classique pour les problèmes avec une grande quantité de données d'entraînement étiquetées. La deuxième est l'apprentissage à partir de peu d'exemples (few-shot learning), où la quantité de données d'entraînement est très faible. Ensuite, l'apprentissage semi-supervisé, où un petit ensemble d'entraînement est soutenu par des données non étiquetées. Enfin, l'apprentissage par transfert consiste à entraîner un modèle volumineux sur des données similaires et à utiliser ces connaissances pour ajuster le modèle sur votre domaine cible. Cela montre l'historique de notre approche ; nous avons commencé par l'apprentissage supervisé et sommes passés par toutes ces étapes.
D'abord, quelques références. Notre tâche était la classification de documents ; les documents dans nos problèmes pouvaient aller de 1 à 50 pages. Nous avons sélectionné deux ensembles de données : Reuters et 20 Newsgroups. Nous avons envisagé deux méthodes de référence. La première était construite à partir de plongements FastText pour chaque token, moyennés sur l'ensemble du document, suivis d'une simple régression logistique. La seconde utilisait le transformeur hiérarchique mentionné précédemment. Voici les résultats de référence. Dans les deux cas, un modèle simple comme la régression logistique est plus performant qu'un grand modèle comme un transformeur lorsque les données d'entraînement sont rares. Cependant, à mesure que la quantité de données d'entraînement augmente, la performance du transformeur prend le dessus. Ces graphiques seront présentés sur les diapositives suivantes pour comparaison.
Few-shot Learning et Réseaux Relationnels
La première approche intéressante est l'apprentissage à partir de peu d'exemples en utilisant un réseau relationnel. L'article original utilisait des images comme entrée. Ce modèle se compose de deux modules. Le module de plongement est responsable de la prise d'une représentation latente de l'entrée. Le module de relation prend la concaténation de deux entrées et décide si elles appartiennent à la même classe. Nous avons utilisé notre transformeur hiérarchique pour le module de plongement et un simple MLP pour le module de relation. La procédure consiste à prendre deux observations, leurs représentations latentes, à les concaténer et à les passer par le module de relation pour obtenir un score pour la paire.
Voici les résultats. En bleu et vert figurent les références, et en orange se trouve la performance de l'approche d'apprentissage à partir de peu d'exemples. Pour de petites quantités de données, la performance du transformeur a augmenté de manière significative, dépassant parfois la simple régression logistique. Cependant, nous pensions que ce modèle puissant pourrait être encore plus performant.
Apprentissage Semi-supervisé : Pi-modèle et Entropie
Ensuite, nous avons examiné l'entraînement semi-supervisé, en utilisant deux approches. La première est le Pi-modèle. L'idée est que la représentation latente d'une observation doit rester similaire même si l'observation est légèrement modifiée, par exemple en supprimant des mots ou des phrases. Nous avons introduit une fonction, G, pour une perturbation tenant compte du domaine. Pour les documents, cela signifiait supprimer des mots ou des phrases. Nous avons suivi le pipeline des auteurs : prendre l'observation X, appliquer une augmentation stochastique et trouver la représentation latente à l'aide d'un réseau avec dropout. La fonction de perte comporte deux composants : l'entropie croisée et le carré de la différence des deux représentations latentes. Nous voulons minimiser la différence entre les représentations d'une même observation. Ce composant de perte peut être pondéré ; nous avons augmenté ce poids pendant l'entraînement.
Dans la deuxième approche, nous avons utilisé la minimisation de l'entropie dans la fonction de perte pour forcer le modèle à faire des prédictions fortes. Nous minimisons l'entropie sur les probabilités softmax de la dernière couche. L'entropie est minimisée lorsqu'une seule probabilité est élevée. Ce composant était également pondéré. Ce sont les deux approches que nous avons utilisées, bien que d'autres méthodes comme l'entraînement contradictoire virtuel, le mean teacher ou le pseudo-étiquetage vaillent également la peine d'être explorées.
Concernant les résultats, la régression logistique bénéficie peu de données non étiquetées supplémentaires ou d'ajustements comme la minimisation de l'entropie. Cependant, le transformeur a la capacité d'incorporer des données non étiquetées. L'entraînement semi-supervisé améliore les performances d'une marge considérable, surtout avec le Pi-modèle. Bien que ces modèles soient plus performants, il subsiste une certaine sous-performance avec de très petits ensembles de données, ce que nous voulions traiter.
Approche Mixte et Résultats Finaux
Notre approche a été de combiner le réseau relationnel et l'apprentissage à partir de peu d'exemples avec des composants semi-supervisés. Le modèle comporte trois parties. D'abord, le score relationnel supervisé. Deuxièmement, nous prenons deux fois la même observation avec perturbation et classons la paire ; puisqu'il s'agit de la même observation, le score devrait être proche de un même sans étiquette. Nous avons également inclus la minimisation de l'entropie. Points clés à retenir : la pondération des composants de la perte est obligatoire pour éviter l'effondrement du modèle. L'entraînement est lent ; même avec de petits ensembles de données, cela peut prendre des jours. L'ajout d'une minimisation basée sur l'entropie est délicat mais possible.
Voici les résultats finaux. Le graphique vert représente le modèle entièrement mixte. Il est plus performant que le transformeur de référence et la régression logistique, même sur de petites quantités de données.
Apprentissage par Transfert et Modèles Pré-entraînés
Enfin, nous avons inclus l'apprentissage par transfert, qui se compose de deux étapes. D'abord l'entraînement d'un modèle de langage auto-supervisé utilisant une grande quantité de données dans le même domaine. Cette étape prend beaucoup de temps et les modèles ne sont pas disponibles pour toutes les langues. Deuxièmement, vous prenez le modèle pré-entraîné et vous l'ajustez sur votre petit ensemble de données d'entraînement, ce qui est un processus rapide.
La performance de ce modèle est indiquée en rouge. Il est performant dans l'ensemble. Cependant, si vous appliquez les ajustements mentionnés précédemment à des modèles plus simples comme le transformeur, ils peuvent être plus performants dans certains cas. Notez que cette approche nécessite un modèle BERT pré-entraîné, qui n'est pas toujours disponible.
Nous avons également entraîné un modèle BERT nous-mêmes, en suivant la méthodologie originale. Nous avons collecté 4 gigaoctets de texte à partir de Wikipédia et de livres numériques. Nous avons utilisé des astuces comme la tokenisation en ordre inverse pour l'améliorer pour la langue polonaise. Nous avons obtenu une précision de modèle de langage de 0,78 et une précision de phrase suivante de 0,81. Nous avons utilisé ce modèle dans la compétition PolEval pour la détection du cyber-harcèlement et avons obtenu un F-score de 56,17, ce qui nous aurait placés troisièmes.
Conclusion et Perspectives
En conclusion, l'apprentissage semi-supervisé peut booster les performances des modèles, surtout avec de petites quantités de données. L'apprentissage à partir de peu d'exemples avec des réseaux relationnels peut être encore amélioré avec des techniques semi-supervisées. Bien que l'apprentissage par transfert soit un point de départ tentant, de petits ajustements sur d'autres modèles peuvent donner de meilleurs résultats pour les problèmes avec peu d'exemples étiquetés.
Merci de votre écoute. Si vous avez des questions, c'est le moment.