StatsBeginner: 初学者の統計学習ノート

統計学およびR、Pythonでのプログラミングの勉強の過程をメモっていくノート。たまにMacの話題。

英日翻訳の混合コーパスとJParaCrawlで機械翻訳の品質を比べてみた

※コーパスを「自作」したとは言えないのでタイトルから「自作」を取りました
 
先日、小型Transformerで英→日の機械翻訳をやらせてみた(先日のエントリ)のですが、その際にコーパスは、いくつかの無償配布コーパスを処理して独自に再編成したもの(合計約128万の対訳ペア)を使いました。

  • TED字幕(元データは15万8535件/私は全部使用)
  • 青空文庫等の小説(元データは11万8143件/data augmentationを含めた処理後11万8825件)
  • 京都Wiki(元データは44万3849件/処理後21万8038件)
  • 映画字幕(元は280万1388件/処理後31万3927件)
  • 田中コーパス(元データは14万7918件/私は全部使用)
  • 法令対訳コーパス(元データは26万2449件/処理後18万5607件)
  • JparaCrawl(元データは2574万0835件/私は20万件を使用)

(これを全部合わせると134万2843件で、そこから全体をみて英文400文字、日本語文200文字以内のものに限った結果、128万0621件になった。これは、学習時にミニバッチ内で最長の文に合わせて他の文をパディングする処理をしており、長文が1つでも含まれるとバッチがデカくなりすぎてメモリを圧迫し、そのせいで全体としてバッチサイズを大きくできなくなってしまうため。)


先日の別のエントリで述べたように、JParaCrawlというのがくせ者で、ウェブから収集した2500万もの例文が収録されていて規模はデカいので魅力的なのですが、中身をみると品質にばらつきがかなりあります。質の低い機械翻訳で作られているサイトの対訳を引っ張ってきていたり、そもそも英文と日本文の意味が対応してなかったりもします(全く対応してないものもあれば、最初は対応してて途中から別の話になっているようなものもある)。


だから私は件数は我慢して、上述のように128万件の混合コーパスのうち20万件だけをJParaCrawlにしてるのですが、これを全部、クリーニングなしのJParaCrawlにしたらどうなるのかを試してみました。ただし今の環境だと2500万件で実行するのはつらいので、件数を揃えて、JParaCrawlの対訳コーパスからランダムに128万件を選んだらどうなるのかを試してみました(なのでこれがJparaCrawlの「本気の実力」ではない点に注意)。


以下が、混合コーパスとJParaCrawlの訳の比較ですが、どちらにも誤訳が含まれていて、ジョブズ・トランプ・アインシュタインの例文についてはどっちもどっちですが、その他は混合コーパスのほうがいいと思えます。ポテンシャルから言えば、件数が多いことのメリットはあると思うので、JParaCrawlを根性でクリーニングしてまともな対訳だけを選んで、たとえばJPara400万件とその他100万件みたいな混合コーパスにしたりするのが理想的かもしれません。

Your time is limited, so don’t waste it living someone else’s life.
【混合】時間は限られているので、他人の人生を浪費しないでください。
【JPara】あなたの時間は限られているので、他の誰かの人生を生きることを無駄にしないでください。
(拙訳:君たちの時間は限られている。他人の人生を生きるようなことをしてそれを無駄にするな。/スティーブ・ジョブズ)
 
I have a dream that my four little children will one day live in a nation where they will not be judged by the color of their skin but by the content of their character.
【混合】私は4人の小さな子供たちが、いつか、自分の肌の色ではなく、その性格の特徴によって判断されない国家に住む夢を持っています。
【JPara】私は4人の小さな子供が1日、彼らが彼らの肌の色によって判断されない国に住んでいることを夢見ていますが、彼らのキャラクターの内容によって。
(拙訳:私には夢がある。私の4人の子供たちがいつの日か、肌の色ではなく彼らの人格によって判断される国に暮らせるようになるという夢が。/キング牧師)
 
You are fake news!
【混合】偽のニュースです!
【JPara】あなたは偽のニュースです!
(拙訳:[CNNは]フェイクニュースだ!/トランプ大統領)
 
You may say I'm a dreamer. But I'm not the only one. I hope someday you'll join us. And the world will be as one.
【混合】夢想家だって言うかもしれないけど、私だけじゃない。いつか、ぼくらと合流してくれるといいんだけど。そして世界は、ひとつのものになる。
【JPara】夢の話ですが、私は唯一のものではありません。
(拙訳:夢想家だと君は言うかもしれないけれど、僕は一人じゃない。いつか君も一緒になれれば。そして世界は一つになる。/ジョン・レノン)
 
The madman is not the man who has lost his reason. The madman is the man who has lost everything except his reason.
【混合】狂人は理性を失った人間ではない。狂人は、理性以外はすべてを失った男だ。
【JPara】狂った人は彼の理由を失った男ではありません。
(安西徹雄訳:狂人とは理性を失った人のことではない。狂人とは、理性以外のあらゆる物を失った人のことである。/チェスタトン)
 
The safest general characterization of the European philosophical tradition is that it consists of a series of footnotes to Plato.
【混合】ヨーロッパ哲学伝統の最も安全な一般的な特徴は、それがプラトンへの一連の脚注から構成されていることです。
【JPara】ヨーロッパ哲学の伝統の最も安全な特徴は、プラトへの一連の足ノートのシリーズからなることです。
(拙訳:ヨーロッパ哲学の伝統について間違いなく言えるのは、その全てが、プラトン哲学へのひと続きの注釈に過ぎないということである。/ホワイトヘッド)
 
Violence sometimes may have cleared away obstructions quickly, but it never has proved itself creative.
【混合】暴力は時々すぐに妨害を片付けるかもしれませんが、それは創造的に証明されたことはありません。
【JPara】暴力は時々すぐに閉塞をクリアしたかもしれませんが、それはそれ自体を証明したことはありません。
(拙訳:暴力が、問題を手っ取り早く片付けるのに役立つことはある。しかし、暴力それ自身が創造的であったことは一度もない。/アインシュタイン)


ちなみに下記のブログ記事では、JParaCrawlのデータを「全部」つかって学習させたようで、両側6層のTransformerなので私がやったやつより深いモデルですが、翻訳精度が思ったほど高いとは言えない。推論のサンプルが少ないのでわかりませんが、上記の私が使った「混合コーパス」による翻訳よりも、コーパス規模は20倍(しかもモデルの層の深さも2倍)なのに、精度は似たようなもんです。??になっているところは、コーパスの問題というより、トークナイザの未知語の処理方法の問題のような気がします。
SageMakerでJParaCrawlのコーパスを使って翻訳モデルを作成する

Hello, world!
【混合】へえ、こんにちは、世界。
【JPara全部】⁇ 、世界!
 
It is fine today.
【混合】今日は晴れだ。
【JPara全部】今日は大丈夫です。
 
The average viewership in the Kanto region was gauged over an hour from 3 p.m.
【混合】関東地方における平均的な視野が午後3時より1時間以上発足された。
【JPara全部】九州地方の平均視聴率は ⁇ 3時から1時間にわたって ⁇ されました。
 
We are in touch with Hilaree’s family and supporting search and rescue efforts in every way we can.
【混合】私たちは、ヒレーの家族と連絡を取り合い、できる限り検索と救助活動を支援しています。
【JPara全部】ヒラリーファミリに連絡を取り、あらゆる方法で検索と救 ⁇ 活動をサポートしています。


やっぱり、JParaCrawlはそのまま使うのではなく、かなり気合をいれてクリーニングしたほうが良さそうです。