GPT-4で変革が起きそうな翻訳業務

共有

3月15日に有料版の「ChatGPT」で「GPT-4」が使えるようになり、さっそく試した。まだ詳細な検証というわけでなく、数日触ってみた段階での初期レポートである。

この方面に疎い人にために両者を簡単に説明しておくと、「GPT」とはAIの本体のようなものだ。「GPT-4」はそのシリーズ4である。そして「ChatGPT」とは、チャット形式でGPTが使えるサービスのことである。

GPT-4のすごさは、翻訳に加え、翻訳以外のテキスト処理もまとめてできるという点だ。これによって翻訳業務は変わるだろう。


目次


A. GPT-4の翻訳の質

まず、翻訳の質という面について見てみたい。

半年ほど前に「MT出力の現状チェック」と題して、DeepLとGoogle翻訳の出力を確認する記事を何本か書いた(第1回第2回第3回第4回)。ここで使ったのと同じ英語原文で、GPT-4に英日翻訳をしてもらった。

細かく対訳では確かめていないが、ざっと見た感じはDeepLやGoogleと遜色なさそうだった。サンプルまでに、第1回の「APIリファレンス」をGPT-4が英日翻訳した結果を次に挙げる(押すと展開)。

APIリファレンスの翻訳結果

JSONサポート

Flaskは、組み込みのjsonモジュールを使用してJSONを処理します。現在のブループリントまたはアプリケーションのJSONエンコーダーとデコーダーを使用してカスタマイズを容易にします。デフォルトでは、いくつかの追加データ型を処理します。

・datetime.datetimeおよびdatetime.dateは、RFC 822形式の文字列にシリアル化されます。これはHTTP日付形式と同じです。
・decimal.Decimalは、文字列にシリアル化されます。
・uuid.UUIDは、文字列にシリアル化されます。
・dataclasses.dataclassは、dataclasses.asdict()に渡されます。
・Markup(または__html__メソッドを持つ任意のオブジェクト)は、__html__メソッドを呼び出して文字列を取得します。
Jinjaの|tojsonフィルターは、Flaskのdumps()関数を使用するように設定されています。フィルターは、出力を自動的に|safeでマークします。

flask.json.jsonify(*args, **kwargs)

データをJSONにシリアル化し、application/json mimetypeのResponseでラップします。

データをシリアル化するためにdumps()を使用しますが、argsおよびkwargsは、json.dumps()への引数ではなく、データとして扱われます。

  1. 単一引数:単一の値として扱われます。
  2. 複数の引数:値のリストとして扱われます。jsonify(1, 2, 3)は、jsonify([1, 2, 3])と同じです。
  3. キーワード引数:値の辞書として扱われます。jsonify(data=data, errors=errors)は、jsonify({“data”: data, “errors”: errors})と同じです。
  4. 引数とキーワード引数の両方を渡すことは許されていません。何が起こるべきか明確でないためです。

from flask import jsonify

@app.route(“/users/me”)
def get_current_user():
return jsonify(
username=g.user.username,
email=g.user.email,
id=g.user.id,
)

これは、次のようなJSONレスポンスを返します。

{
“username”: “admin”,
“email”: “admin@localhost”,
“id”: 42
}

デフォルトの出力は、インデントやセパレーターの後のスペースを省略します。デバッグモードまたはJSONIFY_PRETTYPRINT_REGULARが

<出力の制約でここで訳出は終了>

第一印象でDeepLやGoogle翻訳よりも優れていると感じた点がある。次の「訳抜け」と「原文維持」の2点である。

訳抜け

まだ少ないサンプルなので継続的な検証が必要だが、ニューラル機械翻訳で問題だった「訳抜け」がなさそうに思える

訳抜けがどのようなものか、サンプルを以下に示す。APIリファレンスの結果(第1回)からである。英語原文、DeepLの日本語、さらにGPT-4の日本語である。DeepLの黄色いマーカー部分が訳抜けである(なお「2.」や「3.」は余分な出力である)。

英語

2. Multiple arguments: Treated as a list of values. jsonify(1, 2, 3) is the same as jsonify([1, 2, 3]).

3. Keyword arguments: Treated as a dict of values. jsonify(data=data, errors=errors) is the same as jsonify({"data": data, "errors": errors}).

DeepLの日本語

