Pourquoi le n-gramme est-il utilisé dans l'identification de la langue du texte au lieu des mots?


12

Dans deux bibliothèques d'identification de langue populaires, Compact Language Detector 2 pour C ++ et détecteur de langue pour java, les deux utilisaient des n-grammes (basés sur des caractères) pour extraire des fonctionnalités de texte. Pourquoi un sac de mots (un seul mot / dictionnaire) n'est-il pas utilisé, et quels sont les avantages et les inconvénients des sacs de mots et des n-grammes?

De plus, quelles sont les autres utilisations du modèle n-grammes dans la classification de texte?

Oh oups. Il semble qu'il y ait une question similaire ici: concernant l'utilisation du modèle bigramme (N-gramme) pour créer un vecteur d'entités pour un document texte

Mais quelqu'un peut-il donner une réponse plus complète? Quel est le meilleur dans le cas de l'identification de la langue?

(J'espère que j'ai compris la signification des n-grammes et du sac de mots, haha, sinon aidez-moi s'il vous plaît.)

Réponses:


20

Je pense que les réponses les plus détaillées peuvent être trouvées dans les travaux approfondis de Mehryar Mohri sur le sujet. Voici un lien vers l'une de ses diapositives de conférence sur le sujet: http://www.cims.nyu.edu/~mohri/amls/lecture_3.pdf

Le problème de la détection du langage est que le langage humain (mots) a une structure. Par exemple, en anglais, il est très courant que la lettre «u» suive la lettre «q», alors que ce n'est pas le cas en arabe translittéré. Les n-grammes fonctionnent en capturant cette structure. Ainsi, certaines combinaisons de lettres sont plus probables dans certaines langues que dans d'autres. C'est la base de la classification en n grammes.

Le sac de mots, en revanche, dépend de la recherche dans un grand dictionnaire et essentiellement de la mise en correspondance des modèles. Il y a deux inconvénients principaux ici: 1) chaque langue devrait avoir un dictionnaire complet de mots dans le fichier, ce qui prendrait un temps relativement long à rechercher, et 2) le sac de mots échouera si aucun des mots de l'ensemble de formation est inclus dans l'ensemble de test.

En supposant que vous utilisez des bigrammes (n = 2) et qu'il y a 26 lettres dans votre alphabet, alors il n'y a que 26 ^ 2 = 676 bigrammes possibles pour cet alphabet, dont beaucoup ne se produiront jamais. Par conséquent, le "profil" (pour utiliser les mots du détecteur de langue) pour chaque langue nécessite une très petite base de données. Un classificateur de sac de mots, d'autre part, aurait besoin d'un dictionnaire complet pour CHAQUE langue afin de garantir qu'une langue puisse être détectée en fonction de la phrase qui lui a été donnée.

Donc, en bref - chaque profil de langue peut être rapidement généré avec un espace de fonctionnalités relativement petit. Fait intéressant, les n-grammes ne fonctionnent que parce que les lettres ne sont pas dessinées dans une langue - c'est un levier explicite.

Remarque: l'équation générale du nombre de n-grammes pour les mots est l ^ n où l est le nombre de lettres de l'alphabet.


Je suppose que pour certaines langues proches, l'utilisation de listes de mots en plus des n-grammes aiderait. J'ai vu, parfois, du texte norvégien classé comme danois. Je doute que les n-grammes soient un bon moyen de distinguer ces deux langues.
kjetil b halvorsen

Merci pour votre réponse détaillée. Cependant, j'ai quelques questions à ce sujet, pourriez-vous tout d'abord expliquer «le sac de mots échouera si aucun des mots de l'ensemble de formation n'est inclus dans l'ensemble de test»? et deuxièmement, pourquoi CLD2 utilise-t-il 4 grammes, ce qui entraînera 456976 entrées pour la langue anglaise, alors que l'utilisation d'une méthode de dictionnaire peut apporter environ la moitié de la taille du profil ( oxforddictionaries.com/words/… )?
dennis97519

