murawaki の雑記

はてなグループから移転してきました

意味の意味が分からない

表題は某日記から拝借。計算機に自然言語を扱わせるうえで、意味を理解させるというのが大きな目標。しかしこの目標は漠然としている。何が達成できたら意味を理解したことになるのか分からない。いろんな人がいろんな方向から攻めている。適当に洗い出す。範囲は広いし時間もない。裏とりはせず、記憶に頼って殴り書き。

記号

意味は、対応する記号を置いておけば良いという立場。それ以上の表現を与えない。興味は、記号同士の関係を論理式で与えることと、その真偽値にある。この手の話は、元はといえばたぶん Frege あたりまでさかのぼる。

計算機との関係では、かつて人工知能屋さんが論理式と戯れていた。もはや教科書を通してしか知らない。Nixon diamond とか作って遊んでいた古き良き時代。planning とか、閉世界仮説とか。それ単独で見るとおもしろい話題はいろいろある。けれど、自然言語と遊離した独自世界。現実にそこにあるテキストと結びつく未来が見えない。

頑張って自然言語形式言語と結びつけようとしている人もいる。英語を対象とした Montague の文法は、失敗したという結論でいいのだろうか。そんなこと言っていると、誰かに後ろから刺されたりするのかな。難しい課題はいろいろあるが、例えば may とか want N to V とかどうするのよ、とか。論理体系が既にあって、そこに自然言語をどうやって帰着するかという問題ではすまない。自然言語の論理をうまく表すような論理体系を作りつつ、自然言語形式言語との間の変換規則も作るという同時並行的な作業。

最近の論文では、Combinatory Categorial Grammar (組み合わせ範疇文法、CCG) というのをよく見かける。誰が親玉なのかわからないが、Steedman という名前をよく見る。日本では戸次先生。最近は構文がそこそこの精度で解析できるので、構文の延長として意味を何とかしようと思ったとき、形式言語の出番かなあと思っている人がそこそこいる。ただし、ハードコアな人の興味は、文法要素の扱いとか量化とかをどう処理するかにあるっぽい。それだけでもやることが山積みっぽい。それはそれで大変楽しそうだけど、短期間で実用状態に持っていくことを望んでいる人たちとどう折り合いをつけるのかなあ。

基本はやはり記号というアトミックな単位の組み合わせ。最小単位は記号を割り振ったらおわり。論理式に変換できたとして、その先で本当に何かできるのかなあ。

最近見かけるシリーズでいうと、neo-Davidsonian な論理式をよく見る。John loves Mary を love(John, Mary) に変換すればすむと思ったら大間違いで、∃e.love(e, John, Mary) にしないといけないという話。あってる?

論理式で言うと、Markov Logic Network というのが一時はやった。最近は見なくなってしまった。Domingos 先生が頑張って旗を振っていたのに。論理式といっても、ルールが論理式の形で書いてあって、それに具体的な値が入って instantiate されて、論理式に対応づいている重みから全体のスコアが最適化されるってな感じ。こんな説明じゃ伝わらないと思うけど。論理式は人手でゴリゴリ書く。共参照 (coreference) のルールとか。自然言語の意味を扱う方向に発展する感じがしない。

同義性

テキストを処理する立場から言うと、最小単位は記号を割り振ったらおわりという部分が引っかかる。上位下位関係 (例えば、ペンギンと鳥) は論理式で表現できそう。部分全体 (meronymy/holonymy) とかは? 反義は? この手の、英語だと -onym (語について)、-onymy (関係について) と名のつく現象がいろいろある。

一番困るのは実は同義性。完全に同じ意味の語というのはなくて、どこかしら異なっている。仮に、ほぼ同じ、だいたい同じ、似てない、みたいに連続的に分布しているとしたら、離散的な記号でどう扱ったら良いのか。あるとき、国際会議で、上位下位とかの共通データセットを作っている人の発表を聞いたことがあったが、その人が「同義はわからないので扱わない」と宣言したものだから、唖然とした記憶がある。どのデータセットだったか覚えていないが、確かイタリア人の発表。

実用上は同義性は重要。例えば、検索するとして、知りたい内容が書いてあるのに、クエリとちょっと表現がずれていただけで引っかからないとなると困るから。

多義性

テキストを処理する立場から言うと、テキスト上の loves に love という記号を与えておわりで良いのかも疑問。love の語義は一個だけ? 別の語義もない? そもそも語義は1個、2個と離散的に数えられるもの?

人手で語義1、語義2とつけておいて、未知の出現に対して語義を推定するタスクが word sense disambiguation (語義曖昧性解消)。何を手がかりに推定するかというと、周りに出現する単語とかを見る。この話は後述。

発展として、以前、既存の語義一覧にない外れ値を当てるタスクを解いている人の発表を聞く機会があって、地をはう精度を見せられたことがあった。いや、そら難しいよね。

語義をあらかじめ定義せず、似た意味を持っていそうな出現をまとめていく (clustering) する流儀もある。こういう話と論理は、はたして将来統合されたりするのだろうか。

思いついたキーワードを適当にあげると、family resemblance。game に共通する意味って何だろうねってやつ。

意味を担う単位

テキストを処理する立場から言うと、単語にばらして記号を割り振れば良いという方針に疑問を感じる。慣用句はどうするよ? kick the bucket。idiom の例として散々紹介されるけど、実際に使われているのを見ないことでお馴染み。

別に慣用句に限らない。例外ではなく、むしろ一般の現象だと考えている。複合名詞には多かれ少なかれ構成性 (compositionality) で説明できない部分がある。「下駄箱」って「下駄」と「箱」の合成で説明できる? もはや「下駄」は関係なさそうなのに。

