Open11

text-bisonで翻訳を試す

kun432kun432

Twitterで少し話題になっていた、日本語LLMの品質が低いのは使用している学習データセットの品質が低いためではないか、という以下の記事

https://github.com/AUGMXNT/shisa/wiki/A-Review-of-Public-Japanese-Training-Sets#analysis

主題から少しずれるのだけど、この中で以下で紹介されていた、Vertex AIのtext-bison-32kの翻訳品質が良いということだったので少し試してみる。

From our testing, GPT-4 is very strong at polite/normal speech level Japanese and could be used reliably for translation, although its throughput and cost was an issue for us. We did a number of human-validated comparisons between DeepL, Google Translate and text-bison-32k, and gpt-4-0613 (also, with human-validated ChatGPT4 assisted reviews like this one) and we found that text-bison-32k could be run cheaply and quickly enough to rapidly generate translations, and using certain simple algorithms, we could use gpt-4 as a "big gun" to fix potentially problematic translations.

kun432kun432

事前準備

以下を参考に。

https://cloud.google.com/vertex-ai/docs/start/cloud-environment?hl=ja

  1. プロジェクトを作成
  2. Vertex AIダッシュボードを開いて「全ての推奨APIを有効化」する

Colaboratoryで。

GCPの認証。URLが表示されたら、ブラウザで開いて、認証コードをコピー、Colaboratoryに戻って認証コードを貼り付ける

!gcloud config set account <GCPアカウント> --quiet
!gcloud config set project <プロジェクトID> --quiet
!gcloud auth application-default login

ライブラリの追加

!pip install google-cloud-aiplatform

テキスト生成。パラメータはデフォルトで。

from vertexai.language_models import TextGenerationModel
from pprint import pprint

model = TextGenerationModel.from_pretrained("text-bison@002")

text = """
以下の文章を日本語に翻訳してください。

原文: My name is Ned. You are my personal assistant. My favorite movies are Lord of the Rings and Hobbit.
翻訳: 
"""

res = model.predict(
    text,
    #max_output_tokens=128,
    #temperature=0,
    #top_p=1,
    #top_k=5,
)

pprint(res)

MultiCandidateTextGenerationResponse(text=' '
                                          '私の名前はネッドです。あなたは私のパーソナルアシスタントです。私の好きな映画はロード・オブ・ザ・リングとホビットです。',
                                     _prediction_response=Prediction(predictions=[{'citationMetadata': {'citations': []}, 'safetyAttributes': {'blocked': False, 'scores': [0.2, 0.1, 0.3, 0.2, 0.2, 0.1], 'categories': ['Derogatory', 'Health', 'Insult', 'Profanity', 'Sexual', 'Toxic'], 'safetyRatings': [{'probabilityScore': 0.1, 'category': 'Dangerous Content', 'severityScore': 0.1, 'severity': 'NEGLIGIBLE'}, {'severity': 'NEGLIGIBLE', 'category': 'Harassment', 'severityScore': 0.2, 'probabilityScore': 0.3}, {'severity': 'NEGLIGIBLE', 'probabilityScore': 0.2, 'category': 'Hate Speech', 'severityScore': 0.1}, {'category': 'Sexually Explicit', 'probabilityScore': 0.2, 'severity': 'NEGLIGIBLE', 'severityScore': 0.1}]}, 'content': ' 私の名前はネッドです。あなたは私のパーソナルアシスタントです。私の好きな映画はロード・オブ・ザ・リングとホビットです。'}], deployed_model_id='', model_version_id='', model_resource_name='', explanations=None),
                                     is_blocked=False,
                                     errors=(),
                                     safety_attributes={'Derogatory': 0.2,
                                                        'Health': 0.1,
                                                        'Insult': 0.3,
                                                        'Profanity': 0.2,
                                                        'Sexual': 0.2,
                                                        'Toxic': 0.1},
                                     grounding_metadata=GroundingMetadata(citations=[],
                                                                          search_queries=[]),
                                     candidates=[ 私の名前はネッドです。あなたは私のパーソナルアシスタントです。私の好きな映画はロード・オブ・ザ・リングとホビットです。])     

チャットモデルの場合

from vertexai.language_models import ChatModel, InputOutputTextPair
from pprint import pprint


