Hatena::Grouprekken

murawaki の雑記

2013-03-02

Automated reconstruction of ancient languages using probabilistic models of sound change

Bouchard-Côté et al. Automated reconstruction of ancient languages using probabilistic models of sound change, PNAS, 2013.

言語系統樹と、系統樹の葉にあたる現代語が持つ語彙の語形を与えたとき、祖語の語形を自動推定する。オーストロネシア語族に対する実験結果を報告。論文の主な貢献は機械学習手法の提案だが、結局言語的にどうなのよという点を中心に整理を試みる。

この手の研究は好物。自分で取り組んではいないが。過去に2度記事を書いている (日本語族印欧語族)。以前紹介した論文も含めて、これ系の話はたいてい計算言語学自然言語処理の分野の人がやっている。今回は珍しくうちの分野の人。*1

内容的にははじめて公開された成果ではない。早いものだと2007年から発表がある一連の研究の集大成らしい。以前から個人的に追いかけていた。

著者は UC Berkeley の NLP グループ。*2このグループはうちの分野で一番戦闘力が高い。特色は、言語的な知見と機械学習手法をうまく組み合わせていること。一連の研究も機械学習的にすごすぎる。こういうモデルは素朴には誰でも思いつくだろうけど、成功しそうにないと予想しがち。計算量が爆発して動かないとか、動いたとしても結果が悲惨だとか、小規模データなら動くのにデータを増やすとあさっての方向に転がっていくとか。いくつもの技術的困難を解消して、こんな大規模なデータでちゃんと動いてちゃんとした結果が出たのは感動もの。

ただし、言語的に新たな知見が得られたかというと微妙。人間が既にやっている作業を自動化したものだから。結果の評価も人間の推定結果との比較による。つまり現状の追認。一方、以前紹介した glottochronology 系の研究は、人間が不得手な作業を計算機にやらせている。人間には年代のような連続値は扱いづらい。だから新しい結果が得られた。今回の話は、2007年版から追いかけていたが、そういう弱点があるから CNS に通すのは難しそうだと思っていた。そう思っていたら、今回の論文では新たに機能負担量の分析が追加されている。一応これで、「この手法には発展性があって、それは人間が苦手な作業を補完するものですよ」と示せたことになるのだろう。*3

論文は激しく読みにくい。そもそも技術的に難しい。要素技術がてんこ盛りで、細かい説明は端折られている。おまけに、説明が本文の Materials and Methods 節と付録 (Supporting Information) にわかれていて追いにくい。この論文で理解するのは諦めて、過去の論文を順になぞる方が良い。*4

ちなみに、WIRED.jp の紹介記事は、あいかわらずの誤訳っぷりである。*5

何を解いているか

手法の中身は当然として、どんな問題を解いたのかすらあまり理解されていないように見える。いつものことだが。解いている問題は2つ。祖語の再構と同源語の復元。後者は前者の発展形。モデルはほとんど同じ。後者はパスして前者をみていく。

計算機へ入力する、つまり自動推定しないデータは大きく2種類。まずはオーストロネシア語族の基礎語彙データベース。各言語について、およそ200の基礎語彙を採取したもの。さらに、同源語を認定してある。例えば、本文の表1にあるように、星を意味する語フィジー語で kalokalo、台湾のパゼッヘ語で mintol、ボルネオのメラナウ語では biten、フィリピンのイナバクノン語では bitu'on。実は kalokalo だけ仲間はずれ。後ろ3つは語源が同じと認定されている。*6 このデータ自体は、glottochronology 系の Gray et al. 2009 の Science 論文が使っているものと同じ。*7

もうひとつ、系統樹も人間が与える。具体的には、Ethnologue系統樹を使う。*8 つまり系統推定はしない。この点で Gray et al. 2009 と異なる。ついでに言うと Bayes 推定でもない。*9

基礎語彙データベース系統樹を合体させると何が起きるか。基礎語彙が採取されている言語は、木の末端、つまり葉にあたる。各葉ノードには約200語がひも付けされる (観測されている)。一方、葉以外の内部ノード (根も含む) には、そうしたひも付けはされていない (隠れている)。そうした隠れ状態を推定する。星の例の場合、言語学者によるオーストロネシア祖語の再構形は *bituqen。計算機にもそんな風に再構してほしい。根だけでなく、中間ノード、例えばオセアニア祖語などの語形も再構する。*10 ただし、再構の対象は同源語を持つ言語だけ。フィジー語の星は kalokalo で、*bituqen とは同源でないが、こうした言語に対して無理に *bituqen 系の語形を推定しない。各同源語グループが系統樹の部分木を持っている。それらを重ねあわると全体の系統樹になる。

