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

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

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

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

參考官方文檔地址
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ù)值可以代表不同的含義,比如在幾何學(xué)中代表點(diǎn)的坐標(biāo),在機(jī)器學(xué)習(xí)中代表特征向量等。通過向量化技術(shù),可以將文檔、圖像、視頻等非結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換為向量形式,進(jìn)而利用這些向量進(jìn)行高效的相似性搜索和分析。

二、主要特性

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

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

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

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

三、應(yīng)用場景

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

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

四、使用示例

以下是一個(gè)簡單的使用示例,展示了如何在 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]

在這個(gè)示例中,我們首先創(chuàng)建了一個(gè)名為 orders 的表,該表包含兩個(gè)字段:order_id(訂單ID)和 order_vector(訂單向量)。然后,我們向表中插入了三條記錄,每條記錄的 order_vector 字段都包含了一個(gè)二維向量。最后,我們通過 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、匿名塊使用帶有批量獲取的游標(biāo)將VectorTable的向量捕獲到表%ROWTYPE

下面的匿名塊使用帶有批量獲取的游標(biāo)將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對(duì)向量距離函數(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、將短距運(yùn)算符與PL/SQL一起使用

請(qǐng)注意,由于PL/SQL不支持向量的隱式轉(zhuǎn)換,因此必須在變量賦值之前或在同一行中構(gòu)造向量。這與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;
/

在這里插入圖片描述

五、總結(jié)

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

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

相關(guān)文章

最新評(píng)論