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의 방식이다.
학습되지 않은 정보를 다루는 방법을 정리하면 세 가지 정도가 있다.
- 사내 정보를 모델에 학습시키기
- RAG로 이용하기
- Hybrid 방식
정리#
- Word2Vec 같은 Static Embedding은 단어를 하나의 고정 벡터로 표현해 문맥을 담지 못한다.
- Dynamic Embedding은 attention으로 문맥에 따라 단어 벡터를 형성한다.
nn.Embedding은 초기 Static Embedding, Multi-Head Attention 결과물이 Dynamic Embedding이다. - 학습되지 않은 정보는 VectorDB에 embedding으로 저장해두고, 쿼리와 cosine similarity가 높은 k개를 뽑아 프롬프트에 함께 넣어 답하게 하는 RAG로 다룰 수 있다.
댓글