Sven Giesselbach

Apprendre des représentations de texte pour la compréhension du langage naturel

21 septembre 2020

Intelligence Artificielle / Traitement du Langage Naturel
Illustration de Sven Giesselbach

Introduction et Importance de la NLU

Sven Giesselbach

Bienvenue. Et merci de vous joindre à moi. Je m'appelle Sven Giesselbach et je suis le chef de l'équipe de compréhension du langage naturel au département de découverte des connaissances du Fraunhofer IAIS. Je suis également chercheur au Centre de compétence pour l'apprentissage automatique Rhein-Ruhr, en abrégé ML2R. Mes recherches portent sur l'apprentissage des représentations de texte pour la compréhension du langage naturel, ce qui est également le sujet de cette conférence. Dans cette conférence, je vais vous présenter des méthodes qui nous permettent d'apprendre des représentations significatives de texte pour la compréhension du langage naturel. Les diapositives que j'utilise sont le fruit d'un travail commun entre le Dr Gerhard Paaß et moi-même. Ensemble, nous donnons un cours sur la compréhension du langage naturel au Fraunhofer IAIS. Pourquoi la compréhension du langage naturel ? Eh bien, la compréhension du langage naturel est un sujet très intéressant et passionnant. Elle alimente de nombreuses applications dites d'IA, telles que les assistants intelligents ; Siri, Alexa et Google Now utilisent tous la compréhension du langage naturel. Mais il existe de nombreuses autres applications, telles que l'analyse des avis sur Yelp, l'extraction automatisée d'informations dans les documents, et une compréhension complète des documents nécessite une compréhension du langage naturel.

Représentations Classiques : Sac de Mots et TF-IDF

Sven Giesselbach

Que sont les représentations significatives ? Eh bien, tout d'abord, les représentations de texte sont les caractéristiques que nous introduisons dans nos modèles d'apprentissage automatique, le plus souvent des réseaux de neurones. Représentations significatives signifie qu'elles capturent le sens des mots et les relations entre les mots. Elles devraient également capturer des informations syntaxiques et sémantiques. Nous allons commencer par les approches classiques des représentations de texte, telles que la représentation par sac de mots et la représentation vectorielle TF-IDF. D'accord, commençons par les représentations classiques en espace vectoriel comme le sac de mots et les représentations vectorielles TF-IDF. Nous voulons donc représenter le texte ou les documents de manière à ce que les ordinateurs et les méthodes statistiques puissent les traiter. Pour ce faire, nous allons généralement représenter les textes par des vecteurs numériques de longueur fixe. Un exemple simple est la représentation par sac de mots. Dans une représentation par sac de mots, nous allons créer un vecteur et compter chaque mot dans un document. Supposons que nous ayons la phrase : "Barack et Michelle Obama sont allés à Paris et à Bonn". Maintenant, nous prenons chaque mot, chaque mot individuel ici, et il compose notre vocabulaire. Nous avons donc les mots Barack, Bonn, Michelle, Obama, Paris, et, à, sont, allés. Maintenant, nous comptons simplement combien de fois chacun de ces mots apparaît dans la phrase ci-dessus. Et nous remarquerons que chaque mot n'apparaît qu'une seule fois, sauf "et", qui apparaît deux fois. Bien sûr, normalement, notre vocabulaire serait beaucoup plus large, il y aurait donc beaucoup de zéros après "allés". Il y aurait d'autres mots. Maintenant, si nous avons une telle représentation vectorielle, nous pourrions, par exemple, déterminer la similitude sémantique des documents en comparant ces représentations vectorielles. Et dans le cas du sac de mots, bien sûr, de nombreux mots identiques signifient une similitude élevée. Regardons un autre exemple. Supposons que nous ayons les deux documents ou phrases : "la souris mange le fromage" et "il pose la souris sur la table". Ici C_w,d représente le compte du mot w dans le document d pour chaque mot w de notre vocabulaire. Si nous comptons chaque mot individuellement, nous verrons que certains mots ont un compte de zéro, bien sûr, car ils n'apparaissent que dans l'autre document. Par exemple, le mot "il" n'apparaît que dans le second document, et les mots "fromage" et "mange" n'apparaissent que dans le premier document. Mais nous verrons également qu'il y a certains mots, à savoir "souris" et "la", où nous avons un chevauchement. Ainsi, "souris" apparaît dans les deux documents et "la" apparaît deux fois dans les deux documents. Cela devrait donc augmenter la similitude de ces documents, ce qui est bien sûr gênant car le mot "la" ne contient aucun sens dans ce cas. Si nous créons ces vecteurs avec tous les mots de notre vocabulaire, la dimensionnalité de ces vecteurs peut facilement dépasser 100 000 mots et bien plus encore. Souvent, nous avons plus d'un million de mots uniques dans nos collections de documents ou corpus, comme nous les appelons. Ce que nous pouvons faire maintenant, c'est prendre ces vecteurs et les normaliser à la longueur un. Nous divisons simplement par la longueur. Si nous le faisons, nous obtenons des longueurs pour les deux vecteurs, et nous normalisons les deux vecteurs par la longueur. Nous obtenons alors ces représentations vectorielles normalisées pour le document un et le document deux, et nous pourrions, par exemple, calculer la similitude cosinus. La similitude cosinus serait pour nous un indicateur de la similitude entre le document un et le document deux. Si nous obtenons une valeur de un, nous savons que les documents sont identiques, donc très, très similaires. Si nous obtenons une valeur de zéro, les documents ne sont pas liés. Nous n'obtiendrons pas de similitudes négatives ici car nous n'avons pas de comptes négatifs. Maintenant, j'ai dit que la représentation vectorielle TF-IDF est un peu plus intelligente que la représentation par sac de mots. Ce ne sont donc pas seulement des comptes. Au lieu de cela, cette représentation donne plus de poids aux mots qui transportent plus d'informations. Comment fait-elle cela ? Elle est composée de deux choses : la fréquence de terme, qui est essentiellement la représentation du sac de mots que nous avons déjà, à quelle fréquence un mot apparaît-il dans un document ? Et les mots qui apparaissent plus fréquemment devraient être plus importants pour le document. Cependant, comme nous l'avons vu dans l'exemple précédent, le mot "la" apparaissait assez fréquemment, mais il n'apportait aucune information. C'est là que la fréquence inverse de document entre en jeu. La fréquence inverse de document pose la question suivante : à quelle fréquence un mot apparaît-il à travers les documents ? Et bien sûr, les mots qui apparaissent souvent à travers les documents ne sont pas aussi significatifs. Ainsi, "la", par exemple, est un mot non pertinent. Il existe désormais plusieurs façons de pondérer la fréquence de terme et la fréquence inverse de document. Un exemple très populaire consiste à prendre les comptes et à les multiplier par le logarithme de la taille totale du vocabulaire, puis à diviser par la fréquence d'apparition d'un mot dans tous les documents. Mais comme je l'ai dit, il existe de nombreux schémas de pondération différents, et ce n'est que l'un d'entre eux. Maintenant, quels sont les problèmes avec ces représentations ? Tout d'abord, elles ne comprennent pas ce que sont les synonymes. Ainsi, si nous avons les mots voiture, automobile, décapotable, etc., nous aimerions qu'ils représentent un concept similaire, n'est-ce pas ? Et dans les représentations de documents que nous avons vues jusqu'à présent, voiture et automobile, par exemple, seraient deux composantes individuelles de notre vecteur. Et si nous avons voiture dans un document et automobile dans l'autre, notre similitude cosinus serait trop faible car nous ne partagerions aucun un ou aucun chiffre dans les deux représentations vectorielles. La similitude cosinus est donc trop faible si nous avons des synonymes lorsque nous utilisons la représentation par sac de mots ou TF-IDF. Nous avons également un problème avec les homonymes. Que sont les homonymes ? Ce sont des mots qui ont plusieurs sens. Prenons par exemple le mot souris. Si vous repensez à l'exemple que j'ai donné, j'ai dit "la souris mange le fromage", ce qui est clairement un animal, mais "il pose la souris sur la table" pourrait bien sûr être la souris d'ordinateur. Et nous n'aurions aucun moyen de distinguer cela en utilisant le sac de mots et les représentations vectorielles TF-IDF. Souris aurait donc dans les deux cas un un, et nous penserions qu'il s'agit du même concept de souris. Mais dans un cas, nous parlons d'un animal, dans l'autre, nous parlons du périphérique que nous utilisons. Dans ce cas, la similitude cosinus serait trop élevée si nous avons le même mot avec des sens différents. Maintenant, nous n'avons aucun regroupement de mots en champs sémantiques ou concepts sémantiques si nous utilisons la représentation par sac de mots ou TF-IDF. Et nous avons besoin d'un type de représentation différent pour calculer des similitudes qui tiennent compte de la synonymie et de l'homonymie.

L'Hypothèse Distributionnelle et les Plongements de Mots

Sven Giesselbach

