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

yasuokaの日記: spaCy 2.3.1で読む『吾輩は猫である』

日記 by yasuoka

spaCyのバージョンが2.3.1に上がると同時に、日本語モデルja_core_news_mdのバージョンも2.3.2に上がったので、とりあえず使ってみることにした。まずは最新版をdeplacyとともにインストール。

$ pip3 install -U spacy deplacy
$ python3 -m spacy download ja_core_news_md

インストールがうまくいったら、言語処理100本ノック2020の『吾輩は猫である』から、「ヴァイオリンを始める」文を探してみよう。

$ python3
>>> import spacy,urllib.request
>>> ja=spacy.load("ja_core_news_md")
>>> with urllib.request.urlopen("https://nlp100.github.io/data/neko.txt") as r:
...   q=r.read()
...
>>> u=ja(q.decode("utf-8"))
>>> s=set(w.sent for w in u if w.lemma_=="バイオリン" and w.dep_=="obj" and w.head.lemma_=="始める")
>>> print(s)
{「君はヴァイオリンをいつ頃から始めたのかい。}
>>> for v in s:
...   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 v))
...
180723    「    「    PUNCT    補助記号-括弧開    _    180724    punct    _    SpaceAfter=No
180724    君    君    PRON    代名詞    _    180730    nsubj    _    SpaceAfter=No
180725    は    は    ADP    助詞-係助詞    _    180724    case    _    SpaceAfter=No
180726    ヴァイオリン    バイオリン    NOUN    名詞-普通名詞-一般    _    180730    obj    _    SpaceAfter=No
180727    を    を    ADP    助詞-格助詞    _    180726    case    _    SpaceAfter=No
180728    いつ頃    いつ頃    NOUN    名詞-普通名詞-副詞可能    _    180730    obl    _    SpaceAfter=No
180729    から    から    ADP    助詞-格助詞    _    180728    case    _    SpaceAfter=No
180730    始め    始める    VERB    動詞-非自立可能    _    0    ROOT    _    SpaceAfter=No
180731    た    た    AUX    助動詞    _    180730    aux    _    SpaceAfter=No
180732    の    の    SCONJ    助詞-準体助詞    _    180730    mark    _    SpaceAfter=No
180733    か    か    PART    助詞-終助詞    _    180730    mark    _    SpaceAfter=No
180734    い    い    PART    助詞-終助詞    _    180730    aux    _    SpaceAfter=No
180735    。    。    PUNCT    補助記号-句点    _    180730    punct    _    _

spaCy+ja_core_news_mdは、「ヴァイオリンを始める」文を、ちゃんと探せているようだ。結果をdeplacyで構文木にしてみよう。

>>> import deplacy
>>> for v in s:
...   deplacy.render(v,Japanese=True)
...
「           PUNCT <══╗             punct(句読点)
君           PRON  ═╗═╝<════╗       nsubj(主語)
は           ADP   <╝       ║       case(格表示)
ヴァイオリン NOUN  ═╗<════╗ ║       obj(目的語)
を           ADP   <╝     ║ ║       case(格表示)
いつ頃       NOUN  ═╗<══╗ ║ ║       obl(斜格補語)
から         ADP   <╝   ║ ║ ║       case(格表示)
始め         VERB  ═╗═╗═╝═╝═╝═╗═╗═╗ ROOT(親)
た           AUX   <╝ ║       ║ ║ ║ aux(動詞補助成分)
の           SCONJ <══║═══════╝ ║ ║ mark(標識)
か           PART  <══║═════════╝ ║ mark(標識)
い           PART  <══╝           ║ aux(動詞補助成分)
。           PUNCT <══════════════╝ punct(句読点)

「始め=aux⇒い」の係り受けは、aux(動詞補助成分)ではなくmark(標識)の方が適切な気がするが、それ以外はうまく読めている。なお、spaCyの日本語モデルには、大(ja_core_news_lg)・中(ja_core_news_md)・小(ja_core_news_sm)の3種類があるので、よければ他のモデルも比較してみてほしい。

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

物事のやり方は一つではない -- Perlな人

読み込み中...