はじめに
本プロジェクト(Figure Fan)では、「他言語のユーザー同士でも意識せずにコミュニケーションできること」を最上位のコンセプトとして掲げています。これを実現するため、単なるUIの多言語化にとどまらず、ユーザーが投稿するコメントや写真タイトルの自動翻訳、さらには入力言語に関わらず関連コンテンツをヒットさせる「クロス言語検索」の導入を検討しました。
課題:コストと精度のトレードオフ
多言語対応と高機能な検索を実現するには、通常、以下のような課題があります。
- 翻訳APIのコスト: Google Cloud Translation APIやDeepL APIは高精度ですが、従量課金制であり、大量のコメントやコンテンツを翻訳し続けるとコストが肥大化します。
- 検索エンジンのコスト: Amazon OpenSearch Serviceなどのマネージドサービスは便利ですが、プロビジョンドインスタンスのコストが高く(※Serverless版は従量課金で低コスト化可能)、スタートアップや個人開発規模では負担になります。
これらの課題を解決するため、「オンプレミスAIの活用」と「軽量なOSS」を組み合わせた低コストなアーキテクチャを設計しました。
解決策1:翻訳基盤 - TranslateGemma × バッチ処理
翻訳エンジンには、Googleが公開したオープンモデル TranslateGemma (12B) を採用しました。これをローカルLLM実行基盤である Ollama 上で動作させます。
選定理由
- 高精度: 55言語以上に対応し、特にマイナー言語の翻訳品質が高い。
- API利用料ゼロ: 自前のサーバー(既存リソース)で動作するため、API利用料が発生しません。
- プライバシー: データが外部に送信されないため、セキュアです。
実装方針:非同期バッチ処理
12Bモデルは推論に時間がかかるため、リアルタイム翻訳ではなく、投稿時に非同期で翻訳ジョブをキューに積み、バックグラウンドで処理してDBに保存するアーキテクチャを採用しました。
解決策2:検索基盤 - クロス言語検索 × Qdrant
「猫」で検索したときに、'Cat'(英語)や 'Pusa'(タガログ語)のタグがついた写真もヒットさせるため、ベクトル検索(Vector Search) を導入します。
技術スタック
- 埋め込みモデル: bge-m3:latest (Ollamaで動作)
多言語に対応した高性能な埋め込みモデルです。 - ベクトルデータベース: Qdrant
Rust製の超軽量なベクトルDB。Dockerコンテナ1つで動作し、Ollamaと同じサーバーに同居可能です。
PoC(概念実証)結果
実際にOllama上の bge-m3 を使用して、言語間のベクトル類似度を測定しました。
| 比較ペア | 類似度 | 判定 |
|---|---|---|
| 日本語「猫」 vs 英語 'Cat' | 0.7759 | ◎ そのまま検索可能 |
| 日本語「猫」 vs タガログ語 'Pusa' | 0.4894 | △ 精度低い |
| 日本語「猫」 vs タガログ語(英訳) 'Cat' | 0.8616 | ◎ 翻訳パイプライン有効 |
検証の結果、「マイナー言語は一度英語に翻訳してからベクトル化する」というハイブリッドなアプローチが極めて有効であることが実証されました。
今後の展望
今後は、以下のステップで実装を進めます。
- バッチ翻訳の実装: TranslateGemmaを用いた非同期翻訳パイプラインの構築。
- Qdrantの導入: 検索機能へのベクトル検索の統合。
これにより、低コストながらも「言葉の壁を感じさせない」次世代のコミュニティ体験を実現します。
※この記事は生成AI (Claude Code) によって作成されました。
コメント