ユニット 2 / 11

埋め込みとベクトル データベース ロジック

利益:

  • 埋め込みによりテキストが意味空間内のベクトルに変換され、同様の意味は近いベクトルであることを理解する
  • ANN 検索がコサインおよびドットの類似性メトリクスでどのように機能するかを説明する
  • コスト、規模、メタデータ フィルタリングの必要性に基づいて一般的なベクトル データベースを選択する

RAG の中心となるのは、「ユーザーの質問に最も近いテキストはどれですか?」という 1 つの質問です。コンピューターは文字通りではなく、数字を使用してテキストを処理します。そのため、最初にテキストをその意味を伝える数値に変換する必要があります。それが埋め込みです。テキストを、そのテキストの意味を表す一連の数字 (ベクトル) に変換するプロセスです。この単元を完了すると、埋め込みの仕組み、類似性の測定方法、および適切なベクトル データベースの選択方法がわかるようになります。

埋め込み: 意味を座標に変換する

埋め込みモデル (特別にトレーニングされた人工知能) は、提供されたテキストを、たとえば 1024 個の数値のベクトルに変換します。このベクトルを多次元空間の座標として考えてください。魔法はこれです。意味が似ているテキストは、この空間内で近い座標に分類されます。

簡単な例として、「年次休暇」、「休暇付与」、「年次有給休暇」は言葉は異なりますが、意味は同じであり、ベクトルは互いに近いものです。 「給与計算」は別問題で、そのベクトルは遠いものです。そこでユーザーは「休暇は何日ありますか?」と尋ねます。聞けば「休日」の文字はなく「年次休暇は14日」と書かれた書類も見つかります。これは、従来のキーワード検索 (単語に完全に一致する検索) では実行できないことです。

ヒント: 埋め込みを「意味の指紋」と考えてください。同じ意味を持つ 2 つの文の指紋は似ているように見えます。言葉は違っても。

重要なルール: 質問を埋め込むときに使用するモデルは、ドキュメントを埋め込むときに使用するモデルと同じである必要があります。モデルが違えば空間も異なります。コーディネートが比類のないものになります。

類似性を測定するにはどうすればよいですか?

2 つのベクトルがどの程度類似しているかを測定する方法はいくつかあります。最も一般的なのはコサイン類似度です。これは 2 つのベクトル間の角度を測定します。角度が小さい (ベクトルが同じ方向を向いている) 場合、類似性は高くなります。値は -1 から 1 の間です。 1 に近い = 非常に似ています。

基準

何を測定するのでしょうか?

いつが好ましいですか?

コサイン

ベクトル間の角度(方向)

最も一般的なもの。テキストの意味的類似性のデフォルト

内積

方向と大きさを合わせて

ベクトルが正規化されると、コサインと同じ結果が得られます。速いです

ユークリッド (ユークリッド距離)

座標間の直線距離

一部のクラスタリング シナリオでは、本文ではあまり使われない

実際には、ほとんどの埋め込みモデルは正規化されたベクトル (サイズを 1 に設定) を生成します。この場合、コサインとドット積は同じ順序になります。意思決定が麻痺しないでください。コサインから始めましょう。

何百万ものベクトルを 1 つずつ比較するのは時間がかかります。このため、ベクトル データベースでは ANN (近似最近傍) アルゴリズムが使用されます。 ANN は、「正確に最も近い」ではなく「ほぼ正確に最も近い」を非常に迅速に見つけます。たとえば、HNSW と呼ばれるメソッドは、1,000 万個のベクトルでも数ミリ秒で結果を返すことができます。精度を少し犠牲にしても、大幅な速度が得られます。

ベクトルデータベースは何をするのですか?

ベクトル データベースは、(1) ベクトルを保存する、(2) クエリ ベクトルに最も類似したベクトルを迅速に検索する、(3) 各ベクトルの隣にあるメタデータによってフィルタリングする、という 3 つのことを同時に実行します。メタデータは、ソース ファイル、日付、部門、プライバシー レベルなど、その部分に付けるタグです。エンタープライズ RAG ではメタデータのフィルタリングが重要です。 「財務部門の 2025 年のドキュメントのみを検索する」などの制限を設定できる必要があるためです。

# ベクターデータベースへの登録 (概念的)vektor_db.add( id="izin-politikasi-parca-3", vektor=embed("年次有給休暇は 14 日..."), text="年次有給休暇は 14 日...", metadata={"source": "ik_el_kitabi.pdf", "Department": "IK", "date": "2025-06", "privacy": "ic"})

# メタデータ フィルター検索 (概念的)result = vektor_db.search( vektor=embed("何日間の休暇がありますか?"), top_k=4, filter={"Department": "HR", "privacy": ["internal", "on"]})

適切なデータベースの選択

車両

注目の側面

適切な状況

組み込み / ファイルベース (組み込みライブラリ)

インストール不要、単一マシン

プロトタイプ、小型キット (数十万部品未満)

マネージドクラウドサービス

スケーリングとメンテナンスはあなたの責任ではありません

本番環境、急速に増大するデータ、小規模チーム

独自のサーバー上のオープンソース

フルコントロール、データはあなたのもののまま