ここらへんで日本語の話をしておく。ここまで読めばわかるように、この手法では日本語の系統はわからない。日本語と他の言語を結びつけるような、同源語を認定した基礎語彙データベースもなければ、まともな系統樹もない。日本語内部の諸方言ならどうかというと、こちらも難しい。諸方言の基礎語彙データベースならあるが、まともな系統樹がない。glottochronology 系の研究が出力した系統樹も本土方言の系統が無茶苦茶。ただし、琉球諸方言に限定すれば、面白い結果が出るかもしれない。

ついでにいつもの話を繰り返すと、この研究があれば言語学者を首にできるわけでないことも、ここまで読めばわかるはず。現状では、いろんな言語のテキストをとにかく計算機にぶち込めば祖語がわかります、というような段階からは程遠い。言語学者が散々整理した結果の上に乗っかっている。というか、系統樹が構築されている時点で、当然言語学者は音変化を整理して、祖語の語形も推定しているはず。現在の問題設定はまだまだ微妙。俺たちの戦いはまだ始まったばかり。

話を元に戻す。glottochronology 系の手法は分岐年代を推定するのに対して、祖語再構では年代を考えない。仮にこの手法を発展させて、音変化の集合を年代と関連付けたとして、うまくいくかはわからない。うまくいきそうな気があまりしない。

glottochronology 系の手法との最大の違いは、同源語データの扱い。glottochronology 系だと、語彙を同源か否かをもとに 0/1 に変換する。上の例では、星として *bituqen 系の語形を使うパゼッヘ語、メラナウ語、イナバクノン語には 1、フィジー語には 0 をたてる。各言語は 0/1 を並べた列で表現される。これに対して、今回の祖語再構では、語形をそのまま持っておく。

語形を保持する利点は、使える情報が豊富なままなこと。欠点は、2つの言語の比較に必要な計算量が桁違いに大きくなること。0/1 の列の比較は一瞬でできる。一方、語形同士の比較は、さらに文字に分解して対応付けないといけない。例えば、親言語の語形が taŋis で、子言語の語形が angi の場合、t → φ, a → a, ŋ → ng, i → i, s → φ (φ は空文字) と対応付ける必要がある。言語ペアが共有するすべての語に対してこうした対応付けを行わなければならない。この計算が非常に大変。実装も大変。

比較に必要な計算量の大きさが、系統樹を推定しない理由の一つ。系統樹を推定するには、一般に、いろんな木を作って比較し、良い木を探す。よくある手法では、枝を一つランダムに別の場所に付け替えるという局所的な操作を何千万といった膨大な回数繰り返す。そうやって、少しずつ木を良い形に整えていく。glottochronology 系の手法なら、現実的な時間でこれが実行できる。祖語再構の場合も、こうした操作を設計すること自体はおそらく不可能ではない。でも、計算量が膨大すぎてまともに動かないだろう。

ただし、問題を限定すれば使い道はある。例えば、系統樹の仮説 A, B, C があって、どれがもっともらしいか知りたいという問題なら、現在のモデルがそのまま使える。

モデルの作り方

祖語の語形を再構するにはどうすればよいか。論文の表題にあるように音変化をモデル化する。「音変化に例外なし」とか格好良いことを言いたいところだが、現実のデータには不規則な (モデルの仮定から外れた) 変化が現れる。モデルの仮定から外れた現象としては、例えば、音位転換 (metathesis) がある。日本語の「あたらしい」が「あらた」に由来するとか。他に、オーストロネシア語族でよくあるのは重畳 (reduplication)。*bituqen 系だと、ソロモン諸島のモノ語では bitobito。もっと悲しいのだと、確かに語源は同じだが、別形態素と融合した語形が採取されていたりする。その他、様々な理由で不規則な変化が現れる。だから頑強なモデルが必要。ちょっと不規則な対応が出てきたぐらいでコケていたら話にならない。

モデルとは箱。「ぼくのかんがえた最強の仮説はこれだ!」と箱に入れると、箱は「-47219点です」と点数を返してくれる。良いモデルは真に正しい仮説に対して高い (0に近い) 点数を、間違った仮説に対して低い点数 (大きな負の数) を返すもの。頑強なモデルは、どんなイカれた仮説に対しても何らかの点数を返すもの。

