• [まろぐ]
  • [簡単で正しいHTMLの書き方]
  • [Moses奮闘記]
[まろぐ] [簡単で正しいHTMLの書き方] [Moses奮闘記]

第22回 前進と挫折で始まった2011年 (2011年1月)

前回は、英語のままでいい箇所の対応方法についてのお話をしました。今回は、ようやく解決した課題と難解すぎて挫折してしまった課題に関するお話です。

メモリ不足からの解放

年が明けて、世は2011年に。21世紀になって、もう10年目だなんて、早過ぎる。。なんてことを考えながら、連休ボケの頭を徐々に戻していきます。

さて、何を調べていて閃いたのか、まったく覚えていないのですが、第18回で書いた翻訳モデルのバイナリ化によって、本来やりたかったオンデマンド・ローディングが、ようやく出来るようになりました。デフォルトの設定だと、デコード時に翻訳モデルをすべてメモリに読み込んでしまうため、メモリの消費量がGB単位になってしまうところを、翻訳モデルの必要な部分だけをファイルから読み込むという機能がオンデマンド・ローディングです。それをデフォルトにしろよとツッコミたくなるような機能なのですが、Mosesのマニュアルどおりに設定しても、ずっと機能しなくて、保留にしていたんです。

当時は、Googleでオンデマンド・ローディングについて検索しても、「翻訳モデルをバイナリ化するだけで、あとはMosesが自動判断します」という回答しかなく、困り果てていたのですが、設定ファイルであるmoses.iniの注釈を読むうちに、その回答の頃とは書式が変わっているようだということに気が付きました。確かに、古い書式だと最初からバイナリも想定しているようなことが書かれていて、かつ、moses.iniは古い書式でも認識すると書かれています。

ということは、古い書式に書き換えてあげればうまくいくかもと思って試したら、ようやくオンデマンド・ローディングで動くようになりました。今になって気付いたんですが、当時のMosesのマニュアル(2010/11/15版)には書かれていなかった新しい書式での修正手順が、今のマニュアルには追加されているではありませんかっ!

しかし、そんな愚痴はどうでもよくなるくらい、その効果たるや絶大。翻訳モデルをメモリに読み込まなくなったので、メモリの消費量が1GB強に激減しました。これなら、メモリが2GBのPCでも稼動しますし、4GBのPCなら余裕で処理できます。

しかも、デコードを始めるまでの時間も大幅に短縮され、1センテンスだけデコードしてすぐに結果を見たいときも、気軽に使えるようになりました。デコード結果に変化がないことも確認でき、年初から幸先のよいスタートです。

一方で挫折も

それなりの品質のデコード結果を出せるようになってきたということもあり、徐々に実用化した後の使い方も意識するようになってきていました。実は、2010年末にQA担当者がMosesのデコード結果を評価したのですが、そのままの状態で問題ないものから、ほとんど使い物にならないものまで、センテンスによって品質の差があり、修正に要する作業量を事前に算出しづらいという感想をもらっていました。例えば、デコード結果と共に松竹梅のような格付けがされていれば、「松なら最小限の修正、竹なら通常の修正、梅なら新規に人間翻訳」のような切り分けが可能で、事前に作業量を把握することもできます。

問題は、デコードの時点で、そのような格付けが自動的にできるかどうかです。そこで、Mosesが内部的に使っている情報で、何か使えそうなものがないかを調べ始めました。教科書的存在であるStatistical Machine Translationを開き、Mosesがどうやってデコードしているのか、そのアルゴリズムを勉強し、概要を理解するところまではできました。デコード途中で発生するいくつもの候補訳に対し、それぞれスコアを付け、最もよいスコアがデコード結果として採用されるのですが、筆者の理解ではスコアは絶対評価ではないため、複数のセンテンス同士のスコアを比較しても意味がなさそうでした。

