「象は鼻が長い」を依存構造解析してみた

はじめに

「象は鼻が長い」という二重主語問題の例文について知り、自然言語処理における解析器はどのように解析するのか知りたくなったため、簡単に調べてみることにしました。

おかしい点があれば指摘頂けると助かります。

何が問題か

「象は鼻が長い」という日本語を聞いて、意味が分からない方はいないと思います。

では、「象は鼻が長い」の主語はなんでしょうか? 「象」でしょうか。そうすると「鼻」は何になるでしょうか?私は分かりません。

では「鼻」を主語と考えると、今度は「象」は何にあたるでしょうか。・・・分からないですね。

この例文は、日本語文法を説明する上で説明が難解な文章としてよく例に挙げられます。 同様の文章には、「私はうなぎだ」「こんにゃくは太らない」などがあります。

これらの理解・解説は「象は鼻が長い」(三上章 (著))を読むか、ゆる言語学ラジオさんの説明が分かりやすかったため参照にして下さい。

www.9640.jp

www.youtube.com

依存構造解析を行ってみる

依存構造解析にはspaCy/GiNZAを利用します。

参照:https://acro-engineer.hatenablog.com/entry/2019/12/06/120000

  • spacy==2.3.2
  • ginza==4.0.6

象は鼻が長い

コードは下記のような感じです。

import spacy

nlp = spacy.load('ja_ginza')
doc = nlp('象は鼻が長い')

for sent in doc.sents:
    for token in sent:
        print(token.i, token.orth_, token.lemma_, token.pos_, token.tag_, token.dep_, token.head.i)
    print('EOS')

出力結果はこちら

0 象 象 NOUN 名詞-普通名詞-一般 dislocated 4
1 は は ADP 助詞-係助詞 case 0
2 鼻 鼻 NOUN 名詞-普通名詞-一般 nsubj 4
3 が が ADP 助詞-格助詞 case 2
4 長い 長い ADJ 形容詞-一般 ROOT 4
EOS

表示している項目は、左から単語・見出し語・品詞タグ・品詞情報・依存関係ラベル・係り先の単語インデックスです。

面白そうな情報は全て出していますが、依存構造解析で必要な情報は、「dislocated」「case」「nsubj」などの依存関係ラベルと係り先の単語インデックスの欄の情報です。 これらはそれぞれ下記のような意味となります。

  • nsubj: 主格で述語に係る名詞句。
  • case: 助詞による格の表示。
  • dislocated: 文の通常の中核的な文法関係を満たしていない前置または後置の要素に用いられる。(原文の英語を翻訳したもの)

この依存関係ラベルはUniversal Dependencyにて定義されているラベルです。

詳細はこちら。

https://www.anlp.jp/proceedings/annual_meeting/2015/pdf_dir/E3-4.pdf

dislocatedに関してはこちら。

https://universaldependencies.org/u/dep/dislocated.html

よって、下記のようなことが分かります。

  • 「象」の係り先は「長い」だが、「dislocated」なため、文法関係を満たしていない
  • 「鼻」の係り先は「長い」だが、「nsubj」のため、「鼻」が主語であり、「長い」が述語と解析されている。

この場合は「鼻」が主語になるんですね。「象」は「長い」がdislocatedと判定されるのは凄いと感じました。

私はうなぎだ

同様に、「私はうなぎだ」について

0 私 私 PRON 代名詞 nsubj 2
1 は は ADP 助詞-係助詞 case 0
2 うなぎ うなぎ NOUN 名詞-普通名詞-一般 ROOT 2
3 だ だ AUX 助動詞 cop 2

「私」が主格であり、nsubjのため「うなぎ」(うなぎだ)を述語と解析しています。 この場合は、文字通り「I'm an eel.」の意味になるんでしょうか。

こんにゃくは太らない

次に、「こんにゃくは太らない」について

0 こんにゃく こんにゃく NOUN 名詞-普通名詞-一般 nsubj 2
1 は は ADP 助詞-係助詞 case 0
2 太ら 太る VERB 動詞-一般 ROOT 2
3 ない ない AUX 助動詞 aux 2

「こんにゃく」が主格であり、nsubjのため「太ら」を述語と解析しています。 こんにゃく自体が太らない、という解析になっているように感じます。

分かったこと

現在の依存構造解析器では、言葉の通りの解析を行うことが多いことが分かりました。 当然の結果ですが、構造解析をより理解できて個人的に面白いトピックでした。

将来的には三上さんの文法での解析器なども登場するのかもしれません。ワクワクですね。