16 KiB
translation_translator.py - 翻訳エンジン統合クラス
概要
複数の翻訳エンジンを統合管理する高レベル翻訳インターフェースです。DeepL、Google、Bing、Papago、CTranslate2などの多様な翻訳サービスを統一的に扱い、エラー時の自動フォールバック機能と認証管理を提供します。
主要機能
多エンジン統合
- DeepL(無料版・API版)
- Google Translate(Webスクレイピング)
- Microsoft Translator(Bing)
- Papago Translator
- CTranslate2(ローカル翻訳)
- Plamo API(プリファードネットワークス LLM)
- Gemini API(Google LLM)
- OpenAI API(ChatGPT系)
- Groq API(高速 LLM 推論)
- OpenRouter API(統合 LLM プロバイダー)
- LMStudio(ローカル LLM)
- Ollama(ローカル LLM)
統一インターフェース
- エンジン依存を隠蔽した単一の翻訳メソッド
- 自動エラーハンドリング・フォールバック
- 認証情報の統合管理
オフライン翻訳対応
- CTranslate2による完全オフライン翻訳
- 複数モデルサイズ(small/large)対応
- CUDA高速化サポート
クラス構造
Translator クラス
class Translator:
def __init__(self) -> None:
self.deepl_client: Optional[DeepLClient] = None
self.ctranslate2_translator: Any = None
self.ctranslate2_tokenizer: Any = None
self.is_loaded_ctranslate2_model: bool = False
self.is_changed_translator_parameters: bool = False
self.is_enable_translators: bool = ENABLE_TRANSLATORS
翻訳機能の中核クラス
属性
- deepl_client: DeepL APIクライアント
- ctranslate2_translator: ローカル翻訳モデル
- ctranslate2_tokenizer: CTranslate2トークナイザー
- is_loaded_ctranslate2_model: ローカルモデル読み込み状態
- is_enable_translators: Web翻訳サービス利用可能フラグ
主要メソッド
翻訳実行
translate(translator_name: str, source_language: str, target_language: str,
target_country: str, message: str) -> Any
統一翻訳インターフェース
パラメータ
- translator_name: 翻訳エンジン名("DeepL", "Google", "CTranslate2"等)
- source_language: 送信元言語
- target_language: 送信先言語
- target_country: 送信先国・地域
- message: 翻訳対象テキスト
戻り値
- str: 翻訳結果(成功時)
- False: 翻訳失敗時
DeepL認証管理
authenticationDeepLAuthKey(authkey: str) -> bool
DeepL APIキーの認証と設定
パラメータ
- authkey: DeepL APIキー
戻り値
- bool: 認証成功可否
CTranslate2管理
changeCTranslate2Model(path: str, model_type: str, device: str = "cpu",
device_index: int = 0, compute_type: str = "auto") -> None
ローカル翻訳モデルの読み込み・変更
パラメータ
- path: モデルファイルのベースパス
- model_type: モデルサイズ("small"/"large")
- device: 計算デバイス("cpu"/"cuda")
- device_index: デバイスインデックス
- compute_type: 計算精度タイプ
状態管理
isLoadedCTranslate2Model() -> bool
CTranslate2モデルの読み込み状態確認
isChangedTranslatorParameters() -> bool
setChangedTranslatorParameters(is_changed: bool) -> None
翻訳設定変更フラグの管理
使用方法
基本的な翻訳
from models.translation.translation_translator import Translator
# 翻訳器の初期化
translator = Translator()
# Google翻訳の使用
result = translator.translate(
translator_name="Google",
source_language="Japanese",
target_language="English",
target_country="United States",
message="こんにちは、世界!"
)
if result != False:
print(f"翻訳結果: {result}") # "Hello, world!"
else:
print("翻訳に失敗しました")
DeepL API使用
# DeepL APIキーの設定
api_key = "your-deepl-api-key"
auth_success = translator.authenticationDeepLAuthKey(api_key)
if auth_success:
print("DeepL API認証成功")
# DeepL APIで翻訳
result = translator.translate(
translator_name="DeepL_API",
source_language="English",
target_language="Japanese",
target_country="Japan",
message="Hello, world!"
)
print(f"DeepL翻訳: {result}")
else:
print("DeepL API認証失敗")
ローカル翻訳(CTranslate2)の使用
# ローカルモデルの読み込み
translator.changeCTranslate2Model(
path=".", # アプリケーションルート
model_type="small", # smallモデル使用
device="cuda", # GPU使用
device_index=0,
compute_type="float16" # 半精度で高速化
)
# モデル読み込み確認
if translator.isLoadedCTranslate2Model():
print("CTranslate2モデル読み込み完了")
# ローカル翻訳実行
result = translator.translate(
translator_name="CTranslate2",
source_language="Japanese",
target_language="English",
target_country="United States",
message="機械翻訳のテストです"
)
print(f"ローカル翻訳: {result}")
else:
print("CTranslate2モデル読み込み失敗")
エラーハンドリング付きの翻訳
def safe_translate(translator, message, source_lang="Japanese", target_lang="English"):
"""安全な翻訳処理"""
# 翻訳エンジンの優先順位
engines = ["DeepL_API", "DeepL", "Google", "CTranslate2"]
for engine in engines:
try:
result = translator.translate(
translator_name=engine,
source_language=source_lang,
target_language=target_lang,
target_country="United States",
message=message
)
if result != False:
print(f"{engine}で翻訳成功: {result}")
return result
else:
print(f"{engine}翻訳失敗、次のエンジンを試行")
except Exception as e:
print(f"{engine}でエラー: {e}")
continue
print("全ての翻訳エンジンで失敗")
return None
# 使用例
result = safe_translate(translator, "こんにちは")
翻訳設定の管理
# 設定変更フラグの確認
if translator.isChangedTranslatorParameters():
print("翻訳設定が変更されています")
# 設定変更の適用(例:モデル再読み込み)
translator.changeCTranslate2Model(".", "small", "cpu")
# フラグのリセット
translator.setChangedTranslatorParameters(False)
翻訳エンジン比較
DeepL API(有料)
- 精度: 最高レベル
- 速度: 高速
- 制限: API使用料、月間制限
- 対応: 26言語、地域別対応
DeepL(無料)
- 精度: 高品質
- 速度: 中程度
- 制限: 月間使用量制限、文字数制限
- 対応: 26言語
Google Translate
- 精度: 良好
- 速度: 高速
- 制限: アクセス頻度制限
- 対応: 100+言語
CTranslate2(ローカル)
- 精度: 中〜高(モデル依存)
- 速度: 高速(GPU使用時)
- 制限: なし(オフライン)
- 対応: 主要言語ペア
その他(Bing, Papago等)
- 精度: 中程度
- 速度: 中程度
- 制限: サービス依存
- 対応: サービス固有
CTranslate2詳細
対応モデル
ctranslate2_weights = {
"small": {
"url": "m2m100_418m.zip",
"directory_name": "m2m100_418m",
"tokenizer": "facebook/m2m100_418M"
},
"large": {
"url": "m2m100_12b.zip",
"directory_name": "m2m100_12b",
"tokenizer": "facebook/m2m100_1.2b"
}
}
パフォーマンス特性
small モデル
- サイズ: ~400MB
- メモリ: ~1GB RAM
- VRAM: ~500MB(CUDA使用時)
- 速度: 高速
- 精度: 良好
large モデル
- サイズ: ~4.8GB
- メモリ: ~6GB RAM
- VRAM: ~3GB(CUDA使用時)
- 速度: 中程度
- 精度: 高品質
計算タイプ設定
# CPU使用時
compute_type = "int8" # 速度重視
# CUDA使用時
compute_type = "float16" # バランス重視
compute_type = "int8_float16" # メモリ効率重視
エラーハンドリング
ネットワークエラー
- 接続タイムアウト
- API制限超過
- サービス一時停止
認証エラー
- 無効なAPIキー
- 期限切れアカウント
- 使用量上限到達
モデルエラー
- ファイル破損
- VRAM不足
- 非対応言語ペア
対応策
def robust_translation(translator, message, source_lang, target_lang):
"""堅牢な翻訳処理"""
# オンライン翻訳を先に試行
online_engines = ["DeepL_API", "DeepL", "Google"]
for engine in online_engines:
try:
result = translator.translate(engine, source_lang, target_lang, "", message)
if result != False:
return result
except Exception as e:
print(f"{engine}エラー: {e}")
continue
# オンライン翻訳が全て失敗した場合、ローカル翻訳にフォールバック
try:
if not translator.isLoadedCTranslate2Model():
translator.changeCTranslate2Model(".", "small", "cpu")
result = translator.translate("CTranslate2", source_lang, target_lang, "", message)
if result != False:
return result
except Exception as e:
print(f"ローカル翻訳エラー: {e}")
return "翻訳に失敗しました"
依存関係
必須依存関係
translation_languages: 言語コード管理translation_utils: CTranslate2ユーティリティutils: エラーログ、計算デバイス管理
オプション依存関係
deepl: DeepL APIライブラリtranslators: Web翻訳サービスライブラリctranslate2: ローカル翻訳エンジンtransformers: トークナイザー
設定要件
環境変数
DEEPL_AUTH_KEY: DeepL APIキー(オプション)
ファイル配置
root/
└── weights/
└── ctranslate2/
├── m2m100_418m/ # smallモデル
└── m2m100_12b/ # largeモデル
注意事項
- Web翻訳サービスは利用制限に注意
- CTranslate2の初回読み込みは時間がかかる
- GPU使用時はVRAM消費量に注意
- API認証情報の適切な管理が必要
- 長文翻訳時は分割処理を推奨
関連モジュール
translation_languages.py: 言語コードマッピングtranslation_utils.py: CTranslate2ユーティリティconfig.py: 翻訳設定管理model.py: 翻訳機能統合controller.py: 翻訳制御インターフェース
最近の更新
2025-12-10: Groq API および OpenRouter API サポート追加
Groq API 統合
- Groq API (
https://api.groq.com/openai/v1) を翻訳エンジンとして追加 - OpenAI 互換エンドポイントで高速 LLM 推論を実現
- API キーバリデーション(
gskで始まり40文字以上) - モデルリスト自動取得とフィルタリング(テキスト処理モデルのみ)
- 認証成功時に
SELECTABLE_GROQ_MODEL_LISTを更新、未選択時は先頭モデルを自動選択 - API キー無効時にモデルリストと選択モデルをクリアしフロントエンドに通知
OpenRouter API 統合
- OpenRouter API (
https://openrouter.ai/api/v1) を翻訳エンジンとして追加 - 単一 API キーで複数 LLM プロバイダーへアクセス可能
- API キーバリデーション(20文字以上)
- モデルリスト自動取得とフィルタリング(テキスト処理モデルのみ)
- 認証成功時に
SELECTABLE_OPENROUTER_MODEL_LISTを更新、未選択時は先頭モデルを自動選択 - API キー無効時にモデルリストと選択モデルをクリアしフロントエンドに通知
updateTranslationEngineAndEngineList() の拡張
SELECTABLE_TRANSLATION_ENGINE_STATUSで Groq_API と OpenRouter_API の状態を管理- 各エンジンの認証キー更新時に自動的にモデルリストを再取得
- フロントエンドへの通知を
run_mapping経由で送信
影響
| 項目 | 内容 |
|---|---|
| Groq API | 高速 LLM 推論による翻訳速度向上 |
| OpenRouter API | 単一キーで複数 LLM プロバイダーへアクセス |
| モデル管理 | API キー検証失敗時の自動クリアで一貫性向上 |
| UX改善 | 認証後の自動モデル選択で初期設定簡略化 |
2025-10-20: LLM エンジン拡張と最適化
新規ローカル LLM エンジン追加
LMStudio / Ollama を翻訳エンジンとして追加。接続確認後にモデルリスト (SELECTABLE_LMSTUDIO_MODEL_LIST / SELECTABLE_OLLAMA_MODEL_LIST) を取得し、未選択なら先頭モデルを自動選択 (SELECTED_LMSTUDIO_MODEL / SELECTED_OLLAMA_MODEL)。現時点では CTranslate2 と同様にローカル動作を想定し、翻訳関数側は将来の統合(温度等パラメータ)に備えて抽象化維持。
モデル選択プロパティ名称統一
Plamo / Gemini / OpenAI の選択モデルプロパティを SELECTED_* 形式へ変更。旧名称 (PLAMO_MODEL / GEMINI_MODEL / OPENAI_MODEL) は利用停止。自動認証後のモデルリスト更新ロジックで未選択時に先頭補完を行う。
OpenAI / Gemini / Plamo 認証後のモデルリスト自動更新
Auth設定メソッド完了時に SELECTABLE_*_MODEL_LIST を再取得し不足時は UI へ push。OpenAI はキー設定直後に最新モデルリストを反映し高速化。Gemini / Plamo も同様に updateTranslator*Client() 呼び出しでクライアント再生成。
CTranslate2 言語ネスト化対応
translation_lang["CTranslate2"][weight_type]["source"|"target"] へ構造変更。CTRANSLATE2_WEIGHT_TYPE により重みタイプ別の言語集合を参照。Translator 内では translator_name == "CTranslate2" の分岐で weight_type を参照して言語判定を行う実装に変更。
YAML 言語マッピング導入
外部ファイル languages.yml を読み込んで翻訳エンジン別対応言語を動的拡張。新言語追加は YAML 編集のみで実現(コード再デプロイ不要)。読み込み失敗時は空辞書でフォールバックし既存ハードコードを保持。
VRAM エラー検知とフォールバック
DeepL / Plamo / Gemini / OpenAI 実行時の VRAM 不足検知で自動的に CTranslate2 へ切替し翻訳を停止 (ENABLE_TRANSLATION=False)。ユーザー通知後は再度有効化要求時に再初期化を試行。安定性向上のためログへ VRAM エラー詳細を記録。
トークナイザーパス修正
CTranslate2 トークナイザーのダウンロード処理で保存ディレクトリ作成とパス使用順序不整合を修正。これにより初回起動時の失敗率低下。
全言語ペア包括テスト導入
backend_test.py にて test_translate_all_language_pairs() を追加。複数エンジン・全言語ペアを列挙実行し translation_test_results.json を生成。失敗ペアの早期検出と YAML 追加言語検証に活用。
影響
| 項目 | 内容 |
|---|---|
| ローカルLLM | オフライン翻訳候補拡充 (LMStudio/Ollama) |
| プロパティ統一 | SELECTED_* 命名で一貫性と保守性向上 |
| CTranslate2構造 | 重みタイプ毎に最適言語集合参照可能 |
| YAML外部化 | 言語追加/削除が設定ファイル編集のみで完結 |
| VRAM検知 | エラー時自動停止 + 軽量エンジン切替で安定性向上 |
| Tokenizer修正 | 初回セットアップ失敗減少 |
| 包括テスト | 言語組合せの網羅的品質担保 |