コンピュータがテキストの「意味」を理解できるようになれば、 検索システムや対話システムの性能が向上するはず。
自然言語の「意味」は階層的に成り立っていて、それぞれの階層が言語学の一分野となっている。
階層 | 言語学の理論 | 扱う現象 |
---|---|---|
言葉の使われ方 | 語用論 | 試験前に言う「勉強してない」 |
意味 | 意味論 | 「私はパンを食べる」私=食べる人, パン=食べられるもの |
構文 | 統語論 | 文型、修飾・被修飾 |
語彙 | 形態論 | 単語、品詞、活用する語の活用型・活用形 |
音 | 音韻論 | 母音・子音、音便 |
音声認識をするシステムが増えている。 スマートフォン、スマートスピーカ、カーナビなどは音声で指示ができる。
音は物理的には連続的に変化しているものであるが、 人間は母音・子音といった単位で認識している。 このような最も小さな音の単位を音素 (phoneme) という。
意味を持つ表現の最小単位は形態素 (morpheme) と呼ばれる。 単語 = 形態素のことが多いが、 日本語の活用語尾(接辞)、英語の三単現の s や過去形の ed など、単語より小さいものも形態素となる。
語 | 音素表記 | 語幹 | 活用語尾 |
---|---|---|---|
会う | au | a | u |
話す | hanasu | hanas | u |
統語論 (syntax) : 語あるいは形態素がどうやって句 (phrase) や文 (sentence) を構成するかという理論。つまり、文法のこと。
動詞や形容詞などの述語は、さまざまな文法的役割を持った名詞と結びついている。 日本語では、ガ、ヲ、ニ、デ、カラ、ヨリといった格助詞により役割が示される。 述語となる語の意味によって、どのような格が必要かが決まっている。
私が太郎に花子を紹介した。
「紹介する」はガ、ヲ、ニのすべての格をとる動詞である。 「紹介する」という動作にこれらは必須の情報であるので、 ガ、ヲ、ニによって表される格を必須格という。 一方、「掲示板で」といったデ格は必須ではない。
意味論 (semantics) : 記号と概念との関係などについての理論。
動作を表す動詞を動作動詞という。 動作動詞であれば、ガ格の格要素(助詞ガの直前の要素)は動作主(どうさぬし)である。 この「動作主」は意味役割 (semantic role) と呼ばれる。
語用論とは語の使われ方に関する理論で、発話状況や文脈に依存する。
Grice の協調の原理 (会話の公準) は知っておくとよい。
あの子は皆に可愛がられているでしょうか。
言葉の意味を解析するにあたって、まずテキスト(文字列)を単語(word)の列として認識する必要がある。
単語を取り出す処理は、語形の変化に対応する必要があるため単純ではない。 例えば英語では、play, plays, played は同じ play という単語であるが、語尾が変化している。 あるいは日本語では、動詞や形容詞といった用言が活用をする。
言語学では形態素(morpheme)が意味を持つ最小の単位とされており、 単語はさらに形態素に分割することができる。 例えば、plays は play + s に、played は play + ed に分割できる。
形態素解析では最小の単位まで分割するが、それが最適であるとは限らない。 複合語は複合したまま扱うのがよい場合もある。 例えば「情報検索」は「情報」と「検索」に分割すべきだろうか。 検索の索引語として使うのであれば「情報検索」がよい。
The girl saw the boy with the telescope.
この文は、"with the telescope" が saw に係るか the boy に係るかで意味が異なる。
大きな黒い瞳の女の子
「大きな」「黒い」「瞳の」「女の」、これらはすべて名詞にかかることができる。 名詞としては「瞳」「女」「子」の3つがあるので、様々な係り受け構造が考えられる。
「黒い」が「瞳」以外に係る可能性は、「瞳の女の子」では意味が通らない以上、存在しない。 ただし、「瞳の女の子」は文法的には正しいので、統語解析で排除することはできない。 意味を扱う必要がある。
「頭痛が痛い」も文法的には問題のない表現である。
コンパイルが通ったからといって正しいプログラムとは言えないことと似ている。 文法的に正しいことは必要条件であって、十分条件ではない。
更新されていないものが多い。
「瞳の女の子」は文法的には正しいので統語解析では残るが、 その上位の意味解析の段階で排除される。
"with the telescope" の場合は意味を解析しても曖昧性が残るが、 その上位の語用論的な分析では、文脈からどちらかに意味が定まるかもしれない。
いろいろな階層の言語処理が可能なフレームワーク/ツールキットが提供されている。 ただ、日本語に対応するとは限らない。
言語は Python (Stanford CoreNLP のみ Java)
Java で書かれたプログラムから形態素解析をしたい場合、 Java で書かれている形態素解析器が利用しやすい。
KNP, KWJA は Linux 環境が前提。
大規模言語モデル(LLM)による生成AI(generative AI)は API が用意されている(有料)。