Hatena::Grouprekken

murawaki の雑記

2017-05-05

「語」とはなにか・再考

宮岡 伯人. 2015. 「語」とはなにか・再考: 日本語文法と「文字の陥穽」.

書名からは想像もつかないほど実用的な本。目下解決すべき問題へのたたき台となっているという点で。問題となっているのは Universal Dependencies for Japanese (日本語 UD)。そもそもの Universal Dependencies は、通言語的に一貫した (universal) 係り受け (dependency) のデータを作るプロジェクト。日本語 UD はその日本語版。UD では、できるかぎり特定の言語に依存しない共通方針やタグセットを用意しておき、そこに収まらないものだけは各言語で対処する。その方針自体は良い。*1 問題は日本語 UD が根本的なところで共通方針に従っていないこと。その結果、普遍的でも何でもない代物になってしまっている。

具体的な問題は、語 (word) の認定基準がおかしいこと。ここでいう語は係り受けの単位。日本語 UD は BCCWJ (現代日本語書き言葉均衡コーパス) 由来の「短単位」(short unit word, SUW) を語とみなしている。しかし、短単位は通言語的にみて語ではないものを含んでいる。UD方針にあわせるには、まずいわゆる付属語 (助詞、助動詞) を接語 (clitic) と接辞 (affix) にわけなければならない。接語は単独で語をなすが、接辞はそうではない。接辞は自立語にくっつける必要がある。その塊こそが語であり、係り受けの単位である。

このように日本語 UD の認定基準を修正したとすると、次に問題となるのは、具体的にどのように接語と接辞を区分するか。作業量的にも難易度的にも言語処理研究者が片手間に行える範囲をこえている。そういうわけで次の一歩が踏み出せずに逡巡していた。そんなときに宮岡 (2015) が答えを提供していることに気づいてしまった、というお話。

UD の重要性

日本語 UD の問題は放置しておくとまずそうだと思っている。ただし、短期的にはさほど重要ではない。実際、現在のところ、私は UD に関わっていない。UD 日本語をやっているのは知り合いだけど。とりあえず日本語処理の研究をする分には、いまの研究室がこれまで整備してきた資源で足りている。

短期的には、UD が整備されてできるようになるのは、教師なし文法獲得と類型論的興味からの多言語処理。例えば、ある言語と別の言語の構文構造がどのくらい似ているかという疑問に答えたい。普通は類型論の研究者が人手で作った特徴量を用いるところだが、データ駆動で定量化したい。実は2011年くらいから研究があり、各言語の構文解析のパラメータを同一空間上で表現して比較する。通常の構文解析パラメータは言語ごとにばらばらで比較できない。この研究では、言語間で共通の品詞体系を用意することで、言語間の比較を実現していた。しかし、結果が直感に反している。日本語がヨーロッパ言語と離れているのはわかるが、トルコ語とも離れすぎ。しかし、これが本当に言語的な違いに由来するのか、もしくはアノテーション基準の違いに由来するのかわからなかった。

ちなみに世の中一般的な UD への需要は別にある。言語ごとに解析器を一から作っていては効率が悪い。モデルは共通のものを1個だけ作って、あとは各言語のデータを流し込んで機械学習すれば構文解析器が完成するという状態になってほしい。そのための仕様の共通化。*2 とにかく動けば良いという立場の人は通言語的一貫性をあまり気にしないかもしれない。私の興味からすると、そこをちゃんと詰めることこそが重要。

長期的には、日本語処理の将来性の問題にかかわる。もしこの先 UD が世界的に標準的地位を確立したら (その可能性はそれなりにある)、それ以外の資源の地位は危うい。シェア争いには勝たねばならない。そもそも現在の日本語処理の資源は日本の外から使いにくい状態にある。データの入手が困難だし、日本語独自のオレオレ仕様だし、仕様書も日本語で書いてあって読める人が限られる。*3 日本語処理を存続させるためには、国外からも研究できる状態を整備する必要がある。私自身、いつまで日本で研究を続けられるかわからないし。

語の認定

本題。UD方針Tokenization and Word Segmentation に書かれている。それによると、係り受けの単位は syntactic words (not phonological or orthographic words)。orthographic word は分かち書きの話なので日本語とは無関係。phonological word はアクセントやイントネーション上のまとまり。語よりも大きく、文節と一致することもあるが、そうでない場合もある。現象として複雑で、私もちゃんと把握していない。宮岡 (2015) も詳細には立ち入らない。

syntactic words を単位とするという UD方針が堅持されるとひとまず仮定する。トルコ語 UDinflectional group という独自の単位規模を縮小しつつも維持されていることを考えると、修正が入る可能性はある。*4

この方針では接語は語の仲間であり、係り受けの単位となる。接辞は語をなさない。

短単位は語ではない

ところが、日本語 UD は短単位 (SUW) を単位として採用してしまっている。短単位の認定基準の複雑さは尋常ではないが、大雑把に言えば形態素。つまり接辞を含んでいる。

どうしてこんなことになってしまったのか。日本語 UD 関係者は UD 以前から「単語」単位の係り受けに取り組んできたので、その延長なのだろう。ここでいう「単語」は超短単位といって、短単位をもとにし、さらに用言の語尾を切り出したもの。もちろん語ではない。

上記論文の著者にかぎらず、日本語 UD 関係者の間では、文節は日本語独自の単位であり、世界では通用しないという思い込みが広く共有されているように見える。しかし、トルコ語やフィン語の orthographic word は文節によく似た単位であり、文節はさほど奇異なものではない。むしろ、接辞に係り受けをつける方針の方が異常で、他の言語の例を知らない。形態論の範囲の現象を統語的に扱うのは、単に気持ち悪いだけでなく、UD が想定していないので、品詞・素性の通言語的一貫性も損なわれる。日本語処理を英語や中国語と同じようにしたかったのだろうが、英語も中国語も類型論的に非典型的な言語であり、そんなものを見ていても通言語的な標準は確立できない。

