0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ECサイトが一晩で多言語対応?Rosetta-12Bで試すカタログ翻訳

Posted at

Rosetta-12Bとは?

YanoljaNEXT-Rosetta-12B は、旅行テック企業 Yanolja NEXT が開発した 多言語翻訳特化LLM です。通常の翻訳モデルと違って、JSONの構造を保持したまま翻訳できる のが最大の特徴。
ベースモデル:Google Gemma-3-12B をファインチューニング

対応言語:英語、日本語、韓国語、中国語、スペイン語、フランス語、ドイツ語、ポルトガル語、アラビア語、ロシア語、ヒンディー語(計11言語)

強み
JSONのキーはそのまま、値だけ翻訳
Glossaryを指定して訳語を統一可能
EC商品カタログやレビューの多言語化に最適


実験の目的

今回は「商品カタログ(JSON形式)」をそのまま 英語・スペイン語・フランス語 に翻訳し、多言語対応ECサイトで使えるデータを作ることを目指します。

翻訳対象のJSON

catalog = [
    {"product_name":"折りたたみ傘","description":"軽量で持ち運びやすく、雨の日に便利。","price":"1500円","category":"日用品"},
    {"product_name":"真空断熱ボトル 500ml","description":"保冷・保温に優れ、スポーツや通勤に最適。","price":"2980円","category":"日用品"}
]

英語版

{
  "product_name": "Folding Umbrella",
  "description": "Lightweight and easy to carry; convenient on rainy days.",
  "price": "JPY 1,500",
  "category": "Household goods"
}

スペイン語版

{
  "product_name": "Paraguas plegable",
  "description": "Ligero y fácil de llevar; práctico en días de lluvia.",
  "price": "JPY 1,500",
  "category": "Artículos para el hogar"
}

フランス語版

{
  "product_name": "Parapluie pliant",
  "description": "Léger et facile à transporter ; pratique les jours de pluie.",
  "price": "JPY 1,500",
  "category": "Articles ménagers"
}

考察

✅ JSON構造が壊れない → そのままシステムに流せる
✅ Glossaryで用語統一ができる
✅ 複数言語に同時展開可能
⚠️ モデルサイズが大きいのでColab GPUが必須
⚠️ 長文や特殊な表現では自然さに差が出ることも

おすすめの用途

EC商品カタログの自動翻訳:データベースのJSONをそのまま多言語化

ホテル・観光レビューのローカライズ:ユーザー生成コンテンツの多言語対応

FAQ・サポートデータの準備:多言語チャットボット用の翻訳データ作成

社内システムやAPI出力の翻訳:JSON形式のまま言語変換してすぐ利用可能


手順

1 環境準備

!pip install -q transformers accelerate torch

2 モデル読み込み

from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

model_id = "yanolja/YanoljaNEXT-Rosetta-12B"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    device_map="auto",
    torch_dtype=torch.bfloat16
)

3 翻訳対象のJSON

catalog = [
    {"product_name":"折りたたみ傘","description":"軽量で持ち運びやすく、雨の日に便利。","price":"1500円","category":"日用品"},
    {"product_name":"真空断熱ボトル 500ml","description":"保冷・保温に優れ、スポーツや通勤に最適。","price":"2980円","category":"日用品"}
]

4 翻訳 → 抽出 → 保存

import json, re, textwrap

def build_prompt(src_obj, target_lang="English"):
    return textwrap.dedent(f"""
    Translate the following JSON values from Japanese into {target_lang}.
    - Preserve JSON structure
    - Translate only values (not keys)
    - Keep numbers and currency intact
    Input:
    {json.dumps(src_obj, ensure_ascii=False, indent=2)}
    Output:
    """)

inputs = tokenizer(build_prompt(catalog, "English"), return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=512)
result = tokenizer.decode(outputs[0], skip_special_tokens=True)

match = re.search(r"\{[\s\S]*\}|\[[\s\S]*\]", result)
if match:
    translated_json = json.loads(match.group(0))
    with open("translated_catalog.en.json", "w", encoding="utf-8") as f:
        json.dump(translated_json, f, ensure_ascii=False, indent=2)

まとめ

Rosetta-12B は 「JSON構造を壊さず翻訳」 できる珍しいモデル。
通常の翻訳LLMでは難しい「キーそのまま・値だけ翻訳」をきれいに実現できるので、
実務のバックエンド処理に直結する翻訳ワークフロー が作れます。
特に EC や観光業のように「大量の商品・レビューを多言語で扱う場面」で大きな威力を発揮。Glossaryを併用すれば用語統一もでき、運用に耐えるクオリティの多言語データ生成が可能です。


こんにちは、だいすけです。
ぼくはフリーランス・エンジニアで、 AR や 機械学習のアプリの実装をしています。
お仕事のご相談こちらまで。
rockyshikoku@gmail.com

Core MLを使ったアプリを作っています。
機械学習関連の情報を発信しています。

Twitter
Medium

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?