Traduction linguistique avec apprentissage en profondeur et magie des séquences – Apprendre langue

Faire des ordinateurs traduire

Alors, comment pouvons-nous programmer un ordinateur pour traduire le langage humain?

L'approche la plus simple consiste à remplacer chaque mot d'une phrase par le mot traduit dans la langue cible. Voici un exemple simple de traduction d’espagnol en anglais mot par mot:

Nous venons de remplacer chaque mot espagnol par le mot anglais correspondant.

C’est facile à mettre en oeuvre car il suffit d’un dictionnaire pour rechercher la traduction de chaque mot. Mais les résultats sont mauvais car ils ignorent la grammaire et le contexte.

La prochaine étape consiste donc à ajouter des règles spécifiques à la langue pour améliorer les résultats. Par exemple, vous pouvez traduire des phrases courantes de deux mots en un seul groupe. Et vous pouvez échanger les noms d'ordre et les adjectifs, car ils apparaissent généralement dans l'ordre inverse en espagnol par rapport à leur apparence en anglais:

Ça a marché! Si nous continuons simplement à ajouter plus de règles jusqu'à ce que nous puissions gérer chaque partie de la grammaire, notre programme devrait être capable de traduire toute phrase, non?

Voici comment fonctionnaient les premiers systèmes de traduction automatique. Les linguistes ont proposé des règles compliquées et les ont programmées une par une. Certains des linguistes les plus intelligents au monde ont travaillé pendant des années pendant la guerre froide pour créer des systèmes de traduction permettant d'interpréter plus facilement les communications en russe.

Malheureusement, cela ne fonctionnait que pour des documents simples et clairement structurés tels que les bulletins météorologiques. Cela n’a pas fonctionné de manière fiable pour les documents réels.

Le problème est que le langage humain ne suit pas un ensemble fixe de règles. Les langues humaines regorgent de cas particuliers, de variations régionales et ne font que briser les règles. Notre façon de parler anglais est plus influencée par ceux qui ont envahi qui il y a des centaines d'années que par quelqu'un assis et définissant des règles de grammaire.

Améliorer la traduction des ordinateurs à l'aide de statistiques

Après l'échec des systèmes à base de règles, de nouvelles approches de traduction ont été développées à l'aide de modèles basés sur des probabilités et des statistiques plutôt que sur des règles de grammaire.

Construire un système de traduction basé sur des statistiques nécessite de nombreuses données de formation dans lesquelles le même texte exact est traduit dans au moins deux langues. Ce texte à double traduction s'appelle corpus parallèles. De la même manière que la science Rosetta a été utilisée par les scientifiques au XIXe siècle pour comprendre les hiéroglyphes égyptiens du grec, les ordinateurs peuvent utiliser des corpus parallèles pour deviner comment convertir du texte d'une langue à une autre.

Heureusement, il y a beaucoup de textes en double traduction qui traînent déjà dans des endroits étranges. Par exemple, le Parlement européen traduit ses travaux en 21 langues. Les chercheurs utilisent donc souvent ces données pour construire des systèmes de traduction.

Les données d'entraînement sont généralement passionnantes! Mais ce ne sont que des millions et des millions de lignes de documents gouvernementaux non conformes…

Penser aux probabilités

La différence fondamentale avec les systèmes de traduction statistiques est qu’ils ne cherchent pas à générer une traduction exacte. Au lieu de cela, ils génèrent des milliers de traductions possibles, puis ils les classent en fonction de leur exactitude. Ils estiment à quel point quelque chose est «correct» en se basant sur sa similitude avec les données d'apprentissage. Voici comment ça fonctionne:

Étape 1: Brisez la phrase originale en morceaux

Premièrement, nous divisons notre phrase en morceaux simples qui peuvent être facilement traduits:

Étape 2: Trouvez toutes les traductions possibles pour chaque morceau