箱への入力は、今回は大きく2つ、隠れ状態パラメータ。それらをどうやって決めるかはひとまず置いておいて、まずはそれらが何なのかを説明する。両者は相互依存関係にある。少々ややこしいので注意が必要。

隠れ状態の反対は観測状態。この場合、現代語の語形が観測状態。既に確定している。これに対して、祖語の語形は隠れ状態。いろんな可能性がある。親言語の語形と子言語の語形の文字単位の対応 (taŋis と angi に対する t → φ とか) も隠れ状態。隠れ状態と観測状態をあわせて単に状態とよぶ。

隠れ状態の候補は膨大な組み合わせ。いま、隠れ状態をえいやと決めたとする。オーストロネシア祖語の星の語形が bituqen だとか、文字単位の対応とか、そういうのを全部とにかく決める。

隠れ状態を決めたら採点したい。箱が返す点数として。パラメータとは採点のための配点。点数をつける対象は親言語の語形と子言語の語形の文字単位の対応。個々の文字単位の対応につけた点数を合計したものが状態の点数になる。状態をちょっといじると点数もちょっと変化する。オーストロネシア祖語の星を bituqen から bituqenwww に変えたら、点数が下がるはず。

親言語の語形と子言語の語形の文字単位の対応とは、すなわち音変化。起きやすそうな変化には高い点数、起きにくそうな変化には低い点数をつけたい。一番ありそうなのは a → a のような不変化。変化する場合、p → ɸ ならそこそこ起きそうだけど、その反対の ɸ → p は起きにくそう。重畳などの不規則変化もこの枠組みで無理矢理処理する。例えば親言語の語形が pito (作例)、子言語の語形が pitopito だとすると、p → p, ... o → o という通常の規則と、o → p, o → i, o → t, o → o という無理矢理な規則を組み合わせる。こうすれば、どんな語形のペアでも採点できる。

隠れ状態とパラメータはそんな感じ。繰り返すと、モデルは隠れ状態とパラメータを入力として受け取り、点数を返す。配点を自由に決められるというとチートっぽいけど、良い点数を返す入力を探すのは大変。パラメータをどういう値にすれば良いかというと、よく起きる変化に高い点数、あまり起きない変化に低い点数を与えればよい。どの変化がよく起きるかを知るには状態を決めないといけない。良い状態を得るには、あるパラメータのもとでモデルが高い点数を返す状態を探さないといけない。つまり、良いパラメータを得るには状態が必要で、良い状態を得るにはパラメータが必要。鶏と卵の関係にある。この問題を解く魔法のような手法は EM とよばれる。昔からある一般的な枠組み。*11

音変化の扱い (導入編)

音変化は素朴には α → β と表せるが、実際には詰めるべき点がいろいろある。一つは音変化の条件。音変化は一般に特定の環境で起きる。慣習的に、音変化が起きる条件を / の後ろに記す。例えば、

b → v / V _ V

は、母音 (V で表す) に挟まれたとき b が v に変化する規則を表す。ここれでは両隣の音しか考慮しない。

この条件設定で困る例としては長距離の同化がある。例えばモンゴル語*12の gilgar → gjalgar において、i → ja は、後続の母音 a によって引き起こされている。しかし、隣合っていないので条件として考慮できない。

条件付き音変化のもう一つの問題は、環境の粒度がまちまちなこと。例えば、

r → ɾ / * _ *

は、環境によらず起きる変化。

s → φ / * _ #

は、語末で s が消失する。

e → φ / ALV _ #

は歯茎音 (s, t, n など) に後続する語末の e が消失する。どの粒度が最適かモデルは知らない。仕方がないのであらゆるパターンを考える。例えば abe という語形 (作例) が ave に変化する場合を考える。b → v という音変化を

b → v / * _ *

b → v / * _ V

b → v / V _ V

...

といった規則に展開し、それらの点数の合計を使う。*13 うまく学習できれば、本当に使える規則にだけ高い点数が配分される。

もう一つ注意すべき点は、ある音変化の規則性は、ある親子の間でのみ成り立つこと。別の親子の間では別の音変化が起きる。だから、規則のスコアも各親子ペアに対して別々に用意しないといけない。この点を明示するために、@ 記法を使うとする。

b → v / V _ V @ ある子言語

