パスワードを忘れた? アカウント作成
14976119 journal
人工知能

yasuokaの日記: DiaParserの日本語係り受け解析をGoogle Colaboratoryで動かす

日記 by yasuoka

ネットサーフィンしていたところ、DiaParserという係り受け解析ツールを見つけた。Transformers上で、22の言語の係り受け解析をおこなえるらしいが、品詞付与をおこなわずに、元の文に対してダイレクトに係り受け解析をおこなうようだ。とりあえず、DiaParserの日本語モデルを、Google Colaboratory上でdeplacyに繋いでみよう。

!pip install deplacy diaparser fugashi unidic-lite ipadic
from transformers.tokenization_bert_japanese import MecabTokenizer
tokenizer=MecabTokenizer(mecab_dic="unidic_lite")
from diaparser.parsers import Parser
parser=Parser.load("ja_gsd.mbert")
nlp=lambda t:"\n".join([str(s) for s in parser.predict(data=tokenizer.tokenize(t),prob=True,text=None).sentences])
doc=nlp("国境の長いトンネルを抜けると雪国であった。")
import deplacy
deplacy.render(doc,Japanese=True)
deplacy.serve(doc,port=None)

「国境の長いトンネルを抜けると雪国であった。」を係り受け解析してみたところ、私(安岡孝一)の手元では、以下の結果が得られた。

国境     ═╗<══╗         nmod(体言による連体修飾語)
の       <╝   ║         case(格表示)
長い     <══╗ ║         acl(連体修飾節)
トンネル ═╗═╝═╝<╗       obj(目的語)
を       <╝     ║       case(格表示)
抜ける   ═══════╝═╗<╗   acl(連体修飾節)
と       <════════╝ ║   mark(標識)
雪国     ═╗═╗═╗═════╝═╗ root(親)
で       <╝ ║ ║       ║ cop(繫辞)
あっ     <══╝ ║       ║ aux(動詞補助成分)
た       <════╝       ║ aux(動詞補助成分)
。       <════════════╝ punct(句読点)

1    国境    _    _    _    _    4    nmod    _    _
2    の    _    _    _    _    1    case    _    _
3    長い    _    _    _    _    4    acl    _    _
4    トンネル    _    _    _    _    6    obj    _    _
5    を    _    _    _    _    4    case    _    _
6    抜ける    _    _    _    _    8    acl    _    _
7    と    _    _    _    _    6    mark    _    _
8    雪国    _    _    _    _    0    root    _    _
9    で    _    _    _    _    8    cop    _    _
10    あっ    _    _    _    _    8    aux    _    _
11    た    _    _    _    _    8    aux    _    _
12    。    _    _    _    _    8    punct    _    _

SVGで可視化すると、こんな感じ。全単語の品詞が「???」になってしまうあたり、どうしたものかとは思うが、係り受けとしてはほぼ完璧なようだ。ただ、品詞情報が全く出てこないと、それはそれで使い勝手が悪い気もする。もうちょっと他の言語も調べてみないと、ダメかなぁ。

typodupeerror

最初のバージョンは常に打ち捨てられる。

読み込み中...