yasuokaの日記: chinese-bert-wwm-ext-uposによる現代中国語の係り受け解析
昨日の日記の手法をchinese-bert-wwm-ext-uposに適用して、現代中国語の係り受け解析モデルを試作してみた。Google Colaboratoryで動かしてみよう。
!pip install 'transformers>=4.7.0' 'supar>=1.1.1' 'deplacy>=2.0.1'
from transformers import AutoModelForTokenClassification,AutoTokenizer,TokenClassificationPipeline
from transformers.file_utils import cached_path,hf_bucket_url
from supar import Parser
brt="KoichiYasuoka/chinese-bert-wwm-ext-upos"
mdl=AutoModelForTokenClassification.from_pretrained(brt)
tkz=AutoTokenizer.from_pretrained(brt)
pos=TokenClassificationPipeline(model=mdl,tokenizer=tkz,aggregation_strategy="simple")
prs=Parser.load(cached_path(hf_bucket_url(brt,"supar.model")))
def nlp(s):
d=pos(s)
e=prs.predict([[t["word"].replace(" ","") for t in d]])
e.sentences[0].values[3]=tuple([t["entity_group"] for t in d])
e.sentences[0].values[9]=tuple(["SpaceAfter=No" if t["end"]==u["start"] else "_" for t,u in zip(d,d[1:])]+["_"])
return e
doc=nlp("下雨天和星期一总是让我沮丧")
import deplacy
deplacy.render(doc)
deplacy.serve(doc,port=None)
「下雨天和星期一总是让我沮丧」を係り受け解析してみたところ、私(安岡孝一)の手元では以下の結果になった。
下雨 NOUN <╗ compound
天 PART ═╝═╗═╗<╗ nsubj
和 CCONJ <╗ ║ ║ ║ cc
星期 NOUN ═╝<╝ ║ ║ conj
一 NUM <════╝ ║ nummod
总 ADV <════╗ ║ advmod
是让 VERB ═══╗═╝═╝ root
我 PRON <╗ ║ nsubj
沮丧 ADJ ═╝<╝ ccomp
1 下雨 _ NOUN _ _ 2 compound _ SpaceAfter=No
2 天 _ PART _ _ 7 nsubj _ SpaceAfter=No
3 和 _ CCONJ _ _ 4 cc _ SpaceAfter=No
4 星期 _ NOUN _ _ 2 conj _ SpaceAfter=No
5 一 _ NUM _ _ 2 nummod _ SpaceAfter=No
6 总 _ ADV _ _ 7 advmod _ SpaceAfter=No
7 是让 _ VERB _ _ 0 root _ SpaceAfter=No
8 我 _ PRON _ _ 9 nsubj _ SpaceAfter=No
9 沮丧 _ ADJ _ _ 7 ccomp _ _
SVGで可視化すると、こんな感じ。「天」=nummod⇒「一」はどう考えても変で、「星期」=nummod⇒「一」とすべきだろう。また、「我」⇐nsubj=「沮丧」は「是让」=obj⇒「我」とした上で、「是让」=ccomp⇒「沮丧」をxcompにしたいところだ。うーん、このあたり、どうすれば精度を上げられるかな。
chinese-bert-wwwm-ext-uposによる現代中国語の係り受け解析 More ログイン