自動埋め込みの概要
自動埋め込み機能を使用すると、独自のベクターを用意することなく、プレーンテキストで直接ベクター検索を実行できます。この機能を使用すると、テキストデータを直接挿入し、テキストクエリを使用してセマンティック検索を実行できます。TiDBはバックグラウンドでテキストを自動的にベクターに変換します。
自動埋め込みを使用する場合の基本的なワークフローは次のとおりです。
EMBED_TEXT()
使用して、テキスト列と生成されたベクター列を持つテーブルを定義します。- テキスト データを挿入します。ベクトルは自動的に生成され、同時に保存されます。
- テキストを使用したクエリ- 意味的に類似したコンテンツを見つけるには
VEC_EMBED_COSINE_DISTANCE()
またはVEC_EMBED_L2_DISTANCE()
使用します。
可用性
現在、自動埋め込みは次の AWS リージョンのTiDB Cloud Starter クラスターでのみ利用できます。
Frankfurt (eu-central-1)
Oregon (us-west-2)
N. Virginia (us-east-1)
クイックスタートの例
ヒント:
Python の使用方法については、 PyTiDB ドキュメント参照してください。
以下の例は、コサイン距離を用いた自動埋め込みを使用してセマンティック検索を実行する方法を示しています。この例では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 | サポートされているモデルの例 |
---|---|---|---|---|
ハグフェイス推論 | HuggingFaceの埋め込み | ✅ | 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()
と同じ計算方法を用いますが、クエリテキストの埋め込みを自動生成します。