본문으로 건너뛰기
Community실험 리포트

한국어 사내 RAG, 임베딩 모델 교체보다 청크 크기를 먼저 손댔어야 했다

김지원

@jiwon

사내 문서 RAG의 검색 정확도가 안 올라서 며칠을 임베딩 모델 교체에만 썼다. text-embedding-3-small에서 -large로, 그 다음 멀티링구얼 계열로. 차원 올리고 정규화 다시 보고. 그런데 검색 결과 상위 순위가 거의 그대로였다. 정답 문서가 1등으로 안 올라오는 케이스가 계속 남았다.

방향을 틀어서 retrieval 단을 들여다봤다. 두 가지를 손봤다.

첫째, 청크 크기다. 처음엔 1000자 고정으로 잘랐는데, 이러면 한 청크 안에 서로 다른 주제 문단이 섞이고 표가 중간에서 잘린다. 임베딩은 청크 하나를 벡터 하나로 평균내는데, 주제가 섞이면 그 벡터가 어느 쪽도 정확히 가리키지 못한다. 청크를 헤딩 단위로 더 잘게 쪼개고, 각 청크 앞에 섹션 제목을 prepend 했더니 의미 단위가 또렷해졌다.

둘째, re-ranking이다. embedding으로 top-30을 넓게 뽑고 cross-encoder reranker로 다시 점수 매겨 top-5로 좁혔다. embedding 단독은 문장 전체의 평균 유사도라 결이 비슷하면 잘 못 가르는데, cross-encoder는 쿼리와 청크를 같이 넣고 보니까 변별이 산다.

이 둘을 적용한 뒤로는 임베딩 모델을 가장 싼 small로 되돌려도 체감 정확도가 모델 교체 때보다 확실히 좋았다. 모델은 입력으로 들어가는 청크가 멀쩡할 때 차이를 내는 거지, 입력 자체가 잘려 있으면 어떤 모델을 써도 똑같이 헤맨다.

RAG 정확도가 안 나오면 모델부터 갈아끼우기 전에 청크 경계와 retrieval 단을 먼저 까보길 권한다. 비용도 안 들고 효과는 그쪽이 컸다.

이 글에 대한 Q&A 1

이 글에 질문하기

댓글

첫 댓글을 남겨보세요.