Catégories
Actualités Scolaires

Correction d'erreurs grammaticales: balise, pas de réécriture

L'assistant de rédaction de Grammarly aide à une grande variété de langues et de communication problèmes. Un aspect important de cela consiste à corriger les erreurs d'orthographe, de ponctuation, de grammaire et de choix de mots – un domaine largement connu dans la recherche sur le traitement du langage naturel (NLP) sous le nom de correction d'erreurs grammaticales. Un système GEC prend une phrase avec des erreurs et génère une version corrigée. Au cours des onze dernières années, Grammarly a construit l'un des meilleurs systèmes GEC au monde en tant que composant central de notre produit.

Contribution Production
Un garçon de dix ans va à l'école Un garçon de dix ans va à l'école.

Dans la communauté de recherche en PNL, l'approche privilégiée de GEC a récemment été de le traiter comme un problème de traduction, où les phrases avec erreurs sont la «langue source» et les phrases sans erreur sont la «langue cible». En combinant traduction automatique de neurones (NMT) avec Transformateurbasés sur des séquences-à-séquences (seq2seq), les équipes de recherche ont atteint des performances de pointe sur les référentiels GEC standard. La recherche GEC se concentre désormais sur génération de données d'entraînement pour ces systèmes basés sur NMT.

Cependant, ces systèmes sont mieux adaptés à la recherche universitaire qu'aux applications du monde réel. Les systèmes NMT utilisent généralement une architecture codeur-décodeur, où la fonction codeur est le langage compréhension et la fonction de décodeur est la langue génération. La génération d'une langue est une tâche plus complexe que la compréhension d'une langue. En tant que tels, les systèmes basés sur NMT nécessitent de grandes quantités de données de formation et génèrent des inférences assez lentement. De plus, sans fonctionnalité supplémentaire, il n'est pas possible d'expliquer quels types d'erreurs ont été commises dans la phrase d'origine – un réseau neuronal est essentiellement une boîte noire.

Pour résoudre ces problèmes, l'équipe de recherche de Grammarly a expérimenté une approche différente: au lieu de générer explicitement la langue et d'essayer de réécrire la phrase sous sa forme correcte en une seule fois, nous étiquetons la séquence de mots avec des transformations personnalisées décrivant les corrections à apporter .

Le balisage de séquence réduit la tâche à un problème de compréhension du langage, ce qui signifie que nous pouvons simplement utiliser un encodeur et des couches linéaires de base pour notre modèle. Cela nous permet de paralléliser l'inférence afin qu'elle s'exécute plus rapidement, ce qui simplifie la formation. Les balises permettent également (bien que cela ne soit pas banal!) De décrire les modifications apportées au texte d'une manière lisible par l'homme. Et nous sommes fiers de dire qu'avec cette approche «tag, pas réécrire», nous sommes en mesure d'atteindre des performances de pointe sur nos évaluations de modèles.

C'est également le sujet d'une nouveau papier de l'équipe de recherche Grammarly, qui a été présentée à le 15e atelier sur l'utilisation innovante de la PNL pour créer des applications éducatives (BEA), colocalisé avec les Association pour la linguistique computationnelle (ACL) conférence.

Balises de transformation

Notre approche de balisage de séquence repose sur des balises de transformation personnalisées. Vous pouvez les considérer comme des versions abstraites des suggestions de Grammarly. Nous définissons ces balises sur les jetons, qui en PNL sont des unités de texte (généralement des mots, parfois des signes de ponctuation, selon la façon dont la tokenisation est effectuée).

Par exemple, si un jeton est marqué avec $ SUPPRIMER, cela signifie qu'il doit être supprimé. Le tag $ APPEND_ {,} signifie qu'une virgule doit être ajoutée à ce jeton pour rendre le texte plus correct.

Le nombre d'étiquettes était une considération importante dans notre recherche. Si notre «vocabulaire» pour décrire les corrections était trop grand, notre modèle serait lourd et lent; trop petit et nous ne couvririons pas suffisamment d'erreurs. Nous avons compromis 5 000 balises de transformation différentes pour couvrir les erreurs les plus courantes, telles que l'orthographe, le nombre de noms, l'accord sujet-verbe et la forme verbale. Un vocabulaire de balises de cette taille couvre 98% des erreurs présentes dans CoNLL-2014 (test), l'un des deux ensembles de données GEC que nous avons utilisés pour évaluer notre modèle.

Balises de base

La majorité de nos balises sont de quatre types de base:

  • $ GARDER indique que ce jeton est correct et doit rester inchangé dans le texte de sortie.
  • $ SUPPRIMER indique que ce jeton doit être supprimé du texte de sortie.
  • $ APPEND_ {t1} décrit un ensemble de balises qui ajoutent un nouveau jeton à l'existant. Le «suffixe de transformation» entre les accolades décrit ce qui doit être ajouté. Il y a 1167 uniques AJOUTER balises dans le vocabulaire de notre modèle.
  • $ REPLACE_ {t2} décrit un ensemble de balises qui remplacent le jeton source par un autre dans la sortie. Notre modèle contient 3 802 uniques REMPLACER Mots clés.

