Comment créer un ChatGPT privé à l'aide d'une technologie open source ? Téléchargez notre livre blanc gratuit.

Dependency Parser ou comment trouver les vrais voisins de votre mot

Cet article passera en revue la théorie permettant de démystifier cette partie insuffisamment connue de la PNL.

Cet article passera en revue la théorie permettant de démystifier cette partie insuffisamment connue de la PNL. Ensuite, dans un deuxième article, nous vous proposerons des outils pour vous aider à comprendre comment implémenter facilement un analyseur de dépendances.

Lorsque nous pensons aux voisins d'un mot, nous pouvons considérer le voisinage comme leur emplacement dans une phrase, leur relation avec d'autres mots (sujet, déterminant, etc.), appelée syntaxe, ou comme leur similitude de sens, appelée sémantique. Ce qui nous intéresse ici, c'est le voisinage syntaxique.

{{ligne}}

vocabulaire

Tout d'abord, définissons un certain vocabulaire pour le rendre plus clair pour tout le monde.

  • Sémantique est le domaine linguistique et philosophique qui étudie le sens et l'interprétation. Il s'appuie beaucoup sur les liens entre les mots pour comprendre la phrase, et il analyse les changements de sens. En programmation, la sémantique est le résultat attendu d'un programme.
  • Syntaxe est le domaine linguistique de la grammaire. Il s'agit de l'étude des règles relatives à la structure des mots dans les phrases. Connues également en programmation, les erreurs de syntaxe entraînent souvent des bogues, car les règles sont souvent beaucoup plus strictes que dans le langage oral.

{{line}}

Qu'est-ce qu'un analyseur de dépendances ?