ある日本語 UD 関係者は、統計的機械翻訳に取り組んでいて、文節の不便さを痛感したとのこと。日英や日中のアラインメントを高精度に行うには、両言語を意味的にほぼ同じ粒度で区切り、その単位で構文木を作りたい。それは理解できる。しかし、日英や日中がよくても、日本語・トルコ語や、日本語・フィン語の対応づけに困ることからわかるように、本質的な解決にはなっていない。トルコ語やフィン語を含む UD共通方針そのものの変更を試みるか、あるいは UD から離れて応用依存の構文木の作成に舵を切ってもらうしかない。

また、英語や中国語の場合のように、係り受け解析は形態素解析 (「単語」分割、品詞タグ付け) の結果を直接使うべきもので、間にチャンキングを挟むべきではないという思い込みも見られる。しかし、UD方針に従うなら、形態素解析のあとに、接辞を自立語にくっつける (チャンキング) 必要が生じる。現存する言語としては世界で唯一の異常な書記体系を日本語が採用している以上、どこかで日本語独自の処理を行ってそのゆがみを吸収するのはやむを得ない。他の分かち書きしない言語は孤立語的であり、形態論の役割はないに等しい。*5 他の言語では、文節に近い orthographic word が与えられており、その内部構造を考える必要はあっても、語への分割に悩まされることは基本的にない。日本語の場合は正書法的に語が与えられていないし、それをいきなり認定するのは難しい。辞書と文法を用いて解析する以上、生産性の高い現象があれば、まずは要素に分解するのが得策。それが形態素解析。その後に形態素をチャンキングして語を特定することになる。

語認定問題の先行研究

実のところ、宮岡 (2015) は語認定問題に関してまったく新しい提案をしているわけではない。先行研究が存在する。

まず、日本語 UD の問題は Thoughts on the Universal Dependencies proposal for Japanese (2016) で既に指摘されている。問題はこの記事で言い尽くされている。宮岡 (2015) を読むまで、私が付け加えることは特にないと思っていた。おまけに提案されている解決策も大筋で宮岡 (2015) と同じ。著者の Greg Pringle のことは、Bathrobe というハンドルで以前から知っていた。しかし、こんなにガチの人だとは知らなかった。参考文献に、著者自身の 1977 年の学位論文が挙がっているが、その表題が The Word as a Linguistic Unit in Japanese: Towards a descriptively adequate characterisation of Japanese from a morphological point of view。道理で異様に詳しいわけである。

Pringle (2016) と宮岡 (2015) が指摘するように、明治以降国語学では、接語と接辞という観点からの区別を行わない傾向にあった。例外は毎度おなじみの服部四郎で、『附属語と附属形式』(1950) という論文を出している。採用している用語は異なるが、附属語は接語で、附属形式は接辞。服部は「附属語と附属形式を見分ける原則. I, II, III」として 3 つの原則をたてている。原則といっても、傾向を見ていたりして、明確な基準にはなっていない。より通言語的で一般的な語認定方針については Haslpelmath (2011) が検討しているが、やはり客観的な基準を打ち立てるのは難しそうである。宮岡 (2015) の方針は服部 (1950) とは異なる点があるものの、結論はほぼ同じに見える。

Pringle (2016) の提案も同じ。Pringle は文節をそのまま維持したがっているようなので、以下は妥協案という位置づけが正しいかもしれない。ちょっと埋もれている感があるので引用してみる。

treating:

1) particles following nouns as clitics

2) 'agglutinative morphemes' following verbs as suffixes or word endings

3) the copula as a separate word.

This results in sentence-ending question particles like か ka, conjunction particles like と to, and copula forms like です desu being treated as clitics or separate words, thus satisfying most of the demands of UD proponents. On the other hand, most 'agglutinative morphemes' attaching to verbs would be treated as affixes, avoiding the less fortunate consequences of discarding the bunsetsu.

http://www.cjvlang.com/Spicks/udjapanese.html

宮岡 (2015) の貢献

日本語 UD の問題は、Pringle (2016) のおかげで、UD 主要開発者の間で認知されている。Nivre の意見は大筋で私と一致するようである。

金山さんは、「食べた」は「食べ」「た」に分割すべきで、その根拠は丁寧の「まし」などを間に挟めることと主張しているが、これには賛同できない。宮岡 (2015) の説くとおり、「た」は屈折接尾辞で、他の屈折接尾辞とともに小さな閉じた集合を構成し、paradigm をなしていると見るべきだろう。「ます」は VV 型の (動詞から動詞を作る) 派生接尾辞。「食べました」の場合は、派生をおえた語基 (base) 「食べます」に屈折接尾辞「た」がついたと解釈できる。

同様に、「かわいさ」の「さ」は VN 型派生接尾辞、「子どもっぽい」の「っぽい」は NV 型の派生接尾辞であり、「かわいさ」、「子供っぽい」はいずれも 1 語。「さ」や「っぽい」は生産的であり、派生後の語を辞書にあらかじめ書いておくわけにはいかない。まずは形態素解析で「かわい-さ」と分割するのが常道だが、係り受け解析を行う前にチャンキングしておく必要がある。

方針はこれで良いとしても、宮尾さんも書いているように、日本の言語学 (国語学) は伝統的に接語と接辞という観点からの区分への関心が薄く、参照できる文献が見当たらないというのが問題だった。服部 (1950) はいくつかの例を示すのみだった。

