[PYTHON] Tokenize à l'aide de la bibliothèque Hugging Face

Contexte

Récemment, j'ai commencé kaggle. C'est un concours pour extraire des chaînes de caractères à partir de Tweets, mais pouvez-vous en frapper quelques-uns? J'ai pensé, j'ai essayé de convertir des mots en quantités de caractéristiques par diverses méthodes. À ce moment-là, je voudrais vous présenter Toknizer, ce qui était pratique.

Qu'est-ce que Tokenizer?

Pour apprendre un mot par machine learning, il est nécessaire de quantifier (vectoriser) le mot. Le convertisseur s'appelle Tokenizer. Probablement. Par exemple  This -> Tokenizer ->713 Quantifiez comme ça.

transformers La librairie utilisée cette fois est une librairie appelée "transformers" développée par "Hugging Face, Inc". C'est une bibliothèque qui est familière pour le traitement du langage naturel (du moins, elle était souvent utilisée dans kaggle), et non seulement le tokenizer, mais aussi le modèle par la dernière méthode est implémenté.

Utilisons-le immédiatement

Cette fois, j'utiliserai "RoBERTa" comme exemple. La source peut être trouvée ici [https://github.com/ishikawa-takumi/transformers-sample/blob/master/tokenizer.ipynb). Cette source est au format ipynb et peut être exécutée dans Google Colab ou Visual Studio Code. Google Colab Visual Studio Code Sinon, prenez chaque code et portez-le sur une console ou un py pour l'essayer.

Obtenir un tokenizer

Obtenez le tokenizer avec transformers.AutoTokenizer.from_pretrained (nom du modèle). En modifiant le "nom du modèle", vous pouvez obtenir le tokenizer pour ce modèle. Puisque nous utiliserons RoBERTa cette fois, entrez "roberta-base". D'autres modèles peuvent être trouvés ici (https://huggingface.co/models). Il faudra un certain temps pour être généré, veuillez donc patienter un peu.

import transformers

tokenizer = transformers.AutoTokenizer.from_pretrained("roberta-base")

Créez une phrase appropriée

Préparez cette fois la phrase suivante.

text = "This is a pen."
text2 = "I am a man"

Vectorisation

Vectorisez chacune des phrases créées. Pour ce faire, utilisez encoder.

ids = tokenizer.encode(text)
# output
# [713, 16, 10, 7670, 4]
ids2 = tokenizer.encode(text2)
# output
# [100, 524, 10, 313]

Vous avez maintenant les chiffres des mots que vous vouliez faire. En regardant la première phrase, this -> 713 is -> 16 a -> 10 pen -> 7670 . -> 4 Converti en! !! !!

Special Token

Qu'est-ce que le jeton spécial?

De plus, dans les méthodes telles que BERT et RoBERTa, l'apprentissage se fait à l'aide de caractères spéciaux. Ceux-ci incluent le début d'une phrase et les caractères qui représentent une rupture entre les phrases. Veuillez vérifier ici pour plus de détails. Par exemple, voyons quels types de caractères sont utilisés dans RoBERTa. Il est emballé dans une variable appelée special_tokens_map.

tokenizer.special_tokens_map
# output
# {'bos_token': '<s>',
#  'eos_token': '</s>',
#  'unk_token': '<unk>',
#  'sep_token': '</s>',
#  'pad_token': '<pad>',
#  'cls_token': '<s>',
#  'mask_token': '<mask>'}

"Signification du jeton: caractère attribué au jeton" La sortie est comme ça. Par exemple, le premier bos_token reçoit le caractère \ . Aussi, comme la signification de chacun bos_token: jeton de début de séquence eos_token: jeton de fin de séquence unk_token: caractères qui ne peuvent pas être convertis en ID (jeton inconnu) sep_token: le jeton de séparation pad_token: Padding (Le jeton utilisé pour le remplissage) cls_token: pour la classification (cls_token) mask_token: Mask (Le jeton utilisé pour masquer les valeurs)

est. Veuillez vérifier l'URL mentionnée précédemment pour une explication détaillée.

Vérification spéciale de l'ID de jeton

all_special_tokens est la liste de caractères attribuée au jeton spécial et all_special_ids est rempli avec les ID correspondant au jeton spécial. Ils sont disposés dans le même ordre que all_special_tokens. Sept jetons spéciaux ont été donnés plus tôt, mais all_special_tokens est une liste de cinq caractères car certains des caractères attribués sont dupliqués.

tokenizer.all_special_tokens
# output
# ['<pad>', '<s>', '<mask>', '<unk>', '</s>']
tokenizer.all_special_ids
# output
# [1, 0, 50264, 3, 2]

Ajouter un jeton spécial

Dans RoBERTa et BERT, il est nécessaire d'ajouter un jeton spécial lors de l'apprentissage et de l'inférence avec Model. (Je n'ai pas rembourré cette fois.) Vous pouvez attacher manuellement le jeton spécial que vous avez vérifié précédemment, mais il existe une API qui ajoute le jeton spécial à l'instruction saisie automatiquement, alors utilisons-le.

ids_with_special_token = tokenizer.build_inputs_with_special_tokens(ids, ids2)
# output(ids_with_special_token)
# [0, 713, 16, 10, 7670, 4, 2, 2, 100, 524, 10, 313, 2]
mask = tokenizer.get_special_tokens_mask(ids, ids2)
# output(mask)
# [1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1]

Pour ajouter un jeton spécial, tokenizer.build_inputs_with_special_tokens (ID texte, ID texte 2) Est utilisé. Vous pouvez mettre deux phrases (même une seule est OK), et le jeton spécial est correctement inséré au début, à la rupture et à la fin des deux phrases.

À l'avenir, je vais le traiter avec Model.

Recommended Posts

Tokenize à l'aide de la bibliothèque Hugging Face
Décrivez le visage avec Dlib (1)
J'ai recherché dans la bibliothèque l'utilisation de l'API Gracenote
Agréger les résultats des tests à l'aide de la bibliothèque Python QualityForward
Vérification des méthodes et des variables à l'aide de la bibliothèque voir
Utilisation de la bibliothèque de tracés 3D MayaVi de Julia
J'ai essayé d'utiliser la bibliothèque de programmation fonctionnelle toolz
Partie 1 Exécutez e-Gov à l'aide de la bibliothèque SmartHR kiji (spécifications e-Gov)
Utiliser l'API de recherche de la Bibliothèque du Parlement national en Python
J'ai essayé d'utiliser la bibliothèque Python de Ruby avec PyCall
J'ai essayé la reconnaissance faciale du problème du rire en utilisant Keras.
(Python3) Non oO (Utilisez-vous la bibliothèque standard?): 5 shaders
J'ai essayé la reconnaissance faciale avec Face ++
Essayez d'utiliser l'API Twitter
Cloner à l'aide de la commande dd
Essayez d'utiliser l'API Twitter
J'ai essayé la bibliothèque changefinder!
Essayez d'utiliser l'API PeeringDB 2.0
La 2ème bibliothèque SmartHR kiji est utilisée pour exécuter e-Gov (matériel public e-Gov)
La 3e bibliothèque SmartHR kiji est utilisée pour exécuter e-Gov (construction de l'environnement d'exécution)