context = "あなたは優秀な英語・日本語の翻訳家です。与えられた文章を日本語に翻訳してください。"

text = "My name is Ned. You are my personal assistant. My favorite movies are Lord of the Rings and Hobbit."

parameters = {
    #"max_output_tokens": 128,
    #"temperature": 0,
    #"top_p": 1,
    #"top_k": 5,
}

model = ChatModel.from_pretrained("chat-bison@002")
chat = model.start_chat(
    context=context,
    examples=[
        InputOutputTextPair(
            input_text="I have a pen.",
            output_text="私はペンを持っています。",
        ),
    ],
)

res = chat.send_message(text, **parameters)

pprint(res)
MultiCandidateTextGenerationResponse(text=' '
                                          '私の名前はネッドです。あなたは私のパーソナルアシスタントです。私の好きな映画はロード・オブ・ザ・リングとホビットです。',
                                     _prediction_response=Prediction(predictions=[{'groundingMetadata': [{}], 'safetyAttributes': [{'scores': [0.2, 0.1, 0.3, 0.2, 0.2, 0.2], 'categories': ['Derogatory', 'Health', 'Insult', 'Profanity', 'Sexual', 'Toxic'], 'safetyRatings': [{'category': 'Dangerous Content', 'severityScore': 0.1, 'severity': 'NEGLIGIBLE', 'probabilityScore': 0.1}, {'severity': 'NEGLIGIBLE', 'probabilityScore': 0.3, 'severityScore': 0.2, 'category': 'Harassment'}, {'severityScore': 0.1, 'category': 'Hate Speech', 'probabilityScore': 0.2, 'severity': 'NEGLIGIBLE'}, {'probabilityScore': 0.2, 'severityScore': 0.2, 'severity': 'NEGLIGIBLE', 'category': 'Sexually Explicit'}], 'blocked': False}], 'candidates': [{'author': '1', 'content': ' 私の名前はネッドです。あなたは私のパーソナルアシスタントです。私の好きな映画はロード・オブ・ザ・リングとホビットです。'}], 'citationMetadata': [{'citations': []}]}], deployed_model_id='', model_version_id='', model_resource_name='', explanations=None),
                                     is_blocked=False,
                                     errors=(),
                                     safety_attributes={'Derogatory': 0.2,
                                                        'Health': 0.1,
                                                        'Insult': 0.3,
                                                        'Profanity': 0.2,
                                                        'Sexual': 0.2,
                                                        'Toxic': 0.2},
                                     grounding_metadata=GroundingMetadata(citations=[],
                                                                          search_queries=[]),
                                     candidates=[ 私の名前はネッドです。あなたは私のパーソナルアシスタントです。私の好きな映画はロード・オブ・ザ・リングとホビットです。])

send_messageだけで送れるのは楽ちんだな。

kun432kun432

料金

https://cloud.google.com/vertex-ai/pricing?hl=ja

Vertex AI の生成生成サポートは、入力 1,000 文字(プロンプト)と出力 1,000 文字(レスポンス)ごとに課金されます。文字数は UTF-8 コードポイントでカウントされ、空白文字はカウントから除外されます。プレビュー段階では、料金が 100% 割引されます。予測リクエストで応答がフィルタリングされた場合、課金対象は入力のみとなります。各請求期間の最後に、1 セント($0.01)未満の小数部分は、1 セントに切り上げられます。

2023/12/11時点だと

  • PaLM 2 Text Bison
    • 最大入力トークン8192、最大出力トークン1024
    • 入力: $0.0010/1000文字あたり
    • 出力: $0.0010/1000文字あたり
  • PaLM 2 Chat Bison
    • 最大入力トークン8192、最大出力トークン1024
    • 入力: $0.0005/1000文字あたり
    • 出力: $0.0005/1000文字あたり

単純に字数で考えればよさそう。32kについて明記がないけど、同じでいいのかな???

https://cloud.google.com/vertex-ai/docs/generative-ai/learn/models?hl=ja

https://cloud.google.com/vertex-ai/docs/generative-ai/learn/model-versioning?hl=ja

https://console.cloud.google.com/vertex-ai/publishers/google/model-garden/text-bison?hl=ja&project=vertex-ai-test-407811

んー、@002が最新でGAってことでいいのかな?いずれにせよ、32kで料金が変わるのかどうなのかがわからない。

