Labo › 検証ノート

RAG

日本語の埋め込みモデルをローカルで比べた — Ruri v3・Qwen3-Embedding・PLaMo-Embedding と Gemini を RAG の検索で、リランカーの効き目まで(RTX 5060 Ti 16GB)

0.782並べ替え後の R@5Ruri v3 → Qwen3-Reranker-4B
0.661埋め込みだけ(手元の最良)Gemini の埋め込みは 0.707
0.730軽い組み合わせRuri v3 どうし・並べ替えは 1 問 約 1 秒
CONTENTS目次(8)
  1. 測り方
  2. 比べたモデル
  3. 測った環境
  4. 結果 1: 埋め込みだけで探す
  5. 結果 2: リランカーで並べ替える
  6. 測っていないこと
  7. まとめ
  8. 出典

この記事の結論

  • 埋め込みだけで探すと、手元の最良(Qwen3-Embedding-4B)の R@5 は 0.661 で、クラウドの Gemini の埋め込み(0.707)に 4.6 ポイント届かなかった。ただし 174 問では、この差は偶然と見分けきれない大きさ。手元の 3 本(Qwen3-Embedding-4B・Ruri v3・PLaMo-Embedding-1B)どうしの差も偶然の範囲だった。
  • 上位 20 件をリランカーで並べ替えると、Ruri v3 → Qwen3-Reranker-4B で 0.782 まで上がり、Gemini の埋め込みだけ(0.707)を上回った。軽い組み合わせ(Ruri v3 と Ruri v3 のリランカー、並べ替えは 1 問 約 1 秒)でも 0.730。クラウドの側には並べ替えを足していないので、「手元の方が上」とまでは言えない。
  • PLaMo-Embedding-1B は float16 で動かすと一部の文書の埋め込みが壊れ(NaN)、R@5 が 0.586 に下がった。bfloat16 なら壊れず 0.638。transformers 5 系と sentencepiece 0.2.2 では動かず、transformers 4.57 と sentencepiece 0.2.1 で動いた。

RAG(検索拡張生成)は、質問に関係する文書を先に検索して LLM に渡し、それを根拠に答えさせる仕組みです。答えの質は、最初の検索で正しい文書を拾えるかどうかに大きく左右されます。

検索には、文章を数百〜数千個の数の並び(ベクトル)に変える埋め込みモデルがよく使われます。意味の近い文章どうしが近いベクトルになるので、言い回しが違っても探せます。さらに、拾った候補を質問と 1 件ずつ読み合わせて点を付け直すリランカーを後ろに足すこともあります。

日本語の文書で、手元の GPU で動く埋め込みモデルがクラウドの埋め込みにどこまで迫れるか、リランカーでどれだけ上がるかを測りました。数字は 2026年9月29日〜30日時点のものです。

測り方

文書は、ivyxon.com のサイトマップに載っている 273 ページ(投資の解説記事が中心)です。見出しごとに本文を区切り、1,200 字を超える部分は分けて、2,507 区切り(平均 680 字)にしました。

質問は、200 ページを無作為に選び、各ページから 300 字以上の区切りを 1 つ選んで、Gemini(gemini-3.8-flash)に「この文章を読めば答えられる質問」を 1 つずつ作らせました。検索窓に打つような自然な質問にし、本文の言い回しや見出しをそのまま写さずに言い換えるよう指示しています。質問の形にならなかったものなどを除いた 174 問を使いました。たとえば次のような質問です。

  • 現代自動車がボストン・ダイナミクスを完全に子会社化したのはいつですか?
  • ナスダック100に連動する東証ETFの中で信託報酬が一番低い銘柄は何ですか?

正解は、その質問を作った元の区切り 1 つです。物差しは次の 4 つです。

  • R@1・R@5: 正解の区切りが、検索結果の 1 位・上位 5 件に入った質問の割合
  • MRR@10: 正解が出た順位の逆数(1 位なら 1、2 位なら 0.5)の平均。10 位までに出なければ 0
  • ページ単位の R@5: 正解と同じ記事のどこかの区切りが上位 5 件に入れば、当たりとする。同じ記事の別の区切りにも答えが書いてある場合を拾う

RAG では上位の数件を LLM に渡すことが多いので、以下では R@5 を主に見ます。手元で置き換えられるとみなす目安は、測る前に「クラウドの埋め込みとの R@5 の差が 3 ポイント以内」と決めていました。

比べたモデル

モデル公開元パラメータ次元ライセンス
Ruri v3 310mcl-nagoya3.1 億768Apache 2.0
Qwen3-Embedding-0.6BQwen6.0 億1,024Apache 2.0
Qwen3-Embedding-4BQwen40 億2,560Apache 2.0
PLaMo-Embedding-1BPreferred Networks10.5 億2,048Apache 2.0
Ruri v3 のリランカー 310mcl-nagoya3.2 億—Apache 2.0
Qwen3-Reranker-4BQwen40 億—Apache 2.0
gemini-embedding-2(クラウド)Google非公開3,072Gemini API で利用

パラメータの数とライセンスは Hugging Face の各モデルのページ(2026年10月1日時点)から。

