Tâches auxiliaires pour l’analyse biaffine en graphes de dépendances (Auxiliary tasks to boost Biaffine Semantic Dependency Parsing) (2022)

Abstract: L’analyseur biaffine de Dozat & Manning (2017), qui produit des arbres de dépendances syntaxiques, a été étendu avec succès aux graphes de dépendances syntaxico-sémantiques (Dozat & Manning, 2018). Ses performances sur les graphes sont étonnamment hautes étant donné que, sans la contrainte de devoir produire un arbre, les arcs pour une phrase donnée sont prédits indépendamment les uns des autres. Pour y remédier partiellement, tout en conservant la complexité O(n2 ) et l’architecture hautement parallélisable, nous proposons d’utiliser des tâches auxiliaires qui introduisent une forme d’interdépendance entre les arcs. Les expérimentations sur les trois jeux de données anglaises de la tâche 18 SemEval-2015 (Oepen et al., 2015), et sur des graphes syntaxiques profonds en français (Ribeyre et al., 2014) montrent une amélioration modeste mais systématique, par rapport à un système de base performant, utilisant un modèle de langue pré-entraîné. Notre méthode s’avère ainsi un moyen simple et robuste d’améliorer l’analyse vers graphes de dépendances.

## introduction et travaux reliés un graphe de dépendances est une structure utilisée pour représenter des dépendances entre mots au sein d'une phrase, dépassant le cadre syntaxique. selon les jeux de données, ces dépendances peuvent encoder des relations prédicat-argument, où les étiquettes numérotent les arguments sémantiques (comme par exemple figure 1 -droite), ou bien des dépendances de statut intermédiaire entre syntaxe cela les a habitués à être très sollicités. figure 1 -gauche : graphe syntaxique profond dans le schéma @xcite . droite : graphe sémantique dans le format dm des données semeval 2015 -tâche 18 @xcite . les tokens n'ayant aucun arc entrant ni sortant sont considérés comme ne faisant pas partie de la représentation (en gris ci-dessus, les auxiliaires et prépositions régies par exemple). on distingue ainsi l'analyse vers arbres de dépendances syntaxiques versus l'analyse vers graphes de dépendances (ci-après agd). dans le premier cas, par construction, la contrainte d'arbre capture une interdépendance entre les décisions de rattachement : choisir un gouverneur pour un dépendant d bloque tout autre gouverneur pour d. en agd, la tâche est plus difficile, car même si les arcs sont tout aussi interdépendants, le format ne contraint pas le nombre d'arcs entrants pour un mot. il existe plusieurs approches dans la littérature pour capturer l'interdépendance des arcs en agd, qui sont souvent des adaptations d'analyseurs produisant des arbres de dépendances. l'une d'elles consiste à scorer le graphe de sortie via une somme de "facteurs" contenant plus d'un arc. wang et al. un autre grand type d'approche consiste à prendre des décisions séquentiellement, ce qui permet à un temps t d'encoder en entrée une partie du graphe construit jusqu'ici. c'est le cas dans l'analyseur à base de transitions de fernández-gonzález & gómez-rodríguez (2020) (ci-après f&g20), ou dans le système @xcite , qui à chaque itération sélectionne un nouveau gouverneur pour certains mots, en apprenant par renforcement une politique pour ordonner cette sélection de gouverneurs. ces deux modèles ont une complexité en o(n 2 ) (hors détection de cycles), avec des décisions séquentielles bénéficiant d'un encodage des arcs précédemment prédits. pour pallier à la propagation d'erreur occasionnée, @xcite s'inspire de @xcite , mais en autorisant son système à écraser des décisions précédentes et ainsi potentiellement se corriger. au contraire, l'analyseur biaffine @xcite (ci-après d&m18) calcule simultanément le score de tous les arcs candidats, et les décisions de retenir tel ou tel arc sont indépendantes entre elles. on obtient un système en o(n 2 ) hautement parallélisable, dont la performance est étonnamment haute, bien que moindre que l'analyse d'ordre 2 @xcite . comme pour la plupart des tâches de tal, les performances en agd augmentent en encodant l'entrée via un modèle de langue pré-entraîné. sur les données anglaises semeval-2015-18 @xcite , f&g20 obtiennent une amélioration de +0,7 et +2,0 points de fscore étiqueté, pour respectivement le test en-domaine (id) et hors-domaine (ood) foot_0 . dans ce travail, nous retenons l'architecture simple en o(n foot_1 ) de d&m18, et nous investiguons si des tâches auxiliaires simples peuvent introduire un peu d'interdépendance dans les décisions de rattachement, dans le cadre d'un apprentissage multi-tâche @xcite . nous montrons que certaines tâches auxiliaires apportent une amélioration modeste mais systématique sur les 3 jeux de données en anglais semeval-2015-18 cités supra. on s'appuie également sur une propriété de d&m18, qui est l'absence totale de contraintes sur les graphes sortants. on teste ainsi sur les graphes syntaxiques profonds français précités, qui contiennent de nombreux cycles, pour lesquels on montre également le bénéfice de nos tâches auxiliaires pour la tâche d'aag. ## l'analyseur biaffine de base on réutilise l'architecture de d&m18 pour le calcul des scores des arcs et de leurs étiquettes, en introduisant des différences uniquement dans l'encodage des mots de la phrase. encodage des tokens : nous avons choisi d'investiguer l'utilisation de tâches auxiliaires, en partant de système de base assez haut, et donc utilisant des représentations contextuelles : une séquence d'entrée w 1:n est passée dans un modèle de langue pré-entraîné. on encode chaque w i en concaténant un vecteur non contextuel e (word) i au vecteur contextuel h (bert) i 2 , comme fait par exemple par he & choi (2020) pour l'anglais et le chinois. alternativement, pour les expériences de comparaison à f&g20, on concatène également un plongement de catégorie morphosyntaxique et un plongement de lemme : ensuite, plusieurs couches bilstm sont appliquées à la séquence : r 1:@xmath0:n ). spécialisation de l'encodage et scorage biaffine : ensuite 4 mlp distincts sont utilisés pour spécialiser la représentation récurrente, selon que w i joue le rôle de tête ou dépendant, et selon que l'on score un arc versus une étiquette d'arc : nous utilisons une transformation biaffine simplifiée pour les scores des arcs s (arc) @xmath1, et une autre pour le score de chaque étiquette de dépendance l, noté s apprentissage : pour une phrase ayant comme graphe de référence y, la perte utilisée somme (i) une partie concernant l'existence ou inexistence d'un arc entre chaque paire de positions dans la phrase, et (ii) une partie concernant les étiquettes des arcs. pour la partie (i), on utilise l'entropie croisée binaire : chaque paire de positions i, j donne lieu à un terme -log(σ(s (arc) @xmath2, et -log(1σ(s (arc) @xmath3. pour la partie (ii), on utilise l'entropie croisée pour l'étiquette des arcs de référence uniquement. ainsi, la perte complète pour la phrase complète de graphe y est la suivante : inférence : pour toute paire de positions i, j, l'arc l'arc @xmath4, soit σ(s (arc) @xmath5.5), et il reçoit l'étiquette de plus haut score pour cet arc. ## tâches auxiliaires sur ensembles d'arcs nos premières expériences sur les graphes sémantiques anglais @xcite et sur des graphes syntaxiques profonds en français @xcite ont donné de bons résultats avec l'analyseur biaffine de base, mais avec des incohérences parfois surprenantes étant donnée la bonne qualité générale, et clairement reliées à la localité des décisions. un exemple d'incohérence concerne les expressions polylexicales. dans les graphes anglais dm et les graphes syntaxiques profonds français, celles-ci sont représentées via une structure plate : un composant est la tête de tous les autres composants de l'expression (par exemple garde mwe ---→ du, et garde mwe ---→ corps). nous avons remarqué que l'analyseur ne résoud pas toujours la compétition entre analyser une séquence comme un mot composé ou bien avec une structure syntaxique régulière (qui donnerait garde dep --→ du dep --→ corps). l'analyseur rattache ainsi parfois un même dépendant à la fois comme composant de composé et comme dépendant régulier, ce qui n'est pas possible dans le schéma d'annotation, et n'arrive effectivement jamais dans ces jeux de données. en outre, pour les graphes en français, nous avons constaté une légère tendance à prédire trop souvent qu'un token est déconnecté, i.e. ne prédire pour lui aucun arc entrant ni sortant. plus généralement, si l'on se concentre sur le nombre de gouverneurs de chaque mot, dans les graphes prédits anglais, 95% des mots reçoivent le bon nombre de gouverneurs, alors que ce n'est le cas que pour 92% des mots dans les graphes prédits français. d'où l'idée d'utiliser des tâches auxiliaires prenant en compte tous les gouverneurs ou tous les dépendants d'un token donné. plus précisément, on expérimente un apprentissage multi-tâche sur les deux tâches principales (tâche a et l pour la prédiction des arcs et de leurs étiquettes), plus les tâches auxiliaires suivantes, qui prédisent pour chaque token w j : ces tâches auxiliaires capturent indirectement les deux exemples d'incohérences donnés supra. premièrement, dans le cas d'un token w j qui est un composant de composé, la représentation récurrente r j de ce token va être optimisée à l'apprentissage pour aboutir à une seule étiquette entrante étiqueté mwe pour les tâches s ou b, et une valeur 1 pour la tâche h (cf. un seul gouverneur pour w j ). on fait l'hypothèse que quand r j est par ailleurs utilisée pour les tâches a et l, celle-ci favorisera de ne scorer positivement qu'un seul arc entrant, avec l'étiquette mwe. l'autre problème mentionné supra, i.e. le fait de prédire trop fréquemment un token déconnecté, est capturé par les tâches h et d (et également moins directement par les tâches b et s). par exemple, ne prédire aucun gouverneur pour un token ne sera cohérent qu'avec @xmath6. ainsi, on espère que prédire @xmath7. pour chaque tâche auxiliaire, un mlp spécifique est utilisé pour spécialiser la représentation récurrente r j de chaque token w j . les tâches h et d sont des tâches de régression, pour lesquelles on utilise un mlp avec un seul neurone en sortie, et comme fonction de perte, l'erreur au carré moyenne 3 . la tâche s est une tâche de classification vers des catégories correspondant à des multiensembles d'étiquettes de dépendances. pour w j , le vector des scores de tous les multiensembles s'écrit s @xmath8, et l'entropie croisée est utilisée à l'apprentissage. pour la tâche b, le mlp de spécialisation a une couche de sortie de taille |l| : bol @xmath9. la composante pour l'étiquette l, bol jl , est interprétée comme 1+ le log du nombre d'arcs de la forme * l -→ j. la perte utilisée est la distance l2 entre le vecteur bol j prédit et celui de référence. propagation en pile : on teste deux modes d'apprentissage multi-tâche : le premier est un simple partage de paramètres jusqu'aux couches bilstm (c'est-à-dire que pour un token w j , tous les mlp de spécialisation s'appliquent à la même représentation récurrente r j ). le second mode est la "propagation en pile" que zhang & weiss (2016) ont expérimentée pour les tâches de tagging et parsing : la couche cachée du réseau réalisant le tagging est utilisée dans l'encodage des tokens en entrée du réseau pour l'analyse syntaxique. dans notre cas, cela revient à utiliser les couches cachées des mlp de spécialisation des tâches auxiliaires, dans la représentation d'entrée des tokens avant calcul biaffine des scores des arcs et des étiquettes. par exemple, pour utiliser la tâche h en mode propagation en pile, on modifie le calcul du score des arcs (cf. équation 3 supra). soit hidden (h) j la couche cachée de mlp (h) pour le dépendant j, et c (h) un coefficient hyperparamètre, le calcul de s (arc) @xmath10: protocole expérimental : nous avons choisi d'investiguer l'impact de nos tâches auxiliaires en partant d'une architecture état de l'art, i.e. intégrant modèles de langue pré-entraînés à base de "transformers". nous utilisons notre propre implémentation de l'analyseur biaffine 4 , et les modèles pré-entraînés bert base-uncased @xcite et flaubert base-cased @xcite pour l'anglais et le français, via la librairie huggingface @xcite . nous avons utilisé deux modes : résultats sur les graphes profonds français : nous donnons on peut également évaluer l'impact des tâches auxiliaires en comparant la précision, au sein des graphes prédits, du nombre de têtes de chaque mot : pour le système de base (sans tâches auxiliaires), en moyenne sur les 9 lancers, dans les graphes prédits environ 92, 2% des mots reçoivent le bon nombre de gouverneurs. pour la configuration b+h sans propagation, cette proportion monte à 93, 5%. si ceci confirme bien l'impact des tâches auxiliaires, cette précision dans les graphes prédits est nettement en-dessous de la précision obtenue directement pour la tâche h, qui vaut en moyenne 96, 5%. on en conclut qu'il reste une marge de progression dans la manière d'utiliser cette tâche. ## conclusion un analyseur biaffine pour l'analyse en graphes de dépendances prédit les arcs indépendamment les uns des autres. nous avons proposé des tâches auxiliaires introduisant une forme d'interdépendance dans les décisions de rattachement. nous avons montré qu'entraîner des représentations récurrentes de mots à prédire à la fois les graphes cibles, et les nombres de têtes et étiquettes entrantes de chaque token donne des gains certes modestes mais systématiques, sur des graphes syntaxiques profonds français et des graphes sémantiques anglais, en-et hors-domaine. ce multi-apprentissage est peu coûteux et peut être utilisé pour tout système utilisant un encodage récurrent, quel que soit l'algorithme d'analyse.