また、スコアは「ある確率値(0から1まで)の対数(-∞から0まで)」だと理解していたのですが、実際のデコード結果では稀にプラスのスコア(確率100%以上?!)が存在し、この時点で筆者の脳みそが融け始めました。。もう少し時間をかけて勉強し、デコード結果の自動格付けを実現したかったのですが、見通しが立たなかったため、この時点で諦めました。

方針転換

また、この頃は、Mosesの処理をするために、いくつものコマンドを手動で実行していたため、実際に案件が発生しても、ミスなく効率よく処理できるような状態ではありませんでした。まさに、実験段階の域に留まっていました。実用化のためには、某I社独自の処理も含め、メニューから番号を選ぶだけで必要な処理を行なえるように、システム化する必要があります。元々、2010年秋の時点での目標は、2011年春にシステム化が完了だったので、品質改善は一旦中断し、以下のような方針を立てました。

  1. 2月(翌月)末までに、プレーン・テキストを対象に社内に対して統計的機械翻訳サービスを開始できるよう、作業フローを確立し、体制を整える。
  2. 1.が終了後、タグ付きテキストを対象に処理を行なうための具体的な手段を検討する。
  3. 2.と並行して、品質改善に関する実験を再開する。

5週間で、要件定義、設計、コーディング、テストを終えなければならず、それなりにタイトなスケジュールです。それまでは、Mosesに対する理解を深めるための研究や実験が中心でしたが、ついに、実用化へ向けて最初の一歩を踏み出しました。

次回は某I社独自のシステム化です。


[注] この回顧録は、かつて勤めていた会社で書いた連載を復元したもので、某I社の現在の状況を反映している訳ではありません。

投稿情報: 19:51 | 個別ページ

|

検索

フォトアルバム

コンテンツ

  • [まろぐ]
  • [簡単で正しいHTMLの書き方]
  • [Moses奮闘記]

出会い編

  • 第1回 Moses? (2010年3月)
  • 第2回 夜明け前の出来事 (2010年4月頃)
  • 第3回 機械翻訳で行くぞ (2010年8月頃)
  • 第4回 異動 (2010年9月頃)

手探り編

  • 第5回 Linuxの壁 (2010年10月)
  • 第6回 最初の疑問 (2010年11月)
  • 第7回 日本語との格闘 (2010年11月)
  • 第8回 BLEUスコア導入 (2010年11月)
  • 第9回 おかしなセンテンスを取り除くと (2010年11月)
  • 第10回 ユーザー辞書を使うと (2010年11月)
  • 第11回 押してダメなら引いてみろ (2010年11月)
  • 第12回 英ママは善か悪か (2010年11月)
  • 第13回 言語モデルは偉大なり (2010年11月)
  • 第14回 ある程度の数は必要 (2010年11月)
  • 第15回 チューニングは必須 (2010年12月)
  • 第16回 最初のブレイクスルー (2010年12月)

独自の工夫編

  • 第17回 ついに100万センテンスへ (2010年12月)
  • 第18回 メモリ不足を解消せよ (2010年12月)
  • 第19回 処理速度を改善せよ (2010年12月)
  • 第20回 品詞情報を活かせるか (2010年12月)
  • 第21回 カンニングは効果あり (2010年12月)
  • 第22回 前進と挫折で始まった2011年 (2011年1月)
  • 第23回 某I社独自のシステム化 (2011年2月頃)
  • 第24回 再び品質改善へ (2011年3月)
  • 第25回 長文対策の発見 (2011年3月)
  • 第26回 都合のいいコーパス (2011年3月)
  • 第27回 パラレル・コーパスの加工 (2011年4月)
  • 第28回 評価結果に潜むヒント (2011年5月)
  • 第29回 現在も続く改良 (2011年6月以降)

著作権

  • © 1995-2021, "Toda, Masalu", All Rights Reserved.
Powered by Typepad
  • Moses奮闘記 •
  • Powered by Typepad
上