そこで登場するのが宮岡 (2015)。表 2: 接辞と接語の対照表 (187-189頁) は網羅的に見える。コーパスと対照していないので、どの程度漏れがあるのかわからないけど。個別の事例についても 4、5 章で議論されている。これを土台にすれば、日本語 UD の問題の解決に踏み出せそう。

落穂拾い

『「語」とはなにか・再考』ということで、無印版がある。『「語」とはなにか: エスキモー語から日本語をみる』(2002)。無印版を読んだのはかなり昔。ぼんやりとした記憶をたどると、特に焦点を定めないまま日本語とユピック語を対照していただけだったと思う。宮岡 (2015) が本腰を入れて日本語文法に取り組んでいたのは意外だった。

複統合的なユピック語を長年研究していたら、形態論に関心が向くのは自然な流れ。宮岡 (2015) は語の認定から意味を排除することに力を入れている。統語論も形態論との絡みで必要な場合に限って取り上げている。照応には触れない。当然ながら依存文法への言及もない。

文節との違いで大きいのは、格助詞を接語とすること。根拠は、「男だけが」のように接語「だけ」を挿入できることなど。服部 (1950) も同じ判定だが、服部はさらっと述べているだけなので、注意せず読んでいたら見逃しかねない。「印欧語名詞のような屈折変化あるいは名調の格変化(対格,奪格/生格)とも,日本語の屈折とも,まったく別ものであるのは明らかである」(p.286) ということで、印欧語との比較はするが、アルタイ諸語に言及しない。服部 (1950) は、タタール語の /ɣa~qa/《に、へ》、 /nə/《を》、/ta/《の所に、において》(p.481) を附属形式 (接辞) 扱いしている。この点で、現代日本語は非アルタイ的と言えるかもしれない。モンゴル語トルコ語接尾辞は語基の母音調和の影響が及ぶし、いかにも従属的な印象を受ける。満洲語の場合はモンゴル語よりも日本語に近い感じがするが、服部原則を適用すると接辞と判定できそう。

屈折変化する前接語 (enclitic) が通言語的にめずらしく、日本語の特徴のひとつといえるという指摘も、いままで意識したことがなかった。

接語と接辞を区分して、接辞を係り受けの単位から消していくとする。そうすると品詞と素性の大改造が必要となる。UD印欧語族的な屈折の扱いに引きずられているのだと思うが、屈折接辞には品詞が与えられず、素性で表現されている。日本語処理に慣れていると違和感がある。ともかく、いまの日本語 UD が事実上無視している universal features を使いまくらないといけない。

宮岡 (2015) の提案のうち、UD と衝突しそうなのが、4.6.2 複合法。「語幹間 (+) のところに“助調”その他いかなる語も挿入できない固い結合の複合(1語) にかぎって用いている。」(p.245) とのことだが、判断が揺れそうだし、なんだかんだ言って orthographic words の影響が強い他の言語の UD プロジェクトとも対立しそう。

Pringle (2016) は、意味論をもとに文節を否定する Butler et al. の議論をバッサバッサとなぎ倒している。これを見て思ったのだが、トルコ語の inflectional group (IG) は本当に必要だろうか? IG の必要性を示すとされる例文:

mavi araba-da-ki-ler uyu-yor-lar

青い 車-に-いるの-たち 寝て-いる-[人称接辞]

この例文では、青い (mavi) のは車 (araba) であって車にいる人たち (-ki-ler) ではない。それを依存構造で明示するために araba-da と -ki-ler に分割し、mavi を araba-da に係らせる。しかし、そもそも -ki は語の外から修飾できるのだろうか? 係ってくる語が必ず araba を修飾するのなら、araba-da-ki-ler をそのまま持っておいても問題なさそう。なるべく意味が透過的な表現を作りたいという気持ちはわからないでもない。形態統語法自体が自立性を持っていて、思考を言語で表現する際には、その様式に従って型どっていくと考えると、言語の形態統語的表現と意味表現にある程度ずれが生じるのはやむを得ないように思う。宮岡 (2015) の執拗な「カタチ」の議論もそういう主張だと理解している。

*1Unicode と似ている。Unicode のある世界はなかった世界よりも確かに便利になった。とはいえ、Unicode を使うと、各文字が抱える難しい問題が消えてなくなるわけではなく、どこかの段階で処理しないといけないことには変わらない。それどころか、各言語・文字特有の事情を一箇所に集めることで難易度があがる。

*2教師なし文法獲得に関しても、提案モデルをなるべく多くの言語に適用して性能を測りたいという需要はある。

*3:日本語処理がガラパゴス状態なのは、うちの研究室の責任が大きいという指摘をとある日本語 UD 関係者から受けたことがある。私も問題意識は共有している。

*4トルコ語係り受けの単位と inflectional group については 2011 年にこの雑記で取り上げたことがある

*5チベット語は膠着的だが、現在のところ UD に入っていない。

2015-10-23

アノテーション一致度

アノテーション一致度 (inter-annotator agreement) を測りたいけど、κ が使えない場合どうするか。想定しているタスクは以下の通り。テキストからいくつか chunk を抽出し、それぞれにラベルを付与する。chunk の大きさはバラバラだし、テキストの一部しか被覆しない。

てっきり FAQ になっているかと思ったが見当たらない。少し調べた結果、以下の手順を採用した。

  1. アノテーション結果を集約したデータを 1 セット用意
  2. 一致度を測りたいサンプルを対象に、1 とは独立にアノテート
  3. 集約データを普通の正解、独立にアノテートした結果をシステム出力扱いして、再現率、適合率、F 値等の通常の評価尺度を使う

タスクの設定によっては Krippendorff’s α も使えるかもしれない。もしより良い方法を知っていたら教えてほしい。

以下、ここに至った経緯をメモ書き。

