« May 2008 | Main | July 2008 »

2008.06.04

論文紹介:複数の単一言語コーパスから対訳語を抽出

ACL 2008で既に読めるようになった論文で面白かったやつ

"Learning Bilingual Lexicons from Monolingual Corpora" A. Haghighi, et. al. to appear ACL2008 pdf

タイトルは衝撃的な内容だが、内容も面白い。

従来統計的機械翻訳では、翻訳ペア、フレーズ抽出は対訳コーパス、つまりロゼッタストーンのように同じ内容が複数言語で書かれているようなデータを元にし学習するのが一般的だったが、この方法の欠点はもちろんそのような対訳コーパスが無い言語間ではこの手法が使えないということだった。顕著なのは日本語で、他の主要言語間は国連の公用語なら国連の議事録、EU加盟国ならEUの議事録とかから大量で高精度のコーパスが(しかも安価で)手に入るのだが日本語はそのようなペアがない。これも日本語の統計的機械翻訳の精度がいまいちな理由の一つ。

で、この手法はそのような対訳コーパスの存在を前提にせず、単一言語からなるコーパスが複数言語で与えられていれば(例えば、日本語wikipedia, 英語wikipedia、中国語wikipedia)、それらから自動的に対訳語を抽出する。

問題の定式化としては二部グラフのマッチング問題になり、日本語、英語の対訳後抽出を例として挙げると、日本語の各単語がノードでずらずらと並んでいて、英語の各単語がノードで並んでいて、対訳語抽出はこの二部グラフのマッチングした結果となる(例えば、”犬”と”dog”の間に枝が張られていることが期待される)。

で、そのマッチングの生成モデルは最初にマッチングが全て一様に生成される。このマッチングでは同じ頂点には二つ以上の枝がない、さらに枝が無い頂点があるという仮定をおいている

次にマッチングがあった単語対s_i, t_j (s_iは日本語側の単語、t_jは英語側の単語)は次のように生成される。
最初に隠れ変数z_{i,j} をd次元の平均0, 分散Iの正規分布に従って生成
次にs_iの素性ベクトルをz_{i,j}をW_sで線形変換したものを平均、ψ_sを共分散行列とする正規分布で生成
f(s_i) = N(W_s z_{i,j}, ψ_s)
同様にt_jの素性ベクトルも生成
f(e_i) = N(W_e z_{i,j}, ψ_e)
マッチに含まれない単語に関しては独立に生成される。
f(s_i) = N(0, σ^2 I_S)
f(t_j) = N(0, σ^2 I_T)

もし単語ペアであれば独立に生成されるのではなく隠れ変数を通じて同時に生成され、逆にペアがなければ、独立に生成されマッチングには含まれない(ようにモデル化している)

単語の素性ベクトルf(s_i) は字種feature、3文字以下の全ての部分文字列、と、コンテキストfeature; 周辺にどのような単語が出ているかを利用する。

で訓練データの素性集合の生成確率を最大にするようなパラメータ(Ws, Wt, ψs, ψt)を求める(最尤推定)
これはcanonical correlation analysis (CCA) pdfといわれるものらしい(このへんから追いつけない)。これは翻訳のEMみたく行なわれて、現在のパラメータでの最大のマッチングを求め、またそこからパラメータを求め直すというのを繰り返す

直感的には、隠れ次元が小さく制限されているので、生成されている素性ベクトルをうまく生成するためには、隠れ変数をできるだけ共有するようにWs, Wtは調整されるということかな。(これがCCAらしい)

これで正解辞書と比べてみたら、90%の精度、30%の再現率ぐらい出るそうだ。すごい。(精度は抽出された中で実際にあっていた割合、再現率は辞書中抽出された割合)。こういうデータいくらでもとれる場合は、データはいくらでも増やせるので再現率はあまり重要ではない。

でやはり日本語が試されてなかったから、是非試してほしかったなぁ・・試すか

| | Comments (179) | TrackBack (0)

侮れないbias項

最近改めて知ったこと

線形識別器は入力x, 出力y から定義される素性ベクトルφ(x,y) とモデルパラメータの重みベクトル wの内積
s(x,y) := w φ(x,y)
をスコアとして考えて、これが最大となるような出力yを識別結果とします。このwは訓練データを使って、何か訓練のための基準を定めて(最大エントロピー法だと対数線形モデル作って最尤推定、SVMだとヒンジ損失を最小化するようにとか)、それを最小化 or 最大化するという最適化問題で解くのが一般的です。
大抵
w = \arg \min \sum 各データに関するフィットの損失関数 + C |w|^2

で、線形モデルには一応bias項があって
s(x,y) := wφ(x,y) + b_y
という感じでwとは独立にモデルパラメータb_yがyの個数分付く。でもこれってφ(x,y)をy次元分増やしてそこに1を置いておけば式としては等価だから、あまり本質的ではないよねと思っていたのですが・・実は訓練の時にこうやっちゃうとかなりダメっぽいです。

なぜなら、バイアス項に関する重みは正則化項でのペナルティ(|w|^2)をあたえてはいけない。つまり、バイアス項はペナルティを気にせず思う存分データにフィットさせてあげて、その上で、マージン最大化とかをしないといけないのです。まぁ、言われればその通りで最初はちゃんと理解していたんだけど、いつのまにやら忘れてしまう

ただ、オンライン学習の時はこれが結構面倒で今年のCOLT2008の
"Online Learning of Maximum p-Norm Margin Classifiers with Bias", K. Ishibashi., et. al. [pdf]
で真面目に行なう方法が紹介されています。やはり、バイアス項をちゃんと入れてあげたほうが精度がいいようです。


| | Comments (792) | TrackBack (0)

« May 2008 | Main | July 2008 »