Afin de dériver des représentations de caractéristiques que capturent également la synonymie et l'homonymie, nous allons examiner ce qu'on appelle l'hypothèse distributionnelle. Et nous allons commencer par regarder les plongements de mots, donc les représentations de mots au lieu des représentations de documents. En 1957, Firth a publié un article dans lequel il affirmait qu'un mot est caractérisé par l'entourage qu'il fréquente. Cela signifie que des mots similaires apparaissent généralement dans des contextes similaires, et si des mots ont des contextes similaires, alors ils auront également des sens similaires. Regardons l'exemple simplifié ici. "L'enfant joue dans le sable", "la mère aime son enfant", "l'enfant pleure". Nous pourrions facilement échanger le mot "enfant" avec le mot "gamin" dans chacune de ces phrases, et nous aurions toujours le même sens. Cela nous indique que "gamin" et "enfant" devraient avoir un sens très, très similaire, et si nous créons des représentations pour ces deux mots, elles devraient probablement être très similaires. Donc, contrairement au sac de mots ou aux représentations TF-IDF, il ne devrait pas y avoir une composante pour gamin et une pour enfant, mais gamin et enfant devraient être représentés de manière assez similaire. Et n'oubliez pas, nous parlons maintenant de représentations de mots. Si nous dérivons des représentations de mots, nous voulons qu'elles soient proches les unes des autres. Dans ces méthodes de plongement que nous allons examiner maintenant, l'hypothèse est que les mots proches d'un mot que nous essayons de représenter, notre mot cible, constituent le voisinage de ce mot. Généralement, nous regardons juste une petite fenêtre à gauche et à droite de chaque mot et nous disons que c'est l'entourage de ce mot, son contexte. Nous allons donc représenter chaque mot par un petit vecteur de nombres. Et les mots qui ont des sens similaires devraient avoir des vecteurs proches les uns des autres dans l'espace vectoriel. Ainsi, gamin et enfant devraient idéalement être très, très proches dans l'espace vectoriel. Dans un espace de représentation de texte idéal, ils auraient probablement exactement la même représentation vectorielle. Les mots étroitement liés mais qui ne sont pas des synonymes devraient être un peu plus éloignés. Ainsi, le mot "garçon" ou le mot "fille" devrait être un peu plus éloigné de gamin et enfant. Et les mots non liés comme le mot "voiture" devraient être encore plus éloignés. Il y a encore une chose importante : nous pouvons également calculer un vecteur de différence entre deux mots. Comme nous le verrons dans certaines de ces approches que nous allons apprendre maintenant, cette direction de similitude a également un sens. Et il y a des propriétés très intéressantes à ce sujet. Et si nous avons des vecteurs de longueur supérieure à 100, nous avons de nombreuses directions possibles de similitude et de nombreuses façons et dimensions de traiter le sens.

Word2Vec et l'Entraînement Auto-supervisé

Sven Giesselbach

La première technologie de plongement distribué que je veux vous présenter est Word2Vec. Elle a été introduite par Mikolov en 2013 et son équipe. Tout d'abord, supposons que chaque mot reçoive un vecteur de plongement de taille k. k pourrait être 100, 200, 300, 50, ou n'importe quel nombre que vous choisissez. Mais typiquement dans la littérature, c'est 200 ou 300. Pour l'exemple, nous allons commencer avec 100 ici. Chaque mot se voit attribuer un plongement de 100 dimensions. Bien sûr, vous ne voyez ici des plongements en trois dimensions que par souci de simplicité, mais imaginez que ce sont maintenant des plongements en 100 dimensions. Au début, nous les initialisons de manière aléatoire. Chaque mot reçoit donc un vecteur aléatoire de 100 dimensions. Maintenant, ce que nous allons faire, c'est prendre ce vecteur de 100 dimensions pour un mot et nous allons essayer de prédire ses mots voisins. Comment allons-nous faire cela ? Disons que nous avons le mot "économie" en traitant le texte. Maintenant, nous entraînons un modèle logistique pour prédire le mot "gagné". Que fait-il exactement ? Il prend la représentation vectorielle du mot "économie", puis il prend la représentation du mot "gagné" et de tous les autres mots de notre vocabulaire, et il compare leur similitude. Et il maximise la similitude entre les mots qui apparaissent réellement dans le contexte d'économie et essaie de minimiser la similitude avec tous les autres mots. Nous prenons donc le mot "économie", essayons de prédire "gagné", "un", "diplôme", "de", et ainsi de suite. La fois suivante, nous ferons cela pour "diplôme", "économie", "de", "Wharton". Comme vous pouvez le voir, nous prenons un voisinage de deux à gauche et deux à droite ici. À chaque étape, nous calculons une erreur, nous propageons cette erreur en retour, modifions les représentations de chacun des mots voisins et du mot central. De cette façon, ce qui va se passer, c'est que les représentations vectorielles du mot central et de ses mots voisins sont rapprochées, et la représentation des mots qui ne sont pas dans le contexte sont éloignées les unes des autres. Et nous répéterons bien sûr cela pour tous les mots de notre collection de documents. Une fois l'entraînement terminé, nous obtenons nos représentations vectorielles. Pour cela, nous n'avons besoin d'aucune annotation. C'est ce que nous appelons l'entraînement auto-supervisé. On l'appelait autrefois entraînement non supervisé, mais Yann LeCun a dit que comme il s'agit d'un entraînement sur l'ensemble de données lui-même, nous l'appellerons entraînement auto-supervisé. Et il y a toujours une sorte de supervision, n'est-ce pas ? Au début, nous choisissons un mot central, par exemple "économie", et nous cherchons le plongement de ce mot. Comme je l'ai dit, au début, c'est initialisé au hasard, et pendant l'entraînement, ces plongements sont modifiés. Lorsque nous le cherchons, nous obtenons un plongement de 100 dimensions du mot "économie". Maintenant, nous sélectionnons un mot voisin à prédire. Cela pourrait être le mot après économie, cela pourrait être "diplôme". Et nous essayons de prédire ce mot. Essentiellement, ce que nous faisons, c'est projeter ce vecteur d'économie sur l'ensemble du vocabulaire et calculer des scores de similitude. Le score de similitude entre économie et diplôme, et entre économie et n'importe quel autre mot du vocabulaire. Et bien sûr, ces scores de similitude correspondent à la taille de notre vocabulaire, qui pourrait par exemple être de 50 000 mots, mais aussi beaucoup plus. Il existe par exemple des modèles Word2Vec de Google qui ont plus d'un million de mots dans leur vocabulaire. Ce que nous faisons ensuite, c'est convertir ces scores de similitude en une probabilité softmax. Nous prenons le score du mot voisin qui nous intéresse, en calculons l'exponentielle, et la divisons par l'exponentielle de tous les scores de tous les autres mots du vocabulaire. De cette façon, we obtenons une probabilité normalisée. Maintenant, nous voulons maximiser la probabilité du mot qui est réellement dans le voisinage et minimiser la probabilité pour tous les mots qui ne le sont pas. Et comment l'algorithme va-t-il faire cela ? En rendant les représentations des mots voisins plus similaires et les mots qui ne sont pas dans le voisinage dissimilaires. Pour modifier les mots, nous allons calculer une perte, à savoir la perte d'entropie croisée. Et là, nous allons comparer les scores softmax avec les vecteurs one-hot des mots réels du voisinage. Maintenant, le softmax a un dénominateur très, très grand car tous les mots de notre vocabulaire y figurent. Cela signifie qu'à chaque étape où nous calculons ces scores, ces probabilités softmax, nous devons parcourir tout le vocabulaire. Il existe des astuces pour gérer cela. Notamment, approximer ce score par échantillonnage. Si nous choisissons juste quelques échantillons négatifs, nous pouvons approximer la véritable entropie croisée et le véritable gradient. C'est ce qu'on appelle l'estimation contrastive par bruit ou échantillonnage négatif. Ce que nous faisons ensuite, si nous calculons la perte, c'est utiliser la descente de gradient stochastique, courante dans les réseaux de neurones, pour modifier les poids de tous les mots, à savoir les plongements. C'est très efficace en termes de calcul, et cela fonctionne également pour les grands corpus. De plus, la descente de gradient stochastique échappe aux minima locaux. Pour savoir à quel point c'est efficace, sur une machine avec par exemple 24 cœurs, vous pouvez traiter Wikipedia en quelques heures. Une fois ces plongements obtenus, nous obtenons bien sûr cet espace de plongement. Il existe plusieurs façons d'évaluer la qualité de ces plongements. L'une d'entre elles consiste simplement à faire une analyse exploratoire. Nous pourrions projeter ces plongements vectoriels dans un espace vectoriel bidimensionnel et voir, par exemple, que les mots appartenant au sport ont des représentations très similaires, les mots de science ont des représentations similaires, et ainsi de suite. Nous pouvons donc très bien traiter les mots similaires et la synonymie ici. Une autre chose très cool est que Word2Vec capture également les relations entre les mots ou les rapports. Ce fut une grande surprise à la sortie de Word2Vec de voir que cet algorithme était capable de le faire car il n'avait pas été explicitement entraîné pour cela. L'exemple le plus célèbre est : vous prenez le vecteur de plongement du mot "roi", vous soustrayez le mot "homme", puis vous ajoutez ce vecteur de différence au mot "femme". Et vous finissez par obtenir la représentation du mot "reine", ou du moins vous arrivez à proximité de cette représentation. C'est vraiment génial. On peut donc faire de l'arithmétique vectorielle ici avec des mots. Et il a été démontré que l'on peut faire cela pour de nombreuses autres analogies. USA par rapport au dollar est comme le Royaume-Uni par rapport à la livre sterling. Ils ont trouvé beaucoup d'autres relations de ce type capturées par Word2Vec. Dans les premiers articles après la sortie de Word2Vec, de telles questions de relations étaient utilisées pour évaluer la qualité des représentations de plongement de mots. Elles étaient composées de questions telles que "Athènes est à la Grèce ce que Bagdad est à l'Irak", par exemple. Et ces ensembles de données de référence contiennent plus de 19 000 questions de ce type. Cependant, ces questions sont fortement critiquées. Bien qu'il soit impressionnant de voir que Word2Vec, entraîné par exemple sur le corpus text8, qui est une petite fraction de Wikipedia, obtient déjà 40 % de précision après 50 époques, ce n'est pas une référence très significative pour nous. Car ce qui est plus intéressant pour nous, c'est d'une part comment obtenir des similitudes à partir de cela, mais surtout comment utiliser ces représentations pour effectuer des tâches de traitement du langage naturel ou de compréhension du langage naturel. C'est une référence plus significative.

Doc2Vec et FastText

Sven Giesselbach

