欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Oracle 23ai中重要新特性VECTOR數(shù)據(jù)類型的使用

 更新時間:2024年08月04日 14:49:07   作者:zxrhhm  
Oracle 23ai 中的 VECTOR 數(shù)據(jù)類型是 Oracle 數(shù)據(jù)庫在 AI 領域的一個重要新特性,它允許用戶以向量的形式存儲數(shù)據(jù),并在這些向量的基礎上進行高效的搜索和分析,下面就來介紹一下如何使用

Oracle 23ai 中的 VECTOR 數(shù)據(jù)類型是 Oracle 數(shù)據(jù)庫在 AI 領域的一個重要新特性,它允許用戶以向量的形式存儲數(shù)據(jù),并在這些向量的基礎上進行高效的搜索和分析。以下是對 Oracle 23ai VECTOR 數(shù)據(jù)類型的詳細解析:

參考官方文檔地址
https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/plsql-data-types.html#GUID-160C5139-EDBE-40BE-8DB4-1CA4E8A1CA46

一、基本概念

Oracle 23ai 中的 VECTOR 數(shù)據(jù)類型是一種用于表示一系列數(shù)值的數(shù)據(jù)類型,這些數(shù)值可以代表不同的含義,比如在幾何學中代表點的坐標,在機器學習中代表特征向量等。通過向量化技術,可以將文檔、圖像、視頻等非結構化數(shù)據(jù)轉換為向量形式,進而利用這些向量進行高效的相似性搜索和分析。

二、主要特性

  • 集成性:VECTOR 數(shù)據(jù)類型完全集成在 SQL 和 PL/SQL 中,支持多種客戶端和編程語言,并在 python-oracledb、node-oracledb、JDBC 和 ODP.NET 驅動程序中具有原生綁定功能。這種全面的支持提供了跨多個開發(fā)環(huán)境的無縫向量搜索功能。

  • 高效性:Oracle 23ai 提供了高性能的向量索引,如內存中的鄰居圖向量索引(In-Memory Neighbor Graph Vector Index)和鄰居分區(qū)矢量索引(Neighbor Partition Vector Index),這些索引技術能夠顯著加快向量的搜索速度,提高查詢效率。

  • 靈活性:用戶可以根據(jù)需要自定義向量的維度和精度,以適應不同的應用場景和數(shù)據(jù)類型。同時,Oracle 23ai 還支持在 JSON 類型中嵌入 VECTOR 數(shù)據(jù)類型,使得結構化數(shù)據(jù)和非結構化數(shù)據(jù)的處理更加靈活。

  • 安全性:Oracle 23ai 提供了強大的安全性保障,包括透明數(shù)據(jù)加密、Key Vault、Audit Vault 等功能,確保向量數(shù)據(jù)的安全性和隱私性。

三、應用場景

Oracle 23ai 的 VECTOR 數(shù)據(jù)類型在多個領域都有廣泛的應用前景,包括但不限于:

  • 文檔搜索:在文檔數(shù)據(jù)庫中,用戶可以利用 VECTOR 數(shù)據(jù)類型對文檔進行向量化處理,并通過相似性搜索快速找到相關的文檔。
  • 圖像識別:在圖像處理領域,VECTOR 數(shù)據(jù)類型可以用于表示圖像的特征向量,并通過向量搜索實現(xiàn)圖像的快速識別和分類。
  • 推薦系統(tǒng):在電商、社交媒體等平臺上,推薦系統(tǒng)可以利用 VECTOR 數(shù)據(jù)類型對用戶和商品進行向量化處理,并通過計算向量之間的相似度來推薦相關的商品或內容。
  • 生物信息學:在生物信息學領域,VECTOR 數(shù)據(jù)類型可以用于表示基因序列、蛋白質結構等生物數(shù)據(jù)的特征向量,并通過向量搜索進行基因相似性分析、疾病預測等研究。

四、使用示例

以下是一個簡單的使用示例,展示了如何在 Oracle 23ai 中創(chuàng)建包含 VECTOR 數(shù)據(jù)類型的表并插入數(shù)據(jù):

4.1、簡單的使用示例