Transformations G

Les autres balises sont ce que nous appelons des transformations g, qui effectuent des opérations plus complexes, telles que la modification de la casse du jeton actuel (CAS ), fusionnant le jeton actuel et le prochain jeton en un seul (FUSIONNER et en divisant le jeton actuel en deux nouveaux (DIVISÉ Mots clés).

Avec les transformations g NUMÉRO DE NOM et FORME VERBALE, nous pouvons convertir des noms singuliers en noms pluriels et même changer la forme des verbes pour exprimer un nombre ou un temps différent. le FORME VERBALE transformation comprend vingt balises différentes qui décrivent la forme verbale de début et de fin, que notre modèle dérive à l'aide de dictionnaires de conjugaison. Par exemple, pour représenter la modification du mot «allé» par le mot «disparu», la balise appropriée serait $ VERBE FORM VBD VBN; dans notre sténographie de marquage, VBD VBN encode l'idée que nous avons un verbe au passé et que nous voulons plutôt le participe passé.

Bien que ces balises de transformation g soient peu nombreuses, elles aident énormément à la tâche: dans un test, en utilisant uniquement les 100 principales balises de base, notre modèle a atteint une couverture d'erreur de 60%; l'ajout des transformations g a augmenté notre couverture d'erreur jusqu'à 80%.

Formation modèle

Notre modèle de marquage de séquence GEC, appelé GECToR, est un encodeur composé d'un Transformateur de type BERT, empilé avec deux couches linéaires, avec des couches softmax sur le dessus. Les deux couches linéaires sont respectivement responsables de la détection des erreurs et du marquage des jetons.

Nous avons pré-formé notre modèle en trois étapes. Dans la première étape, nous avons utilisé un ensemble de données synthétiques contenant 9 millions de paires de phrases source / cible avec des erreurs. Dans les deuxième et troisième étapes, nous avons affiné le modèle sur plusieurs ensembles de données du monde réel provenant d'apprenants de langue anglaise: environ 500 000 phrases pour l'étape 2 et seulement 34 000 pour l'étape 3. Nous avons constaté que le fait d'avoir deux étapes de réglage fin, l'étape finale contenant des phrases sans aucune erreur a été cruciale pour les performances de notre modèle.

Prétraitement

Pour chaque paire source / cible dans nos ensembles de données de formation et d'évaluation, notre algorithme de prétraitement génère des balises de transformation, une balise pour chaque jeton de la séquence source. (Dans la recherche en PNL, une série de jetons est appelée une séquence – il peut ou non être une phrase complète.)

Revenons à notre exemple original pour illustrer brièvement comment cela fonctionne; pour plus de détails, vous pouvez voir le script de prétraitement dans notre référentiel.

Séquence source: Un garçon de dix ans va à l'école

Séquence cible: Un garçon de dix ans va à l'école.

Étape 1

Tout d'abord, nous alignons grossièrement chaque jeton de la séquence source avec un ou plusieurs jetons de la séquence cible.

(UNE 􏰀 → UNE), (Dix 􏰀 → Dix, ), (années 􏰀 → an, ), (vieux 􏰀 → vieux), (aller 􏰀 → va, à), (école 􏰀 → école, .).

Pour ce faire, nous minimisons le Distance Levenshtein des transitions possibles entre les jetons source et les jetons cibles. Essentiellement, cela signifie que nous essayons de minimiser le nombre de modifications nécessaires pour transformer la source en cible.

Étape 2

Ensuite, nous convertissons chaque mappage en la balise qui représente la transformation.

(UNE 􏰀 → UNE): $ GARDER, (Dix 􏰀 → Dix, ): $ GARDER, $ MERGE HYPHEN, (années 􏰀 → an, ): $ NOM NUMBER SINGULAR, $ MERGE HYPHEN), (vieux 􏰀 → vieux): $ GARDER, (aller 􏰀 → va, à): $ VERBE FORM VB VBZ, $ APPEND à, (école 􏰀 → école, .): $ GARDER, $ APPEND {.}).

Étape 3

Parce que nous utilisons une approche itérative du balisage (plus à ce sujet dans la section suivante), nous ne pouvons avoir qu'un seul tag pour chaque jeton. Donc, dans la dernière étape, s'il y a plusieurs balises pour un jeton, nous nous accrochons à la première balise qui n'est pas un $ GARDER.

UNE ⇔ $ GARDER, Dix ⇔ $ MERGE HYPHEN, années ⇔ $ NOM NUMBER SINGULAR, vieux ⇔ $ GARDER, aller ⇔ $ VERBE FORM VB VBZ, école ⇔ $ APPEND {.}.

Inférence à l'aide du marquage séquentiel itératif