プライバシー義務、既存のインフラストラクチャ

既存のデータベースへの追加

個別のシステムを管理していない

すでに使用している DB にベクター サポートを追加する

選択する際は、何個あるのかを尋ねてください。メタデータのフィルタリングはどの程度重要ですか?データを社外に持ち出すことはできますか (機密保持)?チームはインフラストラクチャを運用できますか?多くの場合、小規模から始めて、必要に応じて拡張することが賢明です。

弱いアプローチ / 強いアプローチ

弱い (プレーンな埋め込みを保存し、メタデータなし):

テキストとベクターを保存するだけです。検索: 最も類似した 4 つのベクトルを返します。# 問題: 「現在の HR ドキュメントのみ」のようにフィルタリングできません。# 古い/未承認の部分も応答に含まれる可能性があります。

強力 (豊富なメタデータ + フィルター検索):

各作品にソース、日付、部門、プライバシータグを追加します。検索中のユーザーの権限と最新性に応じてフィルターします。 filter = {"privacy": user_authority, "date_date": "2024-01"}# したがって、結果は安全で最新のものになります。

ミニケース3個

ケース 1 — 間違ったモデルの組み合わせ。チームはモデル A でドキュメントを埋め込み、モデル B で質問を埋め込みました。検索では無意味な結果が返され、正答率は 31% にとどまりました。単一モデル (両方とも同じ埋め込みモデル) に切り替えると、その率は 88% に跳ね上がりました。教訓: 質問と文書は同じスペースにある必要があります。

ケース 2 — メタデータがない場合のプライバシー リスク。ヘルスケア企業では、すべての部門のドキュメントがメタデータなしで 1 つのプールに放り込まれていました。販売員が質問すると、システムは患者データの一部を文脈化しました。メタデータ + フィルターが (承認レベルに従って) 追加されると、このリスクは排除されました。回収では12個の不正品は一切持ち込まれません。

ケース 3 — スケールのボトルネック。ある電子商取引会社は、単純な「すべてスキャン」方法で 800 万件の商品説明を検索しました。各クエリには 6 秒かかりました。 HNSW ベースの ANN に切り替えると、時間は 45 ミリ秒に短縮され、精度の低下はわずか 1% でした。教訓:ビッグセットではANNは必須だ。

よくある間違い

  • 質問とドキュメントを異なるモデルで埋め込む: 結果は無意味です。常に 1 つのモデル。
  • メタデータのスキップ: フィルタリングはできません。プライバシーと最新情報をコントロールできなくなります。
  • 埋め込みを暗号化と間違える: 埋め込みは元に戻せる情報を運びます。機密データが「隠されている」と考えるのは間違いです。
  • 小さなセットに不必要に大規模なインフラストラクチャを構築する: 5,000 個のパーツを管理する巨大なクラスターは不必要に複雑になります。
  • 類似性の基準についてはあまり心配しないでください。テキストではコサインから始めてください。微調整は後ほど行います。
注意: 埋め込みでは、テキストの意味が数値に埋め込まれますが、コンテンツが「破壊」されるわけではありません。ベクトル データベースが漏洩すると、元の保存テキスト (ほとんどのインストールではテキストも保存されます) も侵害されます。ベクター リポジトリは、その中のドキュメントと同様に機密性を保ちます。

要約すると

  • 埋め込みにより、テキストがその意味を伝える数値のベクトルに変換されます。同様の意味は近いベクトルです。
  • 類似性は多くの場合、コサインによって測定されます。正規化されたベクトルの場合、ドット積では同じ結果が得られます。
  • ビッグ データでは、ANN (HNSW など) が正確な検索に取って代わり、精度をほとんど犠牲にすることなく優れた速度を実現します。
  • ベクトル データベースはベクトルの保存 + 類似性検索 + メタデータ フィルタリングを実行します。メタデータはエンタープライズ RAG にとって不可欠です。
  • 質問とドキュメントは同じ埋め込みモデルで翻訳する必要があります。そうしないと、座標を比較できません。

アプリケーションタスク

前の単元で選択した文書から 10 個の短い文章 (それぞれ 3 ~ 6 文) を抽出します。 (1) 各要素に対して少なくとも 3 つのメタデータ タグ (ソース、日付、および部門、製品、プライバシーなどのビジネス コンテキストに適した 3 番目のタグ) を設計します。 (2) 3 つの異なるユーザーの質問に対してどのメタデータ フィルターを適用するかを記述します。 (3) 異なる単語で同じ意味を表す 3 つの質問部分のペアを見つけて (例: 「休暇の権利」 ↔ 「年次休暇」)、それらがキーワード検索には一致しないが、埋め込みには一致する理由を 1 文で説明します。

チェックリスト

  • [ ] 埋め込みによってテキストが意味空間内のベクトルに変換され、同様の意味が近いことがわかります。
  • [ ] コサイン類似度は角度を測定し、テキストのデフォルトの設定であることは知っています。
  • [ ] ビッグデータにおいて ANN が必要な理由を説明できます。
  • [ ] メタデータが機密性と鮮度管理にとって重要である理由はわかりました。
  • [ ] 質問とドキュメントを同じ埋め込みモデルで翻訳するというルールに従います。