ざっと調べた中で一番詳しく議論していたのが Grouin et al. (2011)。workshop 論文だけど。

アノテーション一致度の尺度としてすぐに思い浮かぶのは Cohen's κ とその変種。N 個の要素に異なり数 C のラベルのいずれかを付与する場合。Cohen's κ は 2 人のアノテータの一致度の尺度。単にラベルが一致した割合を測るのではなく、偶然一致する確率で補正している。

κ 系の尺度が問題となるのは、固有表現認識のように、テキストの一部にタグ付けする場合。N 個の要素というが、その要素自体が自明ではなくなる。Grouin et al. (2011) は要素を markable と呼んで、いろんな markable を検討している。n <= 6 の n-gram とか。そうすると overlap する n-gram は明らかに独立ではない。独立試行の仮定に反している。

また、データのごく一部にしかタグ付けしない場合、タグ付けされていない (どうでもいい) 部分が与える影響が大きくなりすぎてしまう。

次に考えているのが pooling。複数のアノテータの間で、少なくとも一人がつけたものに対象を限定する。これもやはり重複する markable 同士が独立ではないと思うが、その指摘はない。この方法だと低めの数字が出る。

これも指摘されていなけど、ラベル異なり数が増えてくると偶然一致の確率が 0 に近づいていくはず。その場合、単に一致する割合を測るのと変わらなくなるだろう。

結論として F-measure を使えば良いと Grouin et al. (2011) は主張している。

Grouin et al. (2011) は Alex et al. (2010) を参照している。これも workshop 論文

こちらもタスクは固有表現認識。

For each pair of annotations on the same document, IAA was calculated by scoring one annotator against another using precision (P), recall (R) and F1. An overall IAA was calculated by micro-averaging across all annotated document pairs. We used F1 rather than the Kappa score (Cohen, 1960) to measure IAA as the latter requires comparison with a random baseline, which does not make sense for tasks such as NER.

もう一つ引いている Hripcsak and Rothschild (2005) は 3 ページのジャーナル。

こちらは情報検索。要旨だけ読んでおけばよさそう。結論としては F-measure を使えと。

Information retrieval studies that involve searching the Internet or marking phrases usually lack a well-defined number of negative cases. This prevents the use of traditional interrater reliability metrics like the κ statistic to assess the quality of expert-generated gold standards. Such studies often quantify system performance as precision, recall, and F-measure, or as agreement. It can be shown that the average F-measure among pairs of experts is numerically identical to the average positive specific agreement among experts and that κ approaches these measures as the number of negative cases grows large. Positive specific agreement--or the equivalent F-measure--may be an appropriate way to quantify interrater reliability and therefore to assess the reliability of a gold standard in these studies.

Corbett et al. (2007) な chemical named entities を扱う。

彼らも F1 を使う。アノテータ同士の pairwise で。

Inter-annotator agreement was measured pairwise, using the F score.

κ は使い物にならないと主張。

Given the character-level nature of the annotation task, and that the papers were not tokenised, the task cannot sensibly be cast as a classification problem, and so we have not calculated any kappa scores.

しかし pairwise な比較は、アノテータによって質がばらついているときに微妙っぽい。

Krippendorff (2004) は独自手法提案している。

Krippendorff’s α として Wikipedia に長文記事があるが、本人がかなり手を入れているっぽい。

基本は \alpha = 1 - \frac{D_o}{D_e}。ここで D_o は observed agreement、D_e は chance agreement。複数のラベルからなる場合は \alpha = 1 - \frac{\sum_c D_{oc}}{\sum_c D_{ec}}。ラベルタイプごとに別々に計算した結果を集約する。問題は、D_oD_e の計算方法。詳細は省くが、2 つの線分上の重複区間を考慮するような式になっている。

Krippendorff (2004) の手法には微妙な点がある。文字列 A B C D E に対して、A [ B C D ] E のように BCD ひとかたまりにタグ付けする場合と、A [ B ] [ C D ] E のように B と CD をわけてタグ付けする場合を区別したいことがある。私の理解が正しければ、この区別ができない式になっている。

Krippendorff’s α を NLP で使っていて、なおかつ markable の問題がある例として Wacholder et al. (2014) が見つかった。

談話へのアノテート。fuzziness of unit boundaries が問題となる。以下のように既存尺度の問題を述べたあとで独自のクラスタリング手法提案する。

We show that current metrics for inter-annotator agreement (IAA) such as P/R/F1 and Krippendorff’s α provide inconsistent results for the same text. In addition, IAA metrics do not tell us what parts of a text are easier or harder for human judges to annotate and so do not provide sufficiently specific information for evaluating systems that automatically identify discourse units.

彼らの説明によると、Krippendorff’s α, a variant of the α family of IAA coefficients specifically designed to handle fuzzy boundaries and multiple annotators らしい。

F1 と Krippendorff’s α を文書 (thread) ごとに出して、順位付けしたら全然違う結果がでたという。

ただ、彼らが問題にしているのはむしろ別の点。

They do not pinpoint the location in a document where the extent of variation can be observed.

1 個のスカラーで要約されても役に立たないというが、これは言いがかりに近い。

Stab and Gurevych (2014) も Krippendorff’s α を使っている。

Since there are no predefined markables in our study, annotators have to identify the boundaries of argument components. We evaluate the annotations using Krippendorff’s αU (Krippendorff, 2004). It considers the differences in the markable boundaries of several annotators and thus allows for assessing the reliability of our annotated corpus.

Krippendorff’s αU は低めの数値になる様子。ちなみに Kolhatkar et al. (2013)uα と表記している。

2015-09-20

STRUCTURE と ADMIXTURE の混合分布モデル

久しぶりに NLP タグをつけたが、生物系の混合分布モデルの話。ゲノムを使う系統関係の論文では、PCA と並んで、よくこういう図が出てくる。

