yasuokaの日記: BERTモデルを用いた日本語係り受け解析ツールSuPar-UniDicリリース
昨年12月26日の日記で紹介したSuParを、UniDic2UDに繋いで、SuPar-UniDicという日本語係り受け解析ツールを試作してみた。現時点では、10種類のUniDic(unidic-liteを含む)を、7種類のBERTモデルと繋げられるので、合計70種類の組み合わせが楽しめる。しかも、解析結果はspaCy準拠だ。とりあえず、インストール。
$ pip3 install git+https://github.com/yzhangcs/parser --user
$ pip3 install suparunidic --user
BERTモデルに、bert-base-japanese-whole-word-maskingやbert-base-japanese-charやdistilbert-base-japaneseを使いたい場合は、追加で以下をインストールしておいた方がいいだろう。
$ pip3 install fugashi ipadic sentencepiece --user
インストールがうまくいったら、unidic-liteとbert-japanese-aozora6m3m-unidic32k-2mを使って、「昨日は誰も来なかった」を係り受け解析してみよう。
$ python3
>>> import suparunidic
>>> nlp=suparunidic.load("unidic-lite","bert-japanese-aozora6m3m-unidic32k-2m")
>>> doc=nlp("昨日は誰も来なかった")
>>> import deplacy
>>> deplacy.render(doc,Japanese=True)
昨日 NOUN ═╗<════╗ nsubj(主語)
は ADP <╝ ║ case(格表示)
誰 PRON ═╗<══╗ ║ obl(斜格補語)
も ADP <╝ ║ ║ case(格表示)
来 VERB ═╗═╗═╝═╝ ROOT(親)
なかっ AUX <╝ ║ aux(動詞補助成分)
た AUX <══╝ aux(動詞補助成分)
>>> from deplacy.deprelja import deprelja
>>> for b in suparunidic.bunsetu_spans(doc):
... for t in b.lefts:
... print(suparunidic.bunsetu_span(t),"->",b,"("+deprelja[t.dep_]+")")
...
昨日は -> 来なかった (主語)
誰も -> 来なかった (斜格補語)
実は、各BERTモデルには、それぞれに「クセ」みたいなものがあって、得手不得手があるようだ。舞姬/雪國/荒野より-Benchmarksの結果を、ここに示しておいたので、よければ参考にしてほしい。
BERTモデルを用いた日本語係り受け解析ツールSuPar-UniDicリリース More ログイン