Je vais vous présenter comment créer un vecteur de phrase japonais à partir de BERT pré-appris.
import torch
from transformers.tokenization_bert_japanese import BertJapaneseTokenizer
from transformers import BertModel
#Tokenizer japonais
tokenizer = BertJapaneseTokenizer.from_pretrained('bert-base-japanese')
#Bert pré-appris
model = BertModel.from_pretrained('bert-base-japanese')
Cette fois, nous avons préparé une liste contenant 3 phrases
input_batch = \
["Des cuisses et des cuisses",
"Le client d'à côté est un client qui mange souvent des kakis",
"Directeur du Bureau des brevets et des licences de Tokyo"]
Si vous utilisez batch_encode_plus, il effectuera un prétraitement de la liste de texte vers le mini-lot pour l'entrée du modèle.
pad_to_max_length
est une option de remplissage.
encoded_data = tokenizer.batch_encode_plus(
input_batch, pad_to_max_length=True, add_special_tokens=True)
résultat Veuillez noter que le type de dictionnaire sera renvoyé. ʻInput_ids` est un identifiant de mot.
{'input_ids': [[2, 340, 28480, 28480, 28, 18534, 28, 18534, 5, 859, 3, 0],
[2, 2107, 5, 1466, 9, 1755, 14983, 761, 28489, 1466, 75, 3],
[2, 391, 6192, 3591, 600, 3591, 5232, 3, 0, 0, 0, 0]],
'token_type_ids': [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]],
'attention_mask': [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]]}
En passant, si vous vérifiez comment il a été tokenisé, ce sera comme suit.
input_ids = torch.tensor(encoded_data["input_ids"])
tokenizer.convert_ids_to_tokens(input_ids[0].tolist())
résultat
Les jetons spéciaux sont correctement accordés.
['[CLS]', 'Su', '##Aussi', '##Aussi', 'Aussi', 'AussiAussi', 'Aussi', 'AussiAussi', 'de', 'domicile', '[SEP]', '[PAD]']
Entrez les ʻinput_ids` tensorisés dans BERT.
Selon la documentation officielle (https://huggingface.co/transformers/model_doc/bert.html#transformers.BertModel), le modèle renvoie un taple. Puisque le premier élément devient le vecteur d'état caché de la couche finale, il est extrait avec ʻoutputs [0] `.
outputs = model(input_ids)
last_hidden_states = outputs[0]
print(last_hidden_states.size())
# torch.Size([3, 12, 768])
En regardant la taille du vecteur de sortie, c'est (taille du mini-lot, longueur de la série, nombre de dimensions du vecteur).
** Je veux créer un vecteur de phrase à partir du [CLS]
ajouté au début du texte saisi **, donc extrayez-le comme suit.
sentencevec = last_hidden_states[:,0,:]
print(sentencevec.size())
# torch.Size([3, 768])
C'est tout ce qu'on peut en dire.
Recommended Posts