yasuokaの日記: Trankitによるウクライナ語の係り受け解析
『世界のUniversal Dependenciesと係り受け解析ツール群』の読者から、ウクライナ語の言語処理の現状に関する質問をいただいた。実は私(安岡孝一)自身、esupar向けのウクライナ語係り受け解析モデルroberta-base-ukrainian-uposや、ベラルーシ語・ブルガリア語・ロシア語・セルビア語・ウクライナ語混合モデルbert-base-slavic-cyrillic-uposなどを作ってみたのだが、なかなか解析精度が上がらない。端的に言うと、BERT/RoBERTaモデルはウクライナ語の呼格を、Universal Dependenciesのvocativeに紐づけにくいようなのだ。
その意味で、ウクライナ語の係り受け解析については、現時点ではTrankitが良いように思われる。Google Colaboratoryでdeplacyに繋いでみよう。
!pip install trankit transformers deplacy
import trankit
nlp=trankit.Pipeline("ukrainian")
doc=nlp("Не скупись на втіху їй і ласку любий брате")
import deplacy
deplacy.render(doc,WordRight=True)
deplacy.serve(doc,port=None)
「Не скупись на втіху їй і ласку любий брате」を係り受け解析してみたところ、私の手元では以下の結果になった。
advmod ╔══════════> PART Не
root ╚═╔═╔═══════ VERB скупись
case ║ ║ ╔══> ADP на
obl ║ ╚>╔═╚═╔═ NOUN втіху
nmod ║ ║ ╚> PRON їй
cc ║ ║ ╔> CCONJ і
conj ║ ╚══>╚═ NOUN ласку
amod ║ ╔> ADJ любий
vocative ╚══════>╚═ NOUN брате
1 Не не PART Q Polarity=Neg 2 advmod _ start_char=0|end_char=2
2 скупись скупитися VERB Vmpm-2s Aspect=Imp|Mood=Imp|Number=Sing|Person=2|VerbForm=Fin 0 root _ start_char=3|end_char=10
3 на на ADP Spsa Case=Acc 4 case _ start_char=11|end_char=13
4 втіху втіха NOUN Ncfsan Animacy=Inan|Case=Acc|Gender=Fem|Number=Sing 2 obl _ start_char=14|end_char=19
5 їй вона PRON Pp-3f-sdn Case=Dat|Gender=Fem|Number=Sing|Person=3|PronType=Prs 4 nmod _ start_char=20|end_char=22
6 і і CCONJ Ccs _ 7 cc _ start_char=23|end_char=24
7 ласку ласка NOUN Ncfsan Animacy=Inan|Case=Acc|Gender=Fem|Number=Sing 4 conj _ start_char=25|end_char=30
8 любий любий ADJ Afpmsvf Case=Voc|Degree=Pos|Gender=Masc|Number=Sing 9 amod _ start_char=31|end_char=36
9 брате брат NOUN Ncmsvy Animacy=Anim|Case=Voc|Gender=Masc|Number=Sing 2 vocative _ start_char=37|end_char=42
SVGで可視化すると、こんな感じ。「скупись」─vocative→「брате」も含め、完璧に解析できているようだ。この結果を見る限り、スラブ語派においては名詞の格を係り受けに反映させる方が良い、ということになりそうだけど、そういう風に一般化して大丈夫かしら。
Trankitによるウクライナ語の係り受け解析 More ログイン