第8回 『単語の意味』

皆様こんにちは.自然言語処理の第8回目の今回は,単語の意味について書いてみたいと思います.

単語の意味を判断するのもやはり辞書(データベース)が必要不可欠となります.人間が言葉の意味を勉強したり調べたりするときには国語辞典を使います.しかし,そもそも言葉がわからないコンピュータには,言葉でその言葉の意味を表現している国語辞典を使うことはできません.そこで,コンピュータ用の辞書を作る必要があります.研究も随分と進み,いろいろなタイプのコンピュータ用の辞書が提案されています.

まずは,『意味ネットワーク』といわれるものです.これは,単語と単語の間の関係を定義することで意味を表現しようとしています.人間の長期記憶の仕組みをモデル化したものといわれています.単語と単語の間の関係としては,例えば「生物」と「動物」や「動物」と「人間」のような上位-下位の関係(is-a関係)や「手」と「指」や「指」と「爪」のような全体-部分の関係(has-a関係)が登録されています.このように整理して登録することで,上位から下位に属性(意味)を継承することができます.「生物」は「生きている」とすると「人間」も「生きている」ということになります.同じような考え方で作られた他の辞書としては『オントロジー』や『シソーラス』などがあります.

『格フレーム』といわれるものは,単語と単語の意味の関係性を動詞を中心に捉え整理した辞書です.例えば,「レストランで○○を食べた」,「美味しい○○を食べた」という表現があった場合,「○○」には例えば「ご飯」や「食事」という単語を想像することができます.このように,同じ動詞を使った文では,同じ意味合いの単語が入る可能性が高くなります.これを『深層格』と呼びます.ちなみに,このような考え方は欧米から入ってきたものですが,日本語は特殊であり,「は」,「が」,「も」などの助詞を手掛かりに意味を判断することも可能です.例えば,「○○でご飯を食べた」であれば,「で」の前にある「○○」には「場所」や「手段」が入ることになります.これを『表層格』と呼びます.

最近ブームになっているものでは『Word2vec』があります.これは,「単語の意味は、どのような単語と共起するかという観点から特徴づけられる」という仮説から,単語の意味を複数の数値で表現する方法です.難しく言うと,「単語を任意の次元でベクトル化」したものです.複数の数値で意味を表現するためには,多くのデータから学習する必要があり,ある単語の周辺に存在しやすい単語を学習する『Skipgram』と,ある複数の単語が存在した時に出現しやすい単語を学習する『CBoW』があります.

この考え方と同じような趣旨から構築している別の辞書としては『概念ベース』があります.これは,我々の研究室が開発をしているものですが,20年以上も前から研究しているものになります.最近になって『Word2vec』が出てきましたので,「ついに時代が我々の考えに追いついたか」と思ったりしております.『概念ベース』は『Word2vec』とは異なり,単語の意味を複数の単語で表現しています.このようにすることで,単語を多くの単語,しかも理論的には無限の個数の単語で表現することができますので,我々人間が頭の中に描いている単語の概念をすべて表現できると考えています.実際,最近ブームの『Word2vec』よりも我々の『概念ベース』の方が精度よく意味を捉えることができています.

これらの辞書を使いながら意味を特定していくことになりますが,文には通常,複数の単語が含まれますので,それらの単語同士の関係で意味が変化することなどがあります.そこで,次回は,単語を並べて表現する文の意味について書いてみたいと思います.