반응형
테스트 목표 : 임베딩모델을 이용하여 pdf 파일을 분석하기
필요파일
1)
임베딩 모델 zip파일
all_MiniLM_L12_v2_augmented.zip
2)
ai-vector-search-users-guide.pdf
두개 파일을 테스트할 서버에 업로드합니다.
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)으로 이어집니다.
반응형
'Oracle > 운영' 카테고리의 다른 글
[23ai] ai벡터검색 - ChatGPT를 이용하여 실시간 응답을 받기(RAG) (2) | 2024.11.15 |
---|---|
[23ai] ai벡터검색 - vector_distance (0) | 2024.11.13 |
[23ai] new feature 벡터 타입과 ai벡터검색 - 유사성검색 (3) (0) | 2024.11.12 |
[23ai] new feature 벡터 타입과 ai벡터검색 (1) (5) | 2024.11.11 |
DOP Downgrade? (0) | 2024.11.10 |
댓글