昨年のクリスマスイブに書いたLlamaForTokenClassificationを使って、Swallow-7b-plus-uposという日本語品詞付与モデルを作ってみた。最初のアイデアを出してから3ヶ月もかかってしまった。結果として、NVIDIA A100-SXM4-40GBを8枚使えば、モデルの作成時間を1時間45分にまで短縮できるようになったが、予想に反して品詞付与の精度はイマイチだったりする。
>>> from transformers import pipeline
>>> tag=pipeline("upos","KoichiYasuoka/Swallow-7b-plus-upos",trust_remote_code=True)
>>> nlp=lambda x:[(x[t["start"]:t["end"]],t["entity"]) for t in tag(x)]
>>> print(nlp("予想に反して品詞付与の精度はイマイチ"))
[('予想', 'NOUN'), ('に', 'ADP'), ('反', 'B-VERB'), ('して', 'I-VERB'), ('品', 'VERB'), ('詞', 'NOUN'), ('付与', 'VERB'), ('の', 'ADP'), ('精度', 'NOUN'), ('は', 'ADP'), ('イマイチ', 'ADJ')]
「反」「して」がツライ。せめて「反」「し」「て」とトークナイズした上で
[('予想', 'NOUN'), ('に', 'ADP'), ('反', 'B-VERB'), ('し', 'I-VERB'), ('て', 'SCONJ'), ('品', 'B-NOUN'), ('詞', 'I-NOUN'), ('付与', 'NOUN'), ('の', 'ADP'), ('精度', 'NOUN'), ('は', 'ADP'), ('イマイチ', 'ADV')]
と品詞付与できればいいのだけど。やっぱりLLaMAは、系列ラベリングに向いてないのかなぁ。