とりあえず32kではない普通のほうで試す。

kun432kun432

比較するのにいい感じのデータセットを見つけられなかったのとそこそこ手間がかかりそうなので、一旦定性的な評価をやってみる。

Fandomの海外ドラマ「フレンズ」wikiの「エピソード1」の文章を比較してみる。

https://friends.fandom.com/wiki/The_Pilot

なお、text-bisonのプロンプトは以下。プロンプトで変わってくる部分があるかもしれないけど、とりあえずシンプルなものにした。

以下の文章を日本語に翻訳してください。

原文: <英文>
翻訳: 

「概要」部分の原文

"The Pilot" (also known as "The One Where It All Began", "The One Where Monica Gets A Roommate" and "The First One") is the first episode of Friends. It premiered on September 22, 1994. It was written by Marta Kauffman and David Crane, and was directed by James Burrows.

Google翻訳

「ザ・パイロット」(「すべてが始まったもの」、「モニカがルームメイトを得る場所」、「最初のもの」とも呼ばれる)は、フレンズの最初のエピソードです。1994 年 9 月 22 日に初演されました。脚本はマルタ・カウフマンとデヴィッド・クレーン、監督はジェームズ・バロウズでした。

DeepL

"パイロット版"("The One Where It All Began"、"The One Where Monica Gets A Roommate"、"The First One "としても知られる)は『フレンズ』の第1話。初放送は1994年9月22日。脚本はマルタ・カウフマンとデヴィッド・クレイン、監督はジェームズ・バローズ。

ChatGPT4

「ザ・パイロット」(別名「すべてが始まった回」「モニカがルームメイトを得た回」「最初の回」とも)は、テレビシリーズ「フレンズ」の第1話です。1994年9月22日に初放送されました。脚本はマータ・カウフマンとデイビッド・クレインが手掛け、ジェームズ・バロウズが監督しました。

text-bison@002

「パイロット版」(「すべてが始まった場所」、「モニカがルームメイトを見つける場所」、「最初のエピソード」としても知られています)は、フレンズの最初のエピソードです。1994年9月22日に初公開されました。マルタ・カウフマンとデビッド・クレーンによって書かれ、ジェームズ・バロウズによって監督されました。

所感

  • ここは好みの問題もあるとは思うけど、クォートされているエピソードタイトルを原文ママにしてるのはDeepLだけ。ただし""The Pilot""については翻訳していて、レベル感が揃っていないというのはある。
  • "written by"を「脚本」とできなかったのはtext-bison@002だけ。
  • ChatGPTだけが「テレビシリーズ」ということを付与しているのはおそらく知識を持っている。
  • "the first episode of"を「第1話」としてるのはDeepLとChatGPT。
  • "Friends"を固有名詞としてカッコ書きできているのはDeepLとChatGPT。

「あらすじ」部分の原文

The episode begins with 4 friends; Monica, Joey, Chandler and Phoebe, sitting in their local coffee house Central Perk, discussing Monica's date for the evening. Monica's brother Ross soon arrives at the coffeehouse, looking miserable. It is revealed that his ex-wife, Carol, has moved her things out of their apartment, due to the fact that she is a lesbian and no longer has feelings for Ross. Joey unhelpfully suggests that and desperate Ross take advantage of the fact that he is now single by going to strip joints, and an exasperated Ross cries out, "I don't want to be single, okay? I just want to be married again!" As soon as Ross says this, a woman enters the coffee house wearing a wedding dress, causing Chandler to remark on the coincidence of it, saying: "And I just want a million dollars!" It turns out the woman is Rachel Greene, who was Monica's best friend in high school, and has arrived to ask Monica for help, as she has just left her fiancé at the altar after realizing that she does not love him.

Google翻訳

