見出し画像

パワーアップしたChatGPTで、日本語のユーザーフィードバックをなめらかな英語に自動翻訳する

先日のOpenAI DevDay、すごかったですね。Twitterでも多くのユーザーがVision APIやAssistants APIなどを使ったサービスをリリースし、とても盛り上がってました。まだご覧になってない方はぜひ↓


今回やったことの背景

現在ジョーシスでは、日本、アメリカ、APACといった世界中の拠点でサービス展開をしており、日本語・英語両方でUIを提供して様々なユーザーに使ってもらっています。PMチームも日本・インド・アメリカと3拠点に位置しており、英語のコミュニケーションでプロダクトに関するディスカッションが日々行われています。

そんな中、日本チームのPMにとって非常に重要な役割の一つが、「日本ユーザーの声を漏れなく組織全体に共有すること」です。多様な拠点でサービスインしているものの、提供するプロダクトは一緒。そのため、ユーザーの声をしっかりと開発に携わるメンバー全員に届け、チーム前提で納得感を持ってプロダクト開発に取り組まなければなりません。

そういった中で重要になるのは、効率的かつ正確に日本語のユーザーフィードバックを英語に翻訳する作業です。

なのですが…

正直、めっちゃ大変です… 普段ただでさえやることが多いのに、この作業にも時間を費やすことになると結構しんどいです。一応、自分は海外留学経験が10年以上で、かつ日本語もちゃんと話せる人間ではあるのですが、やっぱり正確性を意識した翻訳業務は非常に骨の折れる作業なのです。

ということで、翻訳の自動化が非常に大きなポイントになります。

Google翻訳 or DeepL?

そういった状況でよく使われるツールは、2つあります。Google Translate(翻訳)とDeepLです。Googleスプレッドシートでは、Google翻訳は関数としてすぐ使えます。

=GOOGLETRANSLATE(セル, "JA", "EN")

楽ですねー。さすがGoogle。

また、DeepLも無料でAPIトークンが発行でき、App Scriptで翻訳関数を作成できるスクリプトをDeepL公式が用意してくれているので、コピペすればこちらもすぐに使えます。

=DEEPLTRANSLATE(セル, "JA", "EN")

どちらも楽勝ですね。素晴らしいツールが世の中には溢れてます。
この2択では、我々は翻訳精度がより高いと感じるDeepLを使ってきました。

なのですが…

なんか惜しいんです、翻訳内容が。「これってどういう意味???」とインドPMから聞かれることが多々あり、その度に補足・修正する手間がかなりかかっていました。もちろん、たたき台を作ってくれるだけでももちろんありがたいのですが、もっと楽したい。加えて、今はまだユーザー数が少ないので手動修正の手間もそこまでかかりませんが、今後増えてきたときに、少人数でフィードバックループを回せなくなるのは目に見えていました。

ChatGPTを試してみよう

そこで、ChatGPT使ってなんとか精度を上げられないか試してみることにしました。まぁ、正直ChatGPTで翻訳ができるなんて、去年の今頃リリースされた当時から当然わかっていたことです。その時も使ってみたのですが、当時だと「まぁこのクオリティならDeepLでいいか」という結論でした。

ただ、約一年経過した今、GPT側の性能向上(具体的には、トークンサイズの拡大や、ファイルアップロード・マルチモーダル対応による写真添付が可能 / 楽になった)を見てChatGPTを改めて試してみたい気持ちになりました。

ということで本題になります。

最初に考えたこと

ぶっちゃけ一番やりたかったことは、Assistants APIを使ってみることです。Assistants APIというのは2023.11.11現在β版の機能なのですが、言葉通り用途に合わせた高度なアシスタントを作れまっせというものです。

具体的には、下記のことができます(太字が今回使いたかった機能)
・事前にアシスタントの用途をInstructionとして渡せる
・ファイルを添付して、その内容を踏まえた回答をChatGPTがしてくれる

・Function callingができる
・Code Interpreterを走らせることができる

Assistants APIをUI上で試せる画面がこちら。左側の設定項目で、できることが大体伝わると思います。

OpenAIのPlayground

通常の翻訳ツールに比べて、ChatGPTのなによりの強みは、翻訳時にコンテキスト(文脈)を渡せることです。このアシスタントに食わせるファイルを何にするかは結構悩んだのですが、最終的に下記に決めました。

1.  日本語↔英語の翻訳ファイル
2. アプリケーション画面のスクショ数枚

翻訳ファイルについてですが、我々はLocizeという多言語化ツールを使っており、UI上で使われているほぼすべてのテキスト・ラベルの日本語↔英語翻訳がすぐに手に入る状態でした。
また、一定プロダクトの機能をChatGPTに説明してあげたほうがいいかなと思い、500 wordsぐらいの製品紹介もプロンプトに追加することにしました。

『Assitantsに上記をインプットして、App Scriptで呼び出して、翻訳して、出来上がった内容をJIRAにアップロードしたらめっちゃいい感じじゃね?』

という完璧な構図があったのですが、問題が発生しました。

「いや、Assistants API高えよ!しかも、前提の課金体系が不透明だよ!」

ChatGPT PlusはUS$20/月ですが、APIはそれに加えて従量課金で支払いが発生します。じゃあどういった課金体系なのかというのは一応公式ページに書いてますが、その適用条件があまり良くわからかったのです。OpenAIのユーザーコミュニティでも、この部分に関する質問が多く寄せられていました。

ということで、APIを使うのではなく、スモールスタートでいつものChatGPT画面で試してみることにしました。そもそもChatGPTで翻訳精度が向上するのかもまだ分からなかったですからね。これでよかったのかもしれない。

やったこと

材料を揃えます。前述の通り、食わせるファイルは下記の2セットです。