2. 2. 複数の引数。【抜け】 jsonify(1, 2, 3)はjsonify([1, 2, 3])と同じ意味です。

2. 3. キーワード引数。【抜け】 jsonify(data=data, errors=errors) は jsonify({"data": data, "errors": errors})と同じです。

GPT-4の日本語

2. 複数の引数:値のリストとして扱われます。jsonify(1, 2, 3)は、jsonify([1, 2, 3])と同じです。

3. キーワード引数:値の辞書として扱われます。jsonify(data=data, errors=errors)は、jsonify({"data": data, "errors": errors})と同じです。

たまたま今回訳抜けがなかっただけなのか、GPT自体の特長なのか、現時点で私にはよく分からない。今後の検証が必要である。

原文維持

APIリファレンスのようなドキュメントの場合、原文のまま残しておくべきテキストがある。例えば、ソースコードは原文のまま維持し、日本語にしてはいけない。ニューラル翻訳ではエラーがあったが、GPT-4にはなかった。

DeepLとGoogle翻訳のエラー部分はハイライトで示す。

英語

<script>
    const names = {{ names|tosjon }};
    renderChart(names, {{ axis_data|tojson }});
</script>

DeepLの日本語

<script> タグ内
    const names = {{ names|tosjon }};
    renderChart(names, {{ axis_data|tojson }}) とします。
</script>

Google翻訳の日本語

<スクリプト>
    const  = {{ |tosjon }};
    renderChart(names, {{ axis_data|tojson }});
</script>

GPT-4の日本語

<script>
    const names = {{ names|tosjon }};
    renderChart(names, {{ axis_data|tojson }});
</script>

GPTは生成モデル(GはGenerative)なので、確率的にあり得なさそうな表現(例:「<スクリプト>」のような日本語表現)は出力しないのかもしれない。残念ながら私はAIにそれほど詳しくないので、ニューラルMTとGPTでこういった違いが生じる理由を専門家に説明してもらえると非常にありがたい。


ごく少ないサンプルであるが、翻訳に使った場合、GPTには上記のような強みがあるように感じた。ニューラルMTのときはさまざまな人の貢献で訳抜けが弱みだと判明したが、GPTにはまた別の弱点があるかもしれない。これも検証を待ちたい。

B. 翻訳以外の質

次に「翻訳の質」以外の面も見たい。

GPT-4が翻訳業務に決定的な影響を与えるとしたら、実のところ翻訳の質という面ではないと感じる。翻訳に加え、別のテキスト処理をまとめてできる点だ。これまで“AI翻訳”は、翻訳という1つの次元を扱ってきた。ところが、GPT-4で別の次元の処理もまとめてできるようになった。これにより、翻訳という仕事のやり方が変わるはずだ。

サンプルのタスク

サンプルとしてGPT-4に対し、翻訳タスクと別のタスクをまとめて与えてみる。別のタスクというのは、次の通りである。文体からページデザインまでさまざまだ。

  • ボタン名などのUI要素っぽいところを推測し、原文のまま[ ]で囲う。その後に日本語訳を丸かっこで補足する
  • 連続操作の「>」は「→」に置き換える
  • 指示文は「〜します」などではなく「〜してください」と丁寧な言葉にする
  • 手順の見出しをHTMLの「<h2>」タグで囲む
    • → ウェブページにしたときに見出し表示になる
  • 手順をHTMLの「<ol>」タグと「<li>」タグで囲む
    • → ウェブページにしたときに「1. 〜、2. 〜」のように番号が表示される

ChatGPT経由でGPT-4に与えた指令(プロンプト)は次の通りである。なお、英語原文はGoogle Apps Scriptのものである(取得元)。

下記の【原文】以下に示す英語を日本語に翻訳してください。
ただし、次の条件に従ってください。
・ボタン名やメニュー名などUI要素っぽいところは、原文のまま半角の角かっこ([])で囲む
・このそれぞれの角かっこの直後には、日本語訳を丸かっこで補足する
・「>」は「→」に置き換える
・指示文は「〜してください」など丁寧な言葉で書く
・見出しは、HTMLの<h2>で囲む
・手順は、HTMLの<ol>と<li>で囲む

【原文】:
Create a project from Google Drive
	1. Open Google Drive.
	2. Click New > More > Google Apps Script.

