パスワードを忘れた? アカウント作成
14148941 journal
Google

yasuokaの日記: UD-Kanbun・spacy-stanza・spacy-udpipeの自動文切り機能をOFFにするには

日記 by yasuoka

昨日の日記で書いたUD-Kanbunspacy-stanzaspacy-udpipeだが、自動文切り機能をOFFにして、Google Colaboratory上でdeplacyで再比較してみた。ただ、自動文切り機能をOFFにする方法が、それぞれバラバラだったので、ここに記録しておくことにする。まずはUD-Kanbunだが、Danku=Falseで文切りをOFFにできる。

!pip install udkanbun deplacy
import udkanbun.spacy
lzh=udkanbun.spacy.load(Danku=False)
doc=lzh("不入虎穴不得虎子")
import deplacy
deplacy.render(doc)

私(安岡孝一)の手元では、以下の結果になった。

不 ADV  <╗     advmod
入 VERB ═╩═╦═╗ ROOT
虎 NOUN <╗ ║ ║ nmod
穴 NOUN ═╝<╝ ║ obj
不 ADV  <╗   ║ advmod
得 VERB ═╩═╗<╝ parataxis
虎 NOUN <╗ ║   nmod
子 NOUN ═╝<╝   obj

単語間の係り受けとしては、ほぼ完璧な解析結果である。次にspacy-stanzaを試してみよう。tokenize_no_ssplit=Trueで自動文切り機能をOFFにできる。

!pip install spacy_stanza deplacy
import stanza
stanza.download("lzh")
from spacy_stanza import StanzaLanguage
lzh=StanzaLanguage(stanza.Pipeline("lzh",tokenize_no_ssplit=True))
doc=lzh("不入虎穴不得虎子")
import deplacy
deplacy.render(doc)

私の手元では以下の結果になった。

不 ADV  <╗     advmod
入 VERB ═╩═╦═╗ root
虎 NOUN ═╗<╝ ║ obj
穴 NOUN <╝   ║ conj
不 ADV  <╗   ║ advmod
得 VERB ═╩═╗<╝ parataxis
虎 NOUN ═╗<╝   obj
子 NOUN <╝     conj

「虎=conj⇒穴」(虎と穴)は、どう考えても解析ミスで、「虎⇐nmod=穴」(虎の穴)が正しいと思う。「虎=conj⇒子」(虎と子)も同様だ。次にspacy-udpipeを試してみよう。自動文切り機能のOFFは、トークナイザを"presegmented"に入れ替える必要があるので、ちょっと手間だったりする。

!pip install spacy-udpipe deplacy
import spacy_udpipe
spacy_udpipe.download("lzh")
lzh=spacy_udpipe.load("lzh")
lzh.tokenizer.model.tokenize=lambda t:lzh.tokenizer.model._read(text=t,input_format=lzh.tokenizer.model.model.newTokenizer("presegmented"))
doc=lzh("不入虎穴不得虎子")
import deplacy
deplacy.render(doc)

私の手元では以下の結果になった。

不 ADV  <╗     advmod
入 VERB ═╩═╦═╗ ROOT
虎 NOUN ═╗<╝ ║ obj
穴 NOUN <╝   ║ conj
不 ADV  <╗   ║ advmod
得 VERB ═╩═╗<╝ parataxis
虎 NOUN <╗ ║   nmod
子 NOUN ═╝<╝   obj

「虎=conj⇒穴」(虎と穴)は解析ミスだが、「虎⇐nmod=子」(虎の子)は正解だ。つまり、自動文切り機能をOFFにした場合の「不入虎穴不得虎子」に対する結果としては、UD-Kanbunが一番よくて、spacy-udpipeがその次、spacy-stanzaがその次だが、いずれも解析ミスは致命的ではない気がする。うーむ、他の言語も較べてみるべきかな。

この議論は、yasuoka (21275)によって ログインユーザだけとして作成されたが、今となっては 新たにコメントを付けることはできません。
typodupeerror

犯人はmoriwaka -- Anonymous Coward

読み込み中...