Oracle 23ai부터 DBMS_VECTOR 패키지로 ONNX 모델을 데이터베이스에 로드할 수 있습니다.
테스트를 위해 all-MiniLM-L12-v2 ONNX 모델를 다운로드하고 압축을 해제하겠습니다.
$ unzip /home/oracle/onnx/all_MiniLM_L12_v2_augmented.zip
Archive: all_MiniLM_L12_v2_augmented.zip
inflating: all_MiniLM_L12_v2.onnx
inflating: README-ALL_MINILM_L12_V2-augmented.txt
아래와 같이 디렉토리를 생성하고 DBMS_VECTOR.LOAD_ONNX_MODEL 프로시저를 사용하여 all-MiniLM-L12-v2 ONNX 모델을 데이터베이스에 로드하겠습니다.
-- 1-1
DROP DIRECTORY dir_onnx;
CREATE OR REPLACE DIRECTORY dir_onnx AS '/home/oracle/onnx';
-- 1-2
BEGIN
DBMS_VECTOR.DROP_ONNX_MODEL (
model_name => 'ALL_MINILM_L12_V2'
, force => true
);
DBMS_VECTOR.LOAD_ONNX_MODEL (
directory => 'DIR_ONNX'
, file_name => 'all_MiniLM_L12_v2.onnx'
, model_name => 'ALL_MINILM_L12_V2'
);
END;
/
아래 쿼리로 ONNX 모델에 대한 정보를 조회할 수 있습니다.
-- 2-1
SELECT mining_function, algorithm, algorithm_type
FROM user_mining_models
WHERE model_name='ALL_MINILM_L12_V2';
MINING_FUNCTION ALGORITHM ALGORITHM_TYPE
--------------- --------- --------------
EMBEDDING ONNX NATIVE
1 row selected.
-- 2-2
SELECT view_name, view_type
FROM user_mining_model_views
WHERE model_name='ALL_MINILM_L12_V2';
VIEW_NAME VIEW_TYPE
---------------------- -------------------------
DM$VMALL_MINILM_L12_V2 ONNX Model Information
DM$VPALL_MINILM_L12_V2 ONNX Parsing Information
DM$VJALL_MINILM_L12_V2 ONNX Metadata Information
3 rows selected.
-- 2-3
SELECT name, REGEXP_REPLACE (value, '\s+', ' ') AS value
FROM dm$vmall_minilm_l12_v2;
NAME VALUE
----------------- -------------------------------------------------------------
Producer Name onnx.compose.merge_models
Graph Name tokenizer_main_graph
Graph Description Graph combining tokenizer and main_graph tokenizer main_graph
Version 1
Input[0] input:string[?]
Output[0] embedding:float32[?,384]
6 rows selected.
아래 예제는 VECTOR_EMBEDDING 함수로 벡터를 생성합니다. VECTOR_DIMENSION_COUNT 함수는 벡터의 차원 수, VECTOR_DIMENSION_FORMAT 함수는 벡터의 포맷 타입을 반환합니다.
-- 3
SELECT vector_data
, VECTOR_DIMENSION_COUNT (vector_data) AS dimension_count
, VECTOR_DIMENSION_FORMAT (vector_data) AS dimension_format
FROM (SELECT VECTOR_EMBEDDING (all_minilm_l12_v2 USING 'Hello, world!' AS data) AS vector_data);
VECTOR_DATA DIMENSION_COUNT DIMENSION_FORMAT
---------------------------------------------------------------------------------------- --------------- ----------------
[-5.59846461E-002,4.63369973E-002,-3.38232215E-003,-5.67258932E-002,-2.68842839E-002,... 384 FLOAT32
1 row selected.
관련 링크