【日本語RAG】最強の埋め込みモデル(Embeddings)の選び方と使い方
はじめに
RAGの精度が悪い時、多くの人がLLM(GPT-4など)のせいにしがちです。しかし、実はその前の段階、つまり「ドキュメントを正しく検索できているか?」という点に根本的な原因がある場合がほとんどです。
検索精度を決定づけるのが、文章をベクトル化するEmbeddingsモデルです。特に日本語は英語と比べて難易度が高く、適切なモデル選びが成功の鍵を握ります。
Embeddings(埋め込み表現)とは
文章の意味を、数百〜数千次元の数値のリストに変換する技術です。「王様 - 男 + 女 = 女王」のような計算ができる状態で言葉を捉えます。
このベクトル同士の距離(コサイン類似度)を計算することで、キーワードが一致していなくても、意味が近い文章を見つけることができます。
OpenAI text-embedding-3-small
現在、最も手軽で高性能なのがOpenAIのAPIです。
- コスト: 非常に安い(100万トークンあたり数十円)。
- 性能: マルチリンガル対応で、日本語もある程度理解します。
基本的にはこれを選べば間違いありませんが、社外秘データをAPIに投げられない場合や、より高度な日本語理解が必要な場合は、別の選択肢を検討します。
日本語特化モデルの重要性
英語圏で開発されたモデルは、日本語独特の言い回しや専門用語に弱い傾向があります。日本の企業や研究機関が開発した日本語特化モデルを使うと、検索精度が劇的に向上することがあります。
代表的なものに intfloat/multilingual-e5-large や、ソフトバンクなどが公開しているモデルがあります。
Hugging Faceからローカルモデルを使う
LangChainを使えば、Hugging Face上のモデルも簡単にローカルで動かせます。
from langchain_huggingface import HuggingFaceEmbeddings
# 定評のあるE5モデルを指定
embeddings = HuggingFaceEmbeddings(
model_name="intfloat/multilingual-e5-large"
)
# 完全にオフラインでベクトル化が可能
vector = embeddings.embed_query("こんにちは")
これならAPI課金も発生せず、データのプライバシーも守れます。
まとめ
RAGの精度向上には、「プロンプトエンジニアリング」の前に「エンベディングモデルの見直し」が効果的です。まずはOpenAIで試し、不満があればE5などの特化モデルを試すのが王道です。
次回は、長いドキュメントをどのように分割して保存すべきか?という、地味ながら超重要な「Text Splitter(チャンク分割)」の戦略について解説します。
コメント
コメントを投稿