エピソードは4人の友人から始まります。モニカ、ジョーイ、チャンドラー、フィービーは地元のコーヒーハウスセントラルパークに座って、モニカとの夜のデートについて話し合っています。すぐにモニカの弟ロスが惨めな様子でコーヒーハウスに到着する。彼の元妻キャロルは、彼女がレズビアンであり、もはやロスに対する感情を持っていないという事実のために、彼女の持ち物をアパートから移動させたことが明らかになりました。ジョーイはどうしようもなくそう提案し、絶望的なロスは独身であるという事実を利用して関節を剥がしに行くと言い、激怒したロスは「独身にはなりたくない、分かった?私はもう一度結婚したいだけだ!」と叫んだ。 」ロスがそう言うとすぐに、ウェディングドレスを着た女性がコーヒーハウスに入ってきて、チャンドラーはその偶然の一致について「そして、私はただ100万ドルが欲しいのです!」と言った。その女性はモニカの高校時代の親友レイチェル・グリーンで、婚約者を愛していないことに気づき、祭壇に婚約者を残したばかりのモニカに助けを求めにやって来たことが判明した。

DeepL

このエピソードは、モニカ、ジョーイ、チャンドラー、フィービーの友人4人が、地元の喫茶店セントラル・パークで、モニカの夜のデートについて話し合っているところから始まる。やがて、モニカの兄ロスが惨めな姿でコーヒーハウスにやってくる。彼の元妻キャロルは、レズビアンであり、ロスへの気持ちがなくなったため、自分の荷物をアパートから運び出したことが明らかになる。自暴自棄になったロスは、ストリップ劇場に通って独身であることを利用するようジョーイは無益な提案をする。もう一度結婚したいんだ!" ロスがそう言うと同時に、ウエディングドレスを着た女性が喫茶店に入ってきて、チャンドラーはその偶然を指摘し、こう言った: 「100万ドル欲しいんだ!」。その女性はモニカの高校時代の親友だったレイチェル・グリーンで、婚約者を愛していないことに気づき、祭壇に置き去りにしたばかりのモニカに助けを求めに来たのだった。

ChatGPT4

このエピソードは4人の友達、モニカ、ジョーイ、チャンドラー、フィービーが彼らの地元のコーヒーハウス、セントラルパークで座って、モニカのその夜のデートについて話しているところから始まります。モニカの兄ロスはすぐにコーヒーハウスに到着し、見るからに落ち込んでいます。彼の元妻キャロルがレズビアンであり、もはやロスに対する感情がないため、彼らのアパートから彼女の物を移動させたことが明らかになります。ジョーイは不適切にも、絶望的なロスに対し、今や独身であることを利用してストリップクラブに行くことを提案しますが、ロスはいら立ちを隠せず、「独身になりたいわけじゃないんだ、わかるか?もう一度結婚したいんだ!」と叫びます。ロスがこれを言った途端、ウェディングドレスを着た女性がコーヒーハウスに入ってきて、チャンドラーはその偶然についてコメントし、「俺はただ100万ドル欲しいんだ!」と言います。その女性は実はモニカの高校時代の親友であるレイチェル・グリーンで、彼女は婚約者を祭壇で置き去りにした後、自分が彼を愛していないと気づいてモニカに助けを求めに来たのです。

text-bison@002

このエピソードは、4人の友人、モニカ、ジョーイ、チャンドラー、フィービーが地元のコーヒーハウス「セントラルパーク」に座って、モニカのその夜のデートについて話し合っているところから始まります。モニカの兄ロスはすぐにコーヒーハウスに到着し、悲しそうな様子です。彼の元妻キャロルが、レズビアンであるという事実と、ロスへの気持ちはもうないという理由で、アパートから荷物を運び出したことが明らかになります。ジョーイは役に立たないアドバイスをしますが、絶望的なロスは、今は独身なのだから、ストリップ小屋に行くことでその事実を利用すればいいと提案します。そして、苛立ったロスは「独身になりたくないんだ、わかった?ただ、もう一度結婚したいだけなんだ!」と叫びます。ロスがそう言うとすぐに、ウェディングドレスを着た女性がコーヒーハウスに入ってきて、チャンドラーは「そして、私はただ100万ドルが欲しいだけだ!」と言って、その偶然に言及します。その女性は、高校時代にモニカの親友だったレイチェル・グリーンであることが判明し、婚約者を祭壇に残してきて、彼を愛していないことに気づいたため、モニカに助けを求めてやってきました。