子言語を記せば曖昧性が解消できる。親は複数の子を持ちうるが、子から見た親は一人だけだから。

音変化には凡言語的な傾向があることが知られている。人間の口の構造は世界共通だから。例えば、上でも挙げた p → ɸ は起きやすいけど、ɸ → p は起きにくい。とすると、各親子を別々に考えるのではなく、凡言語的に起きやすい音変化が個別の親子でも起きている可能性が高いと考えた方が良さそう。そこで、各音変化について、2種類のスコアを持つことにする。

b → v / V _ V @ ある子言語

b → v / V _ V (GLOBAL)

両者のスコアの和を最終的なスコアとする。

まだ見逃している点があるが、それは次の節で。

音変化の扱い (発展編)

導入編で説明した音変化モデルは、比較言語学の知見をわりと素直にモデル化したもの。しかし、実は現在の論文では使われていない。2007年の論文では使われているけど、2009年版で放棄されている。*14

一番の変更は音変化の条件が無視されるようになったこと。語形のペア abe と ave の場合、単に a → a, b → v, e → e を考える。環境は考慮しない。だから、仮にパラメータを正しく学習できたとしても、モデルは b → v が母音に挟まれたときに起きることを認識できない。環境を考慮しなくなったので、環境の汎化 (母音 V とか歯茎音 ALV とか) も行わなくなった。*15

もう一つの変更は、子言語側の語形の自然さを採点するようにしたこと。語形のペア abe と ave の場合、以下のように分解して、ave に点数をつける。

(a) @ 子言語

(v) @ 子言語

(e) @ 子言語

