豪鬼メモ

一瞬千撃

ChatGPT+DeepLで無料で対訳例文コーパスが作れる

前回の記事にて、ChatGPTを使って英語の任意のフレーズを含む例文を集めた。今回はその結果にDeepL翻訳を適用して、英語の重要フレーズ13.5万語に対して各2つずつ対訳例文を付与した27万文の対訳例文コーパスを作った。結果のTSVデータはこちらでダウンロードできる。例文を含む辞書の検索はこちら。本記事では、この対訳例文データを作る方法について説明する。


以下に例を示す。機械が英文を生成して、それを機械が翻訳しているのに、不自然なところが全く無い。

RTP is a protocol used for transmitting audio and video over IP networks.
RTPは、IPネットワーク上で音声や映像を伝送するために使用されるプロトコルです。

The mechanic recommended a check of the oil pressure system to diagnose the issue.
メカニックは、問題の診断のために油圧システムのチェックを勧めました。

The fastness of the internet connection allowed for seamless video conferencing.
インターネット接続の高速化により、シームレスなビデオ会議が可能になりました。

She told me to measure off a cup of flour for the recipe.
彼女は、レシピのために小麦粉を1カップ計量するよう私に言った。

The shortstop made a diving stop, snagged the ball, and threw it to first base for the out.
ショートがダイビングストップしてボールをキャッチし、一塁に投げてアウトにしました。

I was charged an overdraft fee because I spent more money than I had in my account.
口座にある以上のお金を使ったので、当座貸越手数料を請求されました。

The outermost layer of the Earth's atmosphere is called the exosphere.
地球の大気の最も外側の層は外気圏と呼ばれています。

もちろん、例文生成にも翻訳にも誤りは起こりうる。例えば「Tang reading」(音読み、唐音)の例文をChatGPTに生成させると、脈絡のない文を生成してくる。もちろん、その翻訳も脈絡がなくなる。

In her Tang readings, Susan delves deep into the philosophy behind ancient Chinese literature.
スーザンは唐の朗読で、古代中国文学の背後にある哲学を深く掘り下げています。

ChatGPTの大規模訓練コーパスにすら「Tang reading」が含まれないなら、妥当な例文を作るのは難しい。同様に、DeepL翻訳の訓練コーパスに「Tang reading」が含まれないなら、その妥当な翻訳を作るのも難しい。そのような稀なフレーズ以外はうまくいくことがほとんどだが、精度が完璧ではないということは念頭に置くべきだ。

ところで、前回も述べたが、ChatGPT単体でも対訳例文の抽出は可能だ。簡潔な例文を生成させるにはクエリで「in 16 words」などとつけるのがコツだ。

two example usages of "apple pie" in 16 words in English and their translations into Japanese.
English: I love to bake apple pie on weekends.
Japanese: 私は週末にアップルパイを焼くのが大好きです。(Watashi wa shumatsu ni appuru pai wo yaku no ga daisuki desu.)

English: My grandma makes the best apple pie in the world.
Japanese: 私のおばあちゃんは世界で一番美味しいアップルパイを作ります。(Watashi no obaachan wa sekai de ichiban oishii appuru pai wo tsukurimasu.)

まあ正直、内容も翻訳精度もこれで十分だ。別に専用の翻訳システムを持ち出さなくても、全く問題のない翻訳が得られる。ChatGPTが生成した英文はChatGPTの言語モデルにとって馴染み深いものであるため、その翻訳精度が良いのは自然なことだ。

じゃあ、専用の機械翻訳システムであるDeepL翻訳やGoogle翻訳にかけるとどうなるか。まずはDeepL翻訳。

I love to bake apple pie on weekends.
週末にアップルパイを焼くのが好きなんです。

My grandma makes the best apple pie in the world.
私のおばあちゃんが作るアップルパイは世界一おいしいんです。

そしてGoogle翻訳

I love to bake apple pie on weekends.
週末にアップルパイを焼くのが大好きです。

My grandma makes the best apple pie in the world.
私のおばあちゃんは世界一のアップルパイを作ります。