所感

  • Google翻訳は"brother"を「弟」 としている。実際は「兄」が正解。ただこれはテキストだけだと判断できなくてもしょうがない感はある。
  • " looking miserable"を「惨め」としているのはGoogle翻訳とDeepL。ChatGPTは「見つからに落ち込んでいる」text-bison@002は「悲しそう」としていて、好みの問題もあるけど、ChatGPTの訳が良い感じはする。
  • "no longer has feelings for Ross"を「ロスへの気持ちがもうない」としたのはDeepLとtext-bison@002。「感情がない」でも間違ってないけど直訳的に感じる
  • "Joey unhelpfully suggests that and desperate Ross take advantage of ..."についてはChatGPT以外はいろいろ破綻している。
  • その次のロストチャンドラーのセリフで、Google翻訳とDeepLはカッコ書きが揃ってない。

「セリフ」部分の原文

[Rachel is supposed to be cutting up her credit cards]
Everybody – Cut, cut, cut, cut.
Rachel – [cuts a card] You know what? I think we can leave it at that. It was kind of a symbolic gesture...
Monica – Rachel, that was a library card.
[Everybody cheers her on, and she reluctantly cuts a credit card]
Chandler – You know, if you listen closely, you can hear a thousand retailers scream.
Monica – [to Rachel] Welcome to the real world. It sucks. You're gonna love it.

Google翻訳

[レイチェルはクレジットカードを切り刻んでいるはずです]
みんな– カット、カット、カット、カット。
レイチェル– [カードを切る] ご存知ですか?そのままにしておいてもいいと思います。ある意味象徴的なジェスチャーでした...
モニカ– レイチェル、それは図書カードでした。
[皆が彼女を応援するが、彼女はしぶしぶクレジットカードを切る]
チャンドラー– よく耳を澄ますと、何千もの小売業者の叫び声が聞こえます。
モニカ– [レイチェルに] 現実の世界へようこそ。最低だ。きっと気に入っていただけるでしょう。

DeepL

[レイチェルは クレジットカードを切っている]
みんな - 切って、切って、切って。
レイチェル - [カードを切る] あのね?あのね。象徴的なジェスチャーのようなものだったから...。
モニカ 「レイチェル、それ図書カードよ。
[みんなが彼女を応援して、彼女はしぶしぶクレジットカードを切る。]
チャンドラー - あのね、耳を澄ませば、千の小売店の悲鳴が聞こえるよ。
モニカ - [レイチェルに] 現実の世界へようこそ。最悪よ。きっと気に入るわよ。

ChatGPT4

[レイチェルはクレジットカードを切り刻むことになっている]
みんな – 切って、切って、切って、切って。
レイチェル – [カードを切りながら] ねえ、これでいいんじゃない?象徴的なジェスチャーみたいなものだし...
モニカ – レイチェル、それ図書館のカードよ。
[みんなが彼女を励ます中、彼女は渋々クレジットカードを切る]
チャンドラー – ねえ、よく耳を澄ませば、千の小売業者が叫んでいるのが聞こえるよ。
モニカ – [レイチェルに向かって] 本当の世界へようこそ。それは最悪だけど、きっと気に入るわよ。

text-bison@002

[レイチェルはクレジットカードを切ることになっている]
全員 - 切れ、切れ、切れ、切れ。
レイチェル - [カードを切る] わかった?これでいいと思う。象徴的なジェスチャーだったわ...
モニカ - レイチェル、それは図書館のカードよ。
[全員が彼女を応援し、彼女はしぶしぶクレジットカードを切る]
チャンドラー - よく聞くと、何千人もの小売業者が悲鳴を上げているのが聞こえる。
モニカ - [レイチェルに] 現実世界へようこそ。最悪よ。でも好きになるわ。

まあこれは流石に難しすぎたかもw

kun432kun432

ちょろっとしか試していないし、評価は定量的に行うべきだと思うので、これだけじゃわからん、というところではあるのだけど、text-bisonの個人的な所感としては、悪くないけど、じゃあめちゃめちゃ良いか?と言われるとそこまでではない感じ。速度もめちゃめちゃ速いってわけでもないし。

ただ、Google翻訳使うぐらいならこっち使うかなというのはある。そんなに高くないし。

