自動埋め込みの概要
自動埋め込み機能を使用すると、独自のベクターを用意することなく、プレーンテキストで直接ベクター検索を実行できます。この機能を使用すると、テキストデータを直接挿入し、テキストクエリを使用してセマンティック検索を実行できます。TiDBはバックグラウンドでテキストを自動的にベクターに変換します。
自動埋め込みを使用する場合の基本的なワークフローは次のとおりです。
EMBED_TEXT()を使用して、テキスト列と生成されたベクター列を持つテーブルを定義します。- テキスト データを挿入します。ベクターは自動的に生成され、保存されます。
- テキストを使用したクエリ- 意味的に類似したコンテンツを見つけるには
VEC_EMBED_COSINE_DISTANCE()またはVEC_EMBED_L2_DISTANCE()を使用します。
注記:
自動埋め込みは、AWS でホストされているTiDB Cloud Starter クラスターでのみ利用できます。
クイックスタートの例
ヒント:
Python の使用方法については、 Pythonで自動埋め込みを使用する参照してください。
以下の例は、コサイン距離を用いた自動埋め込みを使用してセマンティック検索を実行する方法を示しています。この例ではAPIキーは必要ありません。
-- Create a table with auto-embedding
-- The dimension of the vector column must match the dimension of the embedding model;
-- Otherwise, TiDB returns an error when inserting data.
CREATE TABLE documents (
id INT PRIMARY KEY AUTO_INCREMENT,
content TEXT,
content_vector VECTOR(1024) GENERATED ALWAYS AS (
EMBED_TEXT("tidbcloud_free/amazon/titan-embed-text-v2", content)
) STORED
);
-- Insert text data (vectors are generated automatically)
INSERT INTO documents (content) VALUES
("Electric vehicles reduce air pollution in cities."),
("Solar panels convert sunlight into renewable energy."),
("Plant-based diets lower carbon footprints significantly."),
("Deep learning algorithms improve medical diagnosis accuracy."),
("Blockchain technology enhances data security systems.");
-- Search for semantically similar content using text query
SELECT id, content FROM documents
ORDER BY VEC_EMBED_COSINE_DISTANCE(
content_vector,
"Renewable energy solutions for environmental protection"
)
LIMIT 3;
出力は次のようになります。
+----+--------------------------------------------------------------+
| id | content |
+----+--------------------------------------------------------------+
| 2 | Solar panels convert sunlight into renewable energy. |
| 1 | Electric vehicles reduce air pollution in cities. |
| 4 | Deep learning algorithms improve medical diagnosis accuracy. |
+----+--------------------------------------------------------------+
上記の例ではAmazon Titanモデルを使用しています。他のモデルについては利用可能なテキスト埋め込みモデル参照してください。
自動埋め込み + ベクトルインデックス
自動埋め込みはベクトルインデックスと互換性があり、クエリパフォーマンスを向上させます。生成されたベクター列にベクターインデックスを定義すると、自動的に使用されます。
-- Create a table with auto-embedding and a vector index
CREATE TABLE documents (
id INT PRIMARY KEY AUTO_INCREMENT,
content TEXT,
content_vector VECTOR(1024) GENERATED ALWAYS AS (
EMBED_TEXT("tidbcloud_free/amazon/titan-embed-text-v2", content)
) STORED,
VECTOR INDEX ((VEC_COSINE_DISTANCE(content_vector)))
);
-- Insert text data (vectors are generated automatically)
INSERT INTO documents (content) VALUES
("Electric vehicles reduce air pollution in cities."),
("Solar panels convert sunlight into renewable energy."),
("Plant-based diets lower carbon footprints significantly."),
("Deep learning algorithms improve medical diagnosis accuracy."),
("Blockchain technology enhances data security systems.");
-- Search for semantically similar content with a text query on the vector index using the same VEC_EMBED_COSINE_DISTANCE() function
SELECT id, content FROM documents
ORDER BY VEC_EMBED_COSINE_DISTANCE(
content_vector,
"Renewable energy solutions for environmental protection"
)
LIMIT 3;
注記:
- ベクトルインデックスを定義するときは、
VEC_COSINE_DISTANCE()またはVEC_L2_DISTANCE()を使用します。- クエリを実行するときは、
VEC_EMBED_COSINE_DISTANCE()またはVEC_EMBED_L2_DISTANCE()を使用します。
利用可能なテキスト埋め込みモデル
TiDB Cloudは様々な埋め込みモデルをサポートしています。ニーズに最適なモデルをお選びください。
| 埋め込みモデル | ドキュメント | TiDB Cloud 1がホスト | BYOK 2 |
|---|---|---|---|
| アマゾンタイタン | Amazon Titan 埋め込み | ✅ | |
| コヒア | コヒーレ埋め込み | ✅ | ✅ |
| ジナ・アイ | Jina AI 埋め込み | ✅ | |
| オープンAI | OpenAI 埋め込み | ✅ | |
| ジェミニ | ジェミニ埋め込み | ✅ |
TiDB Cloudがサポートする次の推論サービスを通じて、オープンソースの埋め込みモデルを使用することもできます。
| 埋め込みモデル | ドキュメント | TiDB Cloud 1がホスト | BYOK 2 | サポートされているモデルの例 |
|---|---|---|---|---|
| 抱きしめる顔の推論 | ハグフェイス埋め込み | ✅ | bge-m3 multilingual-e5-large | |
| NVIDIA NIM | NVIDIA NIM 埋め込み | ✅ | bge-m3 nv-embed-v1 |
自動埋め込みの仕組み
自動埋め込みは、 EMBED_TEXT()関数を使用して、選択した埋め込みモデルに基づいてテキストをベクトル埋め込みに変換します。生成されたベクトルはVECTOR列に保存され、 VEC_EMBED_COSINE_DISTANCE()またはVEC_EMBED_L2_DISTANCE()使用してプレーンテキストでクエリできます。
内部的には、 VEC_EMBED_COSINE_DISTANCE()とVEC_EMBED_L2_DISTANCE() VEC_COSINE_DISTANCE()とVEC_L2_DISTANCE()として実行され、テキスト クエリは自動的にベクトル埋め込みに変換されます。
主な関数
EMBED_TEXT()
テキストをベクトル埋め込みに変換します。
EMBED_TEXT("model_name", text_content[, additional_json_options])
テキスト データを挿入または更新するときに埋め込みを自動的に生成するには、この関数をGENERATED ALWAYS AS節で使用します。
VEC_EMBED_COSINE_DISTANCE()
ベクトル列に格納されたベクトルとテキスト クエリ間のコサイン類似度を計算します。
VEC_EMBED_COSINE_DISTANCE(vector_column, "query_text")
この関数をORDER BY節で使用すると、コサイン距離に基づいて結果をランク付けできます。3 VEC_COSINE_DISTANCE()同じ計算式を用いますが、クエリテキストの埋め込みを自動生成します。
VEC_EMBED_L2_DISTANCE()
保存されたベクトルとテキスト クエリ間の L2 (ユークリッド) 距離を計算します。
VEC_EMBED_L2_DISTANCE(vector_column, "query_text")
この関数をORDER BY節で使用すると、L2距離に基づいて結果をランク付けできます。3 VEC_L2_DISTANCE()同じ計算式を用いますが、クエリテキストの埋め込みは自動的に生成されます。
Pythonで自動埋め込みを使用する
TiDB は、さまざまな埋め込みプロバイダーやモデルと統合するための統一されたインターフェースを提供します。
- プログラムによる使用: AI SDK の
EmbeddingFunctionクラスを使用して、特定のプロバイダーまたはモデルの埋め込み関数を作成します。 - SQL の使用:
EMBED_TEXT関数を使用して、テキスト データから直接埋め込みを生成します。
さまざまな埋め込みプロバイダーおよびモデルを操作するには、 EmbeddingFunctionクラスを使用します。
from pytidb.embeddings import EmbeddingFunction
embed_func = EmbeddingFunction(
model_name="<provider_name>/<model_name>",
)
パラメータ:
model_name(必須) : 使用する埋め込みモデルを{provider_name}/{model_name}形式で指定します。dimensions(オプション) : 出力ベクトル埋め込みの次元数。指定されておらず、モデルにデフォルトの次元がない場合、初期化時にテスト文字列が埋め込まれ、実際の次元が自動的に決定されます。api_key(オプション) : 埋め込みサービスにアクセスするためのAPIキー。明示的に設定されていない場合は、プロバイダーのデフォルトの環境変数からキーを取得します。api_base(オプション) : 埋め込み API サービスのベース URL。use_server(オプション) : TiDB Cloud のホスト型埋め込みサービスを使用するかどうか。TiDB TiDB Cloud Starter の場合、デフォルトはTrueです。multimodal(オプション) : マルチモーダル埋め込みモデルを使用するかどうか。有効にすると、use_serverは自動的にFalseに設定され、埋め込みサービスはクライアント側で呼び出されます。