# エンベディングとは

文章や画像を、意味の近さを距離で表現できる数値の並びに変換したものです。検索や分類、重複の検出に利用され、モデルの変更時と文書の更新時に再変換する運用が必要です。

## エンベディングとは

エンベディングは、文章や画像の意味を数値の並びに変換したもので、意味の近い文書の検索などに利用します。テキストは浮動小数点数の並びとして[表現され](https://platform.openai.com/docs/guides/embeddings)、2つの並びの距離の近さが意味の近さに対応します。この数値の並びをベクトルと呼び、日本語では埋め込みベクトルとも呼びます。エンベディングを利用した検索はベクトル検索と呼ばれます。

たとえば社内の文書検索で「経費精算の締め日はいつか」と入力すると、「精算の申請期限」と記載された規程の該当箇所が上位に表示されます。質問と文書で語が一致していなくても、意味の類似した文書も上位に表示されます。

エンベディングを利用すると、語の一致ではなく意味の近さで文書を比較できます。検索のほか重複した文書の検出、文章の分類、推薦、異常の検出に[利用されています](https://platform.openai.com/docs/guides/embeddings)。

類似した用語との違いは変換した結果が何を表現するかです。エンベディングは文章の意味を、ベクトル空間の中の位置として表現します。キーワード検索が語を含む文書だけを抽出するのに対し、エンベディングは語が異なっても意味が類似した文書を候補に含めます。文章を分類するモデルは事前に設定した区分のどれに該当するかを出力しますが、エンベディングは区分を前提とせず、位置だけを出力します。

![質問を数値の並びに変換し、意味の近い文書を抽出して提示するまでの流れを示す図](https://media.marketing.kdotdev-tunnel.org/glossary-embedding-cabc348e931fe8c3d04814b9472d3ade0e3e497d548b42c43fd7ddae75f6d276.png)

## キーワード検索で該当文書を検出できない状況

キーワード検索は入力した語を含む文書を提示します。語の表記が文書によって異なる場合や、同じ意味を別の語で記載している場合は、該当する文書が候補に含まれません。

- 表記の揺れ。サーバとサーバー、ユーザーとユーザのように、同じ語を異なる表記で記載する文書がある
- 同義語と言い換え。問合せと照会、手順書と作業手順のように、語が異なっても意味が類似する

キーワード検索とベクトル検索を併用する方式は[ハイブリッド検索](https://learn.microsoft.com/en-us/azure/search/hybrid-search-overview)と呼ばれ、検索サービスの機能として提供されています。

![表記の揺れ、同義語、型番の3つの例について、キーワード検索とエンベディングのどちらが該当文書を候補に含められるかを比較した図](https://media.marketing.kdotdev-tunnel.org/glossary-embedding-dab490276aee14d5bcc10707633585dcf6c30566538d2fb1b0bb84bb2d2a38a9.png)

## 何に利用するか

次の用途はいずれも意味の近さの測定を基礎にしています。

| 用途 | 何をするか | 例 |
|---|---|---|
| 検索 | 質問と意味が類似した文書を抽出する | 社内規程の検索、製品マニュアルの問合せ対応 |
| 重複の検出 | 類似した文書や問合せを集約する | 同じ内容の問合せの集約、重複した商品説明の検出 |
| 分類 | 区分の説明文や既存文書と比較し、最も近い区分を付与する | 問合せの種類分け、文書のタグ付け |
| 推薦 | 利用者が閲覧した文書に類似した文書を提示する | 関連資料の提示、類似した記事の表示 |
| 異常の検出 | ほかの文書との距離が一定以上のものを検出する | 通常と異なる報告の検出 |

生成AIに社内の資料を参照させる仕組みはRAG（Retrieval-Augmented Generation）と呼ばれ、資料を検索する工程にエンベディングを利用することが多くあります。ただし、回答は生成AIが作成するため、エンベディングは回答の正確性を保証しません。

![検索、重複の検出、分類の3つの用途について、意味の近さを利用して何をするかと例を対応させた図](https://media.marketing.kdotdev-tunnel.org/glossary-embedding-3833610d3e6b412254081e084332ff1d2a9f0932eeb1799b9dec0e25ebc128b2.png)

## 検索の精度を左右する要素

同じ文章でも変換に利用するモデルや分割の単位などによって検索の結果が異なります。

- モデルの選択。モデルごとに学習に利用した言語や分野が異なるため、日本語の文書には日本語を含むデータで学習したモデルを選択する
- 分割の単位。長い文書をそのまま変換すると、複数の話題が1つのベクトルに混在し、個々の話題と質問との近さが測定しにくくなる。見出しや段落の単位に分割して変換する
- 次元数。モデルが出力する数値の並びの長さで、1536や3072といった値が[採用されている](https://platform.openai.com/docs/guides/embeddings)。次元数が多いほど微細な違いを表現できる余地は増加するが、保存と計算の量も増加する。精度は学習の方法にも依存するため、次元数だけでは判断できない。モデルの提供者によっては出力する次元数を指定して削減できる
- 距離の測定方法。2つのベクトルの角度で近さを測定するコサイン類似度が一般的に[利用される](https://learn.microsoft.com/en-us/azure/ai-services/openai/concepts/understand-embeddings)。ベクトルの長さではなく向きだけを比較するため、文書の長さに左右されにくい
- 評価。目安として過去の質問を50件程度選択し、キーワード検索で該当文書を検出できなかった質問も含める。キーワード検索とベクトル検索のそれぞれで、上位5件に該当文書が含まれる割合を比較する。改善が10ポイント未満なら、分割の単位とモデルを再検討する

![モデルの選択、分割の単位、次元数、距離の測定方法、評価の5つの要素が検索の結果に影響することを示す図](https://media.marketing.kdotdev-tunnel.org/glossary-embedding-1f2b316e29b08abe4c696b0572bf20d6dc5dbbc03957893bbcad95696cc30249.png)

## 費用と運用

費用には変換の都度発生する利用料、変換した結果の保存費用、モデル変更時の再計算費用があります。

- 変換の利用料。入力した文章の量に比例し、量はトークンという単位で計測する。text-embedding-3-smallの料金は100万トークンあたり0.02ドル、text-embedding-3-largeが[0.13ドル](https://platform.openai.com/docs/pricing)。日本語は英語と比較して同じ内容でもトークン数が多くなる傾向があるため、実際の文書でトークン数を計測して算定する
- 保存の費用。数値1つを4バイトで保存する場合、ベクトル1件の容量は次元数×4バイトで、1536次元なら約6キロバイト。100万件で約6ギガバイトとなり、検索用の索引の分が加算される
- 再計算の費用。モデルを変更すると、変更前と変更後のモデルではベクトル空間が異なり、変換済みのベクトルを変更後のベクトルと比較できないため、すべての文書を再計算する。100万件を1件500トークンで再計算すると5億トークンで、text-embedding-3-smallの[料金](https://platform.openai.com/docs/pricing)では約10ドルになる

運用では文書の追加と更新のたびに変換と保存を実施します。文書の閲覧権限を変更したときは、ベクトルと一緒に保存した閲覧可能な部署や利用者の情報も同時に更新します。検索結果を利用者の権限で限定しないと、権限のない文書が候補に含まれます。

モデルの提供者が最新のバージョンを公開した場合は、移行の要否を評価します。利用中のモデル名とバージョンを記録しておきます。

主な費用は変換の利用料ではなく、評価用の質問と正解文書の作成、分割方法の設計、再計算と再評価の作業時間です。設計と初回評価で、目安として数人日を想定します。

![変換の利用料、保存の費用、再計算の費用の3つを対比し、モデル変更時の再計算を強調した図](https://media.marketing.kdotdev-tunnel.org/glossary-embedding-8e7e3bc6ffdb067cd4468fbd98c7350410c0b40996859d6dc00c94b3619e862e.png)

## エンベディングを利用しないほうがよい状況

- 型番、条文番号、社員番号のように、文字の一致で検索する項目。意味の近さだけでは候補に含まれないことがあるため、キーワード検索を利用する
- 在庫数や残高のように、現在の値が必要な状況。業務システムから値を取得する
- 判断の理由の説明が必要な状況。なぜその文書が選択されたかを数値の並びから説明できないため、条件を明示した検索や人の確認で対応する
- 文書が数十件で、一覧を人が確認できる規模。検索の仕組みを用意せず、人が一覧を閲覧する

型番や条件による絞り込みはキーワード検索やフィルターで実施し、検索で得た候補をリランカーと呼ばれる順位付け用のモデルで、質問との関連度の順に並べ替える構成もあります。

![文字の一致で検索する項目、現在の値が必要な状況、判断の理由の説明が必要な状況、文書が少数の状況の4つについて、エンベディング以外の手段を対応させた図](https://media.marketing.kdotdev-tunnel.org/glossary-embedding-0ffb6cf0b2e373d38e05e5aa2e3dc4ef6fb6c54a29f9e36778ca20f6fe7c45da.png)

## よくある誤解

### エンベディングは文章の内容を理解している

エンベディングは文章の意味の近さを数値の位置として表現するもので、内容の正確性を判定するものではありません。事実と異なる文書でも内容が類似していれば上位に表示されます。検索の結果を業務に利用する場合は、原典で内容も確認します。

### 次元数を増加させれば検索の精度が向上する

次元数が多いほど微細な相違を表現できますが、精度は学習の方法と対象の文書によっても変化し、保存と計算の量も増加します。

### 一度作成すれば再作成は不要

文書を追加、更新するたびに、その文書の変換と保存が必要です。モデルを変更した場合はすべての文書を再計算します。更新した文書の変換が遅延すると、検索の結果に更新前の内容が表示され続けます。