参考までに caption も引用。

(A) Representative estimate of population structure for 1,384 individuals from worldwide populations, including 432 individuals from India. The plot represents the highest-likelihood run among ten STRUCTURE runs with K = 7 clusters. Eight of the other nine runs identified a cluster largely corresponding to India, and five of these eight produced plots nearly identical to the one shown.

Figure 2. Population Structure Inferred from Microsatellite and Insertion/Deletion Polymorphisms

縦の列 (column) が各個体。各個体ゲノムの列 (sequence) で表現されている。これが K=7 個の潜在クラスで色分けされている。要は混合分布モデル、というか NLP 業界的にいうとトピックモデル。となると、具体的にどういうモデルなのか気になるところ。しかし、論文を読むと、生物系の人が生物の言葉で語っていて何度かくじけた。今回 ADMIXTURE の論文 (2009) を見たところ、最初から統計の言葉で説明されていて、ようやく糸口がつかめた。NLP 的な説明に翻訳してみる。

まずソフトウェアの確認から。STRUCTURE という検索泣かせな名前のソフトが昔からあった。最近、ADMIXTURE というこれまた嫌がらせのようなソフトが出てきた。新しい論文では ADMIXTURE を使っていることが多い。他に frappe というソフトもあるが、それほど見かけない。まずは新しい方の ADMIXTURE を見て、次に STRUCTURE に移る。

ADMIXTURE の混合分布モデルのグラフィカルモデルは以下の通り。

f:id:murawaki:20150921081447p:image

  • 事前分布が設定されておらず、pLSI 的。
  • 3 重の plate になっている。外側の I が個体のループ。次の J が DNA の列のループ。言語のトピックモデルだとこの 2 つ (I: 文書, J: 文書内の単語)。A は染色体の数。最近の genome-wide SNP の話だと、diploid といって、両親から 1 個ずつ受け継ぐため、A = 2 らしい。
  • \theta個体ごとの混合比。要素数は K。結果の図で色分けされているのはこれ。
  • \varphi が K と J の 2 重ループになっているのも特徴的。言語のトピックモデルだと K ごとにサイズ V の語彙分布を持っている。DNA の場合は列の場所ごとに別の分布を持っているので K x J 個の変数が必要。SNP の場合はベルヌーイ分布。
  • 記号は言語のトピックモデル風に変更している。また、元の説明だとカウントの分布 (多項分布) を考えているが、ここでは列の分布 (categorical 分布) を示している。

Z で周辺化して、W の確率にすると以下の通り。

\begin{eqnarray} p(W | \Theta,\Phi) &=& \prod_i \prod_j \prod_a \sum_k p(z_{i,j,a}=k | \theta_i) p(w_{i,j,a} | z_{i,j,a}=k, \Phi)\\ &=& \prod_i \prod_j \prod_a \sum_k \theta_{i, k} \,\times\, \varphi_{j,k,w_{i,j,a}} \end{eqnarray}

推論は、論文ではまず EM を導入する。しかし EM は遅いからと、別の手法提案する。EM で遅いと言われると、サンプリング脳なのでつらい。

次。STRUCTURE のグラフィカルモデルは、Pritchard et al. (2000) によると以下の通り。

f:id:murawaki:20150921081448p:image

ADMIXTURE のモデルとの違いは、事前分布が追加されていること。\alpha\eta はいずれも Dirichlet 分布のパラメータ。symmetric なパラメータを一つ与えるか、経験ベイズ的にデータから推定するかでモデルに変種がある。ほぼ LDA。

推論。\theta\varphi は共役性を利用して積分消去したいところだが、元論文はそのままにしている。\theta\varphi と z を (実は\alphaも) MCMCサンプリングする。

欠損値は、ADMIXTURE の場合、あらかじめ補完するという。STRUCTURE のような MCMC であれば、補完を sampling に組み込むのは簡単そう。

トピック数 K はあらかじめ指定する。Pritchard et al. (2000) では K を自動推定する怪しげなモデルが説明されている。実際に使われているのだろうか。AIC などを使ってモデル選択をするという手もある。論文でよく見かけるのは、K = 2 ... 5 くらいの結果を並べてお茶を濁すもの。

新しい ADMIXTURE の方がモデルが退化しているのが妙なところ。STRUCTURE はサンプリングの遅さが嫌われて ADMIXTURE への移行が進んでいるみたい。規模感としては、I が千ぐらい、J が数十万。確かに小規模とはいえない。でも、Wikipedia の記事 3M ページに対するトピック推定などと比べると、特別大きいわけでもない。

似た研究を別々に進めるのは不健全。LDA を提案した Blei et al. (NIPS2002) が 2002 年だから、実は STRUCTURE の Pritchard et al. (2000) の方が先行している。NIPS 2002 でも、2003 年の JMLR 版でも、Pritchard et al. (2000) への言及がない。2004 年の Blei の博論では引用されているので、このあたりで生物系の研究に気付いたらしい。というか、Blei の論文リストを眺めていると、2015 年になって Posterior predictive checks to quantify lack-of-fit in admixture models of latent population structure という論文を出しているのに気付いた。

ADMIXTURE の論文は 2009 年に出ているが、トピックモデルへの言及がない。ここ 10 年ぐらいで発展したトピックモデルの手法DNA データにもそのまま使えそう。例えば、階層 Dirichlet 過程を使ってトピック数 K をデータに決めさせるとか、高速化の手法とか。需要はないのだろうか。

2014-04-02

JUMAN メモ

黒橋研究室で開発している日本語形態素解析JUMAN についてのメモ。