このような平易な英文では、正直どれを使っても差が出ない。強いて言えば、DeepLは他の二つに比べて砕けた文というか意訳気味の文を生成する傾向にはある。例文の場合、むしろ直訳調の方がいい気もするが、まあ所詮は理解の参考にするためだけにあるので、正直どれでもいい。他の例を見ても、少なくともChatGPTが生成した短い英文を翻訳させる限りにおいては、ChatGPT自身に翻訳させてもDeepL翻訳やGoogle翻訳を使っても納得感はほぼ同じだ。

次にコストについて考える。計算を簡単にするために、見出し語10万語の各々に対して英日対訳例文を2組ずつ、ChatGPTに生成させるとしよう。すなわち、「two short example usages of "apple pie" in English and their translation to Japanese」とかいうクエリで、各クエリに対して2文の例文を生成させる。クエリは16単語で、生成される英文は1文あたり平均16単語、その和訳は1文あたり平均35文字と仮定する。ChatGPTはトークン単位で重量課金する。ここでは、英文は1単語あたり平均1.5トークン、和訳は1文字あたり1.5トークンと仮定する。つまり1クエリあたり 16 * 1.5 + 16 * 1.5 * 2 + 35 * 1.5 * 2 = 177トークンくらいの処理になるので、10万クエリで1770万トークンである。GPT-3.5-turboモデルのコストは1000トークンで0.002ドルなので、1770万 / 1000 * 0.002 = 35.4ドルのコストがかかる。初月18ドルのクーポンがあるので、それを差し引くと実質17.4ドルだ。

次に、ChatGPTでは英文だけを生成して、それを別の翻訳システムで翻訳することを考える。英文の例文だけを生成するには、クエリは「two example usages of "apple pie" in 16 words in English」であり、引用符も含めて数えると13単語だ。結果としては英文のみが生成される。つまり1クエリあたり、13 * 1.5 + 16 * 1.5 * 2 = 67.5トークンくらいの処理になるので、10万クエリで675万トークンである。よって、675万 / 1000 * 0.002 = 13.5ドルのコストがかかる。初月18ドルのクーポンの範囲に収まるので、実質無料だ。

DeepL翻訳で20万文の英文を翻訳することを考える。DeepLでは月額3800円のAdvancedプランに入ると、文書翻訳が月20回使えるようになる。1文書には100万文字までの文を収められる。英文の例文は1文あたり平均70文字だとすると、20万文 * 70で1400万文字。1400万 / 100万 = 14回に分けて翻訳することになる。よって、AdvancedプランでOKだ。ちなみにフリートライアルは初月無料なので、初月だけ使えば実質無料だ。DeepLはAPIを使っても翻訳できる。月額630円に加えて1文字あたり0.0025円の従量課金とのこと。630 + 1400万 * 0.0025 = 34230円だ。文書翻訳に比べるとAPIの重量課金のコスパは悪い。

Google翻訳APIを使って翻訳することを考える。こちらも重量課金であり、最初の50万文字は無料で、それ以降は100万文字あたり20ドルという価格設定になっている。全部で1400万文字を処理すると、(1400万 - 50万) / 100万 = 270ドルである。1ドル130円とすると、35100円で、DeepL翻訳のAPIとほぼ同じ価格設定と言える。いずれにせよ、素人が遊びで使うにはちょっと高い。

以上のことを踏まえると、ChatGPTで対訳文を生成するのが最もコスパが良いということがわかる。ただし、初回に限り、ChatGPTの初回クーポンとDeepL翻訳の初月無料を併用することで、20万文の対訳文を無料で作ることができる。せこいようだが、せっかくのキャンペーンなので使わせてもらわない手はない。研究室のお友達5人とタスクを分け合えばタダで100万文いける。

話は飛ぶが、ChatGPTが異様に安くて、しかも高性能かつ多機能なので、業界が震撼するのもうなずける。実際ChatGPTを使ってみると、スループットの安定性がないことを除けば、翻訳にも例文生成にも文章校正にもめっちゃ便利に使える。利益を出そうと考えるならDeepL翻訳やGoogle翻訳の価格設定はむしろ妥当だと思うが、おそらく利益度外視でシェアを取りに来ているChatGPTの攻めの姿勢は凄いの一言。破壊的イノベーションとはこのこと。ユーザ数が多いほど多くの収入やフィードバックを得て品質を上げて独占的な地位を得られるという、かつてMicrosoftGoogleが通った道を行くのか、あるいはライバル達がより大胆な戦術で巻き返すのか。レッドオーシャン化する戦場が見どころだ。

