スキップしてメイン コンテンツに移動

【日本語RAG】最強の埋め込みモデル(Embeddings)の選び方と使い方

【日本語RAG】最強の埋め込みモデル(Embeddings)の選び方と使い方

はじめに

RAGの精度が悪い時、多くの人がLLM(GPT-4など)のせいにしがちです。しかし、実はその前の段階、つまり「ドキュメントを正しく検索できているか?」という点に根本的な原因がある場合がほとんどです。

検索精度を決定づけるのが、文章をベクトル化するEmbeddingsモデルです。特に日本語は英語と比べて難易度が高く、適切なモデル選びが成功の鍵を握ります。

Embeddings(埋め込み表現)とは

Definition

文章の意味を、数百〜数千次元の数値のリストに変換する技術です。「王様 - 男 + 女 = 女王」のような計算ができる状態で言葉を捉えます。

このベクトル同士の距離(コサイン類似度)を計算することで、キーワードが一致していなくても、意味が近い文章を見つけることができます。

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(チャンク分割)」の戦略について解説します。

このブログ記事はAIを利用して自動生成されました。

コメント