以前は研究室のページに置いていたもの。長く放置していて内容的に古くなっていたが、最近になって突然晒された。*1文書に日付を入れていなかったのが敗因。この機会に雑記に移すことにした。古くなっても日付を言い訳に使えるし。

以前は中の人だった。どこを直すかという問題意識があった。今は所属も変わって、しばらくはそういうのはいいかなという気分。かわりに、使っている人向けにぼちぼち書き換えようかと考えている。論文には書きにくい小ネタなども。

タスク: 日本語の形態素解析

形態素解析と言っているのは、以下の3つのタスクの同時処理。

  • 分割 (segmentation)
  • 品詞タグ付け (POS tagging)
  • 見出し語化 (lemmatization)

分割は、テキストを形態素に区切ること。形態素というとおっかないが、単語だと思っておけば良い。品詞は「名詞」や「動詞」など。見出し語化という表現は聞き慣れないが、「走れ」のように活用変化した形を基本形の「走る」に戻すこと。

世の中一般的には、形態素解析は分割 + 品詞タグ付け と説明されることが多いが、見出し語化にも触れた方が良いと思う。ここが語形変化のない中国語の処理と決定的に違うところ。中国語の処理と違って辞書ベースの手法が主流なのも、これが大きい。

「X分割」という表現は混乱している。word segmentation の場合、X は分割後の状態だが、text segmentation や query segmentation だと分割対象。

入出力フォーマット

  • 入力は1行1文
  • 出力は1行1形態素
    • 最後の行は EOS (end of sentence)

子ども こども 子ども 名詞 6 普通名詞 1 * 0 * 0 "カテゴリ:人 代表表記:子供/こども"

は は は 助詞 9 副助詞 2 * 0 * 0 NIL

リンゴ りんご リンゴ 名詞 6 普通名詞 1 * 0 * 0 "カテゴリ:植物:人工物-食べ物 ドメイン:料理・食事 代表表記:林檎/りんご"

が が が 助詞 9 格助詞 1 * 0 * 0 NIL

すきだ すきだ すきだ 形容詞 3 * 0 ナ形容詞 21 基本形 2 "代表表記:好きだ/すきだ"

EOS

形態素解析は非常に局所的な文脈しか見ないので、別に複数文を一度に入れてもあまり問題にならない。構文解析でそれをやると、計算量が爆発するし、結果が気持ち悪いことになる。

英数字記号は全角で入力されることを期待している。UTF-8 化 (後述) にあわせて半角入力でもそれなりに処理するようになった。しかし全角に変換しておくことを勧める。出力時のエスケーピングをちゃんとやっていないので、特に記号がらみで事故が起きやすい。

エンコーディング

長らく EUC-JP だった。外部の人が UTF-8 版を作ってくれた。しばらく放置されていたが、時代の流れに逆らえず正式UTF-8 に移行した。

速度

MeCab とくらべると圧倒的に遅い。しかし中の人には「cat 状態」と認識されている。一般に、形態素解析の結果を受けて何かをしようとすると、後段の処理の方が比較にならないほど遅い。だから JUMAN の速度を改善する動機はとぼしい。

というか MeCab が頑張りすぎである。下手な英語の tokenizer よりもよっぽど速い。気合が違う。

解析結果をルールでゴリゴリ処理するようなアプリケーションを作っている人なら、JUMAN の速度は気にならないはず。でも、KNP で構文解析までやると遅い思う場合は、

juman | knp -tab -assignf

がお勧め。文節まとめあげ + 各種 feature 付与までで打ち切って構文解析をやらない。KNP が吐く feature をうまく使えば、解析結果に対するルールの再発明が減るはず。

内容物

プログラム古色蒼然としてる。C で書いてある。辞書のデータ構造は、パトリシア木を ChaSen から借りてきたり、double array を MeCab から借りてきたり。

連濁対応などでプログラムの更新もたまにあるが、実質的に辞書のみの更新。

文法辞書と形態素辞書は利用者が自由に定義できるとマニュアルではうたっている。しかしデフォルト以外の辞書が配布されている例を知らない。

ChaSenMeCab は配布のレベルで、プログラムと辞書を分離している。それらに対する辞書としては IPADIC, NAIST jdic, UniDicなどがある。

ライセンス

マニュアルには3条項BSDライセンスが書いてある。このライセンスプログラムだけでなく辞書に及んでいるかなどはよく分からない。中の人もあまりちゃんと決めていない。

よく分からない問題はいろいろある。最近 Wikipedia を加工して辞書を作っているんだけど、この辞書のライセンスはどうなるのか。テキストの解析結果には辞書の情報が大量に埋め込まれているけど、解析結果を配布するときどうなのかとか。頼まれて以前調べたけど、法律専門家でも何でもないので私には正解が分からない。詳しい人に教えてほしい。

品詞体系

  • いわゆる益岡・田窪文法
    • 基礎日本語文法』の記述に結構忠実
    • 学校文法 (橋本文法) 系の ipadic の IPA 品詞体系も異なる
      • 相互の変換は困難
    • unidic は unidic で IPA 品詞体系とも違うらしい
      • KyTeaデフォルトモデルは、unidic の品詞の大分類 & 「語尾」(活用語の変化する部分を切り出したもの)

益岡・田窪文法に慣れると IPA 品詞体系には拒否反応が出る。ただ、ナ形容詞と判定詞の区別は微妙。活用変化がほとんど同じなので。

つべこべ言わずに統一してくれよという声はよく聞く。

処理内容

  1. 入力に対して、形態素辞書を引いて出力 (形態素列) の候補を列挙
  2. コストにより最適な候補を選択

候補の列挙

  • 辞書を引く
  • 未知語候補をその場で生成
  • 連濁候補は基本形に戻して辞書を引く
  • 反復型オノマトペはパターンにマッチするものをその場で生成
  • 非標準表記を標準表記に戻して引く

