sjkwon

RAG 문서 검색

질문 재작성의 개선을 문서 재작성 가설로 확장해 검색 성능을 높이고, 경진대회 2위를 기록했습니다.

기간
2024.12
분류
경진대회
역할
2인 · 질문·문서 재작성 실험과 임베딩 검색 담당 (Upstage AI Lab 경진대회)
스택
Python · Embedding · TF-IDF · HNSW · LLM

단일 질문과 멀티턴 대화에 맞는 문서를 찾아 상위 3개를 제출하는 4일간의 경진대회였습니다. 지표는 MAP였습니다. 첫 회의에서 LLM 검색과 임베딩 검색이라는 두 접근을 정했고, 2인 팀이 하나씩 맡아 실험한 뒤 결과를 공유했습니다. 저는 질문·문서 재작성 실험과 임베딩 검색을 담당했습니다.

실험 방향 설정

팀의 LLM 검색은 질문에서 키워드를 추출하고 TF-IDF로 후보를 찾은 뒤, LLM이 최종 문서 3개를 선택하는 방식이었습니다. 일부 질문에서는 잘 맞았지만 결과 편차가 컸습니다.

제가 맡은 임베딩 검색에서는 다음 여섯 모델을 비교했습니다.

  • KR-SBERT
  • KoSimCSE
  • klue/bert-base
  • BAAI/bge-large-en-v1.5
  • OpenAI text-embedding-3-small
  • Upstage embedding-query/passage

Upstage embedding-query/passage가 MAP 0.8848로 가장 높았습니다. 이 점수는 이후 텍스트 표현을 바꾸는 실험의 기준선으로 사용했습니다.

질문 재작성과 문서 재작성

임베딩 모델을 먼저 정한 뒤 Sparse와 Dense를 단독으로 쓸 때보다 두 방식을 결합했을 때 점수가 크게 오르는 것을 확인했습니다. 하이브리드 검색 안에서는 적용 순서와 점수 합산 비율, 코사인·유클리드 거리와 HNSW 인덱스 검색을 비교했습니다. 세부 구성을 바꿨을 때의 차이는 크지 않아, 다음에는 검색에 들어가는 텍스트 자체를 바꿔 보기로 했습니다.

비슷한 질문을 여러 개 만드는 단순 증강은 오히려 점수를 떨어뜨렸습니다. 반면 LLM이 원래 질문의 의도를 유지한 채 검색에 적합한 표현으로 다시 쓰게 하자 점수가 소폭 올랐습니다. 질문의 정보량을 늘리는 것보다 검색 모델이 비교하기 쉬운 표현으로 바꾸는 것이 중요하다는 신호로 해석했습니다.

여기서 같은 가설을 문서 쪽으로 확장했습니다. 문서 내용도 임베딩 검색에 적합한 형태로 재구성해 별도로 임베딩했고, 이 실험이 텍스트 표현을 바꾼 시도 중 가장 큰 점수 향상을 만들었습니다.

최종 제출에서는 원본 질문·문서, 재작성한 질문, 재작성한 문서에서 얻은 후보를 조합했습니다. 한쪽 표현으로 원본을 대체하지 않고 서로 다른 표현이 찾아낸 후보를 함께 사용했습니다.

결과

원래 4인으로 꾸린 팀이었지만 팀원 두 명이 빠져, 실제 대회는 남은 두 명이 진행했습니다. 4일 동안 LLM과 임베딩 두 접근을 병렬로 확인해야 했기 때문에 별도의 리랭커 모델을 학습해 적용하지는 못했습니다. 임베딩 모델 비교에서 출발했지만, 최종 차이를 만든 것은 모델 교체보다 질문과 문서의 표현을 검색에 맞게 재작성하는 로직이었습니다. 이 접근으로 최종 2위를 기록했습니다.