문제점

  • 시맨틱/자연어 검색, RAG를 위해서는 벡터 임베딩을 해야함
  • 대부분의 임베딩 모델은 입력 길이 제한이 있음
    • 적당한 입력 길이를 맞추는 것이 검색 품질과 연결됨
    • 입력 길이 제한으로 대부분 단락을 분리하여 저장하게 됨
  • 원문을 분리하여 저장함으로 하나의 문서가 여러개의 문서로 분리됨
    • 대부분의 문서는 메타 데이터, 장문의 다른 필드 등 텍스트 데이터 하나로 구성되어 있지 않음
    • 분리된 데이터를 저장하기 위해서는 분리된 원문과 부가 정보를 중복 저장하거나 컬렉션(혹은 테이블)을 분리하여 저장해야 함
      • 중복 저장은 저장 용량의 증가로 비효율이 발생하고 분리된 컬렉션은 검색 과정에서 조인, 점수 계산, 문서수 계산 등 복잡도를 증가시킴
    • 이러한 방식은 대부분의 벡터 저장소를 사용함에 따라 자주 마주하게 되는 문제임

해결

  • 원문을 분리하지 않을 다른 방법을 찾음
  • 임베딩 데이터가 저장되는 필드를 2차원 데이터를 입력 받을 수 있도록 DB와 관련 라이브러리를 수정함
    • 이는 원문이 분리되지 않고 하나 이상으로 분리된 문서별 가변 길이를 가지는 벡터 데이터를 저장할 수 있게 됨
    • 이 방법으로 원문과 분리된 벡터 데이터가 컬렉션 분리 없이 공존할 수 있게 되며 데이터 관리, 쿼리 등이 간결해짐