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

yasuokaの日記: ポルトガル語と日本語の係り受け解析エンジンとしてのspaCy

日記 by yasuoka

ざっと調べてみたところ、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は、現状では使い物にならず、日本語モデルとの比較は、まだまだ先のことになりそうだ。それとも、もっと高性能なモデルが、どこか別のところにあるのだろうか。

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

「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常

読み込み中...