J'ai promis que nous regarderions aussi Doc2Vec, qui est une légère modification de Word2Vec. Ce que vous avez vu jusqu'à présent est la version skip-gram de Word2Vec, où nous prenons un mot central et essayons de prédire les mots voisins. Word2Vec peut aussi fonctionner dans l'autre sens. Vous prenez les mots voisins et essayez de prédire le mot central. Essentiellement, dans cette version de Doc2Vec, nous allons regarder exactement cela. Encore une fois, nous avons des représentations vectorielles pour chacun des mots dont nous disposons, et en plus, nous avons un vecteur de paragraphe. Maintenant, une chose spéciale se produit. À chaque contexte que l'algorithme parcourt, il traîne également cette représentation de vecteur de paragraphe. Maintenant, il prendra tous les mots voisins, comme Trump, gagné, économie, diplôme, pour prédire "un", mais il prendra également cette représentation de vecteur de paragraphe. Encore une fois, il essaiera de prédire le mot "un" en générant un vecteur de contexte très proche de la représentation du mot "un". Ce qui est spécial ici, c'est tout d'abord que, comme nous prenons plusieurs mots en entrée, nous devons trouver un moyen de les agréger. Nous pourrions par exemple faire la somme ou, plus couramment, faire la moyenne de ces représentations vectorielles. Mais ce qui est très important, c'est que chaque fois que nous faisons cela avec Doc2Vec, nous tenons également compte du vecteur de paragraphe ou du vecteur de document du document actuel que vous regardez. En entraînant le modèle ainsi, ce plongement de paragraphe commencera à capturer le contexte de tout le document car il est utilisé dans la prédiction de chaque mot du document entier. Il existe des implémentations très efficaces. Il y a une implémentation TensorFlow. Personnellement, je recommanderais la représentation Gensim également pour Word2Vec. Et Doc2Vec a été introduit en 2014 par Le et Mikolov. Nous avons maintenant une représentation simple pour les documents qui est bien plus puissante que la représentation par sac de mots et TF-IDF que nous avons examinée au début. Cette représentation est capable de capturer les synonymes, n'est-ce pas ? Ainsi, si nous avons le mot Trump et le mot président, elle comprendrait que ces mots sont très étroitement liés. Comme je l'ai dit, nous allons regarder une modification de Word2Vec qui utilise aussi des informations morphologiques. C'est aussi très important car Word2Vec et Doc2Vec, tels que je les ai présentés, ne sont pas capables de représenter des mots non vus ou inconnus. Dans FastText, l'extension dont je parle, publiée en 2017 par Bojanowski et où Mikolov était aussi impliqué, chaque mot est représenté comme un sac de n-grammes de caractères. Que sont les n-grammes de caractères ? Regardons l'exemple des 3-grammes. Si nous découpons le mot "where" en trigrammes, nous obtenons les trigrammes w-h-e, h-e-r, e-r-e, et vous voyez ici qu'il y en a deux autres : le crochet avec w-h et r-e avec le signe supérieur ou le crochet fermant. Cela signifie que nous allons découper chaque mot en séquences de caractères d'une certaine longueur, par exemple trois, quatre, cinq, peu importe. Mais nous allons aussi ajouter des symboles de début et de fin pour chaque mot afin de savoir où un mot commence et où il finit. Pourquoi est-ce important ? Parce que nous voulons une représentation différente pour le mot "her" et pour le trigramme "her", n'est-ce pas ? Parce que l'un est une partie d'un autre mot et l'autre est un mot complet. De plus, nous utiliserons aussi si possible une représentation complète du mot. Pourquoi dis-je si possible ? Parce que si nous n'avons pas vu un mot pendant l'entraînement, nous pouvons toujours créer une représentation de ce mot en omettant la représentation du mot entier. Maintenant, pour chaque mot, nous entraînons à nouveau un plongement, ou nous commençons par définir un plongement. Et pour chaque n-gramme de caractères, nous définissons aussi un plongement. Nous représentons le mot par la somme de ses plongements de n-grammes et, si le mot a un plongement, son propre plongement bien sûr. Ensuite, au lieu de prédire le contexte uniquement avec les mots eux-mêmes, nous utilisons aussi les n-grammes de caractères pour la prédiction. Cela est ajouté dans le calcul softmax, où nous utilisons aussi les parties, les n-grammes des caractères. Comme avant, regardons un petit exemple. Ici, vous voyez que le mot "economics" a été divisé en eco, nom, ics, et ainsi de suite. De même pour "degree". Cette fois, au lieu de prédire uniquement les mots, nous pouvons aussi prédire les n-grammes de caractères, ou les utiliser pour faire les prédictions. Ce que nous voyons ici est très similaire à l'approche CBOW. C'est l'approche que nous avons introduite avec Doc2Vec. Celle où nous prenons les mots du contexte, les agrégeons et prédisons les mots voisins, ou le mot central. Maintenant, les résultats de FastText montrent qu'il est aussi performant que Word2Vec si nous avons des questions d'analogie sémantique, comme homme/roi est à femme/reine. Et il est bien meilleur dans la plupart des questions syntaxiques, comme run/running est à walk/walking. Ce n'est pas une surprise car ces questions syntaxiques reposent davantage sur la morphologie des mots. Les résultats sémantiques sont légèrement moins bons. Voici la colonne des résultats de FastText et voici ceux de Word2Vec. Légèrement moins bons dans la plupart des questions et des langues, mais la performance syntaxique est souvent bien meilleure, voire nettement supérieure. FastText est également disponible en téléchargement gratuit. Le code source est en C++, mais il existe aussi des wrappers Python, également officiels par Facebook. Et il existe des vecteurs de mots pré-entraînés pour plus de 157 langues que vous pouvez télécharger et utiliser librement. C'est une excellente ressource si vous voulez commencer à interroger des similitudes de mots, créer des représentations de documents ou les utiliser pour des tâches en aval comme des classifications. FastText est d'ailleurs livré avec un classifieur, et un très performant.

Encodages par Paires d'Octets (BPE)

Sven Giesselbach

Le dernier type de plongement que je veux présenter est celui des paires d'octets. Nous allons commencer par introduire les encodages par paires d'octets. Ils diffèrent significativement des approches précédentes par la façon dont ils créent leur vocabulaire. Parce que désormais chaque mot n'a pas besoin d'être dans le vocabulaire, mais ce sont plutôt des séquences de caractères qui composent tout le vocabulaire. Ce que nous faisons ici, c'est sélectionner d'abord tous les caractères comme jetons dans notre vocabulaire, donc tous les caractères possibles dans nos textes. Ensuite, nous comptons combien de fois chacun de ces caractères apparaît et nous fusionnons les plus fréquents. Ici, nous avons le vocabulaire e, i, n, o, r, s, t, souligné, qui sépare les mots ici. Ensuite nous fusionnons e et i, à l'étape suivante n et e. Mais vous pouvez aussi voir que nous préservons le vocabulaire original. Nous allons faire cela de manière répétée jusqu'à ce que le vocabulaire atteigne une taille prescrite. Typiquement la taille ici est de 60 000 ou 64 000. Ce qui se passe maintenant, c'est que les mots les plus fréquents sont explicites. "Eine", par exemple, ici, qui est un mot allemand très fréquent, aura sa représentation explicite. Tous les autres mots peuvent être représentés par leurs parties, nous pouvons donc composer un mot par ses n-grammes de caractères, par ses parties de caractères. Et c'est ainsi que nous pouvons représenter des mots arbitraires, qui peuvent aussi être non vus pendant l'entraînement. Donc comme pour FastText, nous pouvons aussi dériver des plongements pour des mots inconnus. Maintenant, nous pouvons facilement calculer des plongements pour l'encodage par paires d'octets. Par exemple, si nous utilisons la tokenisation que nous avons grâce aux encodages par paires d'octets, puis que nous entraînons un modèle Word2Vec ou un modèle très similaire appelé GloVe. Et ces plongements de paires d'octets pré-entraînés fonctionnent étonnamment bien, bien qu'ils soient composés d'un vocabulaire si étrange. Et comme vous pouvez le voir sur la droite, nous pouvons par exemple chercher le mot ou la terminaison "ingen", qui est un suffixe souvent utilisé pour les villes en Allemagne. Et vous pouvez voir que nous avons d'autres suffixes comme plus similaires, comme hausen, lingen, hofen, et ainsi de suite. La recherche de similitude fonctionne vraiment ici. Et ce qui est encore plus spécial, et j'ai promis que ce serait économe en ressources, c'est que ces méthodes de plongement de paires d'octets produisent des fichiers de plongement bien plus petits. Juste pour vous donner une comparaison, pour une tâche de reconnaissance d'entités nommées, un modèle BPEmb anglais de 11 Mo égale les résultats d'un modèle FastText de 6 Go. Et encore une fois, cette procédure de plongement, introduite par Sennrich et al. en 2016, est aussi librement disponible. Vous pouvez donc la télécharger et calculer des plongements de paires d'octets, qui vont jouer un rôle important dans les plongements contextualisés que nous allons examiner dans les diapositives suivantes.

Applications et Showroom NLU

Sven Giesselbach