1.  翻訳ファイル(common.jsonという名前)
2. アプリケーション画面のスクショ数枚

また、それに加えて製品説明もしっかりとしました。ChatGPTは英語のほうが回答が良くなるという通説があるので、製品説明も指示も英語で行いました。最終的なプロンプト画面は下記のとおりです(プロンプトはもっと長いですが、省略します)

ChatGPT画面(GPT-4)

こうして出来上がったChatGPTさんは、下記のような感じで自動翻訳してくれます。日本語のフィードバックは、概要・詳細の2項目で1セットです。

自分が手塩にかけて育てた(?)ChatGPTなこともあり、出力内容を見て「いい感じだ…」と満足感が溢れてきました。

ですが、やるからにはちゃんと比較しないと意味がないので、今回作成したChatGPT・DeepL・Google翻訳で、それぞれいくつかいただいたユーザーフィードバックを翻訳してみました。

ChatGPT・DeepL・Google翻訳を比較

合計30個ほどのテストケースで比較を実施しましたが、結論ChatGPTが一番伝わりやすく、正確な翻訳をしてくれるなという感覚を得ました。違いが現れたケースを3つ紹介します。

ケース①

ツールごとの翻訳内容

背景情報
ジョーシスは、主にAPI連携を通じて各種SaaSからアカウント情報を取得します。こういった自動連携ができるアプリを「連携アプリ」と呼びます。

連携画面のイメージ

一方で、SaaS側がAPIを開放していない場合など、自動連携ができないケースも当然あり、そういったアプリ情報も「非連携アプリ」として一元管理できるように、CSVによるデータアップロード機能を提供しています。


さて、こういった「連携」は、一般的には英語で"Integration"と呼びます。非連携アプリは、"non-integratable apps" = 「連携できないアプリ」みたいなニュアンスが伝わるように訳してほしいのですが…

Google翻訳:"non-linked apps"
DeepL: "non-associated apps"
ChatGPT: "non-integrated apps"

という結果になりました。"non-linked"や"non-associated"だと、連携というイメージがわかず、意味が分からない翻訳になってしまいますね。ChatGPTは、"non-integrated"と適切な表現を返してくれました。

また、原文の「消し忘れタスク管理として使いたい」という表現は、「(退職者のアカウントの)消し忘れを管理したい」という意味合いなのですが、この翻訳は明確に明暗が分かれました。

Google翻訳
"use it as a task management that I forgot to erase"
「消すのを忘れたタスク管理として使う」→ 意味不明

DeepL
"use them as a task management tool for erased forgotten tasks"
「消された忘却タスクのタスク管理として使いたい」→ アカウント管理という趣旨が理解できてない

ChatGPT
"keep track of any accounts that may have been forgotten to be deleted."
「消し忘れた可能性があるアカウントを管理する」 → アカウント管理という趣旨が理解できており、表現もGOOD!

ケース②

ケース②

説明文冒頭の「利用者の付け替えを行う際」という表現ですが、各種ツールの翻訳は間違っていないものの、ChatGPTは「デバイスへのユーザー割り当て (assignment)を変更する際」と、一番ワードチョイスが丁寧でした。

Google翻訳:
"When I replaced the user,…"
DeepL:
"When changing the user…"
ChatGPT:
"When changing the assignment of a user to a device…"


また、概要の「もう少し分かりやすいUIにしてほしい」という表現に対して

Google翻訳
I want to make it a little easier to understand
DeepL
I would like the UI to be easier to understand
ChatGPT
I would like the UI to be more intuitive

上2つは、「easier to understand」という言葉通りの表現になっていますが、ChatGPTは「more intuitive(直感的な)」という、ネイティブな表現にしてくれています。個人的にはこっちのほうが好きですね。

また、「例として」を意味する"EX)"も、DeepLやGoogle翻訳はそのまま"EX)"としているものの、ChatGPTは"For example"とわかりやすく書き直してくれているのも好きです("EX)"が伝わらない人もいると思うので)

ケース③

最後です。この例では、固有名詞を正しく訳せているかがポイントでした。

ケース④

ジョーシスは、SaaSやデバイス管理ツールなど、多様なサービスと連携し、データを集約・分析するツールです。そのため、「このツールと連携したい」というフィードバックも非常に多いです。
そういった中で、他社製品の名称も表記ゆれを起こさず正確に訳したいという背景が強く、固有名詞を正しく認識できるかというのがポイントになります。
この例で出てきたツール名は「Skysea」さんと「ランスコープ(Lanscope)」さんでした。Skyseaはすべて正しく訳されておりましたが、ランスコープはDeepLが一度「runscope」に翻訳しており、惜しかったです。
(ちなみにGoogle翻訳はずっとジョーシス / Josysを"Jossis"と呼んでいる笑)

というところで、ここもChatGPTの翻訳が正確でした。

※ DeepLの名誉のためにいうと、DeepLにはGlossaryという用語集を事前登録できる機能が存在します。今回であれば、「ランスコープ = Lanscope」という情報を事前登録していれば、表記ゆれは起こりませんでした。
ただし、登場するサービスの種類が非常に多く、いちいち登録するのは現実的ではないため、やはりChatGPTのほうが使いやすいと感じています。

総評

「評価が細かすぎるやろ!」とツッコミが入るところもあるかもしれません。ただ、言葉は独り歩きするため、「誰が見ても同じ解釈ができる」ことが非常に重要だと思っており、そのためのワードチョイスや表現の精度が少しでも良くなるのであれば、投資する価値があると感じています。
ChatGPTは今回一番いい仕事をしてくれたので、今後も使い続けたいなと思いました。

朝7時出発予定の旅行準備がまだ終わっていない夜中3時半、うまい終わり方が思い浮かばない。

この記事が気に入ったらサポートをしてみませんか?