Ensuite, nous traduirons chacun de ces morceaux en trouvant toutes les manières dont les humains ont traduit ces mêmes morceaux de mots dans nos données d’entraînement.

Il est important de noter que nous ne cherchons pas simplement ces morceaux dans un dictionnaire de traduction simple. Au lieu de cela, nous voyons comment des personnes réelles ont traduit ces mêmes morceaux de mots dans des phrases du monde réel. Cela nous aide à saisir toutes les différentes manières dont ils peuvent être utilisés dans différents contextes:

Même les phrases les plus courantes ont beaucoup de traductions possibles.

Certaines de ces traductions possibles sont utilisées plus fréquemment que d’autres. En fonction de la fréquence à laquelle chaque traduction apparaît dans nos données d’entraînement, nous pouvons lui attribuer un score.

Par exemple, il est beaucoup plus courant de dire «Quiero» signifie «je veux» que «je tente». Ainsi, nous pouvons utiliser la fréquence à laquelle «Quiero» a été traduit en «Je veux» dans nos données de formation pour donner: cette traduction plus de poids qu'une traduction moins fréquente.

Étape 3: Générez toutes les phrases possibles et trouvez la plus probable

Ensuite, nous utiliserons toutes les combinaisons possibles de ces morceaux pour générer un ensemble de phrases possibles.

À partir des traductions de morceaux répertoriées à l'étape 2, nous pouvons déjà générer près de 2 500 variantes de notre phrase en combinant les morceaux de différentes manières. Voici quelques exemples:

J'aime | partir | à | le bord de mer | plus rangé.
Je veux dire | être sur | à | l'espace ouvert | le plus charmant.
J'aime | être | sur | par la mer | Plus agréable.
Je veux dire | aller | à | l'espace ouvert | le plus soigné.

Mais dans un système réel, il y aura encore plus de combinaisons de blocs possibles, car nous essaierons également différents ordres de mots et différentes manières de diviser la phrase:

J'essaye | courir | à | la plus jolie | espace ouvert.
Je veux | courir | par | le plus ordonné | espace ouvert.
Je veux dire | oublier | à | le tidiest | plage.
J'essaye | aller | par | le plus ordonné | bord de mer.

Il faut maintenant parcourir toutes ces phrases générées pour trouver celle qui sonne le «plus humain».

Pour ce faire, nous comparons chaque phrase générée à des millions de phrases réelles extraites de livres et de nouvelles rédigées en anglais. Plus nous aurons le texte anglais, mieux ce sera.

Prenez cette traduction possible:

J'essaye | partir | par | la plus belle | espace ouvert.

Il est probable que personne n’a jamais écrit une phrase comme celle-ci en anglais, elle ne serait donc pas très similaire aux phrases de notre ensemble de données. Nous donnerons à cette traduction possible un faible score de probabilité.

Mais regardez cette traduction possible:

Je veux | aller | à | la plus jolie | plage.

Cette phrase ressemblera à quelque chose de notre jeu d’entraînement, elle obtiendra donc un score de probabilité élevé.

Après avoir essayé toutes les phrases possibles, nous choisirons celle qui contient les traductions les plus probables, tout en étant la plus proche des phrases en anglais.

Notre traduction finale serait "Je veux aller à la plus belle plage." Pas mal!

La traduction automatique statistique a été une étape importante

Les systèmes de traduction automatique statistiques fonctionnent beaucoup mieux que les systèmes basés sur des règles si vous leur donnez suffisamment de données de formation. Franz Josef Och a amélioré ces idées et les a utilisées pour construire Google Translate au début des années 2000. La traduction automatique était enfin disponible dans le monde.

Au début, il était surprenant pour tout le monde que l'approche «muette» de la traduction basée sur les probabilités fonctionnait mieux que les systèmes à base de règles conçus par des linguistes. Cela a conduit à un dicton (quelque peu méchant) parmi les chercheurs des années 80:

