昨日の記事の続きだが、日本語LTG-BERTモデル「HPLT Bert for Japanese」で「酸素ボンベを充[MASK]する。」の[MASK]に穴埋めさせてみた。Google Colaboratoryだと、こんな感じ。
!pip install 'transformers<4.40'
import torch
from transformers import AutoTokenizer,AutoModelForMaskedLM
tokenizer=AutoTokenizer.from_pretrained("HPLT/hplt_bert_base_ja")
model=AutoModelForMaskedLM.from_pretrained("HPLT/hplt_bert_base_ja",trust_remote_code=True)
ids=tokenizer("酸素ボンベを充[MASK]する。")["input_ids"]
print([tokenizer.decode(t) for t in ids])
mask=ids.index(tokenizer.mask_token_id)
with torch.no_grad():
outputs=model(torch.tensor([ids]))
pred=outputs[0][0,mask].topk(5)
for i,t in enumerate(pred.indices):
ids[mask]=t
print(i+1,[tokenizer.decode(t) for t in ids])
私(安岡孝一)の手元では、以下の結果が得られた。
['[CLS]', '酸', '素', 'ボン', 'ベ', 'を', '充', '[MASK]', 'する', '。', '[SEP]']
1 ['[CLS]', '酸', '素', 'ボン', 'ベ', 'を', '充', '填', 'する', '。', '[SEP]']
2 ['[CLS]', '酸', '素', 'ボン', 'ベ', 'を', '充', '電', 'する', '。', '[SEP]']
3 ['[CLS]', '酸', '素', 'ボン', 'ベ', 'を', '充', '実', 'する', '。', '[SEP]']
4 ['[CLS]', '酸', '素', 'ボン', 'ベ', 'を', '充', '充', 'する', '。', '[SEP]']
5 ['[CLS]', '酸', '素', 'ボン', 'ベ', 'を', '充', '続', 'する', '。', '[SEP]']
一発目に「填」を埋めてきているのは、かなり強い。そこそこ高い精度が期待できるのだけど、さて、ファインチューニングがうまくいくかな。