yasuokaの日記: DiaParserの日本語係り受け解析をGoogle Colaboratoryで動かす
ネットサーフィンしていたところ、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で可視化すると、こんな感じ。全単語の品詞が「???」になってしまうあたり、どうしたものかとは思うが、係り受けとしてはほぼ完璧なようだ。ただ、品詞情報が全く出てこないと、それはそれで使い勝手が悪い気もする。もうちょっと他の言語も調べてみないと、ダメかなぁ。
DiaParserの日本語係り受け解析をGoogle Colaboratoryで動かす More ログイン