Create a project from Google Docs, Sheets, or Slides
	1. Open a Docs document, a Sheets spreadsheet, or Slides presentation.
	2. Click Extensions > Apps Script.
	3. In the script editor, click Untitled project.
	4. Give your project a name and click Rename.

Create a project from Google Forms
	1. Open a form in Google Forms.
	2. Click More  > Script editor.
	3. In the script editor, click Untitled project.
	4. Give your project a name and click Rename.

タスクの結果

そして出力は次の通りだ。

Google Driveからプロジェクトを作成する

<h2>Google Driveからプロジェクトを作成する</h2>
<ol>
  <li>Google Driveを開いてください。</li>
  <li>[New](新規)→ [More](その他)→ [Google Apps Script](Google Appsスクリプト)をクリックしてください。</li>
</ol>

Google Docs、Sheets、Slidesからプロジェクトを作成する

<h2>Google Docs、Sheets、Slidesからプロジェクトを作成する</h2>
<ol>
  <li>Docsのドキュメント、Sheetsのスプレッドシート、またはSlidesのプレゼンテーションを開いてください。</li>
  <li>[Extensions](拡張機能)→ [Apps Script](Appsスクリプト)をクリックしてください。</li>
  <li>スクリプトエディタで、[Untitled project](無題のプロジェクト)をクリックしてください。</li>
  <li>プロジェクトに名前を付けて、[Rename](名前変更)をクリックしてください。</li>
</ol>

Google Formsからプロジェクトを作成する

<h2>Google Formsからプロジェクトを作成する</h2>
<ol>
  <li>Google Formsでフォームを開いてください。</li>
  <li>[More](その他)→ [Script editor](スクリプトエディタ)をクリックしてください。</li>
  <li>スクリプトエディタで、[Untitled project](無題のプロジェクト)をクリックしてください。</li>
  <li>プロジェクトに名前を付けて、[Rename](名前変更)をクリックしてください。</li>
</ol>

<h2>の前に見出しが重複して生成されてしまっている点を除けば、翻訳タスクはもちろん、それ以外のタスクも完璧にこなしている。衝撃的だ。

特に「UI要素っぽいところ」というあいまいな指示に対応しているところに驚いた。原文ページで確かめてみたが、すべて正解だった。

また、重複を取り除いた上で出力をウェブページにして表示してみた。きちんと意図通りのページデザインになっている。

C. 翻訳業務が変わる

このように、翻訳だけでなく「翻訳+α」がまとめてできることで、業務は変わるだろう。

産業翻訳では、翻訳担当者が翻訳した後、例えばQA担当者がチェックし、エンジニアがファイル処理し、DTP担当者がデザインを整えるといった仕事が見られた。そういった仕事の一部は翻訳プロセスに組み込まれるかもしれない。「プロンプト」の仕方でさまざまな仕事をさせられるからだ。

プロンプトとは

プロンプトとは、GPTのようなAIに対する指令のことである。ChatGPTであれば「〜してください。ただし次の条件に従ってください」といった形になる。このプロンプトの仕方によって、AIの出力は大きく変わる。なお、良い出力を得られようプロンプトを改善する手法は「プロンプトエンジニアリング」と呼ばれる。

このプロンプトは、今後(翻訳者に限らず)知的労働者の重要なスキルになるはずだ。従来、コンピューターに何らかの仕事をさせるには、プログラミングが必要だった。プログラミングはロジックを組んだり、さまざまな約束事を覚えたりしなければならず、習得は簡単ではなかった。

しかしプロンプトであれば、自然言語でコンピューターに仕事をさせられる。これまで、上記サンプルのような「手順は、HTMLの<ol>と<li>で囲む」といった仕事をコンピューターさせる場合、ある程度複雑なプログラムを考えて書かなければならなかった。プロンプトであれば多少あいまいな日本語でもよいのだ。

プロンプトによって、従来はエンジニアが対応していたような処理も翻訳担当者ができるようになるだろう。(例えば、本ページは取り上げなかったが、試しに「常用漢字以外を検出する」というタスクをChatGPTにやらせたら、どうにかできた。)


まだ、数日GPT-4を試しただけだが、大きな変化が起きそうな感触を得た。翻訳タスクとそれ以外のタスクをまとめてこなせるという点は、非常に革新的である。


共有