閑話休題。ChatGPTとDeepL翻訳を併用して、英和辞書の重要語見出し語13.5万語の対訳例文27万文を生成した。この13.5万語には複数語からなる連語も含むが、日常生活はもちろん、大学入試やTOEICTOEFL、英検等の受験に必要なレベルの語彙はほぼ全て網羅しているはずだ。「rodent」(げっ歯類)、「mollusk」(軟体動物)、「vagabond」(漂流者)などのちょっと難易度高めの単語も網羅しているし、「class action」(集団訴訟)、「make a complaint」(苦情を言う)、「look on to」(見渡す)などなどの挙げればキリがない連語に関しても出現頻度順に拾っている。生成時に指定した語以外で英文中に現れた語句も数えるなら、カバレッジは13.5万語よりも少し大きく、14万語ほどになる。5000語しか増えないというのはむしろ良いことで、生成された英文が平易な語彙で構成されていることを示している。

結果はこちらに置いておくので、ご自由にお使いいただきたい。機械が生成したデータの著作権が誰に属するのかは未だ議論が続いている話だが、少なくとも私はこのデータに関して著作権を主張しないし、品質の保証もしないし、使用の結果について関知しない。ChatGPTやDeepLも生成データの権利は主張しないようなので、このデータはpublic domainとして扱えるはずだ。

DeepLの実際の翻訳例をいくつか見れば、短くて単純な文の場合、ほとんどの場合で人間並みの翻訳精度になっていることがわかる。これなら、対訳コーパスから例文を集めなくても、例文集を作るのに十分だ。対訳コーパスにはたまに古い機械翻訳の結果や検索用の逐語役の羅列が含まれることがあるので、それが無い最新の自動翻訳の結果の方がむしろ信頼できるとも言える。人間が作った対訳コーパスと機械が作った対訳コーパスはそれぞれノイズの種類が違うので、補完しあう関係にあると言える。よって、田中コーパスWikipedia対訳コーパスと今回の機械の結果を併用するのが合理的だ。頻出語でないロングテールの単語やフレーズのカバレッジを上げようとするならば、人間の翻訳者にやらせることは経済的に難しいので、機械の結果を併用するのが現実的な解だ。

この例文集は、上から順に読んでいくだけでも、かなり勉強になる。ChatGPTの生成する例文は、対象となる見出し語の説明をしてくれるか、それに関連する語彙を含んでいることが多い。例えば、「truancy」(不登校、サボり)の例文とその対訳は以下のものだ。

The school principal called the parents to address their child's truancy.
校長先生は、子どもの不登校に対処するため、両親を呼びました。

She was given detention for her continual truancy from math class.
数学の授業に不登校を続けていたため、居残りをさせられたのです。

「truancy」は学校の話題なので、「school」「principal」「parent」「class」「detention」といった学校の文脈でよく使われる語が出てくるし、「address truancy」(不登校に対処する)とか「continual truancy」(欠席を続けること)という言い回しも脈絡があって良い。短い例文に覚えるべき語彙を詰め込んでおいて、それを暗唱するだけで多数の語彙を効率よく覚えるという趣旨のDUOという参考書があるが、それに似た効果がある。DeepL翻訳の結果も十分実用的で、「detention」を「居残り」と訳出しているあたりは素晴らしい。欲を言えば、「数学の授業に不登校を続けて」ではなく「数学の授業にずる休みを続けて」と訳してほしかったところだが。

