J'ai vu que les modèles NLP tels que BERT utilisent WordPiece pour la tokenisation. Dans WordPiece, nous divisons les jetons comme playing
en play
et ##ing
. Il est mentionné qu'il couvre un plus large éventail de mots hors vocabulaire (OOV). Quelqu'un peut-il m'aider à expliquer comment la tokenisation WordPiece est réellement effectuée et comment elle gère efficacement les mots rares/OOV?
WordPiece et BPE sont deux techniques similaires et couramment utilisées pour segmenter les mots en sous-niveau dans les tâches PNL. Dans les deux cas, le vocabulaire est initialisé avec tous les caractères individuels de la langue, puis les combinaisons les plus fréquentes/probables des symboles du vocabulaire sont ajoutées de manière itérative au vocabulaire.
Considérez l'algorithme WordPiece du papier original (formulation légèrement modifiée par moi):
- Initialisez l'inventaire d'unités Word avec tous les caractères du texte.
- Construisez un modèle de langage sur les données de formation en utilisant l'inventaire de 1.
- Générez une nouvelle unité Word en combinant deux unités de l'inventaire Word actuel pour incrémenter l'inventaire d'unité Word d'une unité. Choisissez la nouvelle unité Word parmi toutes les unités possibles qui augmentent le plus la probabilité sur les données de formation lorsqu'elles sont ajoutées au modèle.
- Aller à 2 jusqu'à ce qu'une limite prédéfinie d'unités Word soit atteinte ou que l'augmentation de probabilité tombe en dessous d'un certain seuil.
L'algorithme BPE ne diffère qu'à l'étape 3, où il choisit simplement la nouvelle unité Word comme combinaison de la paire suivante la plus fréquente parmi l'ensemble actuel de sous-mots unités.
Exemple
Saisissez du texte: elle marcha. c'est un promeneur de chiens. je marche
Les 3 premières fusions BPE:
w
a
= wa
l
k
= lk
wa
lk
= walk
Donc, à ce stade, votre vocabulaire comprend tous les caractères initiaux, ainsi que wa
, lk
et walk
. Vous le faites généralement pour un nombre fixe d'opérations de fusion.
Comment gère-t-il les mots rares/OOV?
Tout simplement, les mots OOV sont impossibles si vous utilisez une telle méthode de segmentation. Tout mot qui n'apparaît pas dans le vocabulaire sera décomposé en unités de sous-mots. De même, pour les mots rares, étant donné que le nombre de fusion de sous-mots que nous avons utilisé est limité, le mot ne se produira pas dans le vocabulaire, il sera donc divisé en sous-mots plus fréquents.
Comment cela aide-t-il?
Imaginez que le modèle voit le mot walking
. À moins que ce mot n'apparaisse au moins quelques fois dans le corpus de formation, le modèle ne peut pas apprendre à bien gérer ce mot. Cependant, il peut contenir les mots walked
, walker
, walks
, chacun n'apparaissant que quelques fois. Sans segmentation de sous-mots, tous ces mots sont traités comme des mots complètement différents par le modèle.
Cependant, si ceux-ci sont segmentés en walk@@ ing
, walk@@ ed
, etc., notez que tous auront désormais walk@@
en commun, ce qui se produira très fréquemment pendant l'entraînement, et le modèle pourra peut-être en savoir plus à ce sujet.