UTL_TO_EMBEDDINGおよびUTL_TO_EMBEDDINGS
テキスト・ドキュメントおよびイメージから1つ以上のベクトル埋込みを生成するには、DBMS_VECTOR.UTL_TO_EMBEDDING
およびDBMS_VECTOR.UTL_TO_EMBEDDINGS
チェーン可能ユーティリティ関数を使用します。
用途
テキスト・ドキュメントおよびイメージから1つ以上のベクトル埋込みを自動的に生成します。
-
テキストからベクトルへ:
Oracle Databaseまたはサードパーティのサービス・プロバイダにアクセスすることで、テキストから埋込みへの変換を実行できます:
-
サービス・プロバイダとしてのOracle Database (デフォルト設定):
このAPIは、データベースにロードするONNX形式の埋込みモデルをコールします。
-
サードパーティの埋込みモデル:
このAPIは、選択したリモート・サービス・プロバイダ(Cohere、生成AI、Google AI、Hugging Face、OpenAIまたはVertex AI)またはローカル・サービス・プロバイダ(Ollama)に対してREST APIコールを実行します。
-
-
イメージからベクトルへ:
イメージから埋込みへの変換を実行することもできます。このAPIは、選択したイメージ埋込みモデルまたはVertex AIによるマルチモーダル埋込みモデルに対するRESTコールを実行します。現在、この操作でサポートされているサービス・プロバイダはVertex AIのみであることに注意してください。
警告:
データベースの特定の機能により、たとえば、REST APIへのアクセスを容易にするJSON仕様を使用して、第三者によって個別に提供されるサービスにアクセスできる場合があります。
お客様によるこれらの機能の使用は、お客様自身の責任においてのみ行われ、お客様は、当該第三者サービスの使用に関連するあらゆる条件を遵守する責任を負います。第三者のサービスに関するその他の条件にかかわらず、お客様は、かかるデータベース機能の使用によって、そのリスクを受諾し、当該アクセスにより生じた一切の損害について、Oracleの責任または法的責任を明示的に除外することになります。
構文
-
テキストからベクトルへ:
DBMS_VECTOR.UTL_TO_EMBEDDING ( DATA IN CLOB, PARAMS IN JSON default NULL ) return VECTOR;
DBMS_VECTOR.UTL_TO_EMBEDDINGS ( DATA IN VECTOR_ARRAY_T, PARAMS IN JSON default NULL ) return VECTOR_ARRAY_T;
-
イメージからベクトルへ:
DBMS_VECTOR.UTL_TO_EMBEDDING ( DATA IN BLOB, MODALITY IN VARCHAR2, PARAMS IN JSON default NULL ) return VECTOR;
データ
-
テキストからベクトルへ:
UTL_TO_EMBEDDING
は、テキスト・データ(テキスト文字列または小さいドキュメント)を含むCLOB
として入力を受け入れます。次に、テキストを1つの埋込み(VECTOR
)に変換します。UTL_TO_EMBEDDINGS
は、チャンクの配列(VECTOR_ARRAY_T
)を埋込みの配列(VECTOR_ARRAY_T
)に変換します。ノート:
データはCLOB
またはCLOB
のVECTOR_ARRAY_T
ですが、最大入力は4000文字です。大きい入力がある場合は、UTL_TO_CHUNKS
を使用して、渡す前にデータを小さいチャンクに分割できます。 -
イメージからベクトルへ:
UTL_TO_EMBEDDING
は、イメージなどのメディア・ファイルのメディア・データを含むBLOB
として入力を受け入れます。次に、イメージ入力を1つの埋込み(VECTOR
)に変換します。
生成された埋込みの出力には、次のものが含まれます:
{
"embed_id" : NUMBER,
"embed_data" : "VARCHAR2(4000)",
"embed_vector": "CLOB"
}
-
embed_id
は、各埋込みのID番号を示します。 -
embed_data
は、埋込みに変換される入力テキストを示します。 -
embed_vector
は、生成されたベクトル表現を示します。
MODALITY
BLOB
入力の場合、ベクトル化するコンテンツのタイプを指定します。サポートされている値はimage
のみです。
PARAMS
使用するサービス・プロバイダに応じて、入力パラメータをJSON形式で指定します。
{
"provider" : "database",
"model" : "<in-database ONNX embedding model filename>"
}
表12-12 データベース・プロバイダのパラメータの詳細
パラメータ | 説明 |
---|---|
|
Oracle Databaseをプロバイダとして使用する場合は、 |
|
インポートしたONNX埋込みモデルをOracle Databaseに格納する際のユーザー指定の名前。 ONNX形式の埋込みモデルがない場合は、「事前トレーニング済モデルからONNX形式への変換」に示すステップを実行します。 |
サードパーティ・プロバイダを使用している場合:
プロバイダに固有の追加の埋込みパラメータとともに、次のパラメータも設定します:
-
UTL_TO_EMBEDDING
の場合:{ "provider" : "<AI service provider>", "credential_name" : "<credential name>", "url" : "<REST endpoint URL for embedding service>", "model" : "<REST provider embedding model name>", "transfer_timeout": <maximum wait time for the request to complete>, "max_count": "<maximum calls to the AI service provider>", "<additional REST provider parameter>": "<REST provider parameter value>" }
-
UTL_TO_EMBEDDINGS
の場合:{ "provider" : "<AI service provider>", "credential_name" : "<credential name>", "url" : "<REST endpoint URL for embedding service>", "model" : "<REST provider embedding model name>", "transfer_timeout": <maximum wait time for the request to complete>, "batch_size" : "<number of vectors to request at a time>", "max_count": "<maximum calls to the AI service provider>", "<additional REST provider parameter>": "<REST provider parameter value>" }
表12-13 サードパーティ・プロバイダのパラメータの詳細
パラメータ | 説明 |
---|---|
|
この操作のためにアクセスするサードパーティ・サービス・プロバイダ。埋込みモデルにアクセスするために、指定したプロバイダに対してRESTコールが行われます。 イメージ入力の場合は、 テキスト入力の場合は、次のいずれかの値を指定します:
|
|
次の形式の資格証明の名前:
資格証明名には、REST APIコールを行うためのプロバイダにアクセスできるようにする認証資格証明が保持されます。 まず、資格証明を作成および格納するために |
|
「サポートされているサードパーティ・プロバイダの操作およびエンドポイント」にリストされている、各RESTコールのサードパーティ・プロバイダ・エンドポイントのURL。 |
|
次の形式でのサードパーティ埋込みモデルの名前:
スキーマを指定しない場合は、プロシージャ実行者のスキーマが使用されます。 ノート:
|
|
リクエストを完了するまでの最長待機時間。 デフォルト値は |
|
一度にリクエストするベクトルの最大数。 たとえば、バッチ・サイズが RESTコールの場合、入力のバッチを一度に送信する方が1コールごとに1つの入力をリクエストするよりも効率的です。バッチ・サイズを大きくするとパフォーマンスが向上しますが、特にプロバイダにレート制限がある場合は、バッチ・サイズを小さくすることでメモリーとデータの使用量を削減できることがあります。 デフォルト値や最大許容値は、サードパーティ・プロバイダの設定によって異なります。 |
|
特定のサードパーティ・プロバイダに対してAPIをコールできる最大回数。 整数nに設定すると、 |
追加のサードパーティ・プロバイダのパラメータ:
オプションで、プロバイダ固有の追加パラメータを指定します。
表12-14 追加のRESTプロバイダのパラメータの詳細
パラメータ | 説明 |
---|---|
|
ベクトル化する入力のタイプ。 |
すべてのサードパーティ・プロバイダの構成例を見てみましょう:
重要:
-
次の例は説明のための例です。使用するパラメータに関する正確な最新の情報については、サードパーティ・プロバイダのドキュメントを参照してください。
-
サポートされているすべてのRESTエンドポイントURLのリストは、「サポートされているサードパーティ・プロバイダの操作およびエンドポイント」を参照してください。
-
生成される埋込み結果は、埋込みモデルや浮動小数点精度に応じて、同じ入力と構成のリクエスト間で異なることがあります。ただし、ベクトル距離は類似するため、問合せには影響しません(また、意味的に正しい結果が得られます)。
{
"provider" : "cohere",
"credential_name": "COHERE_CRED",
"url" : "https://api.cohere.example.com/embed",
"model" : "embed-english-light-v2.0",
"input_type" : "search_query"
}
{
"provider" : "ocigenai",
"credential_name": "OCI_CRED",
"url" : "https://generativeai.oci.example.com/embedText",
"model" : "cohere.embed-english-v3.0",
"batch_size" : 10
}
{
"provider" : "googleai",
"credential_name": "GOOGLEAI_CRED",
"url" : "https://googleapis.example.com/models/",
"model" : "embedding-001",
"max_count" : 500
}
{
"provider" : "huggingface",
"credential_name": "HF_CRED",
"url" : "https://api.huggingface.example.com/",
"model" : "sentence-transformers/all-MiniLM-L6-v2"
}
{
"provider" : "ollama",
"host" : "local",
"url" : "http://localhost:11434/api/embeddings",
"model" : "phi3:mini"
}
{
"provider" : "openai",
"credential_name": "OPENAI_CRED",
"url" : "https://api.openai.example.com/embeddings",
"model" : "text-embedding-3-small"
}
{
"provider" : "vertexai",
"credential_name": "VERTEXAI_CRED",
"url" : "https://googleapis.example.com/models/",
"model" : "textembedding-gecko:predict"
}
例
次のように、SELECT
句でUTL_TO_EMBEDDING
、およびFROM
句でUTL_TO_EMBEDDINGS
を使用できます。
UTL_TO_EMBEDDING:
-
生成AIを使用してテキストからベクトルへ:
次の例では、
UTL_TO_EMBEDDING
を使用して、Hello world
を入力として埋込みを生成します。ここでは、プロバイダに生成AIを指定してアクセスすることで、cohere.embed-english-v3.0モデルが使用されます。
model
値は、「サポートされるサードパーティ・プロバイダの操作およびエンドポイント」に示されているように、生成AIで使用する他のサポートされるモデルに置き換えることができます。-- declare embedding parameters var params clob; begin :params := ' { "provider": "ocigenai", "credential_name": "OCI_CRED", "url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-english-v3.0", "batch_size": 10 }'; end; / -- get text embedding: PL/SQL example declare input clob; v vector; begin input := 'Hello world'; v := dbms_vector.utl_to_embedding(input, json(params)); dbms_output.put_line(vector_serialize(v)); exception when OTHERS THEN DBMS_OUTPUT.PUT_LINE (SQLERRM); DBMS_OUTPUT.PUT_LINE (SQLCODE); end; / -- get text embedding: select example select dbms_vector.utl_to_embedding('Hello world', json(:params)) from dual;
-
Vertex AIを使用してイメージからベクトルへ:
次の例では、
UTL_TO_EMBEDDING
を使用して、Vertex AIのマルチモーダル埋込みモデルにアクセスして埋込みを生成します。ここでは、入力は
parrots.jpg
、VEC_DUMP
はparrots.jpg
ファイルを格納するローカル・ディレクトリで、モダリティはimage
として指定されます。-- declare embedding parameters var params clob; begin :params := ' { "provider": "vertexai", "credential_name": "VERTEXAI_CRED", "url": "https://LOCATION-aiplatform.googleapis.com/v1/projects/PROJECT/locations/LOCATION/publishers/google/models/", "model": "multimodalembedding:predict" }'; end; / -- get image embedding: PL/SQL example declare v vector; output clob; begin v := dbms_vector.utl_to_embedding( to_blob(bfilename('VEC_DUMP', 'parrots.jpg')), 'image', json(:params)); output := vector_serialize(v); dbms_output.put_line('vector data=' || dbms_lob.substr(output, 100) || '...'); end; / -- get image embedding: select example select dbms_vector.utl_to_embedding( to_blob(bfilename('VEC_DUMP', 'parrots.jpg')), 'image', json(:params));
-
データベース内埋込みモデルを使用してテキストからベクトルへ:
次の例では、
UTL_TO_EMBEDDING
を使用して、Oracle DatabaseにロードされたONNX形式の埋込みモデル(doc_model
)をコールしてベクトル埋込みを生成します。ここでは、プロバイダは
database
で、入力はhello
です。var params clob; exec :params := '{"provider":"database", "model":"doc_model"}'; select dbms_vector.utl_to_embedding('hello', json(:params)) from dual;
詳細は、「Oracle Database内でのテキスト文字列から埋込みへの変換」を参照してください。
-
エンドツーエンドの例:
UTL_TO_EMBEDDING
を使用して様々なエンドツーエンドのシナリオ例を実行するには、「埋込みの生成」を参照してください。
UTL_TO_EMBEDDINGS:
-
データベース内埋込みモデルを使用してテキストからベクトルへ:
次の例では、
UTL_TO_EMBEDDINGS
を使用して、Oracle DatabaseにロードされたONNX形式の埋込みモデル(doc_model
)をコールして埋込みの配列を生成します。ここでは、プロバイダは
database
で、入力はdocumentation_tab
表に格納されているPDFドキュメントです。このように、UTL_TO_EMBEDDINGS
に渡す前に、まずUTL_TO_CHUNKS
を使用してデータを小さいチャンクに分割します。CREATE TABLE doc_chunks as (select dt.id doc_id, et.embed_id, et.embed_data, to_vector(et.embed_vector) embed_vector from documentation_tab dt, dbms_vector.utl_to_embeddings( dbms_vector.utl_to_chunks(dbms_vector.utl_to_text(dt.data), json('{"normalize":"all"}')), json('{"provider":"database", "model":"doc_model"}')) t, JSON_TABLE(t.column_value, '$[*]' COLUMNS (embed_id NUMBER PATH '$.embed_id', embed_data VARCHAR2(4000) PATH '$.embed_data', embed_vector CLOB PATH '$.embed_vector')) et );
詳細は、「データベースにアップロードされたベクトル埋込みモデルの使用によるSQLクイック・スタート」を参照してください。
-
エンドツーエンドの例:
UTL_TO_EMBEDDINGS
を使用して様々なエンドツーエンドのシナリオ例を実行するには、「チャンク化と埋込みの実行」を参照してください。
親トピック: DBMS_VECTOR