"Chaque fois que je licencie un linguiste, ma précision augmente."

– Frédéric Jelinek

Les limites de la traduction automatique statistique

Les systèmes de traduction automatique statistique fonctionnent bien, mais leur construction et leur maintenance sont compliqués. Chaque nouvelle paire de langues que vous souhaitez traduire nécessite des experts pour peaufiner et ajuster un nouveau pipeline de traduction en plusieurs étapes.

Étant donné que la construction de ces différents gazoducs demande tant de travail, des compromis doivent être faits. Si vous demandez à Google de traduire le géorgien en Telegu, il doit le traduire en anglais en tant qu’étape intermédiaire, car il n’ya pas assez de traductions du géorgain à telegu pour justifier des investissements considérables dans ce couple de langues. Et elle pourrait faire cette traduction en utilisant un pipeline de traduction moins avancé que si vous lui aviez demandé le choix plus courant du français vers l'anglais.

Ce ne serait pas cool si nous pouvions avoir l'ordinateur faire tout ce développement ennuyeux pour nous?

Améliorer la traduction des ordinateurs – sans toutes ces personnes chères

Le Saint Graal de la traduction automatique est un système de boîte noire qui apprend à traduire lui-même, simplement en consultant des données d'apprentissage. Avec la traduction automatique statistique, il reste encore beaucoup à faire à l’être humain pour élaborer et modifier les modèles statistiques en plusieurs étapes.

En 2014, l’équipe de KyungHyun Cho a réalisé une avancée décisive. Ils ont trouvé un moyen d'appliquer l'apprentissage en profondeur pour construire ce système de boîte noire. Leur modèle d’apprentissage en profondeur prend en corpus parallèles et l'utilise pour apprendre à traduire entre ces deux langues sans aucune intervention humaine.

Deux grandes idées rendent cela possible – réseaux de neurones récurrents et encodages. En combinant ces deux idées de manière intelligente, nous pouvons construire un système de traduction à auto-apprentissage.

Réseaux de neurones récurrents

Nous avons déjà parlé de réseaux de neurones récurrents dans la deuxième partie, mais examinons rapidement.

Un réseau de neurones régulier (non récurrent) est un algorithme générique d’apprentissage automatique qui prend une liste de nombres et calcule un résultat (sur la base d’une formation antérieure). Les réseaux de neurones peuvent être utilisés comme une boîte noire pour résoudre de nombreux problèmes. Par exemple, nous pouvons utiliser un réseau de neurones pour calculer la valeur approximative d'une maison en fonction des attributs de cette maison:

Mais comme la plupart des algorithmes d’apprentissage automatique, les réseaux de neurones sont apatride. Vous passez une liste de nombres et le réseau de neurones calcule un résultat. Si vous transmettez à nouveau les mêmes nombres, le résultat sera toujours calculé. Il n'a pas de mémoire de calculs passés. En d'autres termes, 2 + 2 est toujours égal à 4.

UNE récurrent réseau neuronal (ou RNN pour faire court) est une version légèrement modifiée d'un réseau de neurones où l'état précédent du réseau de neurones est l'une des entrées du prochain calcul. Cela signifie que les calculs précédents modifient les résultats des calculs futurs!

Les humains le détestent: 1 tour étrange qui rend les machines plus intelligentes!

Pourquoi dans le monde voudrions-nous faire cela? 2 + 2 ne devrait-il pas toujours être égal à 4, peu importe ce que nous avons calculé en dernier?

Cette astuce permet aux réseaux de neurones d'apprendre des modèles dans une séquence de données. Par exemple, vous pouvez l'utiliser pour prédire le prochain mot le plus probable d'une phrase en fonction des premiers mots:

C’est un moyen d’implémenter la «correction automatique» pour l’application clavier d’un smartphone

Les RNN sont utiles chaque fois que vous souhaitez apprendre des modèles de données. Le langage humain n'étant qu'un schéma complexe et complexe, les RNN sont de plus en plus utilisés dans de nombreux domaines du traitement du langage naturel.