測った環境

項目内容
GPUGeForce RTX 5060 Ti 16GB(電力の上限 180W)
CPU・メモリCore i5-12400F・DDR4-3200 32GB
OS・ドライバWindows 11・NVIDIA ドライバ 610.47
ソフトPyTorch 2.11.0(CUDA 12.8 版)・sentence-transformers 6.1.0・transformers 5.17.0(PLaMo-Embedding だけ 4.57.6)
数の型埋め込みと Qwen3-Reranker-4B は float16(PLaMo-Embedding だけ bfloat16。理由は後述)。Ruri v3 のリランカーは既定の設定のまま
埋め込みの使い方文書は「記事の題・見出し・本文」をつないだもの。Ruri v3 は質問の頭に「検索クエリ: 」、文書の頭に「検索文書: 」を付ける。Qwen3-Embedding は質問に既定の指示文を付ける(sentence-transformers の prompt_name="query")。PLaMo-Embedding は付属のコードの encode_query・encode_document。近さはコサイン類似度
リランカー埋め込みの上位 20 件を並べ替える。Qwen3-Reranker-4B は公式の書式で「yes」と答える確率を点にする(文書は 1,500 字まで)。Ruri v3 のリランカーは sentence-transformers の CrossEncoder で点を付ける
比べる相手Gemini API の gemini-embedding-2(文書は RETRIEVAL_DOCUMENT、質問は RETRIEVAL_QUERY の種類で埋め込む)と、文字の一致で探す BM25(2 文字ずつに区切る。CPU で計算)

結果 1: 埋め込みだけで探す

方式R@1R@5MRR@10ページ単位 R@5
BM25(2 文字ずつ)0.1900.5060.3170.690
Gemini の埋め込み(クラウド)0.3620.7070.5010.770
Ruri v3 310m0.3220.6380.4540.730
Qwen3-Embedding-0.6B0.2410.6210.4030.718
Qwen3-Embedding-4B0.3100.6610.4560.753
PLaMo-Embedding-1B(bfloat16)0.2930.6380.4490.741

174 問の結果。2026年9月29日に測定(PLaMo-Embedding は 9月30日)。

かかった時間と VRAM は次のとおりです。

方式文書 2,507 件質問 174 問VRAM
Gemini の埋め込み(クラウド)79.5 秒5.3 秒—
Ruri v3 310m32.5 秒0.13 秒2,000MiB
Qwen3-Embedding-0.6B86.4 秒0.34 秒3,898MiB
Qwen3-Embedding-4B384.6 秒1.8 秒12,155MiB
PLaMo-Embedding-1B(bfloat16)160.1 秒4.0 秒6,184MiB

それぞれ全件を埋め込むのにかかった時間(モデルの読み込みは含まない)。Gemini は API の往復を含む(100 件ずつ送った)。PLaMo-Embedding は付属のコードの使い方どおり質問を 1 問ずつ埋め込んだので、質問の時間が長い。VRAM は PyTorch が確保した量の最大値。

  • クラウドの Gemini の埋め込みが R@5 0.707 でいちばん高く、手元の最良の Qwen3-Embedding-4B は 0.661 でした。差は 4.6 ポイントで、測る前に決めた目安(3 ポイント以内)には届きません
  • ただし 174 問では、この差が偶然でも出る大きさかどうかを見分けきれません。同じ質問どうしで比べると、Gemini だけが当てた質問が 17 問、Qwen3-Embedding-4B だけが当てた質問が 9 問でした。この程度の偏りは偶然でも 17% ほどの確率で起きます(McNemar 検定、p=0.17)
  • 手元の 3 本(Qwen3-Embedding-4B・Ruri v3・PLaMo-Embedding-1B)の差は 2.3 ポイント以内で、偶然の範囲でした(p=0.58〜1.0)。Ruri v3 は VRAM が約 6 分の 1、文書の埋め込みの時間が約 12 分の 1 で、Qwen3-Embedding-4B と大差ない成績です
  • 文字の一致で探す BM25 は 0.506 で、言い換えた質問には弱い結果でした。記事単位で見れば 0.690 まで上がります

結果 2: リランカーで並べ替える

埋め込みで拾った上位 20 件を、リランカーで並べ替えました。埋め込みは Ruri v3 と Qwen3-Embedding-4B の 2 通り、リランカーは Ruri v3 のリランカー(3.2 億パラメータ)と Qwen3-Reranker-4B(40 億)の 2 通りです。

埋め込み → リランカーR@1R@5MRR@10並べ替え 1 問
Ruri v3 → Ruri v3 のリランカー0.4140.7300.5481.0 秒
Ruri v3 → Qwen3-Reranker-4B0.4310.7820.5814.8 秒
Qwen3-Embedding-4B → Ruri v3 のリランカー0.4250.7300.5511.1 秒
Qwen3-Embedding-4B → Qwen3-Reranker-4B0.4370.7700.5785.1 秒
(参考)Gemini の埋め込みだけ0.3620.7070.501—

