문서를 청크로 나눈 후, RAG 파이프라인의 다음 단계는 사용자의 질문과 가장 관련성이 높은 청크를 찾는 것입니다. 이는 본질적으로 검색 문제입니다 - 모든 텍스트 청크를 살펴보고 사용자가 묻고 있는 내용과 관련된 것을 식별해야 합니다.
관련 청크 찾기
과제는 어떤 청크가 사용자의 질문과 "관련"되어 있는지 판단하는 것입니다. 이는 단순한 키워드 매칭만큼 간단하지 않습니다 - 질문과 청크 모두의 의미와 맥락을 이해해야 합니다.

가장 일반적인 해결책은 시맨틱 검색(semantic search)으로, 텍스트 임베딩을 사용하여 정확한 단어 일치를 찾는 것이 아니라 각 텍스트 조각이 실제로 무엇에 관한 것인지 이해합니다.
텍스트 임베딩이란 무엇인가요?
텍스트 임베딩은 어떤 텍스트에 담긴 의미를 숫자로 표현한 것입니다. 단어와 문장을 컴퓨터가 수학적으로 다룰 수 있는 형식으로 변환하는 것이라고 생각하면 됩니다.

작동 방식은 다음과 같습니다:
- 텍스트를 임베딩 모델에 입력합니다
- 모델은 긴 숫자 목록(일반적으로 1024개의 숫자)을 출력합니다
- 각 숫자는 입력 텍스트의 어떤 특성에 대한 "점수"를 나타냅니다
- 숫자의 범위는 -1에서 +1까지입니다
숫자 이해하기
임베딩의 각 숫자는 텍스트의 어떤 측면에 대한 점수와 같습니다. 각 위치가 정확히 무엇을 나타내는지는 알 수 없지만, 서로 다른 특성을 측정하는 것으로 생각하면 도움이 됩니다.

예를 들어, 어떤 숫자는 "텍스트가 얼마나 행복한지"를 점수화할 수 있고, 다른 숫자는 "텍스트가 바다에 대해 얼마나 많이 이야기하는지"를 측정할 수 있습니다. 핵심은 각 숫자가 실제로 무엇을 나타내는지 우리가 알지 못한다는 점입니다 - 임베딩 모델은 학습 과정에서 이러한 패턴을 학습하며, 이는 인간이 해석할 수 있는 것이 아닙니다.
코드로 임베딩 생성하기
임베딩을 생성하는 것은 간단합니다. 기본 과정은 다음과 같습니다:
이 함수를 텍스트 청크에 대해 실행하면, 해당 텍스트의 의미를 나타내는 1024개의 숫자 목록을 받게 됩니다.
AWS Bedrock 콘솔에서 Titan 임베딩 모델에 대한 액세스를 요청해야 할 수도 있습니다. 버전 2를 사용할 수 없는 경우, 학습 목적으로는 버전 1도 동일하게 잘 작동합니다.
RAG에서 임베딩이 중요한 이유
임베딩의 강력함은 유사한 텍스트가 유사한 임베딩 값을 갖는다는 것을 깨달을 때 명확해집니다. 이는 사용자의 질문을 문서 청크와 수학적으로 비교하여 정확히 같은 단어를 공유하지 않더라도 의미적으로 가장 유사한 것을 찾을 수 있다는 것을 의미합니다.
이러한 숫자 표현이 시맨틱 검색을 가능하게 하며, RAG 시스템에서 관련 컨텍스트를 찾는 데 있어 단순한 키워드 매칭보다 훨씬 더 효과적으로 만들어줍니다.