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

yasuokaの日記: spaCyの日本語モデルで旧字旧仮名の係り受け解析

日記 by yasuoka

昨日の日記の続きだが、spaCyの日本語モデルで「國境の長いトンネルを拔けると、そこは雪國であつた。」を係り受け解析してみることにした。大中小の日本語モデルのうち、さすがに小のモデルでは苦しそうなので、中のモデル(ja_core_news_md)を使ってみた。

>>> import spacy
>>> ja=spacy.load("ja_core_news_md")
>>> doc=ja("國境の長いトンネルを拔けると、そこは雪國であつた。")
>>> import deplacy
>>> deplacy.render(doc)
國       NOUN  <╗                 compound
境       NOUN  ═╝═╗<╗             nmod
の       ADP   <══╝ ║             case
長い     ADJ   <══╗ ║             acl
トンネル NOUN  ═╗═╝═╝<╗           obj
を       ADP   <╝     ║           case
拔け     VERB  ═══════╝═╗═╗═╗<╗   advcl
る       AUX   <════════╝ ║ ║ ║   mark
と       CCONJ <══════════╝ ║ ║   mark
、       PUNCT <════════════╝ ║   punct
そこ     PRON  ═╗<════╗       ║   nsubj
は       ADP   <╝     ║       ║   case
雪       NOUN  <╗     ║       ║   compound
國       NOUN  ═╝═╗<╗ ║       ║   advcl
で       ADP   <══╝ ║ ║       ║   cop
あつ     VERB  ═╗═══╝═╝═══════╝═╗ ROOT
た       AUX   <╝               ║ aux
。       PUNCT <════════════════╝ punct

「國境」と「雪國」が、それぞれ2語に分かれてしまっているものの、そこはcompoundで繋がれているし、それ以外の係り受けは大丈夫なようだ。Universal Dependenciesで、解析結果をもう少し詳細に見てみよう。

>>> 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 doc))
1    國    国    NOUN    名詞-普通名詞-一般    _    2    compound    _    SpaceAfter=No
2    境    境    NOUN    名詞-普通名詞-一般    _    5    nmod    _    SpaceAfter=No
3    の    の    ADP    助詞-格助詞    _    2    case    _    SpaceAfter=No
4    長い    長い    ADJ    形容詞-一般    _    5    acl    _    SpaceAfter=No
5    トンネル    トンネル    NOUN    名詞-普通名詞-サ変可能    _    7    obj    _    SpaceAfter=No
6    を    を    ADP    助詞-格助詞    _    5    case    _    SpaceAfter=No
7    拔け    抜く    VERB    動詞-非自立可能    _    16    advcl    _    SpaceAfter=No
8    る    り    AUX    助動詞    _    7    mark    _    SpaceAfter=No
9    と    と    CCONJ    助詞-接続助詞    _    7    mark    _    SpaceAfter=No
10    、    、    PUNCT    補助記号-読点    _    7    punct    _    SpaceAfter=No
11    そこ    其処    PRON    代名詞    _    16    nsubj    _    SpaceAfter=No
12    は    は    ADP    助詞-係助詞    _    11    case    _    SpaceAfter=No
13    雪    雪    NOUN    名詞-普通名詞-一般    _    14    compound    _    SpaceAfter=No
14    國    国    NOUN    接尾辞-名詞的-一般    _    16    advcl    _    SpaceAfter=No
15    で    で    ADP    助詞-格助詞    _    14    cop    _    SpaceAfter=No
16    あつ    有る    VERB    動詞-非自立可能    _    0    ROOT    _    SpaceAfter=No
17    た    た    AUX    助動詞    _    16    aux    _    SpaceAfter=No
18    。    。    PUNCT    補助記号-句点    _    16    punct    _    SpaceAfter=No

「拔ける」が2語に分かれている部分は、どうもlemma_がうまく取れていないようだ。うーむ、このあたりは、spaCyより、むしろSudachiPyに頑張ってもらうべき部分なのかしら。

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

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

読み込み中...