Si vous voulez en savoir plus sur les RNN, vous pouvez lire la Partie 2 dans laquelle nous en avons utilisé un pour générer un faux livre d'Ernest Hemingway, puis un autre pour générer de faux niveaux de Super Mario Brothers.

Codages

L’autre idée à revoir est: Codages. Nous avons parlé des encodages dans la partie 4 dans le cadre de la reconnaissance faciale. Pour expliquer les codages, faisons un petit détour pour savoir comment distinguer deux personnes différentes à l’aide d’un ordinateur.

Lorsque vous essayez de distinguer deux visages à l'aide d'un ordinateur, vous collectez différentes mesures sur chaque visage et vous utilisez ces mesures pour comparer des visages. Par exemple, nous pourrions mesurer la taille de chaque oreille ou l'espacement entre les yeux et comparer ces mesures à partir de deux images pour voir si elles sont la même personne.

Vous connaissez probablement déjà cette idée en regardant une émission policière diffusée aux heures de grande écoute comme CSI:

J'aime tellement ce dumb gif de CSI que je vais l’utiliser à nouveau – parce qu’il parvient d’une manière ou d’une autre à démontrer clairement cette idée tout en étant un non-sens total.

L’idée de transformer un visage en une liste de mesures est un exemple de codage. Nous prenons des données brutes (une image d'un visage) et les transformons en une liste de mesures qui le représentent (l'encodage).

Mais comme nous l’avons vu dans la quatrième partie, nous n’avons pas à dresser une liste spécifique de traits du visage pour nous mesurer. Au lieu de cela, nous pouvons utiliser un réseau de neurones pour générer des mesures à partir d'un visage. L'ordinateur peut faire un meilleur travail que nous pour déterminer quelles mesures sont les mieux à même de différencier deux personnes similaires:

Ces mesures de caractéristiques faciales sont générées par un réseau neuronal formé pour s’assurer que les visages de différentes personnes donnent des chiffres différents.

C'est notrecodage. Cela nous permet de représenter quelque chose de très compliqué (une image de visage) avec quelque chose de simple (128 chiffres). Maintenant, comparer deux visages différents est beaucoup plus facile car il suffit de comparer ces 128 nombres pour chaque visage au lieu de comparer des images complètes.

Devine quoi? Nous pouvons faire la même chose avec des phrases! Nous pouvons trouver un encodage qui représente chaque phrase possible sous la forme d'une série de nombres uniques:

Cette liste de nombres représente la phrase anglaise «Machine Learning is Fun!». Une phrase différente serait représentée par un ensemble différent de nombres.

Pour générer cet encodage, nous allons insérer la phrase dans le RNN, un mot à la fois. Le résultat final après le traitement du dernier mot sera les valeurs qui représentent la phrase entière:

Comme le RNN a une «mémoire» de chaque mot qui l'a traversé, le codage final qu'il calcule représente tous les mots de la phrase.

Génial, nous avons maintenant un moyen de représenter une phrase entière sous forme d'un ensemble de nombres uniques! Nous ne savons pas ce que chaque nombre dans l’encodage signifie, mais cela n’a pas vraiment d’importance. Tant que chaque phrase est identifiée de manière unique par son propre ensemble de nombres, nous n’avons pas besoin de savoir exactement comment ces nombres ont été générés.

Traduisons!

Ok, nous savons donc comment utiliser un RNN pour coder une phrase en un ensemble de nombres uniques. Comment cela nous aide-t-il? Voici où les choses deviennent vraiment cool!

Et si nous prenions deux RNN et les connections bout à bout? Le premier RNN pourrait générer le codage qui représente une phrase. Ensuite, le deuxième RNN pourrait prendre cet encodage et faire la même logique en sens inverse pour décoder à nouveau la phrase originale:

Laisser un commentaire