以降、DeepL翻訳の使い方を説明する。DeepLの文書翻訳を使うにあたっては、Microsoft WordやLibre Office Writerを使って、docxフォーマットのファイルを作るのが確実だ。テキストファイルやPDFも対応されているが、文字数の制限や処理の容易さを考えるとdocxを使うのが最善だ。私はLinux上でLibre Officeを使って生のテキストファイルを読み込んだ上で、それをWord2007のdocx形式で保存時して、DeepLの文書翻訳機能にアップロードしている。ChatGPTの出力として英文の例文が行区切りのプレーンテキストとして保存されたならば、それをsplitコマンドで100万バイト未満で分割する。1文あたり平均70文字とすると、14285行毎に分割するのが理想ということになるが、ばらつきを考慮して13500行ごとに分割しようか。例えば、chatgpt-deepl-source.txtというファイルにChatGPTの出力が保存されているとしよう。その場合、以下のようなコマンドでファイルを分割すると良い。

$ split -l 13500 -d --additional-suffix=.txt chatgpt-deepl-source.txt X-chatgpt-deepl-source-

そうすると、「X-chatgpt-deepl-source-00.txt」などといったファイルが作られる。それぞれの文字数が100万を超えていないかをwcコマンドで確認すると安心だ。

$ wc -l X-chatgpt-deepl-source-*.txt
   13500   163517   978951 X-chatgpt-deepl-source-00.txt
   13500   163193   978828 X-chatgpt-deepl-source-01.txt
   13500   162920   976314 X-chatgpt-deepl-source-02.txt
...

あとは、出力のそれぞれをWordやWriterで読み込んで、Word97のdocx形式で保存する。それを一つ一つDeepLの文書翻訳にアップロードして、結果のdocx文書を保存していく。保存したdocxからテキストを取り出すには、抽出プログラムを書いてもよいが、実際に開いて中身をコピペするかテキスト形式で保存し直すのが確実だ。どっちみち個々の分割ファイルをアップロードしてから翻訳結果が出るまでに多少の待ち時間があるので、その間にパイプライン的に抽出作業をすればよい。抽出したテキストファイルは、「X-chatgpt-deepl-target-00.txt」などという一貫した名前で保存すること。また、翻訳元の英文テキストファイルの行数と、抽出した和文テキストファイルの行数が一致していることを確認すること。これがずれていると台無しだ。最後に、pasteコマンドなどで元の英文テキストファイルと和文テキストファイルを結合する。以下のようなシェルスクリプトでやると楽だ。

ls X-chatgpt-deepl-source-*.txt | while read file
do
  paste $file ${file/source/target} > ${file/source/pair}
done
cat X-chatgpt-deepl-pair-*.txt > chatgpt-deepl-pair.tsv

そもそもなぜ対訳例文を作り始めたかというと、Kindle用の英和辞書から例文辞書を作るという話からであった。実際のところ、ChatGPTが生成した例文は、簡潔だし、流暢だし、脈絡もあり、かなり読みやすいと私は思う。人間が書いた対訳コーパスの利便性ともタメを張るくらいだ。よって、田中コーパスWikipedia対訳コーパスに準じる優先度でChatGPTの例文を収録し、Kindle用例文辞書を更新した。最新バージョンをぜひお試しいただきたい。

余談だが、AIの進化で既存の職業のいくつかがお役御免になるという話は定番だ。翻訳家の仕事がAIに完全に置き換わるとは思わないが、翻訳業務の効率が機械翻訳の導入によって著しく向上しつつあるのは確かなので、翻訳家という職業を名乗る人間の数が何割かに減るのは覚悟せねばならないだろう。その翻訳システムを作っているようなプログラマ達でさえ、コーディングの自動化の波でいずれ何割かは削減されるだろう。声優やイラストレータや小説家のような感性に触れる領域でさえ、いずれ何割かは機械に食われるはずだ。でも、完全にではない、クッキーカッターな仕事しかできない下層から食われるという話だ。とはいえ、自分がクッキーカッターではないと言い切れる人間がどれだけいるだろうか。この先、どうやって生き残っていけばよいのやら。脱サラして農業とか漁業とか宿泊業とかも考えるが、それらにも既存のプレーヤがいるわけで、新規参入して勝てる見込みは大きくない。まあマジレスするなら、現有資産で金融ポートフォリオを組みつつ現職に励むのがベストプラクティスなんだろうけども。