あと、DeepLとChatGPT4はまあ安定してる感はある。ある程度の品質を担保するならこっちかなという気はするけど、自分の過去の経験則も含めて、以下

  • DeepLで過去にも結構な翻訳やってるけど、以下が気になる。
    • パラグラフの途中でざっくり文章を省略して翻訳に含まれないことがそこそこある。
    • クォートが破綻しやすかったり、クォートのレベル感(「」と""とか)が揃わなかったりする。それ以外でも記号が絡むとなんかおかしくなる事が多い気がする。
    • 「いい感じ」「読みやすい」「80点」っていう雰囲気の翻訳はやってくれるんだけど・・・って印象。
    • API試してないけどそこそこするよね。1000文字で2.5円。大量データだと結構な金額になりそう。
    • コピペなら定額ではあるんだけども面倒。
  • ChatGPTもコピペでちまちまはやってられないし制限もあるし、となると、大量の翻訳回すには実際にはGPT-4 API使うことになって、そうなるとスピードとコストがネック。
    • プロンプト次第かもしれないけど、直訳っぽさが残る場合がある。ここにDeepLとの差を感じてて、DeepLを捨てれない。

という感じで、やや品質にも気になるところはあるし、大量に回すとなるとコストはネックになってくる。

いずれにせよ品質については定量評価しないとわからないのだけど、コストの観点で言うならば、text-bisonはありかもしれないなーというところ。

kun432kun432

text-bisonで少しプロンプトをいじってみた。

プロンプトは以下を流用

https://github.com/f/awesome-chatgpt-prompts#act-as-an-english-translator-and-improver

I want you to act as an English/Japanese translator, spelling corrector and improver.
I will speak to you in any language and you will detect the language, translate it and answer in the corrected and improved version of my text, in Japanese.
I want you to replace my simplified A0-level words and sentences with more beautiful and elegant, upper level Japanese words and sentences.
Keep the meaning same, but make them more literary.
I want you to only reply the correction, the improvements and nothing else, do not write explanations.

原文: <原文>
翻訳: 

「パイロット版」(「すべてが始まった場所」、「モニカがルームメイトを得た場所」、「最初の1つ」としても知られている)は、フレンズの最初のエピソードです。 1994年9月22日に初公開されました。 マルタ・カウフマンとデビッド・クレーンによって書かれ、ジェームズ・バロウズによって監督されました。

エピソードは、4人の友人、モニカ、ジョーイ、チャンドラー、フィービーが地元のコーヒーハウス「セントラル・パーク」に座って、モニカのその夜のデートについて話し合っているところから始まります。やがてモニカの兄ロスが、悲しそうな様子でコーヒーハウスに到着します。彼の元妻キャロルが、レズビアンであることを理由に、ロスへの気持ちがなくなり、アパートから出て行ったことが明らかになります。ジョーイは、途方に暮れたロスに、独身になったことを利用してストリップ小屋に行くことを提案しますが、ロスは「独身になりたくないんだ、もう一度結婚したいだけなんだ!」と叫びます。ロスがそう言うとすぐに、ウェディングドレスを着た女性がコーヒーハウスに入ってきて、チャンドラーは「俺は100万ドルが欲しい!」と言って、その偶然に言及します。その女性は、モニカの高校時代の親友レイチェル・グリーンであることが判明し、婚約者を祭壇に残して駆け落ちしてきたレイチェルは、彼を愛していないことに気づき、モニカに助けを求めてやってきます。

レイチェルはクレジットカードを切ることになっている
一同:切っちゃえ、切っちゃえ、切っちゃえ、切っちゃえ
レイチェル:(カードを切る)ねえ、もうこれでいいんじゃない?象徴的なジェスチャーみたいなものだったし...
モニカ:レイチェル、それは図書館のカードよ
(一同は彼女を応援し、彼女はしぶしぶクレジットカードを切る)
チャンドラー:よく耳を澄ませば、小売業者1000人が悲鳴を上げているのが聞こえるよ
モニカ:(レイチェルに)現実世界へようこそ。最悪よ。でも好きになるわ

短い文章だと改善度合いが見えないけど(相変わらず「脚本」とは翻訳してくれないし)、ただ、ある程度のボリュームがあると、かなり改善した感がある。

kun432kun432

コスト比較をもう少し詰めてみる。計算間違ってたらごめんなさい。

‐ 英→日/日→英で比較

  • データは今回試したサンプルの中の最も長い文章を使った。
  • 1ドル=145円計算。

英→日

以下の場合。

入力

