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 name>"
}表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"
}ノート:
これは、LlamafileやvLLMなど、多くのOpenAI互換のサード・パーティ・プロバイダに対して構成を設定する方法の一例にすぎません。provider値にはopenaiを指定する必要がありますが、url値は、選択したサード・パーティ・プロバイダのRESTエンドポイントによって異なります。
資格証明を無効にするには、hostをlocalに設定します。サード・パーティ・プロバイダでモデル名(Ollama、vLLMなど)が必要な場合は、modelを目的のモデルに設定します。それ以外の場合は、modelをanyなどの任意の文字列に設定できます(Llamafileを使用する場合など)。
{
"provider": "openai",
"url": "http://localhost:8080/v1/chat/completions",
"host": "local",
"model": "any"
}{
"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