yasuokaの日記: roberta-small-japanese-luw-uposは「四半期連結会計期間末日満期手形」を1語とみなすのか
私(安岡孝一)の昨日の日記でリリースしたroberta-small-japanese-aozoraを、UD_Japanese-GSDLUWでファインチューニングして、日本語「長単位」UPOS品詞付与モデルroberta-small-japanese-luw-uposを作ってみた。ちょっと使ってみよう。
$ pip3 install 'transformers>=4.10.0' --user
$ python3
>>> from transformers import AutoTokenizer,AutoModelForTokenClassification,TokenClassificationPipeline
>>> tokenizer=AutoTokenizer.from_pretrained("KoichiYasuoka/roberta-small-japanese-luw-upos")
>>> model=AutoModelForTokenClassification.from_pretrained("KoichiYasuoka/roberta-small-japanese-luw-upos")
>>> pipeline=TokenClassificationPipeline(tokenizer=tokenizer,model=model,aggregation_strategy="simple")
>>> nlp=lambda x:[(x[t["start"]:t["end"]],t["entity_group"]) for t in pipeline(x)]
>>> print(nlp("roberta-small-japanese-luw-uposは「四半期連結会計期間末日満期手形」を1語とみなすのか"))
[('roberta-small-japanese-luw-upos', 'NOUN'), ('は', 'ADP'), ('「', 'PUNCT'), ('四半期連結会計期間末日満期手形', 'NOUN'), ('」', 'PUNCT'), ('を', 'ADP'), ('1語', 'NOUN'), ('と', 'ADP'), ('みなす', 'VERB'), ('の', 'SCONJ'), ('か', 'PART')]
ごらんのとおり、roberta-small-japanese-luw-uposは「四半期連結会計期間末日満期手形」を1語とみなす。ただし、これはあくまで出力結果が1語となっているだけで、内部処理としては7つのトークンに分解している。
>>> print(tokenizer.tokenize("roberta-small-japanese-luw-uposは「四半期連結会計期間末日満期手形」を1語とみなすのか"))
['ro', 'bert', 'a', '-', 'small', '-', 'ja', 'pan', 'ese', '-', 'lu', 'w', '-', 'up', 'os', 'は', '「', '四半期', '連結', '会計', '期間', '末日', '満期', '手形', '」', 'を', '1', '語', 'と', 'みなす', 'の', 'か']
「長単位」をそのまま処理するのは難しいので、どうしてもこういうやり方にせざるを得ないと思う。ただ、サブワードという概念は、イマイチ日本語にそぐわない気もするので、このあたり、もう少し色々と考える必要があるだろう。
roberta-small-japanese-luw-uposは「四半期連結会計期間末日満期手形」を1語とみなすのか More ログイン