並べ替え 1 問は、174 問それぞれの上位 20 件を並べ替えた時間の平均(合計は上から 173.6・835.1・189.6・895.1 秒。埋め込みの時間は含まない)。ページ単位の R@5 は上から 0.770・0.810・0.776・0.793。リランカーの VRAM は測っていない。2026年9月29日に測定。

  • どの組み合わせでも、1 位の当たり(R@1)が 0.31〜0.32 から 0.41〜0.44 に、R@5 が 7〜14 ポイント上がりました
  • 最良は Ruri v3 → Qwen3-Reranker-4B の 0.782 で、Gemini の埋め込みだけ(0.707)を 7.5 ポイント上回りました。こちらだけが当てた質問 17 問に対し、Gemini だけが当てた質問は 4 問で、偶然では説明しにくい差です(p=0.007)。ただし Gemini の側にも並べ替えを足せば上がるはずなので、「手元の方がクラウドより上」とまでは言えません
  • 軽い組み合わせ(Ruri v3 → Ruri v3 のリランカー)は 0.730 で、Gemini の埋め込みだけと並びました(p=0.50)。Ruri v3 だけ(0.638)から上がった分は、偶然では説明しにくい大きさです(p=0.002)
  • 埋め込みを大きい Qwen3-Embedding-4B にしても、並べ替えた後の成績はほとんど変わりませんでした(0.730 と 0.730、0.770 と 0.782)。時間をかけるなら、埋め込みを大きくするより、並べ替えにかけたほうが成績が上がりました
  • Qwen3-Reranker-4B は 1 問 5 秒前後かかり、Ruri v3 のリランカーの約 5 倍です

使い分けの目安

  • 手軽さ重視: Ruri v3(VRAM 2,000MiB)で探し、Ruri v3 のリランカーで上位 20 件を並べ替える。R@5 0.730、並べ替えは 1 問 約 1 秒
  • 精度重視: 同じ Ruri v3 で探し、Qwen3-Reranker-4B で並べ替える。R@5 0.782、1 問 約 5 秒
  • 埋め込みだけで済ませる: 手元のモデルどうしの差は小さいので、VRAM と速さで選んでよい

PLaMo-Embedding-1B を動かすときの注意

PLaMo-Embedding-1B は、sentence-transformers ではなく、モデルに付属するコード(trust_remote_code=True)で動かします。手元では次の 3 か所でつまずきました。

  • sentencepiece 0.2.2: トークナイザーの読み込みで AttributeError: 'SentencePieceProcessor' object has no attribute 'Init'。0.2.1 にすると通りました
  • transformers 5 系(5.17.0): 埋め込みの途中で AttributeError: 'PlamoConfig' object has no attribute 'max_length'。4 系(4.57.6)にすると動きました
  • float16: 動きはしますが、一部の文書の埋め込みが NaN(数として壊れた値)になり、R@5 が 0.586 に下がりました。bfloat16 との差は、片方だけが当てた質問が 10 問対 1 問です(p=0.01)。dtype=torch.bfloat16 で読み込むと、文書 2,507 件・質問 174 問とも NaN は 0 で、R@5 は 0.638 でした

float16 は表せる数の範囲が狭いので、計算の途中であふれたとみられます(原因は確かめていません)。

測っていないこと

  • クラウドの側にリランカーを足した場合(Gemini の埋め込み+並べ替え)
  • 人が書いた質問。今回の質問は LLM に言い換えさせたもので、しかも質問を作ったのも Gemini です。Gemini の埋め込みに有利に働いた可能性は否定できません
  • 投資の解説記事以外の文書(マニュアル・社内の文書・会話の記録など)と、もっと大きな文書の集まり
  • 検索した後に LLM が答えを書く段の出来
  • ほかの大きさのモデル(Ruri v3 の 30m〜130m、Qwen3-Embedding-8B、Qwen3-Reranker の 0.6B・8B)と、埋め込みの次元を減らした場合
  • リランカーの VRAM と、並べ替える候補の数(今回は 20 件)を変えた場合

まとめ

  • 日本語の文書 2,507 区切り・174 問では、埋め込みだけならクラウドの Gemini(R@5 0.707)が手元の最良(Qwen3-Embedding-4B・0.661)を上回った。ただし差は 174 問では偶然と見分けきれない
  • 手元の埋め込みモデル 3 本(Qwen3-Embedding-4B・Ruri v3・PLaMo-Embedding-1B)の差は小さく、VRAM 2,000MiB の Ruri v3 で足りる
  • リランカーを足すと大きく上がる(Ruri v3 → Qwen3-Reranker-4B で 0.782、Ruri v3 → Ruri v3 のリランカーで 0.730・RTX 5060 Ti・2026年9月29日時点)
  • PLaMo-Embedding-1B は bfloat16・transformers 4 系・sentencepiece 0.2.1 で動かす

出典

← 検証ノートの一覧へ

この記事は、手元の機材で行った測定をもとにした一般的な技術情報の提供を目的としており、特定の製品・ソフトウェア・サービスの購入や利用を推奨・勧誘するものではありません。数値は 2026年9月29日〜30日時点の測定で、モデル・ソフトの版・設定・文書と質問の選び方によって変わることがあります。