開発実践ガイド

Ollamaで埋め込みを作る方法|RAGの最初の一歩

Ollamaで埋め込みを作る方法 — RAGの最初の一歩
目次

公式サイトで次に進む

この記事で明示的に扱うソフトだけを表示します。配布・手順は各公式ページで確認してください。

local-gen.jpがファイルを配布するものではなく、互換性を保証するものでもありません。

OllamaでRAGを試すとき、最初からベクトルデータベース、文書分割、リランキング、回答生成まで全部組む必要はない。

まずは一つの文章を埋め込みへ変換し、数値の並びが返ることを確認する

埋め込みは通常のチャットとは役割が違う。この違いを先に理解すると、RAGがうまく動かないときに検索側と回答生成側を分けて調べやすい。

Ollamaで埋め込みを作る方法|RAGの最初の一歩の要点を図解

図を拡大して見る

図: 処理や設定の流れを1枚に整理。実際の操作条件は本文で確認する。

埋め込みは文章を数値ベクトルへ変える

Ollamaの公式資料では、埋め込みを意味検索やRAGに使う数値ベクトルとして説明している。

通常の生成モデルは文章を入力して文章を返す。一方、埋め込みモデルは、文章どうしの意味の近さを比べるための数値を返す。

文章生成:
文章 → 生成モデル → 文章

埋め込み:
文章 → 埋め込みモデル → 数値ベクトル

そのため「Ollamaで会話できた」だけでは、埋め込みの動作確認にはならない。

まずCLIで一文だけ試す

Ollamaの公式資料では、埋め込み対応モデルの例としてembeddinggemmaなどが案内されている。

CLIでは一文を渡して結果を確認できる。

ollama run embeddinggemma "ローカルAIで文書を検索する"

最初に見るのは検索品質ではなく、

  • モデルを取得・起動できる
  • 文章を受け取れる
  • 数値ベクトルを返せる

という3点だ。

ベクトルの次元数やモデルの人気だけで、日本語検索の品質まで判断しない。

APIでは/api/embedを使う

HTTPから使う場合、Ollamaの公式例では/api/embedへPOSTする。

curl -X POST http://localhost:11434/api/embed \
  -H "Content-Type: application/json" \
  -d '{
    "model": "embeddinggemma",
    "input": "ローカルAIで文書を検索する"
  }'

返答のembeddingsへ数値ベクトルが入れば、最初のAPI確認はできている。

複数の文章をまとめて入力できる方法もあるが、初回は一文だけで十分だ。

文書と質問は同じ埋め込みモデルを使う

類似検索では、検索対象の文章と検索する質問を同じ数値空間で比べる必要がある。

Ollamaの公式資料でも、索引を作るときと検索するときに同じ埋め込みモデルを使うことが案内されている。

文書A → 同じ埋め込みモデル → ベクトルA
文書B → 同じ埋め込みモデル → ベクトルB
文書C → 同じ埋め込みモデル → ベクトルC

質問   → 同じ埋め込みモデル → 質問ベクトル

質問ベクトルとA・B・Cを比較

途中で埋め込みモデルを変更した場合、古い索引をそのまま使えるとは決めつけない。検索対象側も同じ条件で作り直す前提で確認する。

RAGへ進む前に短い文章だけで類似検索する

ベクトルが取得できたら、次は大量のPDFではなく、答えが分かっている短い文章を数件用意する。

A: RTX 5090はGPUである。
B: Ollamaはローカルでモデルを実行するソフトの一つである。
C: SSDはモデルファイルの保存先に使う。

「Ollamaでモデルを動かしたい」のような質問を同じ埋め込みモデルで数値化し、どの文章が近いと判定されるかを見る。

Ollamaの公式資料では、意味の近さを比べる方法としてコサイン類似度が案内されている。

期待した文章が上位に来なければ、回答生成モデルをつなぐ前に、埋め込みモデル、文書、分割方法、質問の作り方を確認できる。

埋め込みが動いてもRAG全体の品質はまだ決まらない

数値ベクトルが返ったことは、RAG全体が正しく動く保証ではない。

その後も、

  • 文書を正しく読み取る
  • 検索しやすい単位へ分ける
  • 埋め込みを作る
  • 関係する文書を検索する
  • 必要なら検索結果を並べ直す
  • 取得した文書を生成モデルへ渡す
  • 回答と元文書を照合する

といった段階がある。

まずは一つの埋め込みを取得し、数件の文章で類似検索まで確認する。そこで検索側が動いてから、文書数や回答生成を追加する方が原因を追いやすい。

Ollama自体の導入がまだなら、WindowsでOllamaを始める手順から確認できる。

まとめ

  • 埋め込みは文章を生成する処理ではなく、意味検索やRAGで使う数値ベクトルを作る処理
  • OllamaではCLIや`/api/embed`を使って文章の埋め込みを作れる
  • 検索対象の文書と検索する質問は、同じ埋め込みモデルで数値化する
  • まず数件の短い文章で類似検索を確認してから、大量文書を使うRAGへ広げる
同じテーマから

この記事で扱ったデータ

モデル・GPU・実行ソフトの確認済みデータを、記事とは別に確かめられます。

サイト内検索