Maintenant, avant de commencer à regarder les plongements contextualisés, regardons d'abord une application pour les plongements distribués. Une chose que nous avons intégrée dans le showroom NLU est la possibilité de chercher des mots similaires en utilisant plusieurs méthodes de plongement. Actuellement, nous avons un modèle pour Word2Vec, GloVe et FastText, et nous en ajouterons bientôt d'autres comme les plongements de paires d'octets. Pourquoi est-ce utile ? Eh bien, nous pourrions l'utiliser pour la création de terminologie. Dans l'un de nos projets dans le domaine médical, nous avions le sujet du cancer colorectal. Au début, nous voulions créer une terminologie afin de savoir quand les documents seraient pertinents pour les médecins. Et ce que vous pouvez voir ici, c'est que si nous cherchons le mot "Tumor" en allemand, nous obtiendrons beaucoup de réponses différentes dans Word2Vec, GloVe et FastText. Vous pouvez aussi voir que FastText met l'accent sur la similitude morphologique. Et aussi quelque chose de très intéressant, il trouve ce "Melanomtumor", qui contient aussi le mot "Tumor". C'est très différent des résultats que nous obtenons avec Word2Vec et GloVe. Une autre chose qui est bien sûr intéressante lorsque nous regardons les plongements de documents est la recherche de documents. Ainsi, pour un document donné, nous voulons trouver le document cible le plus similaire. Une chose que nous avons implémentée ici est bien sûr Doc2Vec et ce qu'on appelle la "word mover's distance", ou dans ce cas la similitude de déplacement de mots. Où nous prenons des plongements Word2Vec, GloVe ou FastText et calculons la similitude des documents. Ces phrases ici sont notre phrase source : "Es geht um einen Mangel bei der Bestellung des Monitors von Eizo". Il y a donc eu une erreur lors de la commande de ce moniteur chez Eizo, il y a eu une autre erreur, mais il y avait un problème avec le moniteur que nous avons commandé. Ensuite, les phrases cibles auxquelles nous voulons comparer cela sont : "Der bestellte Bildschirm war defekt", était défectueux. L'autre est "Es gab einen Mangel an Vitamin B". Si vous regardez cela de plus près, vous verrez que la deuxième phrase ici et la phrase source partagent plus de mots. Mais le sens des mots de la première phrase cible et de la phrase source sont bien sûr plus proches. Heureusement, c'est aussi reflété par les différentes mesures de similitude ici. Certaines d'entre elles comme Doc2Vec le font très bien, tandis que d'autres peinent mais choisissent tout de même les moniteurs dans les deux cas ici comme la phrase la plus similaire. Maintenant, je pense qu'il est temps pour notre première question. Cette question porte sur FastText contre Word2Vec. Question un : quels avantages FastText a-t-il sur Word2Vec ? A : les mots inconnus peuvent être représentés. B : l'algorithme nécessite moins de ressources. C : les informations syntaxiques peuvent être mieux capturées. Et/ou D : les informations sémantiques peuvent être mieux capturées. J'espère que ce n'était pas trop difficile.

Plongements Contextualisés et Modèles de Langage

Sven Giesselbach

Regardons maintenant les plongements contextualisés. Tout d'abord, quelles sont les différences entre les plongements distribués et les plongements contextualisés ? Les méthodes de plongement comme Word2Vec, FastText et BPE sont appelées plongements distribués. Vous les avez maintenant vus, ils ont un seul plongement par mot ou par séquence de caractères, et celui-ci est appris sur tous les contextes. Ce sont de très bonnes méthodes en termes de recherche de plus proches voisins et pour capturer les relations entre les voisins les plus proches ou les mots en général. Mais ce n'est pas idéal pour les tâches en aval. Même si Word2Vec a augmenté la performance de nombreuses approches en traitement et compréhension du langage naturel, les plongements contextualisés, ce type plus récent de plongements, sont bien meilleurs pour les tâches en aval. Ce qu'ils font différemment, c'est qu'ils apprennent des plongements par contexte dans lequel les mots apparaissent. Nous n'avons donc pas une représentation unique pour un mot, mais nous avons une représentation dépendante du contexte. Nous avons donc plusieurs représentations pour chaque mot selon le contexte. Et ces plongements contextualisés adaptent les plongements d'un mot au contexte. C'est par exemple utile si nous voulons résoudre le problème des homonymes, que nous n'avions pas tout à fait résolu avec Word2Vec. Avec Word2Vec, souris, nous n'avons toujours qu'une seule représentation, à moins de modifier un peu Word2Vec. Mais avec ces plongements contextualisés, nous obtiendrions des représentations très, très différentes pour "la souris mange le fromage" et "il utilise la souris pour contrôler l'ordinateur". Sur quoi ces plongements contextualisés sont-ils basés ? Ce sont des modèles de langage. Ces modèles de langage, vous les connaissez tous grâce à vos smartphones. Disons que nous avons la phrase "le chat est assis sur le", et sur la base de cette partie d'une phrase, vous voulez prédire le mot suivant, qui pourrait bien sûr être "tapis". Maintenant, nous voulons calculer la probabilité du mot "tapis" étant donné ce contexte, et bien sûr nous voulons maximiser la probabilité du mot "tapis" étant donné ce contexte. C'est donc encore très similaire au paradigme Word2Vec que nous avons examiné, où nous prédisons un mot central. Maintenant, nous prédisons un dernier mot ou un mot suivant. C'est bien sûr utilisé dans les smartphones pour prédire le mot suivant. Si je tape "Je vais", il devrait automatiquement me dire que peut-être le mot suivant pourrait être "maison" ou "à" ou quelque chose de similaire. Les modèles de langage peuvent, par exemple, être des réseaux de neurones profonds, ou sont de nos jours des réseaux de neurones profonds. Et ils ont aussi bien sûr à nouveau des vecteurs d'entrée et de sortie de longueur fixe. Et pour gérer des séquences de longueur variable, nous avons besoin de quelque chose de différent de ce que nous avons eu jusqu'à présent. à savoir la récurrence. L'idée est la suivante : nous avons un réseau de neurones, nous essayons de prédire un mot avec ce réseau de neurones avec des vecteurs de longueur fixe et nous stockons les informations sur le passé dans un vecteur caché, comme c'est fait dans les réseaux de neurones récurrents. Et avec le vecteur caché et l'entrée actuelle, nous essayons de prédire un nouveau vecteur caché et l'entrée suivante ou la sortie suivante. Nous allons répéter cela pour chaque élément de notre séquence. Ce vecteur caché est donc une sorte d'historique de ce que nous avons déjà vu. X est notre vecteur actuel, quel mot regardons-nous actuellement, puis nous essayons de prédire le mot suivant. Voyons donc comment cela fonctionne avec les réseaux de neurones récurrents. Au début, nous avons un vecteur caché qui est initialisé à zéro. Et nous avons, par exemple, des plongements initialisés au hasard. Mais ceux-ci pourraient aussi être des plongements par paires d'octets ou des plongements word2vec pour chaque mot. Maintenant, ce que nous faisons, c'est injecter le vecteur caché et le premier vecteur de plongement dans notre réseau de neurones récurrent. Et nous allons essayer de prédire que le mot suivant est chat. Donc "le" puis "chat". Et la façon dont nous allons faire cela est très, très similaire à word2vec. Nous avons donc un softmax sur tout le vocabulaire et nous allons maximiser la probabilité du mot chat et minimiser la probabilité de tous les autres mots. Nous allons faire cela pour chaque mot à chaque position. Et il manque une flèche par ici. Il devrait aussi y avoir une flèche de ce vecteur vers le réseau de neurones récurrent, bien sûr. Et ce vecteur caché ici devrait maintenant capturer le contexte "le". Tandis que le vecteur caché suivant devrait capturer, d'où la flèche, les mots "le" et "chat", et ainsi de suite. Et maintenant à nouveau, à chaque partie, nous entraînons un classifieur logistique, le softmax, pour prédire le mot correct. Et à la fin, nous obtenons la probabilité du mot tapis étant donné le contexte "le chat est assis sur le", qui est ici représenté par le plongement "le" et le vecteur caché quatre, qui devrait capturer tout le contexte jusqu'alors. Une fois que cela a été entraîné, nous avons des vecteurs cachés après chaque plongement que nous injectons, qui devraient avoir une représentation significative du contexte. Et parce que nous utilisons des réseaux de neurones récurrents, ils devraient potentiellement aussi capturer les relations entre des entrées très distantes. L'important ici est que ce réseau de neurones récurrent reste le même à chaque position ici. Il ne s'agit donc pas de réseaux de neurones récurrents différents, mais du même qui a été entraîné à chacune de ces positions et qui partage les paramètres. Encore une fois, nous n'avons besoin d'aucune annotation manuelle. C'est donc très similaire à word2vec. Nous faisons juste un entraînement auto-supervisé sur les données elles-mêmes.

ELMo (Embeddings from Language Models)

Sven Giesselbach

