読者です 読者をやめる 読者になる 読者になる

#20 Large Language Models in Machine Translation

EMNLP NLP.app 論文100本ノック

Thorsten Brants, Ashok C. Popat, Peng Xu, Franz J. Och, Jeffrey Dean, EMNLP-2007

内容は結構シンプル。目的意識としては

  1. How might one build a language model that allows scaling to very large amounts of training data?(どーやってでかいデータで言語モデルを作るか)
  2. How much does translation performance improve as the size of the language model increases?(データサイズによって、翻訳の精度はどの程度改善されるものなのか?)
  3. Is there a point of diminishing returns in performance as a function of language model size?

といったところ。

State-of-the-artであるKneser-Ney Smoothingや、KatzのBackoff、線形補完など様々な統計的言語モデルがあるが((4)式の\rhoのところ)、精度は出るが、計算の方法が複雑なこともあり、並列計算をしようと思うと大変なところが多い。で、でかいデータを使って色々やりたいので、(単純なモデルでいいから)並列計算を使って動かせるものを考えたい。そこでこの論文で出てきているのはStupid Backoff。(5)式にあるようにsmoothingをかけないものすごい単純なモデルになっている。(5)式は正規化してないので、確率ではないことには注意が必要(あとの実験のパープレキシティのところで効いてくる)。(5)式の\alphaはこの実験では0.4で固定してあると書いてあって、どうやって推定してあんねんと思ったんだけど、実験でやって0.4がよかったからそれを使っていて、頑張って推定してもこの\alphaを変えたところで精度もちょっとしか上昇しなかったからfixした、とある(すごく適当な感じがするけど、large dataだからそれでもよい感じになってくるのか。。。)。本当はデータサイズが大きくなるにつれて、weightを減らしていくべきだとは思うんだけどね。

で、Stupid Backoffだとsmoothingしないで単純に頻度を使っているだけなので、コーパスを分割して、単語の頻度を数えてmergeするというMap-Reduceの考え方が使えるのでその付近が紹介してある。これでStupid Backoffのほうはでかいデータを食わせることができて(分散してデータ置いたりするから?)、Kneser-Neyのときの60倍のデータを食わせることができる、と書いてある。

実験結果のまとめは図5になっていて、training dataが小さいときは当然Kneser-Neyのほうが強いんだけど、データを10倍間隔で増やしていくとStupid Backoffとの差が縮まっていって、この実験では追いついてしまっている。

「機械翻訳で評価するんじゃなくって、言語モデルだけで評価すればいいような気がするのに、機械翻訳が入っているのに何か意味はあるのだろうか」というような質問をしたところ

  • Stupid Backoffのほうは確率になっていないので、PPを計算できない
    • まあ、正規化してやればいいんだが。。。
  • 言語モデルはよくなったんだけど、実際のアプリケーションで評価するとどうなの?と聞かれることもあるということで言語モデルを使う機械翻訳のfieldで評価したのではないか

というような感じだったかなと思う。

翻訳モデルの話

(1)式の付近。機械翻訳でベイズを使って、翻訳モデルと言語モデルに分けるという話はよく聞いていたが、今だと(1)式のように翻訳モデルと言語モデルのスコアを入力とした線形結合で色々考えることが多いらしい。元の論文を読まないと。。。