1
@ dennis97519 re: "sac de mots ..." Supposons que votre dictionnaire se compose uniquement des mots {"chien", "chat", "tortue", "animal"} pour l'anglais et {"perro", "gato" , "tortuga", "animal"} pour l'espagnol. Votre dictionnaire ne pourrait pas classer la phrase suivante: "Un âne est un animal" car le mot "animal" apparaît dans les deux dictionnaires, mais aucun des autres mots n'existe. Ceci est un exemple extrême. Concernant les 4 grammes: 1) N'oubliez pas que vous avez besoin d'un dictionnaire pour chaque langue, 2) les n-grammes ont tendance à être rares (recherche plus rapide) et 3) comme l'a dit Dougal, ils peuvent être représentés en quelques octets seulement.
justanotherbrain

1
@loretoparisi - Il y a deux compromis: le premier se situe entre la complexité du modèle (grand N = plus complexe) et l'erreur de généralisation (dans quelle mesure vous le faites sur un ensemble de tests) - vous ne voulez pas trop vous adapter. Le deuxième compromis est la complexité de calcul. La complexité de la mémoire augmente de façon exponentielle avec N. La formation est généralement linéaire avec le nombre de mots dans le texte, donc avoir un texte très long n'est généralement pas un problème. Cela dit, un texte volumineux signifie souvent plus de mots dans votre dictionnaire D. Encore une fois, la complexité de la mémoire est O (D ^ N). En pratique, il est généralement préférable d'utiliser un N aussi grand que possible par calcul.
justanotherbrain

1
@loretoparisi - Suite à cela, comme mentionné précédemment, les N-grammes ont tendance à être rares, mais ce n'est pas toujours vrai. S'il est rare pour votre texte particulier, alors la validation croisée avec différents N est la meilleure approche pour trouver un N optimal (encore une fois, avec des contraintes de calcul).
justanotherbrain

3

Les lettres N-grammes sont utilisées à la place des mots pour plusieurs raisons:

1) La liste des mots nécessaires pour une langue donnée est assez grande, peut-être 100 000 si vous considérez rapide, plus rapide, plus rapide, à jeun, rapide, jeûne, ... comme tous les mots différents. Pour 80 langues, vous avez besoin d'environ 80 fois plus de mots, ce qui prend beaucoup de place - plus de 50 mégaoctets.

2) Le nombre de trigrammes de lettres pour un alphabet à 26 lettres est de 26 ** 3 soit environ 17 000 et pour les quadgrammes (N = 4) environ 450 000 couvrant TOUTES les langues utilisant cet alphabet. Des nombres similaires mais un peu plus grands pour les N-grammes dans des alphabets plus grands de 30 à 100 caractères. Pour les langues CJK avec plus de 4000 lettres dans le script Han, les unigrammes (N = 1) sont suffisants. Pour certains scripts Unicode, il n'y a qu'une seule langue par script (grec, arménien), donc aucune combinaison de lettres n'est nécessaire (soi-disant nil-grammes N = 0)

3) Avec les mots, vous n'avez aucune information quand on vous donne un mot qui n'est pas dans le dictionnaire, alors qu'avec la lettre N-grammes vous avez souvent au moins quelques combinaisons de lettres utiles dans ce mot.

CLD2 utilise des quadgrammes pour la plupart des scripts Unicode (alphabets), y compris le latin, le cyrillique et l'arabe, des unigrammes pour les scripts CJK, des nilgrammes pour d'autres scripts, et comprend également un nombre limité de mots complets et de paires de mots assez distinctifs et assez courants pour distinguer dans des groupes difficiles de langues statistiquement similaires, comme l’indonésien et le malais. Les bigrammes et trigrammes de lettres sont peut-être utiles pour distinguer un petit nombre de langues (environ huit, voir https://docs.google.com/document/d/1NtErs467Ub4yklEfK0C9AYef06G_1_9NHL5dPuKIH7k/edit), mais sont inutiles pour distinguer des dizaines de langues. Ainsi, CLD2 utilise des quadgrammes, associant à chaque combinaison de lettres les trois langues les plus susceptibles d'utiliser cette combinaison. Cela permet de couvrir 80 langues avec environ 1,5 Mo de tables et 160 langues plus en détail avec environ 5 Mo de tables.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.