CREATE TABLE t_orders (  
    order_id INT,  
    order_vector VECTOR  
);  
  
INSERT INTO t_orders VALUES (1, '[100, 200]'), (2, '[210, 220]'), (3, '[310, 330]');  
  
TESTUSER@FREEPDB1> SELECT * FROM t_orders;

  ORDER_ID ORDER_VECTOR
---------- ----------------------------------------------------------------------------------------------------
         1 [1.0E+002,2.0E+002]
         2 [2.1E+002,2.2E+002]
         3 [3.1E+002,3.3E+002]

在這個示例中,我們首先創(chuàng)建了一個名為 orders 的表,該表包含兩個字段:order_id(訂單ID)和 order_vector(訂單向量)。然后,我們向表中插入了三條記錄,每條記錄的 order_vector 字段都包含了一個二維向量。最后,我們通過 SELECT 語句查詢了表中的所有記錄。

4.2、將VECTOR數(shù)據(jù)類型與PL/SQL一起使用

此示例的第一部分演示了如何將向量選擇到PL/SQL向量變量中,在本例中,在向量列上使用%TYPE。

CREATE TABLE t_VectorTable (embedding VECTOR(3, float32), id NUMBER);
INSERT INTO t_VectorTable VALUES ('[1.11, 2.22, 3.33]', 1);
INSERT INTO t_VectorTable VALUES ('[4.44, 5.55, 6.66]', 2);
INSERT INTO t_VectorTable VALUES ('[7.77, 8.88, 9.99]', 3);

SET SERVEROUTPUT ON;

DECLARE
  v_embedding t_VectorTable.embedding%TYPE;
BEGIN
  SELECT embedding INTO v_embedding FROM t_VectorTable WHERE id=3;
  DBMS_OUTPUT.PUT_LINE('Embedding is ' || FROM_VECTOR(v_embedding));
END;
/

Result List

Embedding is [7.76999998E+000,8.88000011E+000,9.98999977E+000]

PL/SQL procedure successfully completed.

4.2、匿名塊使用帶有批量獲取的游標將VectorTable的向量捕獲到表%ROWTYPE

下面的匿名塊使用帶有批量獲取的游標將t_VectorTable的向量和id數(shù)據(jù)捕獲到表%ROWTYPE索引表中。
The following anonymous block uses a cursor with bulk fetch to capture the VectorTable’s vector and id data into a table%ROWTYPE index table.

DECLARE
  TYPE vecTabT IS TABLE OF t_VectorTable%ROWTYPE INDEX BY BINARY_INTEGER;
  v_vecTabT vecTabT;
  CURSOR cur IS SELECT * FROM t_VectorTable;
BEGIN
  OPEN cur ;
  FETCH cur  BULK COLLECT INTO v_vecTabT;
  CLOSE cur ;

  -- display the contents of the vector index table
  FOR i IN 1 .. v_vecTabT.LAST LOOP
    DBMS_OUTPUT.PUT_LINE('Embedding ID ' || v_vecTabT(i).id || ': ' ||
            FROM_VECTOR(v_vecTabT(i).embedding));
  END LOOP;
END;
/

在這里插入圖片描述

4.3、將VECTOR數(shù)據(jù)類型與PL/SQL觸發(fā)器一起使用

CREATE TABLE t_vecLogTable 
(
embedding VECTOR(3, float32), 
describe VARCHAR2(25), 
seq NUMBER
);

CREATE SEQUENCE seq_vecTrgSeq;

CREATE OR REPLACE TRIGGER tr_VectorTable 
BEFORE UPDATE ON t_VectorTable
FOR EACH ROW
BEGIN
  INSERT INTO t_vecLogTable VALUES (:old.embedding, 'OLD.VECTRG',seq_vecTrgSeq.NEXTVAL);
  INSERT INTO t_vecLogTable VALUES (:new.embedding, 'NEW.VECTRG',seq_vecTrgSeq.NEXTVAL);
END;
/

UPDATE t_VectorTable SET embedding='[2.88, 4.99, 8.66]' WHERE id=2;
COMMIT;

SELECT * FROM t_vecLogTable  ORDER BY seq;