I want you to act as an English/Japanese translator, spelling corrector and improver.
I will speak to you in any language and you will detect the language, translate it and answer in the corrected and improved version of my text, in Japanese.
I want you to replace my simplified A0-level words and sentences with more beautiful and elegant, upper level Japanese words and sentences.
Keep the meaning same, but make them more literary.
I want you to only reply the correction, the improvements and nothing else, do not write explanations.

原文: The episode begins with 4 friends; Monica, Joey, Chandler and Phoebe, sitting in their local coffee house Central Perk, discussing Monica's date for the evening. Monica's brother Ross soon arrives at the coffeehouse, looking miserable. It is revealed that his ex-wife, Carol, has moved her things out of their apartment, due to the fact that she is a lesbian and no longer has feelings for Ross. Joey unhelpfully suggests that and desperate Ross take advantage of the fact that he is now single by going to strip joints, and an exasperated Ross cries out, "I don't want to be single, okay? I just want to be married again!" As soon as Ross says this, a woman enters the coffee house wearing a wedding dress, causing Chandler to remark on the coincidence of it, saying: "And I just want a million dollars!" It turns out the woman is Rachel Greene, who was Monica's best friend in high school, and has arrived to ask Monica for help, as she has just left her fiancé at the altar after realizing that she does not love him.

翻訳: 

出力

エピソードは、4人の友人、モニカ、ジョーイ、チャンドラー、フィービーが地元のコーヒーハウス「セントラル・パーク」に座って、モニカのその夜のデートについて話し合っているところから始まります。やがてモニカの兄ロスが、悲しそうな様子でコーヒーハウスに到着します。彼の元妻キャロルが、レズビアンであることを理由に、ロスへの気持ちがなくなり、アパートから出て行ったことが明らかになります。ジョーイは、途方に暮れたロスに、独身になったことを利用してストリップ小屋に行くことを提案しますが、ロスは「独身になりたくないんだ、もう一度結婚したいだけなんだ!」と叫びます。ロスがそう言うとすぐに、ウェディングドレスを着た女性がコーヒーハウスに入ってきて、チャンドラーは「俺は100万ドルが欲しい!」と言って、その偶然に言及します。その女性は、モニカの高校時代の親友レイチェル・グリーンであることが判明し、婚約者を祭壇に残して駆け落ちしてきたレイチェルは、彼を愛していないことに気づき、モニカに助けを求めてやってきます。

https://platform.openai.com/tokenizerを使って計算

入力トークン: 344
入力文字数: 1569
出力トークン: 465
出力文字数: 449

OpenAI

https://openai.com/pricing

GPT-4で計算

入力トークン: 344 ≒ $0.01032 ≒ 1.4964円
出力トークン: 465 ≒ $0.0279 ≒ 4.0455円

DeepL

APIで計算

https://www.deepl.com/ja/pro/change-plan#developer

文字数のカウントはコードポイント単位、スペース、タブ、改行等も含むらしい今回は細かいところは置いておく。
https://support.deepl.com/hc/ja/articles/360020685720-DeepL-API-文字数のカウントと請求

50万文字まで定額、50万文字以上は従量課金

50万文字以内: 630円/月 ≒ 0.00126円/1文字 * 1569文字 ≒ 1.97694円相当
50万文字以上: 3.9225円(1文字0.0025円 * 1569文字)

text-bison

https://cloud.google.com/vertex-ai/pricing?hl=ja

入力文字数: 1569 ≒ $0.001569 ≒ 0.227505円
出力文字数: 449 ≒ $0.000449 ≒ 0.065105円

日→英

今回は実際にやっていないが、英→日の出力と同じだったと仮定して。

入力

I want you to act as an English/Japanese translator, spelling corrector and improver.
I will speak to you in any language and you will detect the language, translate it and answer in the corrected and improved version of my text, in English.
I want you to replace my simplified A0-level words and sentences with more beautiful and elegant, upper level English words and sentences.
Keep the meaning same, but make them more literary.
I want you to only reply the correction, the improvements and nothing else, do not write explanations.