Maintenant, ELMo s'est appuyé sur cette hypothèse selon laquelle chacun des états cachés du réseau récurrent peut servir de plongement contextualisé des mots. Et ELMo signifie plongements par modélisation du langage. Et dans ELMo, nous empilons plusieurs LSTMs, qui sont des réseaux de neurones récurrents, les uns sur les autres. Et au lieu d'utiliser des LSTMs unidirectionnels, nous utiliserons des LSTMs bidirectionnels. Donc des LSTMs allant de la gauche vers la droite et de la droite vers la gauche à travers le texte, ce qui signifie que nous pouvons capturer le contexte de droite et le contexte de gauche des mots. Et au lieu d'utiliser un seul vecteur caché pour représenter le mot "le", par exemple, nous allons prendre le contexte de gauche et le contexte de droite. Et nous allons ensuite avoir plusieurs LSTMs, par exemple, deux couches de LSTMs. Et nous allons utiliser chacune des représentations créées par ces LSTMs ainsi qu'une représentation d'entrée, qui pourrait bien sûr être, par exemple, des plongements de paires d'octets. Et maintenant ce que nous allons faire, c'est pré-entraîner ELMo en tant que modèle de langage, modèle de langage bidirectionnel. Et ensuite nous allons spécialiser ELMo pour résoudre certaines tâches, par exemple, la reconnaissance d'entités nommées, dans laquelle nous essayons, par exemple, de comprendre quels mots appartiennent au nom d'une personne, quels mots sont le nom d'une organisation, et ainsi de suite. Et ce que nous allons faire là, c'est prendre les différentes représentations que nous obtenons pour les mots dans ELMo et apprendre une combinaison linéaire d'entre elles pour mieux résoudre une tâche. Donc ce que nous faisons, c'est que nous avons ce premier plongement initial de chaque mot dans la couche la plus basse. Et ensuite nous obtenons les représentations bidirectionnelles à chaque couche. Donc une représentation de gauche à droite, une représentation de droite à gauche, et nous allons les empiler. Et nous allons avoir cela pour plusieurs couches, donc t supérieur ou égal à un. Cela pourrait être deux, cela pourrait être trois, cela pourrait être plusieurs. Et nous allons entraîner ces vecteurs cachés en entraînant un modèle de langage. Et une fois que nous avons fini d'entraîner un modèle de langage et que nous voulons entraîner une tâche en aval, telle que la reconnaissance d'entités nommées, nous allons traiter une phrase dans laquelle nous voulons reconnaître les entités avec ELMo, le modèle de langage. Nous allons obtenir les différentes représentations cachées, donc les différentes représentations de plongement pour chaque mot. Et ensuite nous allons apprendre une combinaison linéaire de toutes celles-ci. Et nous entraînons les poids de chacune de ces représentations en les optimisant sur la tâche que nous effectuons. Donc par exemple, pour la reconnaissance d'entités nommées. Et ELMo s'attaque explicitement à ce problème de polysémie dû à l'homonymie. Maintenant nous avons des sens différents pour les mots dans différents contextes. Donc maintenant explicitement le mot souris aura deux plongements différents dans le contexte "la souris mange le fromage" et "la souris est utilisée pour contrôler l'ordinateur". Ces plongements contextualisés profonds, ELMo, ont été introduits en 2018 par Peters et ses collègues. ELMo a montré d'excellents résultats sur de nombreuses tâches, des tâches de compréhension du langage naturel et de traitement du langage naturel, et a amélioré l'état de l'art sur presque toutes. Et ce qui a également été montré, c'est que si vous utilisez les représentations d'ELMo pour le mot jouer dans ce contexte, par exemple, vous obtiendrez des plus proches voisins très, très significatifs, c'est-à-dire d'autres contextes dans lesquels le mot jouer apparaît, qui montrent cette désambiguïsation. Donc ils comprennent, le modèle comprend les différences entre le mot jouer comme dans s'amuser et jouer comme dans pièce de théâtre. Ce que GloVe ou word2vec, par exemple, ne pouvaient pas faire. Ils auraient donc reconnu tous les mots liés à jouer comme dans pièce de théâtre et dans s'amuser comme similaires. Maintenant, quelles sont les caractéristiques d'ELMo ? Comme je l'ai dit, il prend en compte la polysémie ou l'homonymie, donc différents plongements pour le même mot. Il est hautement contextuel, cela signifie donc que les représentations des mots dépendent entièrement du contexte dans lequel ils sont utilisés et bien sûr de la représentation initiale. C'est une représentation très profonde car elle utilise plusieurs LSTMs bidirectionnels. Il est souvent utilisé avec des sous-modèles de mots basés sur les caractères, donc par exemple les plongements de paires d'octets. Et il est également disponible librement auprès d'AllenNLP. Et je vous recommande de consulter allennlp.org car ils ont aussi ce site web sur lequel vous pouvez consulter différentes méthodes de traitement du langage naturel, de compréhension du langage naturel dans la langue anglaise. Maintenant, cela m'amène à la question numéro deux, qui concerne ELMo. Lesquelles des affirmations suivantes sur ELMo sont vraies ? A, ELMo contient exactement deux couches bi-LSTM. B, en raison des plongements contextualisés, les homonymes ont des représentations différentes. C, ELMo ne peut pas représenter les mots non vus. D, ELMo est entraîné en tant que modèle de langage puis spécialisé dans une tâche différente.

Mécanisme d'Attention et Transformateurs

Sven Giesselbach

Maintenant, au moment de sa sortie, ELMo était la star du spectacle. Mais malheureusement pour ELMo, peu de temps après, BERT a été publié et il a pris la couronne. Et BERT s'est appuyé sur quelque chose qu'on appelle le mécanisme d'attention, que je vais brièvement expliquer en utilisant à nouveau les bi-LSTMs. Mais BERT omet en fait complètement les couches récurrentes. Ce mécanisme d'attention a donc été introduit dans une tâche de traduction. Et la tâche ici était, ou le cadre ici était, que nous avions un modèle séquence-à-séquence qui encodait une séquence dans une langue source et essayait de la décoder ensuite dans une langue cible. Vous pouvez imaginer que l'encodeur est quelque chose comme un réseau de neurones récurrent bidirectionnel ou, dans le cas d'ELMo, un LSTM bidirectionnel. Donc encore une fois, un réseau de neurones récurrent qui traverse une séquence de la gauche vers la droite et de la droite vers la gauche. Et à chaque position, il produit un vecteur caché. Et comme nous l'avons vu dans ELMo, ces vecteurs cachés peuvent être considérés comme des représentations de plongement, des représentations de plongement contextualisées de mots. Si vous concaténez la représentation de gauche et de droite, nous obtenons une représentation unique pour chaque mot dans chaque contexte. Et cette représentation devrait contenir des informations sur les mots précédents et suivants. Cependant, elle devrait être concentrée autour du mot que nous étudions actuellement. Maintenant, l'encodeur produira une sortie qui est un vecteur caché unique, bien sûr. Et ce serait un goulot d'étranglement car ce vecteur caché unique doit capturer toutes les informations de tous les mots de la séquence précédente. Et pour éviter cela, le mécanisme d'attention a été créé. Et le mécanisme d'attention permet essentiellement au décodeur de prêter attention à chaque représentation cachée produite par l'encodeur. Et cela ressemble à quelque chose comme ça ici. Maintenant nous avons un décodeur qui peut avoir différents états et à chaque position nous pouvons comparer l'état du décodeur à toutes les représentations cachées de l'encodeur et calculer une sorte de corrélation entre l'état du décodeur et les représentations cachées de l'encodeur. Et cette corrélation peut être calculée de différentes manières. Cependant, si nous calculons cette corrélation, nous prenons les représentations cachées pondérées, pondérées par leurs corrélations, et nous les additionnons et nous obtenons un vecteur de contexte qui est ajusté vers l'état actuel du décodeur en raison de la similitude de l'état du décodeur avec les représentations cachées. Et nous pouvons aussi utiliser ce vecteur de contexte dans notre décodeur pour produire de meilleures sorties. Maintenant, cette corrélation est calculée avec un softmax. Cependant, les scores peuvent être calculés de différentes manières. Ils pourraient, par exemple, être des similitudes cosinus ou un produit scalaire normalisé ou mis à l'échelle, le produit scalaire lui-même, ou n'importe quoi d'autre que vous pouvez imaginer. Maintenant, ce qui est vraiment cool avec ce mécanisme d'attention, comme nous pouvons le voir dans la traduction ici, c'est qu'il vous montre aussi à quel point du décodeur quelles parties de l'encodeur sont importantes. Et vous pouvez vraiment voir que l'architecture est capable de faire correspondre les mots appropriés de la langue cible à la langue source. Maintenant, jusqu'à présent nous n'avons vu l'attention que dans les bi-LSTMs ou les réseaux de neurones récurrents. Mais j'ai dit que BERT n'utilise aucun réseau de neurones récurrent auparavant. Il ne repose donc que sur les transformateurs. Et les transformateurs consistent en quelque chose qu'on appelle le mécanisme d'auto-attention. Et BERT est essentiellement la partie encodeur d'un tel réseau transformateur. Alors qu'est-ce que l'auto-attention ? C'est très intéressant. Disons que nous avons la phrase Je suis étudiant. Et bien sûr nous pouvons dériver un plongement pour chacun de ces mots, par exemple en utilisant les plongements de paires d'octets que nous avons introduits plus tôt. Maintenant, l'architecture transformateur introduite par Vaswani et al. en 2017 introduit une matrice requête, clé et valeur, ou en fait plusieurs matrices requête, clé et valeur. Maintenant, disons que nous traitons le mot suis. Le mot suis est ensuite transformé en une représentation de requête, une représentation de clé et une représentation de valeur, comme le sont tous les autres mots. Maintenant, nous allons utiliser la représentation de requête de suis et la noter par rapport à toutes les représentations de clé des autres mots du contexte. Et nous n'allons pas juste regarder comme dans word2vec deux à gauche ou deux à droite ou cinq à gauche et cinq à droite, mais nous allons regarder tout le contexte, c'est-à-dire toute la séquence que nous traitons actuellement. Maintenant nous obtenons des scores, que nous pouvons bien sûr normaliser avec un softmax. Et quand nous les normalisons, idéalement ils devraient s'additionner pour faire un. Je pense que ça a l'air bien ici. Et nous pouvons utiliser ces scores normalisés comme des poids. Et ensuite nous prenons la moyenne pondérée de toutes les représentations de valeur de tous les mots ici et construisons une nouvelle représentation pour le mot suis qui est basée sur le contexte. Donc sans utiliser de réseaux de neurones récurrents, nous traitons la séquence ici et contextualisons ce plongement. Et nous obtenons un nouveau plongement contextualisé pour le mot suis. Et au lieu de faire cela une seule fois, nous pouvons le faire plusieurs fois et bien sûr pour tous les mots. Et ce qui est si agréable avec cette architecture transformateur, c'est que nous pouvons faire cela essentiellement en parallèle pour tous les mots ici. C'est donc hautement parallélisable. Et dans l'architecture transformateur, nous avons un encodeur et un décodeur qui contiennent principalement ces couches d'auto-attention multi-têtes. Multi-têtes signifiant que nous avons plusieurs de ces matrices requête, clé et valeur. Ils ont aussi des réseaux pleinement connectés et des couches de normalisation dans l'encodeur. Et rappelez-vous, BERT ne consiste qu'en l'encodeur. Nous allons aussi regarder le décodeur. Maintenant, il y a une chose qui devrait vous gêner. Dans l'auto-attention, nous avons regardé tous les mots du contexte. Le décodeur bien sûr ne peut prêter attention qu'aux entrées antérieures, mais il peut bien sûr aussi prêter attention aux entrées de l'encodeur comme nous l'avons vu dans ce cas de traduction. Mais puisqu'il ne peut prêter attention qu'aux sorties antérieures du décodeur et non aux sorties futures, bien sûr, nous avons quelque chose qu'on appelle une couche d'auto-attention masquée, qui masque les entrées futures. Cela ressemble à quelque chose comme ça. Et le mot 10 ne peut prêter attention qu'aux mots antérieurs au mot 10. Maintenant, une chose spéciale à propos du décodeur ici est aussi cette attention encodeur-décodeur. Parce qu'au lieu de seulement l'auto-attention, donc au lieu de seulement traiter la séquence elle-même, il peut aussi prêter attention à l'état de l'encodeur. Et dans l'architecture transformateur, il prête attention au dernier état de l'encodeur. Maintenant, il y a un blog appelé Le Transformateur Illustré, qui contient une visualisation très, très illustrative de la façon dont les réseaux transformateurs fonctionnent. Dans la couche la plus basse, nous avons les mots, je suis étudiant, et leurs plongements. Et une partie importante que nous avons omise jusqu'à présent est que nous avons aussi des plongements pour les signaux temporels. Qu'est-ce que cela signifie ? Nous avons un plongement qui encode la position de chaque mot dans une séquence. Pourquoi est-ce important ? C'est important parce que de cette façon, sans la récurrence que nous avions dans les réseaux de neurones récurrents, nous savons dans quel ordre les mots apparaissent. Parce que si vous vous rappelez correctement de l'auto-attention, cela n'avait pas vraiment d'importance où les mots se trouvaient. Cela comparait juste la clé et la requête des mots peu importe l'ordre. Mais avec ce signal temporel, nous pouvons lui donner une idée de la position d'un mot dans une séquence. Maintenant ce que nous faisons, c'est que nous ajoutons, par exemple, les plongements de paires d'octets et ces plongements de signaux temporels et nous les poussons vers notre encodeur, donc à travers notre couche d'auto-attention et la couche de normalisation. Et typiquement nous avons plusieurs de ces couches d'encodeur. Ensuite nous obtenons de nouvelles représentations encodées de je suis étudiant, auxquelles le décodeur peut ensuite prêter attention et essayer de décoder cela dans la langue anglaise, par exemple. Et dans la première position, il ne peut bien sûr prêter attention qu'aux entrées, aux sorties de l'encodeur. Mais dans la deuxième position, il peut aussi prêter attention à sa première sortie, à Je, bien sûr pas aux sorties futures, d'où l'attention masquée. Le décodeur a donc l'attention sur l'encodeur et ses sorties antérieures. Maintenant, le transformateur était un modèle encodeur-décodeur uniquement d'attention, au début utilisé pour la traduction. Et à l'époque c'était une architecture très, très complexe composée de six couches d'encodeur et six couches de décodeur. Et l'entraînement a pris environ 3,5 jours sur huit GPUs P100.

