본문 바로가기
Oracle/운영

[23ai] new feature 벡터 타입과 ai벡터검색 - pdf파일을 백터검색하기 (2)

by 취미툰 2024. 11. 12.
반응형

 

테스트 목표 : 임베딩모델을 이용하여 pdf 파일을 분석하기

 

필요파일

1)

임베딩 모델 zip파일

all_MiniLM_L12_v2_augmented.zip

https://adwc4pm.objectstorage.us-ashburn-1.oci.customer-oci.com/p/VBRD9P8ZFWkKvnfhrWxkpPe8K03-JIoM5h_8EJyJcpE80c108fuUjg7R5L5O7mMZ/n/adwc4pm/b/OML-Resources/o/all_MiniLM_L12_v2_augmented.zip

 

2)

ai-vector-search-users-guide.pdf 

 

 

ai-vector-search-users-guide.pdf
4.76MB

 

 

두개 파일을 테스트할 서버에 업로드합니다.

1번파일 압축풀기

$ mkdir -p /home/oracle/vector
$cd /home/oracle/vector

..파일 ftp로 전송

$ unzip 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

 

vector(test유저) 생성 후 디렉토리 생성 및 권한부여

 

create user vector identified by vector DEFAULT TABLESPACE USERS quota unlimited on USERS;


grant DB_DEVELOPER_ROLE to vector;


create or replace directory VEC_DUMP as '/home/oracle/vector';

grant read, write on directory vec_dump to vector;

 

--기존 모델이 있다면 삭제                                   
EXEC DBMS_VECTOR.DROP_ONNX_MODEL(model_name => 'ALL_MINILM_L12_V2', force => true);                                  

--생성
BEGIN
   DBMS_VECTOR.LOAD_ONNX_MODEL(
        directory => 'VEC_DUMP',
        file_name => 'all_MiniLM_L12_v2.onnx',
        model_name => 'ALL_MINILM_L12_V2');
END;
/

 

test로 hello를 넣고 벡터값 확인

SELECT TO_VECTOR(VECTOR_EMBEDDING(ALL_MINILM_L12_V2 USING 'hello' as data)) AS embedding;

EMBEDDING                                                                                                                                                                                                                                                      |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
[-7.49069825E-002,-1.44330608E-002,4.86499295E-002,-2.71381028E-002,-4.30882089E-002,-1.47763401E-001,6.88331053E-002,-1.37038985E-002,-5.35686724E-002,2.69752908E-002,-6.28339127E-003,-3.98834869E-002,7.65678426E-003,-3.78089696E-002,-1.17558083E-002,-3.|

 

 

--기존 테이블이 있다면 삭제
drop table documentation_tab purge;

--생성
create table documentation_tab (id number, data blob);
insert into documentation_tab values(2, to_blob(bfilename('VEC_DUMP', 'ai-vector-search-users-guide.pdf')));
commit;
select dbms_lob.getlength(data) from documentation_tab;

DBMS_LOB.GETLENGTH(DATA)|
------------------------+
                 4991525|

 

위에서 생성한 ALL_MINILM_L12_V2을 사용하여 비정형 데이터 Chunk 및 관련 벡터 임베딩을 저장하는 테이블을 생성합니다.(doc_chunks)

Insert 문은 docution_tab에서 pdf파일을 읽고 pdf파일을 텍스트로 변환한 다음 각 텍스트를 Chunk하고 마지막으로 생성된 각 Chunk에 해당하는 벡터 임베딩을 생성합니다. 이 모든작업은 하나의 Insert..Select문에서 수행됩니다.

dbms_vector_chain을 사용하여 비정형데이터를 변환,Chunk,벡터화합니다.

아래 예제의 경우 pdf -> 텍스트 , Chunk -> 벡터로 변환됩니다.

 

--기존테이블 있을 시 삭제
drop table doc_chunks purge;

--테이블 생성 
create table doc_chunks (doc_id number, chunk_id number, chunk_data varchar2(4000), chunk_embedding vector) TABLESPACE USERS;
 
 --
insert into doc_chunks
select dt.id doc_id, et.embed_id chunk_id, et.embed_data chunk_data, to_vector(et.embed_vector) chunk_embedding
from
    documentation_tab dt,
    dbms_vector_chain.utl_to_embeddings(
       dbms_vector_chain.utl_to_chunks(dbms_vector_chain.utl_to_text(dt.data), json('{"normalize":"all"}')),
       json('{"provider":"database", "model":"ALL_MINILM_L12_V2"}')) 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;
 
commit;

 

doc_chunks의 값 1개 확인

SELECT * FROM doc_chunks
WHERE rownum <= 1;

DOC_ID|CHUNK_ID|CHUNK_DATA                                                                                                                                                                                                                                                     |CHUNK_EMBEDDING                                                                                                                                                                                                                                                |
------+--------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
     2|       7|delivered hardware, and modifications of such programs), ii) Oracle computer documentation and/or iii) other Oracle ¶data, is subject to the rights and limitations specified in the license contained in the applicable contract. The terms ¶governing the U.S|[2.10126303E-003,-7.63741089E-003,-3.02711707E-002,-7.62531981E-002,1.36460213E-003,-7.41784694E-003,-4.97970358E-002,5.07095046E-002,6.50012121E-002,5.54962344E-002,3.40061747E-002,3.7435703E-002,-1.17981238E-002,-9.50831547E-002,-5.63122742E-002,-3.3036|

 

 

(3)으로 이어집니다.

 

출처 : https://docs.oracle.com/en/database/oracle/oracle-database/23/vecse/sql-quick-start-using-vector-embedding-model-uploaded-database.html

 

AI Vector Search User's Guide

A set of SQL commands is provided to run a particular scenario that will help you understand Oracle AI Vector Search capabilities.

docs.oracle.com

 

반응형

댓글