ChaSenMeCab は最初の2つしかやっていない。残りは JUMAN でも比較的新しく入った機能。MeCab だとチューニングしすぎていて入れにくそうな機能。そのうちちゃんと説明するかも。

候補の選択

  • 形態素辞書と連接辞書により、形態素と、形態素同士の連接にコストを付与
  • コスト最小のパスを選択

パラメータ (コスト)

このご時世に人手で設定している。まさに職人芸。単語の生起コストはいい加減でもわりと大丈夫。連接コストは頑張って調整してある。

ChaSen/MeCab はそれぞれ隠れマルコフモデル (HMM)、条件付き確率場 (CRF) により訓練データからコストを学習する。単語の長さがいろいろなので、hidden semi-Markov model や semi-CRF と言ったほうが正確かもしれない。

JUMAN、ChaSenMeCab とも、解候補は同じ構造 (lattice) で表現できる。解探索のアルゴリズムも同じ。コストの決め方に関する考え方が違うだけ。KyTea はまったく異なる。

精度は完全に MeCab に負けている。

ちなみに日本語版 Wikipedia は、長い間、JUMAN は「隠れマルコフモデル」を使っているという誤った説明をしていた。生暖かく見守っていたら、中の人によって修正されてしまった。

人手による連接コストには利点もある。ありえない連接が候補から除外できる。そもそも付属語の連接にはかなりの程度文法的な制約があって、可能な連接は限られている。

一方、MeCab は完全にコーパスから学習するので、あらゆる連接が可能。もちろん変な連接には大きなコストが設定されるので、普段は問題が顕在化しない。しかし、未知語が入ってきたときなどに、どう考えてもありえない解析結果を吐いたりする。MeCab も連接制約のホワイトリストブラックリストを作って入れたらいいのに。

ただ、特に文頭の連接制約はきつすぎて、くだけたテキストの解析がつらい。

同形

  • コストが同じ複数の候補は同形として出力
  • @ から始まる出力行があるもの
    • 出力は単に辞書引きの順番なので、どちらが正しいというわけでもない
    • 方針として、JUMAN は曖昧性の候補を列挙するのみ; 選択は KNP で行う

かぜ かぜ かぜ 名詞 6 普通名詞 1 * 0 * 0 "漢字読み:訓 カテゴリ:抽象物 代表表記:風/かぜ"

@ かぜ かぜ かぜ 名詞 6 普通名詞 1 * 0 * 0 "カテゴリ:抽象物 ドメイン:健康・医学 代表表記:風邪/かぜ"

で で で 助詞 9 格助詞 1 * 0 * 0 NIL

おくれた おくれた おくれる 動詞 2 * 0 母音動詞 1 タ形 10 "可能動詞:送る/おくる 代表表記:送れる/おくれる"

@ おくれた おくれた おくれる 動詞 2 * 0 母音動詞 1 タ形 10 "付属動詞候補(基本) 自他動詞:他:遅らせる/おくらせる 自他動詞:他:遅らす/おくらす 代表表記:遅れる/おくれる"

EOS

  • 同形が出力されるのは分割とコストが同じ場合のみという微妙仕様 (e.g., おさない == 幼い != 押さない) だが、結構使える
  • 同じコストになるのはコストを人手で調整しているから
  • くる:子音動詞ラ行 (繰る) と くる:カ変動詞 (来る) のように品詞が一部違っても同形になる

MeCab は同形の曖昧性を考慮せずにパラメータを推定しているので、どちらとも言えないような場合でも、とにかく一つの解に決めてしまう。N-best にすれば複数の解を出力するが、N をいくつにすれば良いかは事前にはわからない。 そもそも同形の曖昧性解消を N-gram の情報で行うのが適当とも思えないから、JUMAN/KNP の方針は妥当だろう 「おくれた」のような用言の曖昧性解消は、KNP が格フレームを使って行う。修士論文の成果だったと思う。最近の格フレームでどれぐらい正しく曖昧性解消できているかは誰もちゃんと調べていないはず。

辞書の整備方針

  • 形態素数は削減する方向
    • 基本語彙のみを人手で整備し、残りは自動獲得したい
    • 基本語彙には人手で様々な意味情報を付与
  • 新聞記事に出てこない難しい単語や固有名詞などは、IPADIC の方が豊富
    • JUMAN/KNP を用いた日本語固有表現認識の論文でも、精度を上げるために MeCab の解析結果を参照するという変態的な処理をやっている
  • それ以外にも、なぜ登録されているのか不思議な形態素が辞書に残っていたりする

大人が読むテキストには普通出てこないようなひらがな表記も結構登録されている。「かぐ」(家具) とか。おそらく、小学生向けの辞書からの情報抽出を昔やっていたなごり。副作用も結構あって、「茄子」に対する「な子」のような変な混ぜ書きが悪さする。

代表表記

  • 基本語彙に付与されている
  • 表記ゆれをある程度吸収する
    • 風邪, かぜ -> 代表表記:風邪/かぜ
      • 代表表記は単なるキー
      • これが標準的な表記と主張しているわけではない

形態素よりも長いキーフレーズレベルでの表現の揺れの吸収は『キーワード蒸留型クラスタリングによる大規模ウェブ情報の俯瞰』が詳しい (ヒューリスティクスの塊)。解析に使う分には代表表記は便利。ユーザがいる問題設定だと、こんなものをユーザに見せるわけにはいかないので、処理中に、標準的な表記を代表表記といっしょに保持しておかないといけない。

カテゴリ・ドメイン

  • カテゴリは荒っぽい抽象化の単位
  • 付与されたカテゴリの半分ぐらいが「抽象物」
    • 卒論の成果
    • 設計ミスまがいだが、細分化しても取り分がなさそうだから放置してある