Result List:

TESTUSER@FREEPDB1> col DESCRIBE format aa30
TESTUSER@FREEPDB1> col DESCRIBE format a30
TESTUSER@FREEPDB1> SELECT * FROM t_vecLogTable  ORDER BY seq;

EMBEDDING                                                    DESCRIBE                              SEQ
------------------------------------------------------------ ------------------------------ ----------
[4.44000006E+000,5.55000019E+000,6.65999985E+000]            OLD.VECTRG                              1
[2.88000011E+000,4.98999977E+000,8.65999985E+000]            NEW.VECTRG                              2

4.4、將向量距離函數(shù)與PL/SQL一起使用

此示例演示了PL/SQL對向量距離函數(shù)的支持。

DECLARE
  v1 VECTOR := TO_VECTOR('[1, 2, 3]');
  v2 VECTOR := TO_VECTOR('[4, 5, 6]');
  man_dist NUMBER;
  euc_dist NUMBER;
  cos_dist NUMBER;
  inn_dist NUMBER;
  ham_dist NUMBER;
  dot_dist NUMBER;
BEGIN
  man_dist := L1_DISTANCE(v1, v2); --Manhattan Distance
  euc_dist := L2_DISTANCE(v1, v2); --Euclidean Distance
  cos_dist := COSINE_DISTANCE(v1, v2); --Cosine Distance
  inn_dist := INNER_PRODUCT(v1, v2); --Inner Product
    
  --The Hamming Distance has no standalone function in PL/SQL
  ham_dist := VECTOR_DISTANCE(v1, v2, HAMMING);

  --The Negative Inner (Dot) Product has no standalone function in PL/SQL
  dot_dist := VECTOR_DISTANCE(v1, v2, DOT);

  DBMS_OUTPUT.PUT_LINE('The Manhattan distance is: ' || man_dist);
  DBMS_OUTPUT.PUT_LINE('The Euclidean distance is: ' || euc_dist);
  DBMS_OUTPUT.PUT_LINE('The Cosine distance is: ' || cos_dist);
  DBMS_OUTPUT.PUT_LINE('The Inner Product is: ' || inn_dist);
  DBMS_OUTPUT.PUT_LINE('The Hamming distance is: ' || ham_dist);
  DBMS_OUTPUT.PUT_LINE('The Dot Product is: ' || dot_dist);
END;
/

在這里插入圖片描述

4.5、將短距運算符與PL/SQL一起使用

請注意,由于PL/SQL不支持向量的隱式轉換,因此必須在變量賦值之前或在同一行中構造向量。這與PL/SQL中的其他距離函數(shù)的行為相同。
Note that because PL/SQL does not support implicit conversion with vectors, you must construct the vectors before the variable assignment or in the same line. This is the same behavior as the other distance functions in PL/SQL.

DECLARE
  v1 VECTOR := VECTOR('[1, 2, 3]');
  v2 VECTOR := VECTOR('[4, 5, 6]');
  cos_dist BINARY_DOUBLE;
  euc_dist BINARY_DOUBLE;
  dot_dist BINARY_DOUBLE;
BEGIN
  cos_dist := v1 <=> v2;
  euc_dist := v1 <-> v2;
  dot_dist := v1 <#> v2;

  DBMS_OUTPUT.PUT_LINE(cos_dist);
  DBMS_OUTPUT.PUT_LINE(euc_dist);
  DBMS_OUTPUT.PUT_LINE(dot_dist);
END;
/

在這里插入圖片描述

五、總結

Oracle 23ai 的 VECTOR 數(shù)據(jù)類型是 Oracle 數(shù)據(jù)庫在 AI 領域的一個重要創(chuàng)新,它為用戶提供了強大的向量化數(shù)據(jù)處理能力,使得用戶能夠更加方便地進行相似性搜索和分析。隨著 AI 技術的不斷發(fā)展,VECTOR 數(shù)據(jù)類型的應用前景將越來越廣闊。

到此這篇關于Oracle 23ai中重要新特性VECTOR數(shù)據(jù)類型的使用的文章就介紹到這了,更多相關Oracle  VECTOR內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論