yasuokaの日記: bert-base-thai-uposによるタイ語の形態素解析
8月27日の日記に続いて、bert-base-thai-uposも作ってみた。Geotrend/bert-base-th-casedをもとに、Universal DependenciesのUPOSでファインチューニングしたものだ。試しにGoogle Colaboratoryで動かしてみよう。
!pip install transformers
import torch
from transformers import AutoTokenizer,AutoModelForTokenClassification
tokenizer=AutoTokenizer.from_pretrained("KoichiYasuoka/bert-base-thai-upos")
model=AutoModelForTokenClassification.from_pretrained("KoichiYasuoka/bert-base-thai-upos")
s="หลายหัวดีกว่าหัวเดียว"
t=tokenizer.tokenize(s)
p=[model.config.id2label[q] for q in torch.argmax(model(tokenizer.encode(s,return_tensors="pt"))[0],dim=2)[0].tolist()[1:-1]]
print(list(zip(t,p)))
「"หลายหัวดีกว่าหัวเดียว」を形態素解析してみたところ、私(安岡孝一)の手元では以下の結果になった。
[('ห', 'B-DET'), ('##ลา', 'I-DET'), ('##ย', 'I-DET'), ('##ห', 'B-NOUN'), ('##ัว', 'I-NOUN'), ('##ดี', 'ADJ'), ('##ก', 'B-ADP'), ('##ว่า', 'I-ADP'), ('##ห', 'B-NOUN'), ('##ัว', 'I-NOUN'), ('##เ', 'B-ADJ'), ('##ดี', 'I-ADJ'), ('##ย', 'I-ADJ'), ('##ว', 'I-ADJ')]
「##」でブツ切りになっていて読みにくいが、「หลาย」がDET、「หัว」がNOUN、「ดี」がADJ、「กว่า」がADP、「หัว」がNOUN、「เดียว」がADJになっているのがわかる。まあまあの精度ではあるのだが、実はトークナイザに多少問題があって、単語切りがうまくいかない場合もあるようだ。うーん、トークナイザごと鍛え直すしかないかなぁ。
bert-base-thai-uposによるタイ語の形態素解析 More ログイン