Static, Dynamic Embedding과 VectorDB, RAG

Word2Vec 같은 Static Embedding의 한계와 문맥에 따라 변하는 Dynamic Embedding, 학습되지 않은 정보를 다루기 위한 VectorDB와 RAG에 대한 내용을 짧게 정리해보았다.

Static Embedding의 한계#

Word Embedding과 Word2Vec에서 본 Word2Vec에 따르면, 다양한 의미를 가진 단어라도 하나의 고정된 벡터로 표현된다. 즉 문맥의 정보를 잘 담지 못한다. 이런 embedding을 Static Embedding이라고 부른다.

Dynamic Embedding#

Dynamic Embedding은 문맥에 따라 Word Embedding을 정의한다. 문맥에 따라 동적으로 단어의 의미 벡터를 형성하는 것이다. Transformer의 attention 메커니즘을 활용하는 embedding을 Dynamic Embedding이라 할 수 있다.

좀 더 구체적으로는, Transformer의 nn.Embedding(vocab_size, d_model)은 단어들의 초기 정보를 지닌 Static Embedding이고, 그 초기 정보로부터 다양한 문맥의 의미를 파악하는 Multi-Head Attention의 결과물이 Dynamic Embedding이 된다.

VectorDB와 RAG#

Transformer는 동적 임베딩으로 입력을 처리하지만, 추론 시 학습되지 않은 정보가 주어지면 그 정보가 없기 때문에 이상한 답변을 하게 된다. 예를 들어 회사의 정보나 오늘의 날씨처럼 학습되지 않은 정보가 주어지면 제대로 된 답변을 받지 못한다.

그럴 때는 우리만의 정보를 쪼개 단어 단위로 embedding한 결과를 VectorDB에 저장해 사용자만의 Vector DB를 구축할 수 있다.

이제 생소한 쿼리가 주어졌을 때, 쿼리를 마찬가지로 쪼개 embedding하고, 그 embedding을 구축된 Vector DB의 공간상에 두었을 때 가장 cosine similarity가 높은 정보들을 k개 추출한다. 쿼리와 추출한 정보 k개를 모델의 프롬프트로 제공해 모델이 그 정보를 바탕으로 답변할 수 있게 하는 것이 RAG의 방식이다.

학습되지 않은 정보를 다루는 방법을 정리하면 세 가지 정도가 있다.

  1. 사내 정보를 모델에 학습시키기
  2. RAG로 이용하기
  3. Hybrid 방식

정리#

  • Word2Vec 같은 Static Embedding은 단어를 하나의 고정 벡터로 표현해 문맥을 담지 못한다.
  • Dynamic Embedding은 attention으로 문맥에 따라 단어 벡터를 형성한다. nn.Embedding은 초기 Static Embedding, Multi-Head Attention 결과물이 Dynamic Embedding이다.
  • 학습되지 않은 정보는 VectorDB에 embedding으로 저장해두고, 쿼리와 cosine similarity가 높은 k개를 뽑아 프롬프트에 함께 넣어 답하게 하는 RAG로 다룰 수 있다.

댓글