Apprentissage par Transfert et BERT

Sven Giesselbach

Eh bien, au lieu de traiter des séquences d'une langue vers une autre, nous pourrions bien sûr utiliser ces architectures de transformateurs aussi comme modèles de langage. Et les architectures à l'état de l'art aujourd'hui sont toutes basées sur des modèles de langage. Nous avons donc ce nouveau paradigme pour le traitement et la compréhension du langage naturel dans lequel nous entraînons un modèle de langage sur un grand corpus de textes sans annotations, donc un entraînement auto-supervisé. Nous obtenons des plongements sensibles au contexte qui connaissent la structure du langage. Et des exemples pour cela sont ELMo comme nous l'avons déjà vu, mais aussi BERT ou OpenAI GPT, que nous allons examiner plus tard. Et ensuite nous spécialisons ces modèles sur certaines tâches. Et c'est précisément l'apprentissage par transfert, n'est-ce pas ? Nous avons donc ce modèle de langage qui apprend les représentations du langage et ensuite nous transférons la connaissance du langage que nous avons sur une tâche afin de nécessiter moins de données d'entraînement qu'auparavant. Et ces modèles de langage à plongements contextualisés ont montré des augmentations significatives de performance pour de nombreuses tâches telles que la traduction, l'extraction de relations, l'analyse de sentiment, et ainsi de suite. Et comme déjà mentionné, le dépôt Hugging Face Transformers est une très, très bonne ressource pour beaucoup des architectures mentionnées ici. Maintenant word2vec est aussi mentionné ici parce que word2vec peut bien sûr aussi être entraîné ou est entraîné comme une sorte de modèle de langage et peut ensuite être spécialisé dans des tâches en aval en l'incorporant dans d'autres architectures de réseaux de neurones. Maintenant, BERT a déjà été pas mal mentionné et BERT suit aussi ce paradigme de d'abord entraîner un modèle de langage et ensuite le spécialiser sur une certaine tâche. BERT est basé sur la partie encodeur du modèle transformateur, l'architecture transformateur. On omet donc le décodeur ici. Et il modifie l'encodeur de certaines manières. BERT a donc été introduit en 2018 par Devlin et al. et il crée des jetons spéciaux pour les tâches de prédiction. Et à nouveau, il est entraîné sur de grands ensembles de données comme l'était aussi ELMo. Et BERT signifie représentations d'encodeurs bidirectionnels à partir de transformateurs. Maintenant, les jetons spéciaux que j'ai mentionnés sont le jeton CLS ou jeton de classification et le jeton de séparation et le jeton de masquage. Et BERT entraîne un modèle de langage très spécifique. Au lieu de produire la sortie suivante, il omet certains mots lors de l'entraînement et essaie de prédire quels mots ont été omis. Ce sont donc les mots masqués ici. Très probablement celui-ci est "à" et celui-ci est "acheté". L'homme est allé au magasin et il a acheté du lait. Et dans l'étape de pré-entraînement de BERT, BERT essaie de prédire le mot correct à ces positions ici. BERT utilise des plongements de paires d'octets, par exemple, dans la couche la plus basse et ensuite les pousse à travers des blocs d'auto-attention comme nous le savons déjà par l'architecture transformateur. Et ensuite dans la dernière couche, il utilise ses plongements contextualisés pour faire des prédictions sur les mots manquants, les mots masqués. Donc ici ça pourrait être "à" et ici ça pourrait être "acheté". Et à nouveau, nous utilisons un modèle de classification logistique à la fin avec un softmax pour prédire quels mots du vocabulaire sont les plus susceptibles d'être aux positions manquantes. Maintenant, dans l'entraînement de BERT, 80 % du temps les jetons sont remplacés par le jeton masqué. 10 % du temps les jetons sont remplacés par un jeton aléatoire. Et les 10 % du temps restants, si les jetons sont modifiés, ils sont juste laissés dans ce cas inaltérés, donc inchangés. Une autre tâche que la tâche de modélisation du langage que BERT fait en pré-entraînement est la détection de la phrase suivante. Donc ce jeton classifieur en pré-entraînement est juste ici pour classifier si l'homme est allé au magasin et il a acheté du savon sont des phrases qui se suivent. Et si nous regardons le deuxième exemple, l'homme est allé au magasin, les chats mangent des souris, alors il est très probable que ce ne soit pas la phrase suivante suivant la première phrase. BERT est aussi capable de capturer des relations à longue distance. Donc si nous avons des phrases qui se suivent, parce que nous entraînons de cette manière, nous pouvons aussi prêter attention à des contextes très, très larges. La seule limitation que nous avons, bien sûr, est notre mémoire. Combien de vecteurs cachés ou combien de vecteurs de plongement pouvons-nous faire tenir dans la mémoire de notre GPU ? Comme déjà mentionné, la couche la plus basse de BERT utilise des jetons de sous-mots, donc des plongements de paires d'octets, par exemple, ou des plongements de parties de phrases, dans lesquels les mots sont divisés en sous-parties. Et dans BERT en particulier, ils sont divisés et ensuite nous les dénotons avec des hashtags s'ils sont une partie d'un mot. Nous mettons donc ces hashtags au début d'une partie de mot si la partie de mot appartient à la partie de mot précédente. Au lieu d'avoir seulement ces représentations de mots, nous avons aussi ces plongements positionnels, que nous avons mentionnés dans l'architecture transformateur, et nous avons ces plongements de section, qui indiquent si un jeton appartient à la phrase un ou à la phrase deux, par exemple. Et BERT additionne simplement ces trois représentations pour chaque jeton. Maintenant, tout comme ELMo et les autres approches de modélisation du langage, BERT a besoin de beaucoup de données pour le pré-entraînement, un grand corpus de texte. Et si nous entraînons BERT, par exemple, sur le BooksCorpus, qui compte 800 millions de mots, et Wikipedia en anglais, qui comprend 2,5 milliards de mots, cela prend pour la petite version de BERT avec 12 couches d'encodeur et une taille cachée de 768 des vecteurs, donc environ 110 millions de paramètres, quatre jours sur quatre TPUs. Sur le grand modèle, qui fait le double de la taille en couches et 1024 de taille de plongement caché et 340 millions de paramètres au total, cela prend quatre jours sur 16 TPUs. Ce n'est donc pas du tout économe en ressources. Il existe de nombreux modèles BERT pré-entraînés disponibles dans TensorFlow, PyTorch, Keras, et il existe même des modèles BERT multilingues pour plus de 100 langues fournis par Google Research.

DistilBERT et Applications Pratiques

Sven Giesselbach

