yasuokaの日記: ポルトガル語と日本語の係り受け解析エンジンとしてのspaCy
ざっと調べてみたところ、spaCyの各言語モデルの中でも、フランス語・スペイン語・ポルトガル語・イタリア語・オランダ語・ギリシャ語(および日本語)のモデルは、Universal Dependenciesに準拠しているようである。私(安岡孝一)個人としては、ポルトガル語は多少は読めるので、ポルトガル語と日本語の係り受け構造の比較を、ゴールデンウィーク3日目にやってみようと思う。とりあえずはインストールから。ポルトガル語はpt_core_news_smを、日本語はGiNZAを入れてみよう。
% pip3 install spacy
% python3 -m spacy download pt_core_news_sm
% pip3 install https://github.com/megagonlabs/ginza/releases/download/v1.0.2/ja_ginza_nopn-1.0.2.tgz
GiNZAの日本語モデルも、spacy downloadできたらいいのにな、と思いつつ、まずは「笑顔で彼は座った」を係り受け解析してみよう。
% python3
>>> import spacy
>>> ja=spacy.load("ja_ginza_nopn")
>>> s=ja("笑顔で彼は座った")
>>> from spacy.lang.ja_ginza.cli import token_line
>>> print("".join(token_line(t,{})+"\n" for t in s))
1 笑顔 笑顔 NOUN 名詞-普通名詞-一般 _ 5 nmod _ SpaceAfter=No
2 で で ADP 助詞-格助詞 _ 1 case _ SpaceAfter=No
3 彼 彼 PRON 代名詞 _ 5 nsubj _ SpaceAfter=No
4 は は ADP 助詞-係助詞 _ 3 case _ SpaceAfter=No
5 座っ 座る VERB 動詞-一般 _ 0 root _ SpaceAfter=No
6 た た AUX 助動詞 _ 5 aux _ SpaceAfter=No
SVGで可視化すると、こんな感じ。「笑顔←nmod─座っ」は、nmodではなくoblだと思うのだが、それを除いては、ほぼ完璧に解析できている。
次に「Ele se sentou com um sorriso no rosto」を係り受け解析してみよう。
% python3
>>> import spacy
>>> pt=spacy.load("pt_core_news_sm")
>>> s=pt("Ele se sentou com um sorriso no rosto")
>>> print("".join("\t".join([str(t.i+1),t.orth_,t.lemma_,t.pos_,t.tag_,"_",str(0 if t.head==t else t.head.i+1),t.dep_,"_","_" if t.whitespace_ else "SpaceAfter=No"])+"\n" for t in s))
1 Ele Ele PRON PERS|M|3S|NOM|@SUBJ> _ 3 nsubj _ _
2 se se PRON PERS|M|3S|ACC|@ACC>-PASS _ 3 expl _ _
3 sentou sentar VERB <mv>|V|PS|3S|IND|@FS-STA _ 0 ROOT _ _
4 com com ADP PRP|@<ADVL _ 7 case _ _
5 um um DET <arti>|ART|M|S|@>N _ 7 det _ _
6 sorriso sorriso NOUN <np-idf>|N|M|S|@P< _ 7 amod _ _
7 no o ADP PRP|@N< _ 3 obl _ _
8 rosto rostir NOUN <np-idf>|N|M|S|@P< _ 3 xcomp _ SpaceAfter=No
SVGで可視化すると、こんな感じ。はっきり言ってダメダメである。「no」を「em o」にちゃんと分解できておらず、結果として、名詞「rosto」を動詞「rostir」の1人称単数直説法現在と勘違いしてしまい、その一方で「rosto」の品詞はNOUNになっている。これでもうワケが分からなくなってしまって、文の後半の係り受け解析がボロボロになっている。正直なところ使い物にならない。
こんなわけで、spaCyのポルトガル語モデルpt_core_news_smは、現状では使い物にならず、日本語モデルとの比較は、まだまだ先のことになりそうだ。それとも、もっと高性能なモデルが、どこか別のところにあるのだろうか。
ポルトガル語と日本語の係り受け解析エンジンとしてのspaCy More ログイン