벡터DB (Vector Database)
벡터DB는 말그대로 벡터를 저장하는 데 사용되는 데이터베이스로서 여기에는 텍스트나, 이미지와 같은 비정형 데이터를 벡터로 바꾸어서 저장하게 된다. 기존의 관계형 데이터베이스 (RDB)는 대용량 텍스트나 이미지를 비롯한 다양한 미디어 형태의 비정형 데이터를 저장하기에 적합하지 않았다. 따라서 이러한 데이터는 NoSQL에 저장하게 된다.
한편 이렇게 다양한 데이터를 저장하는 건 좋으나 정작 데이터를 찾으려 할 때 새로운 해결책이 필요하게 되었다. 대용량의 문서, 이미지, 심지어는 동영상과 같은 데이터는 어떻게 검색할 것인가하는 문제를 해결하기 위해 벡터DB가 등장하였다. 결과적으로 현재까지 비정형 데이터의 정보 검색에는 벡터DB가 많이 활용되고 있다.
벡터 임베딩 (Vector Embedding)
벡터를 이용해 정보를 찾으려면 우선 데이터를 벡터로 바꾸어야 할 것이다. 이 과정을 벡터 임베딩이라고 한다. 벡터 임베딩은 학습을 통해 특별한 규칙을 가진 AI 모델을 통해 그 규칙에 따라 이루어진다. 따라서 데이터 품질은 모델을 얼마나 잘 훈련시켰느냐에 따라 결정되며 검색 능력도 달라지게 된다.
위는 단순한 텍스트 데이터를 가지고 벡터 임베딩을 수행하는 예시이다. 사전 학습된 (pre-trained) AI 모델이 각 단어를 7차원의 벡터로 표현하고 있다. 이를 보기 쉽게 2차원으로 줄인 것이 우측의 결과이다. men과 women 그리고 king과 queen은 각각의 벡터가 서로 비슷한 방향을 가리키며 위치 역시 비슷하다. 이는 당연하게도 모델이 사전에 그렇게 하도록 학습되었기 때문이고 이를 통해 우리는 각 데이터 간의 유사도를 측정할 수 있다. 즉 검색이 가능하게 된다. 대표적인 사례가 ChatGPT나 구글 이미지검색이다.
벡터 검색
female이라는 키워드를 검색한다고 가정했을 때, 데이터의 임베딩이 아주 잘 이루어졌다고 하면 위와 같이 female이 가리키는 벡터는 적어도 woman과 가까운 곳에 있을 것이다. 그러고 나면 우리는 female이라는 데이터가 사전에 정의되지 않았음에도 벡터의 각도와 크기를 이용해서 유사한 결과를 찾을 수 있다. 기존에는 키워드가 일치하는 데이터를 검색하기에 그쳤다. 그러나 벡터 검색은 데이터의 의미가 비슷한 결과를 추론할 수 있다.
한편 학습에 필요한 데이터가 부족하거나 모델을 잘못 설계하는 등의 이유로 임베딩이 제대로 이루어지지 않으면 위와 같이 수준 낮은 벡터DB가 만들어질 수 있다. 간혹 ChatGPT가 엉뚱한 대답을 하는 것이 그 대표적인 결과이다. 잘못 임베딩된 데이터들을 올바르게 임베딩 해야만 제대로 검색 기능을 수행할 수 있다. 그렇지 않으면 차라리 키워드 매칭으로 검색하는 게 더 나을 수도 있다.
데이터를 벡터로 임베딩하는데 사용된 잘못된 규칙을 찾아 수정해 나갈 필요가 생겼다. 이 때 요구되는 일련의 수행을 추상적으로 f(x)라 할 때, 바로 이 f(x)를 찾는데 머신러닝이 활용된다. 이러한 작업을 애플리케이션 관점에서는 domain adaptation이라고 한다. 특정 도메인에 특화된 검색엔진을 만들겠다면 모르겠는데 ChatGPT와 같은 초거대 모델을 위해서는 방대한 양의 데이터가 필요할 뿐더러 학습에 필요한 컴퓨팅 파워도 어마어마하다.
그렇게 힘들게 만들어진 벡터DB도 시간의 흐름에 따라 필연적으로 품질이 떨어지게 된다. 또한 애초에 생산되지 않는 데이터는 학습할 수 없기 때문에 흔히 말하는 상식이 부족할 수 있다. 상식을 검색한다는 건 어쩌면 불가능할지도 모르겠다.
'Software Engineering' 카테고리의 다른 글
Github Actions로 초간단 코드 배포하기 (SSH) (0) | 2024.02.02 |
---|---|
How to read csv file in OSS with PolarDB (1) | 2023.12.27 |
[Python 문제 풀이] 프로그래머스 '배달' (0) | 2023.10.24 |
간단하게 온라인에서 Python 실행하기 (JupyterLite) (0) | 2023.10.24 |
[Python 문제 풀이] 프로그래머스 '하노이의 탑' (0) | 2023.10.16 |