Maintenant, quand nous avons ces modèles pré-entraînés, ce que nous voulons faire avec eux c'est les affiner sur des tâches spécifiques. Les modèles pré-entraînés contiennent la structure du langage, ils connaissent donc la syntaxe de la langue et la sémantique de la langue. Nous voulons adapter ces modèles maintenant pour effectuer certaines tâches, par exemple la détection de sentiment dans un avis. Nous voulons voir si un avis est positif, négatif ou neutre. Donc si vous avez la phrase pourtant l'acte est toujours charmant ici, c'est positif. Ce n'est pas une idée neuve, c'est plutôt négatif. Et maintenant nous voulons ce label de classe au lieu de prédire si quelque chose est la phrase suivante, nous voulons qu'il prédise la classe comme positif ou négatif. Et à nouveau, bien sûr, nous utilisons une régression logistique. Donc ce que nous pouvons faire maintenant c'est que nous pouvons ajouter une couche à BERT, qui est une couche de classification. Et quand k est le nombre de labels de classifieur et r est la taille de l'état caché de ce jeton classifieur, nous pouvons utiliser cette couche pour calculer les probabilités pour les labels avec un softmax standard, bien sûr. Et typiquement l'étape d'affinage est assez rapide. Donc disons que nous avons moins de ressources, nous pouvons prendre un modèle de langage pré-entraîné pour l'anglais, par exemple, et l'affiner pour notre tâche dans l'ensemble de données que nous avons. Deux ou trois époques pourraient prendre environ une heure sur un TPU ou GPU selon la quantité de données que nous avons. Maintenant j'ai dit que BERT a environ 330, 340 millions de paramètres et a été publié en octobre 2018. Ici vous pouvez voir que beaucoup de modèles ont été publiés avec des tailles de paramètres plus grandes, mais aussi récemment DistilBERT a été publié, qui n'a que 66 millions de paramètres. Et il a presque la même performance, au moins à la base que le modèle BERT de base. DistilBERT utilise quelque chose appelé distillation de connaissance. Cela signifie qu'un modèle plus petit, plus compact, un modèle étudiant, essaie de reproduire le comportement d'un modèle plus grand, le professeur, dans notre cas le modèle BERT de base. L'objectif d'entraînement de l'étudiant est une combinaison linéaire de la perte de distillation sur les cibles souples du professeur, donc il essaie de reproduire les cibles souples que le professeur produit, et aussi la perte supervisée sur les données d'entraînement. Et DistilBERT a généralement la même architecture que BERT, mais avec de légères modifications. Nous n'avons donc pas ces plongements de segments et ce jeton CLS, ces jetons de regroupeur, et we réduisons la quantité de couches de 50 %. Donc au lieu de 12, nous n'avons que six couches. DistilBERT a été publié par Sanh et al. et l'article s'appelait DistilBERT, une version distillée de BERT : plus petit, plus rapide, moins cher et plus léger. Et comme les auteurs le montrent, si nous entraînons DistilBERT pendant 90 heures sur huit GPUs V100 de 16 gigaoctets, donc ceux-ci sont plus petits que les TPUs utilisés par Google, alors nous atteignons environ la même performance que le modèle BERT de base. Pourtant, c'est vraiment, vraiment lourd en ressources. Mais au moins en 60 % du temps, nous pouvons atteindre 97 % de la performance. BERT peut être utilisé pour de multiples applications. Et deux choses que nous avons dans notre showroom NLU qui reposent sur des modèles BERT sont la démo d'analyse d'opinion basée sur les aspects, qui détecte dans des phrases comme le café était chaud et le gâteau était savoureux, elle détecte de quels aspects d'un restaurant nous parlons, dans ce cas le café et le gâteau, et quelle est notre opinion à ce sujet. Et comme vous pouvez le voir ici, c'est surligné en vert, donc c'est un sentiment positif, et l'opinion zéro est liée à l'aspect zéro et l'opinion un est liée à l'aspect un. Dans la deuxième phrase, nous disons la nourriture était bonne, mais le service n'était pas amical. Et nous pouvons voir à nouveau qu'inamical et service et bon et nourriture sont liés les uns aux autres, mais ici le sentiment a été détecté comme étant négatif. Et la liaison, l'extraction d'aspect et d'opinion, et la détection de sentiment ici sont basées sur des modèles BERT, des modèles BERT allemands dans ce cas. En plus de sortir cette démo, nous allons aussi sortir l'ensemble de données que nous avons annoté pour entraîner ces modèles et avec un peu de chance dans un futur proche aussi les modèles. Une autre tâche qui est très importante dans l'extraction d'informations est l'extraction de relations. Et ici à nouveau, nous pouvons utiliser des modèles BERT modifiés. Donc disons que nous avons deux entités comme Steve Jobs et Apple et nous disons Steve Jobs, à l'époque le PDG d'Apple, portait toujours un col roulé. Et maintenant ce modèle reconnaît qu'il y a une certaine relation entre ces entités et nommément c'est la relation direction d'organisation. C'est vraiment important si nous voulons, par exemple, extraire systématiquement des informations de textes de presse ou de documents. Je pense donc qu'il est temps pour un troisième tour de questions. Et cette fois c'est à propos de BERT avant de commencer la dernière partie de la présentation. Alors question trois, laquelle des affirmations suivantes sur BERT est vraie ? A, BERT ne prend que quelques mots voisins comme contexte pour son attention. B, l'entraînement de BERT est hautement parallélisable. C, BERT est la partie décodeur de l'architecture transformateur. D, BERT utilise la même tâche de modélisation du langage qu'ELMo.

GPT-2 et GPT-3 : Modèles de Langage à Grande Échelle

Sven Giesselbach

Maintenant, les deux derniers modèles que je veux vous montrer sont GPT-2 et GPT-3. Et GPT-2 a créé beaucoup d'agitation dans la presse, donc la presse était très au courant de ce modèle parce qu'OpenAI a dit que ce modèle est peut-être trop dangereux à sortir parce qu'il pourrait créer de faux textes à grande échelle, donc il pourrait nous envahir de fausses nouvelles. GPT-3 a été récemment publié et surpasse de loin tous les modèles que nous avons vus jusqu'à présent. Il est beaucoup plus grand que tout ce qu'on a vu auparavant. Donc contrairement à BERT, GPT-2 et 3 s'appuient sur la partie décodeur de l'architecture transformateur. Parce qu'ils n'ont pas d'encodeur, ils n'ont pas non plus d'attention décodeur-encodeur. Nous avons donc simplement ces couches de décodeur et bien sûr nous en avons plusieurs. Maintenant, le modèle a été publié en 2018 par OpenAI et l'article de Radford et al. le décrit. Et comme le modèle transformateur, il repose aussi sur des plongements de jetons et des plongements positionnels pour que le modèle puisse comprendre à quelle position quel jeton apparaît. Et cette fois comme dans les modèles de langage traditionnels, nous essayons à nouveau de prédire le jeton suivant. Donc pas comme dans BERT, le jeton central ou un jeton masqué qui manque, mais plutôt le jeton suivant dans une séquence. Et GPT-2 a 1,5 milliard de paramètres contrairement à BERT, le grand modèle BERT qui a 340 millions de paramètres. Il a été entraîné sur 40 gigaoctets de texte. C'est-à-dire 8 millions de documents qui sont tirés de liens Reddit. Donc des posts Reddit avec un karma de plus de trois ou au moins trois ont été parcourus et les documents qui ont été liés dans ces posts ont été parcourus et ensuite le modèle a été entraîné là-dessus. Et à nouveau, nous utilisons les plongements de paires d'octets comme représentation de jeton ici. Ce en quoi GPT-2 est particulièrement bon c'est l'apprentissage sans exemple, c'est-à-dire apprendre sur des tâches qu'il n'a pas vues pendant l'entraînement ou effectuer une tâche qu'il n'a pas vue pendant l'entraînement. Et nous pouvons voir cela ici sur différentes tâches de modélisation du langage. GPT-2 a marqué des résultats à l'état de l'art dans sept des huit tâches spécifiques de modélisation du langage sans être entraîné sur les ensembles d'entraînement de ces tâches. Nous avons donc différentes métriques ici, les précisions, perplexités, etc., et dans sept sur huit des tâches GPT-2 est le plus performant. La seule où il ne l'est pas est la tâche du milliard de mots où il devait traiter des phrases mélangées. Voici un exemple d'entrée et si vous voulez vous pouvez mettre la vidéo sur pause ici et lire cette entrée et à travers le texte que GPT-2 a généré à partir de cette entrée. Donc ce que GPT-2 va faire c'est qu'il va prendre cette entrée et ensuite étape par étape générer les mots suivants. Et le texte est impressionnant dans le sens où il est très cohérent et GPT-2 revient souvent sur des choses qu'il a dites plus tôt et ne perd pas de vue le sujet. Voici un autre échantillon d'un texte de style Le Seigneur des Anneaux, utilisant même des personnages du Seigneur des Anneaux. Et vous pouvez voir que pendant l'entraînement GPT-2 a dû voir du texte du Seigneur des Anneaux parce qu'il est capable de reconnaître que Legolas et Gimli sont en quelque sorte liés à Aragorn. Eh bien, il y a beaucoup d'exemples similaires de telles sorties qui sont assez impressionnantes, mais si vous faites bien attention vous pouvez toujours voir qu'elles ne sont pas produites par un humain. Quoi qu'il en soit, GPT-2 offre de nombreuses utilisations possibles. Par exemple, il pourrait servir d'assistant d'écriture pour donner des idées aux écrivains. Peut-être que cela aiderait à créer la plus récente version des livres Le Trône de Fer. Cela pourrait aider à créer des agents de dialogue plus capables, donc des agents de dialogue qui pourraient aussi inventer leurs propres histoires. Et bien d'autres cas d'utilisation. Mais OpenAI a aussi fait allusion à des dangers possibles. Il pourrait donc être capable de générer des articles de presse trompeurs, de simuler ces articles. Il pourrait être capable de se faire passer pour le style d'autres personnes, d'auteurs ou de gens sur Twitter. Et OpenAI a fait allusion à beaucoup d'autres dangers de ce genre. La page talktotransformer.com n'est malheureusement plus disponible. Sur cette page vous auriez pu essayer le modèle GPT-2. Mais dans notre showroom NLU nous aurons un modèle GPT-2 allemand prêt dans un futur proche. Nous y travaillons donc actuellement. OpenAI, même s'ils ont dit que le modèle est trop dangereux à sortir, a maintenant sorti le modèle complet. Et vous pouvez aussi le télécharger et expérimenter avec si vous avez le matériel pour le faire. Maintenant, comme vous pouvez le voir ici, GPT-3 est bien plus grand que tous les modèles que nous avons vus jusqu'à présent. Il est en fait 100 fois plus grand, plus de 100 fois plus grand que GPT-2. C'est de loin le plus grand modèle de langage basé sur un transformateur ou même modèle de langage qui ait été publié à ce jour. Il a 175 milliards de paramètres. Maintenant, avec GPT-3 OpenAI a fait quelque chose de fascinant. Donc à nouveau, ils l'ont entraîné comme un modèle de langage et ils ont utilisé des tonnes et des tonnes de texte. Mais cette fois au lieu de l'évaluer sur des tâches de modélisation du langage, ils l'ont aussi évalué sur des tâches de traitement et de compréhension du langage naturel. Et ils n'ont fait aucun affinage spécifique. Ils démontrent que GPT-3 est capable d'effectuer des tâches spécifiques sans affinage spécifique à la tâche. Ils l'appellent apprentissage avec peu d'exemples, ce qui est assez trompeur car en fait ils effectuent quelque chose appelé apprentissage en contexte. Qu'est-ce que cela signifie ? Tout d'abord, cela signifie qu'ils n'affinent pas les paramètres du modèle. Mais deuxièmement, pendant l'inférence après que le modèle de langage est entraîné, ils injectent quelques exemples d'une tâche, par exemple en disant allemand Käse est anglais cheese et allemand Torwart est anglais goalkeeper, et ensuite dans la dernière ligne ils entreraient quelque chose comme allemand Tastatur est anglais et ils laisseraient un blanc et ensuite ils évalueraient la réponse du modèle. Et vous seriez surpris de voir à quel point le modèle donne souvent la bonne réponse sans être explicitement entraîné pour le faire et sans avoir ses paramètres ajustés pour le faire. C'est fou. Comme je l'ai dit, un exemple est la traduction et ils testent GPT-3 dans plusieurs contextes. Le premier contexte est le contexte sans exemple dans lequel ils décrivent juste la tâche, disent traduisez de l'anglais vers le français, cheese est, et ils regarderaient quelle est la réponse. Ensuite ils feraient le contexte avec un seul exemple dans lequel ils disent traduisez de l'anglais vers le français et lui fournissent un exemple, tout cela pendant l'inférence sans aucune mise à jour de gradient. Gardez cela à l'esprit s'il vous plaît. La dernière chose est avec quelques exemples où ils fournissent plusieurs exemples. Et c'est très différent de montrer un exemple au modèle, de mettre à jour les gradients et les paramètres, de montrer un autre exemple au modèle, de mettre à jour les gradients et ainsi de suite et ensuite à la fin de lui poser la question. Ils ne font pas ces mises à jour de gradient. Maintenant, les tâches qu'ils effectuent sont bien sûr toujours la modélisation du langage, mais aussi des trucs comme répondre à des questions à livre fermé, la traduction, le raisonnement de bon sens, l'inférence en langage naturel et ainsi de suite. Et même l'addition de nombres, donc ils écriraient combien font 2 plus 3. Et maintenant à travers presque toutes les tâches, bien sûr, le plus grand modèle GPT-3 qu'ils ont entraîné était le meilleur de loin. Le cadre avec quelques exemples fonctionne le mieux, mais le modèle sans exemple est presque toujours meilleur que tous les autres modèles sans exemple ou avec peu d'exemples qui ont été entraînés particulièrement sur ces tâches. Et parfois même les modèles affinés à l'état de l'art pour les tâches sont battus, ce qui est insensé. Étonnamment, le modèle peut même bien faire des calculs simples dans la région des nombres à deux ou trois chiffres. Sur le côté droit, si vous voulez faire une pause, vous pouvez voir une tâche dans laquelle GPT-3 voit un exemple de la façon d'utiliser un mot inventé, puis on lui donne la tâche de construire une nouvelle phrase avec le nouveau mot inventé. Et il le fait étonnamment bien. Donc il le fait avec une très, très bonne qualité. Je vous encourage vivement à regarder d'autres exemples de ce dont GPT-3 est capable. Et parce que des versions de GPT-3 ont déjà été publiées, ou du moins certaines personnes y ont eu accès, je vous encourage aussi à regarder ce que les gens ont fait avec GPT-3, y compris des tâches telles que la complétion de code ou même la génération de sites Web en JavaScript. Oui, donc c'est vraiment, vraiment impressionnant ce que OpenAI a fait ici.

