데이터 과학과 프롬프트 엔지니어링 - SingleStore를 이용한 벡터DB
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
데이터 과학과 프롬프트 엔지니어링 - SingleStore를 이용한 벡터DB
데이터 과학과 프롬프트 엔지니어링
chatGPT로 인해 앞으로 인공 지능의 영역은 다음 두가지 영역으로 나누어 접근 할 수 있습니다.
- 데이터 과학(학문적/전문성) :
학문적이고 전문성을 요구로 하는 인공지능 전문 분야 (머신러닝, 딥러닝의 데이터 분석)
- 프롬프트 엔지니어링 (생성형 AI 서비스대중화):
AI 민주화에 따른 대중화된 서비스 AI 응용 개발 분야 ( LLM을 기반으로 서비스에 활용)
최근 몆년 동안 AI 분야는 데이터 과학(Data Science)라고 하면서 대규모 머신 장비와 고급 기술자(데이터사이언티스트)를 투입하여 방대한 데이터를 분석하는데 활용 했습니다. 이는 학문적이고 전문가에 의한 인공지능 분야으로 데이터 분석 분야가 대부분을 차지해 왔습니다.
chatGPT와 같은 프롬프트 엔지니어링 분야는 이제는 이러한 데이터사이언스 (Data Science)를 기반으로한 인공지능 영역과 별개로 인공지능을 이용한 생활의 편의기능 또는 문서, 언어의 특성을 이해하고 만들어진 LLM을 기반으로 대중화된 생성형 AI 서비스 영역이 부각 되고 있습니다.
chatGPT의 등장으로 AI민주화라는 용어가 현실화 되었습니다. 지금 인터넷 서비스 전반에서 AI를 활용하는 움직임을 엄청난 변화로 보입니다. 지금이야 말로 인공지능의 부흥기라고 여겨 질 만큼 많은 기업들이 AI는 서비스의 필수조건으로 인식 하고 있습니다.
오늘은 이러한 변화에서 지속적인 기술을 접목할 수 있는 SingleStore DBMS를 소개 하고자 합니다.
AI민주화를 위한 차세대 DBMS SingleStoreDB
SingleStoreDB 는 최근 기술 트렌드에 맞춰진 최적의 Database 라고 할 만큼 인공지능과 연결한 기술의 확장을 강조하고 있습니다.
주로 Cloud Native 플랫폼을 지원하면서 대량의 데이터를 처리 할 수 있는 분산 DB이라는 점에서 활용 가능성이 큽니다.
그리고 최근 인공지능 분야에서 각광 받고 있는 LangChain과 같이 LLM과 ChatGPT를 연계 할수 있고, SingleSotre Co-Pilot인 (SQrL)과 같은 기술을 제공하여 인공지능 환경에 최적화된 DBMS로 영역을 넓혀 가고 있습니다.
생성형 인공지능(Generative AI)과 벡터 데이터베이스(Vector Database)
생성형 인공지능은 주로 기계 학습 및 신경망 기술을 활용하여 콘텐츠를 생성하거나 변형하는 데 사용됩니다. 이는 이미지, 텍스트, 음성 및 비디오 생성에 적용될 수 있으며, GPT-3와 같은 모델이 대표적인 예입니다. 이러한 모델은 주어진 데이터를 학습하고, 주어지지 않은 데이터를 생성하는 데 사용됩니다.
벡터 데이터베이스는 데이터를 벡터 형식으로 저장하고 검색하는데 사용되는 데이터베이스 시스템입니다. 벡터 데이터베이스는 고차원 데이터와 관련된 복잡한 검색 및 분석 문제를 해결하는 데 도움이 됩니다. 이러한 데이터베이스는 유사성 검색, 검색 쿼리 최적화, 정보 검색 및 패턴 인식 분야와 더불어 인공지능 분야에서도 중요한 역할을 합니다.
특히 LLM과 같이 텍스트 데이터를 처리하고 데이터 간의 유사성을 분석하는데는 벡터 데이터베이스를 활용하것이 용이합니다.
벡터데이터베이스의 제약
기존의 관계형 데이터베이스가 행과 열에 데이터를 저장하고, NoSQL과 같은 데이터베이스가 JSON 문서에 데이터를 저장하는 방식과 유사하게, 벡터 데이터베이스는 벡터라고 하는 숫자 값의 배열을 저장 관리 합니다. 임베딩이라고도 하는 이러한 벡터는 단어나 단락을 나타내는 숫자를 저장합니다.벡터데이터 베이스를 SVDB(특수 벡터 데이터베이스)라고 합니다. 주로 벡터 데이터를 저장하고 처리하기 위해 특별히 설계되어 데이터의 유사성을 검색하고 관리하는데 최적의 기술로 인식되고 있습니다.그러나 SVDB에는 특정 제한 사항이 있습니다. 중복된 데이터처리, 분산된 구성 요소 간의 데이터 값에 대한 합의 부족, 전문 기술을 위한 기술 인력의 부족 등이 발생할 수 있습니다.
또한 SVDB는 포괄적인 데이터베이스 관리 시스템에 비해 쿼리 언어 성능, 프로그래밍 가능성, 확장성 및 데이터 무결성등에서 제약이 발생하는 경우가 많습니다.
또한 과도한 데이터 이동 부하, 인건비 및 라이센스 비용 증가, 쿼리 성능 제한 등 반복되는 문제도 고려해야 합니다.
벡터데이터베이스를 지원하는 SingleStore의 특징
반면 SingleStoreDB는 데이터 집약적인 사용 사례에 완벽하게 적합한 강력한 벡터 데이터베이스 기능을 제공합니다.
1) SQL의 표준을 이용하여 누구나 쉽게 이용 가능합니다.
- SQL을 이용하여 강력한 메타데이터 필터링, 벡터 및 전체 텍스트 검색 기능의 조합 하는데 다차원 교차 연산(dot_product) , 위상 거리 측정( Euclidean_distance)을 사용할 수 있습니다. 그리고 ORDER BY/LIMIT K 쿼리로 최근접 검색(K-Nearest-Neighbor Search)을 더 빠르게 수행할 수 있습니다.
2) 벡터데이터 베이스를 내장하고 있어서 관계형 데이터베이스와 연계하여 분석이 용이합니다.
- 강력한 벡터 데이터베이스 기능을 제공하므로 벡터 워크로드에만 특수 벡터 데이터베이스를 실행할 필요가 없습니다.
그리고 기존 벡터 데이터베이스와 달리 SingleStoreDB는 벡터 데이터를 다른 데이터 유형과 함께 관계형 테이블에 저장하
여 관리 할 수 있습니다.
벡터 데이터베이스에서 AI 애플리케이션 구축에 활용 까지
SingleStore는 LLM 구축시 다양한 문서를 파싱하여 벡터 데이터 베이스로 저장하여 인공지능 어플리케이션을 구축하는데 에도 탁월한 솔루션입니다.
SingleStoreDB는 벡터 데이터를 다른 유형의 데이터와 함께 관계형 테이블에 저장합니다. 벡터 데이터를 관련 데이터와 함께 배치하면 SQL의 모든 기능을 사용하여 벡터 데이터의 확장된 메타데이터 및 기타 속성을 쉽게 쿼리할 수 있습니다.
또한 다음과 같은 기능적인 특성으로 어플리케이션을 쉽게 만들수 있습니다.
ㅁ 성능과 용량 확장성
SingleStoreDB는 확장형 아키텍처로 설계되어 증가하는 데이터 요구 사항을 지원할 수 있는 용량을 보장합니다.
ㅁ 심층 쿼리 기능
SingleStoreDB에서는 SQL의 모든 쿼리 기능을 사용할 수 있으므로 벡터 근접성 및 설명 속성을 기반으로 하는 하이브리드 검색이 쉽습니다.
ㅁ Full-Text Search
의미 체계 검색 기능을 사용하면 쿼리에 포함된 단어뿐만 아니라 쿼리의 의미와 일치하는 텍스트를 찾을 수 있는 LLM 기반 애플리케이션을 구축할 수 있습니다.
ㅁ 확장 가능한 분석 성능
고성능 및 확장 기능을 통해 SingleStoreDB는 가장 까다로운 데이터베이스 요구 사항도 충족할 수 있습니다.
ㅁ 가장 가까운 이웃 검색
SingleStoreDB는 조인을 지원하므로 원하는 결과를 찾기 위해 여러 쿼리를 수행하는 대신 집합 기반 최근접 검색을 수행할 수 있습니다.
SingleStoreDB를 이용한 Vector 연산 예시
- "카테고리에 대한 상위 K 요소 를 찾는 방법"
의미론적 검색, 챗봇, 기타 LLM 애플리케이션, 얼굴 매칭, 객체 매칭 등과 같은 최근접 검색 애플리케이션을 위한 벡터 처리 도구를 선택할 때 쿼리 언어의 성능과 SQL이용하는 것을 고려하면 더 쉽게 개발이 가능합니다.
SingleStoreDB의 단일 SQL 쿼리에서 "카테고리에 대한 상위 K 요소 를 찾는 방법"은 다음과 같습니다.
1) 벡터 데이터를 저장합니다.
SingleStoreDB의 단일 SQL 쿼리에서 이 작업을 수행하는 방법은 다음과 같습니다.
/* Make some items in multiple categories, with associated
vector embeddings. */
create table items(id int, category varchar(50), vector blob);
insert into items values
(1, "food", json_array_pack('[0,0,0,1]')),
(2, "food", json_array_pack('[0,0.5,0.3,0.05]')),
(3, "food", json_array_pack('[0,0.5,0.2,0]')),
(4, "facilities", json_array_pack('[0,0,1,0]')),
(5, "facilities", json_array_pack('[0,0.6,0.1,0.05]')),
(6, "facilities", json_array_pack('[0,0.4,0.3,0]'));
2) 저장된 벡터에서 벡터를 조회합니다.
-- query vector
set @qv = json_array_pack('[0,0.4,0.3,0]');
-- get top 2 in each category using ranking
with scored as(
select id, category, dot_product(vector, @qv) as score
from items
),
ranked as (
select
row_number() over(partition by category order by score desc)
as rank, *
from scored
)
select *
from ranked
where rank <= 2
order by category, rank;
3) 실행 결과는 다음과 같습니다.
결과는 다음과 같습니다.
+------+------+------------+---------------------+
| rank | id | category | score |
+------+------+------------+---------------------+
| 1 | 4 | facilities | 0.30000001192092896 |
| 2 | 5 | facilities | 0.27000001072883606 |
| 1 | 2 | food | 0.2900000214576721 |
| 2 | 3 | food | 0.25999999046325684 |
+------+------+------------+---------------------+
[참고]
1. 생성형AI 를 위한 최적의 데이터 베이스 선정 방법 (Selecting the Optimal Database for Generative AI )
2. Why Your Vector Database Should Not be a Vector Database
https://www.singlestore.com/blog/why-your-vector-database-should-not-be-a-vector-database/
3. 벡터 데이터베이스 작업을 위한 SQL의 힘 https://www.singlestore.com/blog/the-power-of-sql-for-vector-database-operations-part-1/
댓글
댓글 쓰기