概要
出光興産は、グローバルに蓄積された英語の技術文書を日本語で検索・活用するための多言語RAGシステムを構築しました。
多言語RAGの仕組み
[日本語質問]
│
├─→ [多言語Embedding] ─→ [英語文書ベクトルDB検索]
│ │
│ [関連英語チャンク]
│ │
└──────────────────────→ [LLM: 日本語で回答生成]
多言語Embeddingの選択
# 多言語対応のEmbeddingモデル比較
models = {
"intfloat/multilingual-e5-large": {
"dims": 1024, "langs": "100+", "mteb": 63.0,
"note": "オープンソース、日本語良好",
},
"cohere/embed-v4": {
"dims": "variable", "langs": "100+", "mteb": 65.2,
"note": "商用最高精度、多言語トップ",
},
"cl-nagoya/ruri-v3-310m": {
"dims": 1024, "langs": "日本語特化", "mteb": "N/A",
"note": "日本語最高精度、名大開発",
},
}
# 出光興産のケース: 多言語対応が必須
# → intfloat/multilingual-e5-large を採用
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("intfloat/multilingual-e5-large")
# 日本語と英語を同じベクトル空間に埋め込み
ja_query = model.encode("原油精製プロセスの最適温度は?")
en_doc = model.encode("The optimal temperature for crude oil refining is 370°C.")
# コサイン類似度で言語横断検索が可能
from numpy import dot
from numpy.linalg import norm
similarity = dot(ja_query, en_doc) / (norm(ja_query) * norm(en_doc))
print(f"言語横断類似度: {similarity:.3f}") # → 0.82+
日本語固有の課題
| 課題 | 説明 | 解決策 |
|---|---|---|
| 単語境界なし | 日本語はスペースで区切られない | SentencePiece / MeCab前処理 |
| トークン効率 | 日本語は英語の2-3倍のトークンを消費 | Ruri v3の10万語彙で改善 |
| 専門用語 | 業界固有の用語がモデルに未学習 | ドメイン辞書でチャンク前に正規化 |
成果
- 日本語→英語の言語横断検索を実現
- 90%以上の応答精度
- グローバル技術文書の活用率が大幅向上