AI 솔루션/Semantic Search

[AI검색 솔루션] RAG = Vector Search + LLM 1편

MNC 2024. 2. 8. 14:24

안녕하세요! 지난 게시글을 통해 키워드 검색과 의미 기반 검색의 차이점을 소개해 드렸습니다. 키워드 검색도 나름의 장점이 있었지만, 빠르게 발전해 나가는 기술에 맞춰 활용되는 건 의미 기반 검색이었다는 것을 알 수 있었습니다.

 

마치 내 옆에 AI 비서가 있는 것처럼 내가 원하는 정보를 찰떡같이 알아듣고 추천해 준다니! 너무 편리할 것 같다는 생각이 드시지 않나요? 우리의 검색 라이프를 윤기 나게 만들어줄 새로운 검색 생활을 계속해서 알아보겠습니다.

오늘은 의미기반 검색의 2탄으로, 의미 기반 검색을 가능하게 해주는 벡터 임베딩(Vector Embedding) 에 관해 이야기를 해드리려고 합니다.


Editing : 마인즈앤컴퍼니 이주연 매니저 (Product&Marketing)

 

기업, 공공기관, 병원 등 대부분의 기관에서 데이터를 차곡차곡 모으고 있지만 정작 이 많은 데이터를 어떻게 활용해야 할지, 과거 데이터를 활용하고자 할 때도 어떻게 찾아야 할지 막막하실 거라는 생각이 듭니다.

더불어, 전통적인 키워드 기반의 검색 방식은 사용자의 질문에 대한 정확한 답변을 찾아내는 데 한계가 있다 보니 사용자의 질문을 더 깊이 이해하고, 대용량 데이터에서 정확한 답변을 추출할 수 있는 기술의 필요성이 높아지고 있습니다.

 

이러한 고민을 해결하고자 LLM (Large Language Model, 초거대 모델) 과 벡터 임베딩이라는 두 가지 기술이 주목받고 있습니다. LLM은 텍스트 데이터의 패턴을 깊게 파악하여 사용자의 질문에 대한 연관된 답변을 생성하거나 추출하는 데 탁월한 성능을 보입니다. 벡터 임베딩은 단어나 문장, 심지어 문서 전체의 의미를 벡터 형태로 표현하는 기술로, 이를 통해 문서 간의 유사성을 빠르게 계산할 수 있습니다.

 

두 기술의 결합은 RAG (Retrieval Augmented Generation) 기술로 연결됩니다. 사용자의 질문을 벡터로 변환하고, 이를 기반으로 데이터베이스 내에서 가장 연관된 문서나 정보를 찾아내는 것을 의미하는데요, LLM은 그 후 이 문서들을 기반으로 사용자의 질문에 가장 적절한 답변을 생성하게 됩니다.

 

RAG Pipeline

 

반면, 전통적인 정보 검색 시스템은 TF-IDF (Term Frequency-Inverse Document Frequency) 기법을 통상적으로 사용합니다. 이는 단어의 빈도와 문서 빈도의 역수를 곱하여 텍스트 데이터를 표현하는 전통적으로 쓰여온 문서 이해를 위한 자연어 처리 방식입니다.

 

TF-IDF는 의미론적 유사성을 반영하지 못하는 부분과 희소 벡터 생성 문제가 대표적인 단점으로 꼽히고 있습니다. 각 단어를 독립적인 요소로 취급하기 때문에 동일한 단어가 문맥마다 다르게 표현되는 경우 구분할 수 없고, 단어의 출현 빈도를 기반으로 문서를 표현하기 때문에 단어의 의미를 완전히 반영하기 어렵습니다. 더불어, 대부분의 단어가 0으로 채워진 희소 벡터를 생성할 수 있어 모델의 복잡성을 증가시키고 연산 비용을 증가시킬 수 있다는 단점도 함께 가지고 있습니다.

 

벡터 임베딩은 이러한 전통적인 정보 검색 시스템의 한계를 보완하고자 개발되었습니다. 벡터 임베딩은 단어, 문장, 문서와 같은 텍스트 데이터를 고차원 벡터 공간에 매핑하는 기술입니다. 의미론적으로 유사한 텍스트들은 벡터 공간에서 서로 가깝게 위치하게 됩니다. 이를 통해 문서 간의 유사도를 효과적으로 계산할 수 있게 되며, TF-IDF의 한계를 극복할 수 있게 됩니다.

 