思うに、仮に世の中にある概念が離散的で数えられるとしても、概念の数は単語の数よりも多い。世の中は複雑すぎるから。先に概念があって、それをうまく説明しようと、単語を組み合わせる。そうやって人は新しい表現を作る。ひとたび社会に定着したら学習者はそれを受け入れるしかない。

とは言ったものの、いかにも構成的な場合と、そうでない場合がある。「木製下駄箱」という複合名詞は、「下駄箱」は語彙的だとしても、「木製」と「下駄箱」がその場で構文的に結びついている気がする。両者にきれいな境界があるかというと、なさそう。さあどうする?

ちょっと関連するのが collocation。これ自体は、テキスト中でよく共起する単語列 (ギャップを扱う場合もあるけど)。意味について何も言っていない。

分布仮説

ここからは、意味に対して記号を割り振るだけでなく、もっと具体的な表現を与えましょうという方向性。テキスト中での語の使われ方を見て何とかする。頑張ってさかのぼろうと思えば、みんな大好き後期 Wittgenstein とかまでいける気がする。こじつけかな? 一般に言われるのは Harris の分布仮説。「似た語は似た文脈で現れる」ってやつ。

どうやるかとうと、着目した語のテキスト中の出現を調べる。各出現について周りの単語を抽出してベクトルを作る。具体的なベクトルの作り方には山のような変種がある。で、これが意味だと主張する。

このベクトル自体は何とも解釈しようがない。しかし応用はできる。ベクトル同士の類似度をはかれば、それを語の類似度とできる。分布類似度というやつ。

分布類似度にはよく知られた問題がある。反義語の類似度は高くなる。考えてみると、似ていないというのは、全然無関係だってこと。反義語は、直感的には、ほとんど同じで、ある軸だけ反転している。そういう点ではよく似ている。

多義語をどうするのよという問題は当然ある。

あと、未整理のキーワードをあげると prototype と exemplar。

構文とトピック

周辺の語に着目した類似度は、かなりの程度構文的類似性となる。どういうことかというと、名詞と名詞、動詞と動詞は近くなるけど、名詞と動詞は似ていない扱いになる。英語だと、同じ単語の単数形と複数形が、期待ほど似ていないという結果が返ったりする。

周辺の語という制約をゆるめて、いっそ文書内での共起に着目したらどうなるかというと、それはトピックモデル。LDA (Latent Dirichlet Allocation) とか。そうすると、経済とか政治といったトピックでまとまる。名詞と動詞のような構文的類似性は関係がなくなる。これはこれで、ある種の意味の類似性だと思うが、そういう文脈で取り上げられることは少ない気がする。両者の折衷モデルも提案されている。

ニューラルネットの逆襲

いままでは素朴に意味ベクトルを作っていたが、ニューラルネットを使って低次元ベクトルを学習するといい感じになるという話題が最近熱い。ベクトル同士を適当に足し算・引き算する、例えば、King - Man + Woman とすると Queen が浮かび上がるという衝撃的な論文が去年 (2013年) 発表されている。

この論文を見ると、recurrent neural network を使っている。言語モデル用に作ったのを使いまわしている。recurrent だから長距離の影響も残りはするけど、基本的には直前の語の影響が大きいはず。そうすると、上で議論したように、構文的な類似性が強くなるんじゃないかと予想する。論文の表1にあるように、see:sees との類推で return:__ の空欄を埋めるとか。しかし Queen の例を出されて驚いている。素朴に意味ベクトルを作ると、ベクトル中の see の要素と、sees の要素は別々だけど、低次元に変換すると、see の要素と単複の要素に汎化されたりしているのかな。economy と economic みたいに、構文的に類似しない関係はどの程度いけるのだろう。

意味の合成

単語に対して意味表現が与えられたする。しかし、言語というのは組み合わせて句や文をつくるわけで、句や文に対しても意味表現を作りたい。ではどうするか。2つの構成要素 (単語とか句) が結合するとき、例えば、ベクトルの要素同士を足し算して、あらたなベクトルを作る。しかし、それでは bag-of-words と変わらない。単語の並びには何らかの意味があるはずで、それを意味合成にも反映させたい。

要素同士の足し算以外にも、要素同士の掛け算とか、さらにテンソルが出てくるとか、量子論だとか言っている人もいる。黒魔術が展開されているっぽい。おそろしくて深入りしていないのでよくわからない。

意味合成もニューラルネットが席巻している。ベクトルに重み行列をかけて tanh する。もはや何が起きているのかわからない。とにかく、重み行列をいい感じに学習できたら、単にベクトルを足し合わせるよりは良い精度が得られている。

重みの学習方法はいろいろあるが、一つは task driven。これはわかりやすい。例えば感情推定 (文が positive か negative か判定)。文の出力が正解になるように重みを学習する。これなら、正解を出せば良いと割り切れる。1個のタスクだけだと、感情推定に特化した重みが学習される。multi-task learning にして隠れ層を共有すれば、それなりの汎用性を持つようになる、かもしれない。

ここでは構成性が仮定されている。意味を担う単位は単語で、それより大きな塊は合成によって得られる。WSD 的な解釈では、単語自体は多義で、特定の文脈で特定の語義が採用されると思うのだが、既存の研究はそういうモデル化をせずに、単純なモデルで攻めているっぽい。

おわりに

ニューラルネットと聞いて、あえて素人的な発想をするなら、脳である。意味は何らかの形で脳内に保持されているのだろう。脳と言えば、ニューロンで、そのネットワークである。そんなこんなで、よく分からない連続値の羅列が意味なんだと言われるとそうかもしれない。その方向に突撃すると未来があるかもしれない。しかし何かに負けた気がする。その対極として、論理の世界がある。分布仮説的な意味と論理の意味が統合される未来が想像できない。