カテゴリ・ドメインは言葉の大雑把な分類。この2軸を組み合わせれば、大雑把な分類としては十分ではないかという見通しだったらしい。 他には、シソーラスを使うと権利の問題がややこしいから、独自に作ったとか。

カテゴリは省略解析などで実際に使われている。

かつて、カテゴリ (のサブセット) を自動分類しようとしてひどい目にあった。いまでもトラウマ。そもそも意味的な情報を形態素という単位に与えるところに無理がある。人間の作業者が、直感に基づいて適当に割り当てる分には良いかもしれないが、データに基づいて決めさせようとすると、そのいい加減さに計算機が耐えられない。

その他の意味情報

「可能動詞」ラベルは、可能で使われる可能性があることを示すだけで、文中の個々の形態素が可能動詞の用法で使われているとは主張していない。これに限らず、JUMAN/KNP では、可能性があるために付与されている情報と、解析の結果 (いくつかの可能性の中から選択された結果) 付与された情報があまり整理されないまま混在している。

自他の対応などは、構文レベルの表現のゆれの吸収を目的に付与してある。

読み

辞書に代表的な読みが書いてある。解析時には辞書引きした結果を表示しているだけ。テキスト中での正しい読みを当てる気はない。数字の読み、音・訓の区別、表記に反映されない連濁の区別は間違っている可能性が高い。

だから転写や音声合成には使えない。UniDic はこのあたりもちゃんとやる方針らしい。いまの形態素解析器が使っている手がかりだけで正しく判別できるのか疑問だけど。

形態素の単位

以前辞書を整理した際に、構成的な語を削除しまくったらしい。それでも単位の不統一は残っている。

テキストの分割方法として、これが正しい単位だという基準が設定できない。辞書に載っているということが一種の基準になってしまっている。

「揺れの少ない斉一な単位」をうたう UniDic でも、直感に反して、「寿司屋」と「家具屋」で分割が違うらしい (未確認)。漢語と和語で扱いが違うとのこと。UniDic は踏み込みたくない領域に踏み込んでいる。

可能性に基づく品詞体系

「可能性に基づく品詞体系」という用語は IPADIC で使われているもの。JUMAN のデフォルトの品詞体系はこうは説明されない。しかし実質的に同じことをやっている。

例えば、「今年」は「今年の目標」であれば名詞として振舞っているが、「今年起きた事件」では連用修飾を行っており副詞的。辞書は「今年」に「名詞 - 時相名詞」という品詞を割り振っている。どちらの文の「今年」に対しても、この品詞を割り振っておしまい。IPADic は、その点を明確にしていて「名詞 - 副詞可能」という品詞が割り当ててある。名詞としても振る舞うし、副詞としても振る舞うということ。

文中でどのような振る舞いをしているかを当てに行くのをはなから放棄している。要するにインチキ。英語の品詞タグ付けとは大違い。

誰が名詞用法と副詞用法を区別しているかというと、文節まとめあげや係り受け解析で暗黙的に行っている。

一応区別はしているものの精度が悲惨な例もある。「で」の曖昧性問題。「京都は大学の町で観光地でもあります。」という例文では、「町で」の「で」は判定詞だが、「大学の街で観光した。」だと格助詞。いまの形態素解析器が見ているような局所的な手がかりでは区別しようがない。

動詞の連用名詞化

動詞の連用名詞化は、IPADIC では「可能性に基づく品詞」を採用していないけど、JUMAN では採用している。例えば動詞「遊ぶ」の連用形「遊び」。「外で遊び家に帰る」だと動詞用法だけど、「遊びを楽しむ」だと名詞用法。IPADIC では、動詞と名詞の両方が辞書登録してある。しかし MeCab の解析結果は不安定。「買いに行く」の「買い」をいろんな動詞に入れ替えてみると、名詞と解析されたり、動詞と解析されたり。

JUMAN はいずれの用法でも動詞の「基本連用形」とする。名詞用法のものは KNP が名詞に変換するという運用。この変換はちょっと面倒。名詞にすると活用しない扱いなので、見出し語 (JUMAN 用語では原形) もあわせて「遊ぶ」から「遊び」に変更しないといけないとか。こういう変換処理がプログラム内にベタ書きしてある。

JUMAN 的には KNP の担当になっているが、名詞用法の判定は難しい。上記の「外で遊び家に帰る」なら「遊び家」という複合名詞はありえない。「彼を操り人形にした」なら「操り人形」という複合名詞を採用する解釈が自然。「彼を操って人形にした」という解釈も可能だけど。KNP はどう処理しているかというと、明らかなものはルールで決め、残りはウェブコーパスから作った共起の統計量をもとに判定している。

京大テキストコーパスは KNP 仕様で、名詞と動詞の用法を区別している。MeCab のもととなった CRF モデルの論文の比較実験が、このあたりをどう処理したのか、いまだに把握していない。

その他の雑多な問題

悩ましい問題はいろいろあって、京大テキストコーパスアノテーションガイドで言及されている。形態素関連は3節。

コーパスのアノテーションガイドはいろんな知見がつまっていて面白い。みんなもっと読んだらいいのにと思う。

*1Internet Archive によると2009年1月には移設前の状態だったみたい。

2014-02-06

意味の意味が分からない

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

記号

意味は、対応する記号を置いておけば良いという立場。それ以上の表現を与えない。興味は、記号同士の関係を論理式で与えることと、その真偽値にある。この手の話は、元はといえばたぶん 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 的な解釈では、単語自体は多義で、特定の文脈で特定の語義が採用されると思うのだが、既存の研究はそういうモデル化をせずに、単純なモデルで攻めているっぽい。

おわりに

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