Démonstration Interactive et Conclusion

Sven Giesselbach

Maintenant, enfin et surtout, je veux vous montrer notre showroom NLU. Et je veux vous faire une démonstration de ce que vous pourrez faire dans le showroom NLU. Et comme je l'ai dit, nous allons étendre le showroom NLU au fil du temps. Nous ajouterons des ensembles de données, des ensembles de données annotés, que nous annotons nous-mêmes, et aussi des modèles au showroom. Nous espérons donc que ce sera une ressource précieuse, surtout pour la compréhension du langage naturel dans la langue allemande. Voici donc à quoi ressemble notre showroom. Comme vous pouvez le voir, cela fait partie d'une collaboration entre Fraunhofer IAIS et le Centre de Compétence pour l'Apprentissage Automatique. Et nous avons différentes tâches disponibles au niveau de la phrase et au niveau du mot. Et actuellement nous avons sélectionné des modèles allemands. Je peux donc entrer, par exemple ici dans l'analyse d'opinion basée sur les aspects, un avis sur un restaurant. Je pourrais dire, "Das Filet war sehr lecker, aber der Kellner war etwas langsam." Donc le filet était très savoureux, mais le serveur était un peu lent. Et maintenant c'est envoyé à notre backend, et différents modèles BERT traitent cela en fait. Ils ont réalisé qu'il y a deux aspects ici, le filet et le serveur, et ils ont aussi trouvé différentes opinions : "très savoureux", et "un peu lent", qui, assez curieusement, est ici mentionné comme deux opinions, mais c'est correctement lié au serveur. Et c'est correctement reconnu aussi par un modèle BERT différent que ceci ici est positif, cette relation, et cette relation ici est négative. Donc dans le showroom, vous pourrez entrer vos propres textes ou sélectionner certains exemples présélectionnés. Regardons maintenant l'extraction de relations. L'extraction de relations est donc, bien sûr, un modèle différent. Dans l'extraction de relations, nous voulons extraire des relations entre certaines entités. Et ici, par exemple, nous avons des entités qui concernent des entreprises. Je pourrais donc dire quelque chose comme, "Sven Giesselbach ist der Leiter des Natural Language Understanding Teams." Donc Sven Giesselbach est le chef de l'équipe de compréhension du langage naturel. Et je marque ici l'entité un et l'entité deux, et maintenant je veux qu'il trouve des relations entre ces entités. Voyons ce qu'il dit. Et il a correctement trouvé que c'est la relation "direction d'organisation". Il a donc correctement reconnu que je suis le chef de l'organisation appelée équipe de compréhension du langage naturel. À nouveau, ici nous avons un modèle basé sur BERT. C'est donc un modèle basé sur BERT séparé. Et à nouveau, vous pouvez entrer votre propre texte ici ou choisir parmi des exemples, et nous donnerons une description un peu plus détaillée du genre de relations sur lesquelles nous avons entraîné notre modèle et du genre d'entités que nous sommes capables de traiter. Maintenant, la dernière chose que je veux vous montrer est la similitude de phrases. Maintenant, ici je peux entrer des phrases sources et des phrases cibles. Et une phrase source pourrait être, "Natural Language Understanding ist ein Teil von Natural Language Processing." Donc la compréhension du langage naturel fait partie du traitement du langage naturel. Laissez-moi copier ceci une seconde. Et ici nous disons, "NLU ist ein Teil von NLP." Et ici nous pouvons dire, "Natural Language ist Englisch für natürliche Sprache." Donc la première phrase et la première phrase devraient correspondre pas mal l'une à l'autre, et la première phrase et la deuxième phrase devraient être similaires mais pas tout à fait les mêmes. Et ici nous pouvons voir en fait que certains de nos modèles ont été confus. Donc notre modèle Doc2Vec a en fait été confus et a dit que la deuxième phrase est plus proche de la première phrase, mais tous les autres modèles ont réalisé que la première phrase correspond en fait de plus près à cette phrase source. C'est donc aussi un aspect que j'aime à propos du showroom, que vous puissiez explorer comment différents modèles se comportent. Passons au niveau du mot. Comme vous pouvez le voir, nous n'avons actuellement qu'une seule tâche au niveau du mot, et c'est les similitudes de mots. Laissez-moi zoomer un peu ici. Il a donc ce nom plutôt cryptique en ce moment de "Ngrams DE", que nous devons remplacer, bien sûr. Mais que sont les n-grammes ? Nous avons vu les n-grammes de caractères, donc plusieurs caractères dans une séquence, et maintenant les n-grammes de mots sont plusieurs mots en séquence, ou des expressions. Un exemple pourrait être New York City. Et pourquoi ne pas commencer par New York City ? Et si j'entre New York City, j'obtiens des réponses des modèles Word2Vec, GloVe et FastText. GloVe et Word2Vec sont très liés. Et ce que nous pouvons voir ici c'est que les trois modèles sortent New York comme un mot ou une expression similaire, mais ensuite les réponses diffèrent pas mal. Donc FastText, qui repose plus sur des informations morphologiques, a le pluriel ou "New York, New York", qui est une expression très couramment utilisée, tandis que Word2Vec et GloVe ont différentes autres villes comme liées. Donc Chicago vient en deuxième position dans Word2Vec, alors qu'il est quatrième dans GloVe et seulement huitième ou neuvième dans FastText. Et ici vous pouvez voir que bien que les trois modèles aient été entraînés sur le même corpus, ils ont une perception différente ou un concept différent du contexte. Et cela a beaucoup de sens de jouer un peu avec ça. Et dès que le showroom sera en ligne, vous pourrez, bien sûr, entrer des mots arbitraires ici. Peut-être êtes-vous fan de football, ou comme certains l'appellent, soccer, comme je le suis. Vous pourriez donc entrer la Ligue des Champions ici, et vous trouveriez l'UEFA Champions League ici, l'Europa League, l'UEFA Europa League, et des saisons particulières ici dans FastText. C'est donc assez intéressant. Il y a donc de nombreuses façons d'expérimenter avec les modèles, avec les tâches ici au niveau du mot ou au niveau de la phrase. Et je vous encourage à explorer ces modèles une fois que le showroom sera en ligne. Et nous serons très heureux de vous présenter le showroom, avec un peu de chance d'ici la mi-septembre ou la fin septembre. J'espère que vous avez aimé cette conférence. Si vous avez des questions, je serais heureux d'y répondre. Et oui, ne soyez pas timides, n'hésitez pas à demander. Et merci d'avoir écouté.