문서 임베딩의 주요한 방법론을 간단하게 소개해드리겠습니다.

  • Doc2Vec: Word2Vec의 확장 버전으로, 문장이나 문서 전체의 의미를 벡터로 변환하는 방법론입니다. Doc2Vec는 문서와 그 안의 단어들을 함께 학습하여 문서 전체의 의미를 포착합니다. 이를 통해 문서 간의 의미론적 유사성을 효과적으로 파악할 수 있게 됩니다.
  • S-BERT (Sentence BERT): Google Research에서 2018년에 제안한 BERT 모델 및 학습 방법론은 특정 문맥에서의 단어의 의미를 잘 파악하는 데 유용한 구조를 가지고 있습니다. S-BERT는 이를 활용하여 문장의 전체적인 의미를 벡터로 효과적으로 임베딩합니다.
  • DPR (Dense Passage Retriever): Facebook Research 에서 2020년 제안한 DPR은 특정 질의에 대한 답변을 잘 찾아낼 수 있는 문서나 구간을 빠르게 검색하기 위해 설계되었습니다. 이 방법은 질의와 문서 간의 관계를 고려하여 문서의 벡터를 생성합니다.
  • S-GPT (Sentence GPT): 위 Sentence BERT 의 형태에 GPT의 구조를 활용하여 문장이나 문서의 의미를 더 잘 파악하고, 이를 벡터로 임베딩하는 방식입니다.

문서 임베딩을 통해 문서 간의 의미론적 유사성을 효과적으로 파악할 수 있고, 텍스트 데이터를 고차원 벡터 공간에 매핑함으로써 다양한 수학적 연산을 적용할 수 있습니다. 이를 통해 문서 간의 유사도 계산, 클러스터링, 분류 등 다양한 작업을 수행할 수 있게 되는 것입니다.

 

벡터 임베딩을 구축하고 저장하기 위해서는 Vector DB(Database)가 필요합니다. Vector DB는 임베딩된 벡터를 저장, 관리, 검색하기 위한 특별한 형태의 데이터베이스입니다. 고차원의 벡터 공간에서 가장 유사한 아이템을 빠르게 검색할 수 있는 구조로 최적화되어 있으며 벡터를 효과적으로 인덱싱하는 것이 빠른 검색을 가능하게 하는 비결입니다.

 

(인덱싱은 데이터베이스에서 효율적인 검색을 위해 데이터를 구조화하고 정렬하는 프로세스를 말합니다. 데이터베이스에 인덱스를 생성하면 검색 속도를 향상시키고 데이터에 빠르게 액세스 할 수 있습니다. 이를 통해 데이터베이스의 성능을 향상시키고 데이터의 효율적인 관리가 가능해집니다.)

 

Vector DB는 다양한 기업 및 오픈소스 커뮤니티에서 다양한 기능과 특징을 가지고 제공되고 있으며, 대표적인 Vector DB들의 리스트는 아래와 같습니다.

대표적인 Vector DB

 

Vector DB를 구축하고 운영할 때 핵심 선택 전략은 기존 Document DB 나 검색엔진에서 다루었던 방법과 유사합니다.

  • 무중단 Indexing 전략: 데이터의 지속적인 업데이트가 발생할 경우, 무중단 인덱싱은 필수적입니다. 이를 위해 병렬 인덱싱, 델타 인덱싱, 또는 로드 밸런싱을 통한 여러 인덱스 노드 활용 전략을 고려할 수 있습니다.
  • Index 저장 공간 최적화: 인덱스 크기를 줄이기 위해 벡터의 차원 축소, 압축, 또는 효율적인 저장 방식을 선택하는 전략이 요구됩니다.
  • 빠른 Indexing 전략: 대용량 데이터를 신속하게 인덱스 하기 위해 분산 처리, H/W 나 S/W 를 이용한 속도 가속, 그리고 효율적인 인덱싱 알고리즘의 선택이 중요합니다.
  • 검색 시간 최적화 전략: 임베딩 벡터 간의 유사도 계산 속도를 향상하기 위해, 검색 알고리즘을 효율적으로 구현하거나, 캐시 레이어의 활용과 같은 방안을 적용할 수 있습니다.
  • 대용량 처리 전략: 대용량의 서비스를 지원해야 하는 경우, 데이터를 여러 DB 인스턴스로 분산 저장하여, 병렬 처리를 통해 검색 성능을 향상하는 DB 기능이 지원 되어야 하며, 이에 따른 DB reliability 지원 및 Backup/Replication 지원 전략, 동시에 많은 요청이 들어오는 경우, 요청을 균등하게 분산시켜 처리하는 전략이 고려될 필요가 있습니다.

오늘은 Vector Embedding 에 대한 상세한 내용을 소개해 드렸습니다. 다음 회차를 통해, LLM과 RAG 기술에 대해 설명해 드리면서, 현업에서는 해당 기술들을 어떻게 솔루션에 녹여내는지 설명해 드리도록 하겠습니다.

다음 회차도 또 놀러와 주실 거죠??👀

 


[Summary]

RAG = Vector Embedding + LLM

 

-> Vector Embedding?

What? 단어, 문장, 문서와 같은 텍스트 데이터를 고차원 벡터 공간에 매핑하는 기술임

How? 의미론적으로 유사한 텍스트들은 벡터 공간에서 서로 가깝게 위치하게 됨. 이를 통해 문서 간의 유사도를 효과적으로 계산할 수 있게 되며, 의미론적 유사도를 전통적인 검색에 비해 훨씬 정확하게 구별할 수 있게 됨

Why? 전통적인 검색 방식의 의미론적 유사도 판별이 어려운 점, 희소 벡터 생성 등의 단점을 보완하고자 개발됨