(# a) @ 子言語

(a v) @ 子言語

(v e) @ 子言語

(e #) @ 子言語

「(a) @ 子言語」は子言語で a という音がどの程度現れやすいかを表す。同様に、「(a v) @ 子言語」は av という音の連鎖がどの程度現れやすいかを表す。

音変化だけ考慮していた場合との違いは、音変化の結果が子言語の音素体系からみて自然かを採点するようになったこと。これを考慮しなければ、「個別の音変化はもっともらしいけど、語形を集めたところ、1言語で母音が20種類使われていた」といった不自然な状態に高い点数を与えかねない。今回の変更で、こうした状態にペナルティを与えられるようになった。言われてみればあたりまえの話だが、あたりまえすぎて比較言語学の音変化の説明では見過ごしがち。しかし、付録の表S1を見れば、実はこれが一番性能に影響を与えていることがわかる。

元に戻る。どうして音変化の条件を無視するように単純化したのか。ぶっちゃけ、条件を考慮していると計算が大変だから。2007年にはロマンス諸語3言語で慎ましく実験していたから何とかなった。2013年にはオーストロネシア語族637言語も使っている。こんな大規模なデータに対して、2007年のモデルではまともに動かないはず。両側の文字で挟み込むような条件付けは、計算モデルとしては珍しい。前の文字だけに依存する、つまり前から後ろに流れていくようなモデルの方が計算モデルとしては一般的で、効率的手法が存在する。どこで効率が求められるかというと、良い点数を返すような隠れ状態を探す処理。実は、同じ著者が2009年に提案した Ancestry Resampling という凝った手法を使っている。*16

今回触れなかった話題

唐突だが、これでおしまい。出てきた結果自体は現状の追認だから、「まあそうですよねえ」としか言いようがない。

ここまでの説明で2009年の論文まで追いついた。残りの話題は大きく2つ。同源語の復元と、今回新たに追加された機能負担量の分析。気が向いたらそのうち書き足すかも。

もともと人間がやっていた作業を計算機に自動化させるとき、しばしば人間からの敵意を感じる。「あれもできてない、これもできてない」とあげつらうのを見かける。しかし、モデルを作っている本人たちも、モデルが完璧だとは微塵も思っていない。一般に、暴力的に単純なモデルから始める。それでうまくいきそうだったら、だんだん複雑なモデルにしてく。取り分が大きいところから、あるいは実装や計算が簡単なところから拡張していく。で、割に合わなくなったところで誰の手を付けなくなり、分野が枯れる。俺たちの冒険はまだ始まったばかり。いや、打ち切りじゃないよ。*17

2007年からの研究の展開は興味深い。最初は比較言語学の議論を素直にモデル化して、後にそれを放棄している。与えるデータ自体は言語学の成果に依存しているが、モデル化に関しては、音声認識分野の至言言語学者を首にするたびにシステムの性能が上がった」に似た話がこんなところでも繰り返されているのかもしれない。別に喧嘩を売るつもりはないけれど。

*1:PNAS での発表もうちの分野では珍しい。基本的に CNS とは縁がなさそうなのに。とはいえ、第3著者の Griffiths は Finding scientific topics で2003年に PNAS に載せている。ノウハウが伝承されているのかなと推測したり。

*2第1著者の所属は University of British Columbia だが、博士をとったあとに異動したから。もとは Berkeley の人。

*3Nature News の記事で Don Ringe という言語学者が the demonstration that there might be something to it after all is interesting と言っている。まさにそういうこと。

*4:手短に紹介していくと以下の通り。EMNLP 2007で Dirichlet 分布を使った素朴な (といっても複雑で、実装がかなり大変そうな) モデルを提案。NIPS 2007で Dirichlet 分布の代わりに特徴量に分解した対数線形モデルを使う。さらに NAACL 2009で改良版を提示。音変化のモデルとしては前の方が自然だったが、大規模データに適用するには提案手法の方が良いのだろう。もう一つ、推論手法の大幅な改良も行なっているが、これは NIPS 2009で生体情報向けに提案したもの。ここまでが protolanguage reconstruction というタスク。同源語の復元 (cognate recovery) はその発展形で、ACL 2010EMNLP 2011で発表があるが、今回はパスする。

*5:within one character of the manual reconstruction とは、自動推定した語形を言語学者が再構した語形と比較したとき、同一か、あるいは1文字の挿入/削除/置換操作だけで同じになるということ。character は「特性」ではなく「文字」の意味。

*6:Nature News の紹介記事は kalokalo も同源と言っているが、これは誤り。

*7:ただし、データが年々増えているみたい。

*8:Ethnologue 以外にも、Gray et al. 2009 が自動推定した木も試している。本文の図1Bによれば、Ethnologue の方が良い結果が出ている。ちなみに、Ethnologue の系統樹は多分木。系統樹自体を推定するときには二分木にするのが普通だが、今回のように系統樹を与える場合は多分木でもよい。

*9:まったく Bayesian でないと言っているわけではない。モデルに L2 正則化を入れているが、これは事前分布として解釈できる。また、複数のサンプルから最終的な祖語の語形を選ぶために使っている手法は、Bayes estimator と解釈できる。推論の部品として、Bayes 推定につきものの MCMC が出てくるが、期待値を求めるため、つまり積分の近似に使っている。パラメータ自体は EM で求めている。

*10:今回の実験設定では観測データは葉のみだが、別に内部ノードの語形をモデルに与えても良い。ラテン語のように文献が豊富な過去の言語なら可能。オーストロネシア語族の場合は無理だろうけど。あと、葉を隠れ状態にするのも可能なはず。現代語に子ノードをぶらさげれば、将来どんな変化が起きそうかシミュレートができる。たぶん、現代語とまったく同じ語形で落ち着くけど。

*11:ただし素朴な EM ではなく、特徴量に分解して対数線形モデルを学習するという点で新しい。同じ Berkeley のグループが2010年に発表した手法。なぜか発表時期が前後している。

*12:自分で例を探せるほどオーストロネシア語族に詳しくないので、モンゴル語で勘弁してもらう。

*13:こういうモデルは Dirichlet-Multinominal では実現できない。階層 Dirichlet 過程でも駄目。階層 Dirichlet 過程だと基底分布は1個だけ。いろんな factor に分解したいから対数線形モデルを採用したのだろう。

*14:正確にいうと、2009年版で音変化の条件を無視するようになったが、凡言語的な音変化を考慮するようになったのは2009年版から。

*15:とすると、階層 Dirichket 過程でモデル化できそうに思える。凡言語的な音変化を基底分布にして。その場合パラメータ積分消去できるはず。しかし、次で見るように、新たな factorization を行なっているからそうはいかない。

*16:この論文は第2著者に Michael I. Jordan が入っている。ヤバいモデルが提案されたときに、だいたい著者に入っている人。Ancestry Resampling は、何となく Type-based MCMC を彷彿とさせる。でも Ancestry Resampling の方が発表は早い。

*17:とは言ってみたものの、このタスクが流行りそうな気がしない。参入障壁が高すぎる。最低限やるべきことを実現するだけで、こんな大掛かりなことになっているのだから。