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.
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é.
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.
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")
Préparez cette fois la phrase suivante.
text = "This is a pen."
text2 = "I am a man"
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
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.
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]
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