TranslateGemma オンラインデモ + クイックスタートガイド
こんにちは、Doraです。「TranslateGemma」をご存じですか?
このツールを試してみようと思ったきっかけは小さなものでした。クライアントが英語とスペイン語が混在したコピーと、いくつかのプレースホルダーを含むテキストを送ってきたのですが、翻訳モデルを1行ずつ監視したくありませんでした。ご存じの通り、1つ間違えるとプレースホルダーが壊れてしまいます。スレッドで「TranslateGemma」が何度も出てくるのを見かけたので、新しいツールだからではなく、フォーマットを壊さずに忠実な翻訳を得る落ち着いた方法が欲しかったので試してみました。ネタバレ:ほぼ目的を達成しました。2026年1月にオンラインデモとローカルセットアップで複数のテストを実施しました。実際に役立ったこと、うまくいかなかったこと、そしてモデルを安定させるためにプロンプトを構造化した方法を紹介します。

TranslateGemmaをオンラインで試す(セットアップ不要)
単に有用性を確認するだけのためにものをインストールするのはあまり好きではありません。そこで、TranslateGemmaをオンラインで試し始めました。「TranslateGemma online」を検索すると、いくつかのホストされたプレイグラウンドが見つかります:Hugging Face Spaces、Replicateデモ、そして翻訳用に調整されたGemmaベースのチェックポイントをラップする軽量なWeb UIが多数あります。無料ログインが必要なものもあれば、不要なものもあります。いずれにしても、通常はテキストを貼り付けて言語を選択できます。
驚いたことに、共有デモでも速度は問題ありませんでした。短い段落は1~2秒で返ってきましたし、より長いページはもう少し時間がかかりましたが、コーヒー休憩が必要なほどではありませんでした。それでも画面をじっと見つめていました。古い習慣ですね。より大きな違いは速度ではなく、プロンプトをどのようにフレーミングするかでした。
単純な「Translate to French」でも機能しましたが、テキストがトーンを混在させたり、インラインコードを含んだり、{{first_name}}のような変数を使用したりすると、出力がズレました。解決策は短くて明確な指示セットでした。デモがシステムプロンプトフィールドを公開していた場合、それを使用しました。公開していない場合は、ユーザーメッセージの最上部に指示を置きました。
一貫して後処理を減らすことができた最小限のプロンプト:
- ソース言語とターゲット言語を指定します。
- モデルに何を変更しないままにするかを伝えます(プレースホルダー、コードブロック、タグ)。
- テキストをフェンスで囲み、モデルが開始位置と終了位置を認識できるようにします。
- 解説なしの純粋な翻訳をリクエストします。
オンラインで使用した例:
オンラインで使用した例:
以下のテキストを英語からスペイン語に翻訳してください。{{first_name}}、{{price}}などのプレースホルダーとHTMLタグは変更しないままにしてください。改行と句読点を保持してください。翻訳されたテキストのみを返し、他には何も返さないでください。
<<<
Subject: Welcome, {{first_name}}.
Your total is {{price}}.
Click <a href="/start">here</a> to begin.
>>>
最初はこれで時間は節約されませんでした。2回実行した後は、ほぼ壊れたプレースホルダーを修正しなくなったので、時間が節約されました。TranslateGemmaをオンラインでサニティチェックするだけなら、その構造を使用した場合と使用しない場合の短い段落を試してみてください。差は速く現れます。
従う必要があるチャットテンプレート形式
Gemmaスタイルのチャットモデルは、ターンマーカーを尊重すると最良の反応を示します。一部のUIはそれらを自動的に追加します。他のUIは生のテキストを期待しています。プロンプトを直接送信する場合(API、Python、または最小限のUI)、明確で反復可能なテンプレートが役立ちます。
2つの信頼できるパターンが機能しました:
1. プレーンテキストテンプレート(ほとんどのWebデモで機能)
あなたは正確な翻訳アシスタントです。
- ソース言語:英語
- ターゲット言語:スペイン語
- {{...}}のようなプレースホルダー、マークダウンバッククォート、HTMLタグは変更しないままにしてください。
- 句読点と改行を保持します。説明は追加しないでください。
翻訳するテキスト:
<<<
[テキストをここに貼り付けてください]
>>>
2. Gemmaチャットターンスタイル(チャットテンプレートを公開するライブラリで有用)
<start_of_turn>user
あなたは正確な翻訳アシスタントです。
ソース:英語
ターゲット:スペイン語
ルール:{{プレースホルダー}}、コードブロック、HTMLを保持します:改行を保持します:翻訳のみを出力します。
テキスト:
<<<
[テキストをここに貼り付けてください]
>>>
<end_of_turn>
<start_of_turn>model
ターンマーカーがこんなに重要だとは思いませんでしたが、そうです。ターンマーカーなしでは、より多くの「役立つ」言い換え(モデルが表現を改善しようとする)が見られました。ターンマーカーと囲まれたテキストを使用すると、モデルはタスクに密接に固執しました。
大きな違いをもたらした小さな詳細:
- 言語を明確に指定します。「英語からスペイン語に翻訳する」は「スペイン語に翻訳する」よりも優れた性能を発揮しました。
- ルールをテキストの前に配置します。ルールをテキストの後に配置すると、無視されやすくなります。
- テキストを明確な開始/終了でフェンスで囲みます(
<<<と>>>または3重バッククォート)。これにより、開始時または終了時の偶発的なトリミングが減少しました。
TranslateGemmaをローカルで実行する(Python)
長時間の作業や機密ドラフト用のローカルフォールバックを用意するのが好きです。妄想かもしれませんが、クラウドはおしゃべりすぎることがあります。私のマシン(32 GB RAM、コンシューマーGPU)では、より小さなGemmaベースの翻訳チェックポイントが快適に実行されました。より大きなものはより多くのVRAMまたは量子化が必要でした。CPU のみの場合は遅いですが、慎重な設定で実行可能です。
ここにHugging Face Transformersを使用した単純なパターンがあります。意図的にmodel_idをジェネリックに保ちました。Hubから信頼できるGemmaまたはGemma派生の翻訳モデルを選択してください。理想的には翻訳用に文書化されたモデルです。以下のテンプレートはオンラインプロンプトを反映しています。
# 2026年1月にtransformers >= 4.40でテスト済み
from transformers import AutoTokenizer, AutoModelForCausalLM, TextStreamer
import torch
model_id = "<your-gemma-translation-checkpoint>" # 例:Gemmaチャットまたは翻訳チューニングされたモデル
device = "cuda" if torch.cuda.is_available() else "cpu"
dtype = torch.float16 if device == "cuda" else torch.float32
# ロード
tokenizer = AutoTokenizer.from_pretrained(model_id, use_fast=True)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=dtype,
device_map="auto" if device == "cuda" else None
)
# プロンプトテンプレート(プレーンテキスト)。モデルがチャットターンを必要とする場合は交換してください。
prompt = (
"あなたは正確な翻訳アシスタントです。\n"
"ソース言語:英語\n"
"ターゲット言語:スペイン語\n"
"ルール:{{...}}のようなプレースホルダー、コードブロック、HTMLタグは変更しないままにしてください:句読点と改行を保持してください:翻訳のみを出力してください。\n\n"
"テキスト:\n<<<\n"
"Subject: Welcome, {{first_name}}.\nYour total is {{price}}.\n"
"<p>Click <a href=\"/start\">here</a> to begin.</p>\n"
">>>\n"
)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
gen = model.generate(
**inputs,
max_new_tokens=300,
temperature=0.3,
top_p=0.9,
repetition_penalty=1.02,
do_sample=True,
eos_token_id=tokenizer.eos_token_id,
)
output = tokenizer.decode(gen[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
print(output)
テストから得られたいくつかのメモ
- チェックポイントにチャットテンプレートが含まれている場合は、手動文字列の代わりにライブラリの
apply_chat_template()ユーティリティを使用してください。奇妙な動作が半分に減ります。 - 長い入力の場合は、
max_new_tokensを十分に高く設定し、temperatureを低く保ちます(0.2~0.4)。より高いサンプリングは「改善」を招きました。役立つものもあれば、そうでないものもありました。 - 量子化は小さいGPUに役立ちます。4ビット(bitsandbytes)は直接翻訳で良好でした。
- バッチ翻訳が必要な場合は、プロンプトを小さな関数でラップして行をストリーミングします。段落ごとにチャンキングすると、巨大なブロブよりも安全で、構造を失う可能性が低くなります。
GPUインフラストラクチャやローカルセットアップを管理せずに翻訳ワークロードを実行する必要がありますか?
WaveSpeedを構築したため、チームは統一されたAPIを介してモデルを呼び出し、サーバーをスピンアップしたり、ドライバーと格闘したりすることなくバッチタスクを処理できます。→ 試してみてください!
一般的なエラーと修正方法
これらはTranslateGemmaをオンラインおよびローカルで試している間に最も実行したパターンと、実際に摩擦を軽減したものです。
出力がターゲット言語ではない
これは主にソース言語を宣言しなかった場合に見られました。混在言語の入力は、英語のフレーズを十分に混乱させて保持していました。固執した修正:
- 両方の言語を指定します:「英語からスペイン語に翻訳してください。」正確性が重要な場合は検出に依存しないでください。
- 温度を下げます(0.2~0.4)。軽い
repetition_penaltyを使用します(約1.02)。モデルを創造的な書き直しから遠ざけました。 - 最後のガードラインを追加します:「テキストがすでにスペイン語の場合は、変更しないまま返してください。」これにより、バイリンガルスニペットの過剰翻訳が削減されました。
フォーマットまたはプレースホルダーが失われた
これはマーケティングメールと製品文字列の大きな問題でした。早期の実行では{{variables}}が破壊されたり、HTMLが再注文されたりしました。役立ったこと:
- 明確にしてください:「
{{...}}およびHTMLタグのようなプレースホルダーは変更しないままにしてください。コードフェンス内のテキストを翻訳しないでください。」 - 入力をフェンスで囲み、改行を保持します。
<<<と>>>パターンは空行に依存するよりも優れていました。 - 脆弱なコンテンツの場合、プロンプトのプレースホルダーをマーカーで囲みます:「プレースホルダーは
{{this}}のような二重括弧で保護されています。それらを変更しないでください。」デモが中括弧を落とし続ける場合、翻訳前に{{を[[[に、}}を]]]に一時的に置き換え、その後戻しました。優雅ではありませんが、バルク作業ではより安全です。
モデルが翻訳ではなく書き直す
時々出力はエディターの書き直しのように読めました。翻訳ではなく。いくつかのコンテキストでは役立ちますが、ほとんどではありません。実用的な修正:
- 役割と制約を最初に述べます:「あなたは翻訳アシスタントです。忠実な翻訳のみを出力してください。要約なし、説明なし。」
- 温度を下げ、短い入力で長い
max_new_tokensを避けます:余分な余裕はいくつかのチェックポイントで解説を促しました。 - モデルがまだ飾り立てる場合は、明確な停止でチャットターンテンプレートを試してください。ローカルコードで、停止シーケンスをターンマーカー(例:
<end_of_turn>)に設定します。停止サポートなしでホストされたデモでは、「翻訳されたテキストのみを返す」を追加することで、約80%の時間でガタガタが減少しました。
もう1つ静かなメモ:翻訳用にラベル付けされたいくつかのコミュニティチェックポイントは、実際には指示チューニングされた一般的なモデルです。翻訳されますが、おしゃべりです。3つの問題すべてに同時に当たる場合は、別のチェックポイントまたはより小さく、より厳密なチェックポイントを試してください。聡明さが少ないことが多いほうが、この分野ではより忠実を意味します。そして正直なところ、それがすべて必要でした。
TranslateGemmaをまだ試していませんか?プレースホルダーを完全に保つためのお気に入りのプロンプトは何ですか、またはそれを失敗させた最も難しいテキストは何ですか?以下であなたの成功、失敗、またはお気に入りのトリックを共有してください!