原文: エピソードは、4人の友人、モニカ、ジョーイ、チャンドラー、フィービーが地元のコーヒーハウス「セントラル・パーク」に座って、モニカのその夜のデートについて話し合っているところから始まります。やがてモニカの兄ロスが、悲しそうな様子でコーヒーハウスに到着します。彼の元妻キャロルが、レズビアンであることを理由に、ロスへの気持ちがなくなり、アパートから出て行ったことが明らかになります。ジョーイは、途方に暮れたロスに、独身になったことを利用してストリップ小屋に行くことを提案しますが、ロスは「独身になりたくないんだ、もう一度結婚したいだけなんだ!」と叫びます。ロスがそう言うとすぐに、ウェディングドレスを着た女性がコーヒーハウスに入ってきて、チャンドラーは「俺は100万ドルが欲しい!」と言って、その偶然に言及します。その女性は、モニカの高校時代の親友レイチェル・グリーンであることが判明し、婚約者を祭壇に残して駆け落ちしてきたレイチェルは、彼を愛していないことに気づき、モニカに助けを求めてやってきます。
翻訳: 

出力

The episode begins with 4 friends; Monica, Joey, Chandler and Phoebe, sitting in their local coffee house Central Perk, discussing Monica's date for the evening. Monica's brother Ross soon arrives at the coffeehouse, looking miserable. It is revealed that his ex-wife, Carol, has moved her things out of their apartment, due to the fact that she is a lesbian and no longer has feelings for Ross. Joey unhelpfully suggests that and desperate Ross take advantage of the fact that he is now single by going to strip joints, and an exasperated Ross cries out, "I don't want to be single, okay? I just want to be married again!" As soon as Ross says this, a woman enters the coffee house wearing a wedding dress, causing Chandler to remark on the coincidence of it, saying: "And I just want a million dollars!" It turns out the woman is Rachel Greene, who was Monica's best friend in high school, and has arrived to ask Monica for help, as she has just left her fiancé at the altar after realizing that she does not love him.

https://platform.openai.com/tokenizer を使って計算

入力トークン: 584
入力文字数: 995
出力トークン: 226
出力文字数: 1020

OpenAI

https://openai.com/pricing

GPT-4で計算

入力トークン: 584 ≒ $0.01752 ≒ 2.5404円
出力トークン: 226 ≒ $0.01356 ≒ 1.9662円

DeepL

APIで計算

https://www.deepl.com/ja/pro/change-plan#developer

文字数のカウントはコードポイント単位、スペース、タブ、改行等も含むらしい今回は細かいところは置いておく。
https://support.deepl.com/hc/ja/articles/360020685720-DeepL-API-文字数のカウントと請求

50万文字まで定額、50万文字以上は従量課金

50万文字以内: 630円/月 ≒ 0.00126円/1文字 * 995文字 ≒ 1.2537円相当
50万文字以上: 2.4875円(1文字0.0025円 * 995文字)

text-bison

https://cloud.google.com/vertex-ai/pricing?hl=ja

入力文字数: 995 ≒ $0.000995 ≒ 0.144275円
出力文字数: 1020 ≒ $0.00102 ≒ 0.1479円

料金まとめ

あくまでも今回のサンプルの場合だけども、

  • text-bisonは英→日/日→英でほぼ同じで、約0.28円
  • GPT-4は英→日が約5.5円、日→英が約4.5円。
    • gpt-4-turboだと1/3になると思えば約1.5〜2円程度にはなる。gpt-3.5-turboだとさらに下がるけども、品質がどうか。
  • DeepLは一定量定額の概念があるので難しいけど、定額の範囲内だと英→日が約1.97円、日→英が約1.25円、それを超えるとざっくり倍という感じ。思ったより高い。

たしかにtext-bisonは安いかもしれない。

kun432kun432

コスパに優れている感はあるので、あとは品質とのバランス。定量評価が必要。

kun432kun432

日本語と英語の両方が含まれている以下の翻訳評価用データセットを使って、英→日/日→英の翻訳品質をBERTScoreで算出してみた。

https://huggingface.co/datasets/bsd_ja_en

細かいところは後で書くけど、100件サンプリングして翻訳したものをBERTScoreで比較した。

件数ももう少し増やしたいし、他の翻訳とも比較してみるつもり。コストもざっくり見積もってみたけど、英→日/日→英それぞれ9円ぐらいのハズ。bsd_ja_enは20000件あって、英→日/日→英それぞれ10000件のようなので、100件で9円ぐらいなら、900円ぐらいで収まる計算になる。