Un arbre de dépendances est une structure qui peut être définie comme un graphe orienté, avec |V| nœuds (sommets), correspondant aux mots, et |A| Arcs, correspondant aux dépendances syntaxiques entre eux. Nous pouvons également souhaiter attribuer des étiquettes à des dépendances, appelées relations. Ces relations fournissent des détails sur le type de dépendance (par exemple, sujet, complément d'objet direct, déterminant...). Vous pouvez retrouver toutes les relations de Universal Dependencies en suivant ce lien : https://universaldependencies.org/u/dep/index.html

Example of Dependency Tree : "What is a parser ? "

Exemple d'arbre de dépendance : « Qu'est-ce qu'un analyseur ? «

Dans un arc h -> d, h est le tête et d est le dépendant. La tête est le nœud le plus important d'une phrase, tandis que le Racine est le nœud le plus important de toute la phrase : il est directement ou indirectement la tête de tous les autres nœuds.

Un analyseur de dépendances transforme simplement une phrase en arbre de dépendances.

{{line}}

Métriques : comment reconnaître un bon analyseur ?

Un analyseur de dépendances précis reconnaît bien les dépendances et les relations entre les mots. Deux indicateurs (scores) sont utiles à cet effet :

  • Score d'attachement non étiqueté (UAS), qui correspond au nombre de dépendances correctement prédites par rapport au nombre de possibilités ;
  • Labeled Attachment Score (LAS), qui correspond au nombre de dépendances et de relations correctement prédites sur le nombre de possibilités.

Le LAS est toujours inférieur ou égal à l'UAS, car une dépendance incorrecte conduit à un UAS et à un LAS sous-optimaux, tandis qu'une relation (ou étiquette) incorrecte ne fait qu'entraîner une diminution du LAS.

{{ligne}}

Algorithme : comment fonctionne-t-il ?

Comme vous l'avez peut-être pensé, nous pourrions créer un analyseur de dépendances à l'aide de règles développées par des linguistes. Ces analyseurs sont appelés Rationalistes. Ils ne sont pas du tout efficaces, car les langues sont très complexes et évoluent au fil du temps. Toute petite modification de la langue entraînerait d'énormes changements dans l'analyseur. L'apprentissage automatique permet de développer Empirique analyseurs, qui sont pilotés par les données. Alimentées par de nombreuses phrases, des probabilités de dépendances ou de relations peuvent être établies. Les connaissances linguistiques peuvent être utilisées, mais elles n'ont pas le dernier mot, ce qui est un avantage si, comme moi, vous avez oublié vos cours de primaire...

Plusieurs étapes sont nécessaires pour créer un analyseur de dépendances. Nos entrées sont les mots de la phrase avec leur propriétés (index, balise Part of Speech, Lemma, Features) ; ensuite, il faut calculer fonctionnalités pour tous les arcs possibles de la phrase. Grâce à ces fonctionnalités, nous calculons un score pour chaque possibilité, et nous décodons enfin les scores avec un décodeur.

Caractéristiques et score

Chaque mot de la phrase possède certains attributs, tels que des balises Part of Speech ou des lemmes. Vous les connaissez peut-être si vous avez déjà lu des informations sur la PNL. Vous pouvez le consulter ici, si ce n'est pas le cas :

Grâce à ces fonctionnalités, nous entraînons un modèle de régression par apprentissage automatique qui renvoie le score à exploiter par le décodeur.

La sélection des fonctionnalités est cruciale, et certains modèles nous permettent de contourner cette partie via une partie d'apprentissage en profondeur. C'est le cas de l'algorithme que nous allons présenter dans la section suivante.

Want to learn how to build a private ChatGPT using open-source technology?

Décodeurs

De nombreux décodeurs différents ont déjà été développés. Cependant, nous pouvons les diviser en deux catégories : les décodeurs basés sur les transitions et les décodeurs basés sur les graphes. Les décodeurs basés sur les transitions sont plus rapides et nécessitent moins de mémoire pour décoder les scores, mais ils sont généralement moins précis que les décodeurs basés sur les graphes. Je ne passerai en revue que les principes des modèles basés sur des graphes dans cet article.

D'autres algorithmes peuvent appliquer différentes transitions, mais celui-ci nous permet d'en comprendre le principe de base.

Décodeurs à base de graphes

Il est nécessaire de traiter de la théorie des graphes pour comprendre ces algorithmes.

Un graphe G= (V, A) est un ensemble de sommets V (appelés également nœuds), qui représentent les jetons, et d'arcs (i, j) » A où i, j » V. Les arcs représentent les dépendances entre deux mots.

Dans un analyseur de dépendances basé sur des graphes, les graphes sont orientés, ce qui signifie que les liens ont des directions différentes et qu'il peut y avoir plusieurs arcs entre les nœuds, c'est ce qu'on appelle un multidigraphe.

Weighted Multi Directed Graph (G)

Graphique multidirectionnel pondéré (G)

Vous remarquerez que certaines flèches sont plus épaisses que d'autres. Cela représente le poids des arcs. Plus un arc est lourd, plus le lien entre deux nœuds est fort. Nous pourrions interpréter cela comme la force de la dépendance syntaxique de notre analyseur. Par exemple, C et A semblent être très dépendants de B, mais B ne semble pas très dépendant de C et A.

Le graphique G est trop connecté. Pour obtenir un arbre de dépendance, nous voulons :

  • Associer chaque mot uniquement à ses dépendants, pas à tous les mots. Le nombre total d'arcs doit être égal au nombre de nœuds moins 1 (|A| = |V|-1).
  • Pour conserver les mêmes nœuds (ou jetons ou mots).
  • Pour la rendre acyclique : nous ne voulons pas qu'une tête soit dépendante de l'une de ses dépendantes (directes ou indirectes).

Heureusement, tout cela a déjà un nom : ce que nous voulons, c'est un Spanning Tree !

Example of Spanning Tree from the graph G

Exemple de Spanning Tree à partir du graphique G

An other example of Spanning Tree

Un autre exemple de Spanning Tree

Si j'ai bien compris ce qu'est un Spanning Tree, sachez qu'il existe de multiples possibilités, car nous n'avons que quelques conditions pour en obtenir un. Voici une astuce : nous voulons le meilleur, bien sûr, mais comment pouvons-nous déterminer le « meilleur » ?

Nous avons 3 nœuds ici et nous voulons les conserver. Cependant, nous avons 6 arcs et nous voulons n'en garder que 2. Le « meilleur » arbre de dépendance est celui qui a les poids les plus élevés : c'est ce qu'on appelle le Maximum Spanning Tree (MST).

Maximum Spanning Tree of G

Arbre de couverture maximal de G

Minimum Spanning Tree of G

Arbre de couverture minimum de G

Cet arbre à envergure maximale nous donne notre arbre de dépendance, que nous utiliserons pour trouver les voisins syntaxiques les plus proches dans la phrase.

{{ligne}}

Conclusion

Les informations données ici sont très légères par rapport aux différents algorithmes existants. Cependant, cela devrait améliorer votre intuition lors du développement du Bist-Parser, dont la mise en œuvre est détaillée via ce lien.

Callout

Créez votre pipeline NLP gratuitement
Commencez ->