Notre modèle prédit les transformations codées par étiquette pour chaque jeton dans la séquence d'entrée; nous pouvons ensuite appliquer ces transformations pour obtenir la séquence de sortie modifiée. Mais comme certaines corrections dans une phrase peuvent dépendre d'autres, appliquer le taggueur de séquence GEC une seule fois peut ne pas être suffisant pour corriger complètement la phrase. Par conséquent, nous utilisons un approche de correction itérative: Nous modifions la phrase, exécutons à nouveau notre tagueur et répétons. Voici à quoi cela ressemble en utilisant notre exemple précédent, avec des corrections en gras:

Séquence source: Un garçon de dix ans va à l'école

Itération 1: Un dixgarçon de ans va école (2 corrections totales)

Itération 2: Un dix-an-vieux garçon va à école (5 corrections au total)

Itération 3: Un garçon de dix ans va à l'école. (6 corrections totales)

Habituellement, le nombre de corrections diminue à chaque itération successive, et la plupart des corrections sont effectuées au cours des deux premières itérations. Nous avons testé notre modèle avec aussi peu que 1 et jusqu'à 5 itérations – nous avons constaté que la limitation du nombre d'itérations accélère le pipeline global tout en compromettant la qualité des corrections.

Pour ajuster notre modèle pour de meilleurs résultats, nous avons également introduit deux hyperparamètres d'inférence. Premièrement, nous avons ajouté un biais de confiance positif permanent à la probabilité de $ GARDER , qui est responsable de ne pas changer le jeton source. Deuxièmement, nous avons ajouté un seuil de probabilité d'erreur minimale au niveau de la phrase pour la sortie de la couche de détection d'erreur, qui a augmenté la précision en compensant le rappel. Ces hyperparamètres ont été trouvés par une méthode de recherche aléatoire sur BEA-2019 (dev), un ensemble de données GEC standard.

Résultats

Qualité du modèle

Sur les ensembles de données d'évaluation canoniques pour la tâche GEC, nous avons atteint résultats F-score de pointe avec un seul modèle: un F0,5 de 65,3 sur CoNLL-2014 (test) et un F0,5 de 72,4 sur BEA-2019 (tester). Avec une approche d'ensemble, où nous avons simplement fait la moyenne des probabilités de sortie de 3 modèles simples, nous pouvons faire encore mieux en atteignant F0,5 scores de 66,5 et 73,6 sur ces mêmes ensembles de données respectifs.

Vitesse d'inférence

Lorsque nous avons mesuré le temps d’inférence moyen de notre modèle GECToR, nous avons constaté qu’il était jusqu’à 10 fois plus rapide que les systèmes de pointe NMT.

Système GEC Temps (sec)
Transformateur-NMT, taille de faisceau = 12 4,35
Transformateur-NMT, taille de faisceau = 4 1,25
Transformateur-NMT, taille de faisceau = 1 0,71
GECToR, 5 itérations 0,40
GECToR, 1 itération 0,20
Ce tableau montre le temps d'inférence à l'aide d'un NVIDIA Telsa V100 sur CoNLL-2014 (test), avec un modèle unique et une taille de lot de 128. Notez que la stratégie de recherche de faisceau génère le mot de traduction de gauche à droite tout en conservant un nombre fixe (faisceau) de candidats actifs à chaque pas de temps. L'augmentation de la taille du faisceau améliore la qualité tout en réduisant les performances.

Les approches basées sur NMT sont généralement autorégressives, ce qui signifie que chaque jeton prédit repose sur tous les jetons précédents et que les corrections doivent être prédites une par une. L'approche de GECToR est non autorégressive, sans dépendances entre les prédictions. Il est naturellement parallélisable et fonctionne donc plusieurs fois plus rapidement.

Repousser les limites de GEC

Cette recherche montre qu'un système GEC plus rapide, plus simple et plus efficace peut être développé en empruntant une route moins fréquentée. Plutôt que de suivre la tendance (dans ce cas, le GEC basé sur le NMT), il vaut la peine de vous demander si vous devriez essayer quelque chose de radicalement différent. Il y a une chance que vous échouiez, mais un chemin inexploré pourrait également vous conduire à des résultats intéressants et à de meilleurs résultats.

La recherche en PNL est l'épine dorsale de tout ce que nous construisons chez Grammarly. Si vous souhaitez rejoindre notre équipe de recherche et aider des millions de personnes à travers le monde où qu'ils écrivent, contactez-nous …nous embauchons!


Kostiantyn Omelianchuk a présenté cette recherche lors du 15e atelier sur l'utilisation innovante de la PNL pour la construction d'applications éducatives (co-localisé avec ACL 2020), qui a eu lieu le 10 juillet 2020. Le document de recherche d'accompagnement, «GECToR – Correction d'erreurs grammaticales: Tag, Not Rewrite », écrit par Kostiantyn Omelianchuk, Vitaliy Atrasevych, Artem Chernodub et Oleksandr Skurzhanskyi, sera publié dans le Actes du 15e atelier sur l'utilisation innovante de la PNL pour créer des applications éducatives.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *