Dans ce chapitre, on va s’intéresser à des architectures de réseaux de neurones assez utilisées dans le cadre de tâches de traitement de langage. Ils vont permettre notamment de traiter nos problèmes sous forme de série temporelle (de séquences), ce qui semble adapté à nos applications puisque le texte est une séquence de mots qui sont eux mêmes une séquence de lettres. 🚀
Représentation des features
On retrouve notamment les plongements (embeddings) en dimension inférieure word2vec (ou autre) comme entrée pour les réseaux de neurones. Ces manipulations préalables ne sont pas inutiles ! Il faut notamment prendre en compte les capacités de calcul et le niveau de représentativité nécessaire dans votre application afin de déterminer la dimension de l’espace d’embedding, par exemple (qui peut varier grosso modo entre 20 et 300 dimensions).
Différentes architectures possibles
L’architecture de base et ses problèmes : le RNN
Les RNN représentent la famille de réseau de neurones qui traite les données de manière séquentielles. L’idée principale étant que chaque nouveau mot qui est prédit à partir de notre modèle, prend en compte l’état précédent afin de s’actualiser. L’état représente fondamentalement l’historique - la mémoire utilisée dans le réseau de neurones pour prendre en compte le passé (TOUT le passé) afin de l’utiliser dans la prédiction à l’instant t.
Dans le cas de tâches associées au texte, on essaie par exemple à chaque étape de prédire le mot en fonction des mots précédents ainsi qu’une observation. Par exemple, le mot dans une langue étrangère dans le cadre d’une traduction.
On a donc une série temporelle qui à chaque instant t, va prendre en entrée une observation et l’état précédent pour être calculé :
Deux problèmes principaux font suite à cette architecture fondamentale : la disparition du gradient, et son explosion. En effet lors de la backpropagation, on doit calculer un gradient (en particulier ) qui est sujet à disparition/explosion. Cette disparition notamment a pour effet de faire “oublier” au RNN des informations qui pourraient pourtant être utiles au traitement actuel. Si j’ai un texte dans lequel une information primordiale est présente au début, il est très difficile de créer un RNN qui prenne en compte cette information sur la fin du texte.
En pratique, on voit que le RNN ne peut prendre en compte que très peu de contexte passé à cause de cette disparition de gradient.
Il existe une grande variété de techniques qui sont utilisés pour mitiger ce problème. Notamment en premier lieu, une architecture plus robuste qui a été imaginée quelques années après l’apparition des RNN appelée LSTM (Long Short Term Memory)
LSTM Networks (Long Short Term Memory Networks)
L’idée principale des LSTM est de permettre au réseau “d’oublier” ou de ne pas prendre en compte certaines observations passées afin de pouvoir donner du poids aux informations importantes dans la prédiction actuelle.
Cette idée se traduit par des “gates” qui sont chargées de déterminer l’importance d’une entrée, afin de savoir si on enregistre l’information qui en sort ou pas. Pour une explication détaillée intuitive, rendez-vous sur cet article de blog qui explique les différentes étapes. En pratique la seule partie qui change vraiment est lors de la mise à jour des réseaux de neurones qui est un peu plus technique.
Etat de l’art des réseaux de neurones en traitement du langage
L’utilisation des réseaux de neurones dans les applications de traitement de langage représente encore un problème ouvert dans la recherche, qui demande à être traité plus en profondeur, notamment sur les problématiques spécifique à des tâches (quelle architecture correspondent à quelles tâches), des optimisations plus globales et les technique de transfert d’apprentissage afin de pouvoir utiliser des réseaux déjà entraînés sur de nouveaux problèmes plus facilement.
A titre illustratif, je voudrais citer deux mécanismes qui attirent l’attention depuis quelques temps.
Les réseaux de neurones résiduels et autre augmentation de densité
Les réseaux de neurones résiduels sont très utilisés, à la base pour le traitement d’images mais aussi maintenant dans le traitement du texte. Ils permettent aussi de mitiger l’effet de diminution trop brutal du gradient. Pour cela simplement, on ajoute directement l’identité de l’état précédent dans la fonction de calcul. Cela a pour effet de diminuer ce problème de disparition du gradient.
D’autres procédés approfondissent cette idée comme par exemple les highway networks qui augmentent les fonctions de manière différente mais servent ce même objectif.
Les techniques d’attention
L’idée principale des techniques d’attention vise à se concentrer sur une partie de l’information en particulier qui est fournie au réseau de neurones. Ca peut être un mot à traduire au milieu d’une phrase, une partie d’une image lors de la description de celle-ci, etc. Il s'agit donc d’entraîner un réseau de neurones aussi sur un score d’importance à donner à l’ensemble de l’information qui lui est présentée. Ces techniques sont très prometteuses en terme de performance de prédiction.
Applications
Avec ces architectures, on peut avoir une meilleure représentation d’un corpus de texte puisqu’on prend en compte son caractère séquentiel. Voici quelques domaines d’application dans lesquels ce genre d’architecture a été particulièrement performant :
Classification de texte
POS Tagging et NER
Speech to text
Traduction automatique
Génération automatique de texte et notamment de légendes d’images
Ce qu’il faut garder en tête, c’est que les réseaux de neurones récurrent bien entraînés permettent d’intégrer la manière dont est structuré un langage (ou un sous-ensemble du langage) ou toute séquence de texte. Le fait d’avoir ce modèle permet une infinité d’applications liée aux texte, qu’il faut paramétrer et personnaliser pour votre problème spécifique.
Une petite application illustrative : retour aux chanteurs de rap
Afin de démontrer l’efficacité de ces modèles récurrents, essayons de l'appliquer à l'échelle des caractères d’une phrase afin de générer des paroles de rap, dans le style d’un rappeur. Pour cela, on va récupérer l’implémentation du LSTM de Andrej Karpathy
Si on entraîne sur un corpus de texte particulier (ici le rappeur Nekfeu), voici le texte généré au bout de quelques milliers d'itérations :
Paclois ce b'est un boutes qu'on heêtembarais j'on sa c'est, sout je julam Dévans J'etfu l'é-travy pei fais se à jà aura Qu'le garl La quincer gé veull' Atrait tu vow mon avet peu san enfiiment aure maisas Et quand j'ta rag, s'lerr D’est pomps Fourde bes des quand tout samiectieu ryais L'heux Lans l'ai à le gropas, caquis Je Dacie, à nan poustier juk qu’retape ys qurises suis des conpes émoy ne da tiendir Plassine grissoble J'es it-di J'suis d'acinon puant fet-pes c'tui t'baq
On peut observer notamment la propension à comprendre la longueur d’un vers ou même la taille d'un mot, ce qui montre que le RNN retient que le vers a commencé quelque part avec une majuscule et doit finir par un retour à la ligne. De même, il a compris environ la taille d'un mot et ajoute des espaces dans les bonnes proportions. Il y a donc une forme de mémorisation du contexte passé. On voit aussi des virgules, apostrophes ou des tirets en bonne proportions. L'alternance consoles-voyelles aussi est respectée ainsi que certaines combinaisons caractéristiques ('tt', 'eu', 'es', etc). Quelques mots commencent à être réalistes, mais il n'y a pas assez de données sur le corpus (<250k caractère).
Conclusion
On a vu ici le type de modélisation possible à l'aide des réseaux de neurones. L'idéal est pour vous d'entraîner votre propre réseau de neurones en vu d'une des tâches applicatives citée plus haut - classification, POS tagging, traduction automatique etc afin de vous rendre compte de la méthodologie d'entraînement sur ce type de problématique. L'entraînement de réseaux de neurones reste pour le moment un processus relativement intuitif avec beaucoup d'heuristiques et de tests nécessaires avant d'obtenir des résultats probants et stables, notamment pour déterminer la valeur des hyperparamètres (nombre & taille des calques, learning rate, algorithme de gradient utilisé, etc)