한글 문서 검색: 제품 코드와 자연어 질문을 함께 평가하기

제품 코드의 정확 일치 검색과 한글 띄어쓰기·약어가 포함된 자연어 질문 검색을 비교 검증하는 평가셋 구성 및 점검 가이드입니다.

핵심 요약

  • 검색 방식을 같은 조건에서 비교: 코드 정확 일치, lexical, dense, hybrid를 같은 문서·버전·권한·예산 조건으로 평가하고, 필요하면 reranker를 선택적으로 비교합니다.
  • 질의 유형은 분류 예시로 활용: 실제 질의와 실패 범위에 맞춰 코드, 띄어쓰기·오탈자, 약어, 복합 질문, 답이 없는 질문을 구성합니다.
  • 품질과 운영 지표를 함께 기록: 유형별 검색 품질, 표본 수, 후보 수, 지연 시간, 비용과 권한 필터 조건을 남깁니다.
  • 변경 후 재검증: 문서 수정·삭제·권한 변경 뒤 색인, 캐시, 검색 결과와 인용이 갱신되는지 확인합니다.

RAG 검색에는 제품 코드나 조항 번호처럼 정확한 식별자를 찾는 질문과, 띄어쓰기 변형·약어·문맥이 포함된 자연어 질문이 함께 들어올 수 있습니다. 이 두 유형은 같은 검색 설정에서도 다르게 동작할 수 있지만, 그 결과는 분석기, 색인 필드, 임베딩 모델, 검색 방식과 문서 구성에 따라 달라집니다.

코드 정확 일치, lexical 검색, dense 검색, hybrid 결합 중 어느 하나가 모든 질문에서 더 우수하다고 전제하지 않습니다. 같은 문서 집합·문서 버전·사용자 권한·후보 수·지연 및 비용 예산을 적용해 비교하고, 선택형 reranker가 필요한지도 별도로 평가합니다. 이 가이드의 코드와 질문은 테스트 설계를 설명하기 위한 가상 예시입니다.



검색 방식 비교와 질의별 동작

아래 방식들을 후보로 두고, 각 방식이 어떤 질문에서 관련 문서를 찾아내는지 같은 조건으로 비교합니다. 특정 방식을 반드시 도입하거나 결합해야 하는 것은 아닙니다.

비교 대상확인할 점주의할 점
코드 원문 필드의 정확 일치정확한 식별자와 문서 버전이 일치하는지 확인합니다.대소문자, 구분자, 정규화, 사용자 권한을 평가 조건에 명시합니다.
Lexical 검색제품명·조항·본문 용어의 검색 결과를 확인합니다.분석기와 전처리 방식에 따라 코드·띄어쓰기 처리 결과가 달라질 수 있습니다.
Dense 검색의미가 유사한 자연어 질문에서 관련 문서를 찾는지 확인합니다.의미 유사도만으로 제품 코드의 세부 차이나 정답성을 판단하지 않습니다.
Hybrid 결합lexical과 dense의 개별 결과 및 결합 결과를 비교합니다.결합이 항상 단일 방식보다 낫다고 가정하지 않습니다.
선택형 reranker적용 전후의 관련 문서 순위와 운영 비용을 비교합니다.코드의 미세한 차이를 정확히 판별한다고 가정하지 않습니다.

코드와 자연어 질문의 테스트 예시

DN-X900-KR은 설명을 위한 가상 제품 코드입니다. 분석기나 전처리 설정에 따라 코드가 통째로 처리되거나 여러 문자·하위 토큰으로 나뉠 수 있습니다. DN-X900-US, DN-X901-KR처럼 일부만 다른 코드와 실제 문서에 없는 코드도 함께 두고 실제 결과를 확인합니다. 특정 토큰 분해나 검색 순위를 미리 정답처럼 가정하지 않습니다.

테스트 유형가상 질의·입력 예시확인할 점
코드 정확 일치DN-X900-KR 사양서올바른 문서 및 관련 버전이 검색되는지 확인합니다.
유사 코드DN-X901-KR 사양서한 자리 차이로 다른 제품 문서를 잘못 반환하지 않는지 확인합니다.
존재하지 않는 코드DN-X999-ZZ 사양서근거가 없을 때 결과를 억지로 제시하거나 실제 코드로 자동 교정하지 않는지 봅니다.
정규화·구분자NFC/NFD 입력, 공백이나 하이픈이 달라진 코드입력과 색인 단계의 정규화, 띄어쓰기, 숫자·하이픈 보존 결과를 비교합니다.
띄어쓰기·오탈자출장비정산방법알려줘실제 사용 표현에서 관련 문서가 검색되는지 측정합니다.
사내 약어출비 한도 규정사용자 의도와 정답 판정 기준을 확인하고, 약어 처리 성능을 별도로 기록합니다.
복합 질문작년에 개정된 복리후생 지침에서 외근 식대 한도가 어떻게 바뀌었나요?질문에 관련된 문서와 버전이 적절한 순위에 있는지 확인합니다.
답이 없는 질문문서에 근거가 없는 규정이나 코드에 대한 질문검색 결과 없음 또는 답변 보류가 올바른 결과인지 확인합니다.

오타가 다른 실제 제품 코드로 자동 교정되면 사용자를 잘못된 제품 문서로 안내할 수 있습니다. 자동 교정 전후의 질의와 결과를 모두 기록하고, 바뀐 코드가 사용자가 의도한 코드인지 검증합니다. 한글 정규화는 NFC/NFD를 포함해 실제 입력·저장·색인 경로에서 확인하며, 한쪽 형식이 반드시 다른 형식으로 변환된다고 가정하지 않습니다.

평가셋 구성과 정답 판정

위 유형은 평가셋을 구성할 때 참고하는 예시이며, 모든 조직이 네 범주를 같은 수로 수집해야 한다는 뜻은 아닙니다. 표본 수를 미리 고정하지 말고 실제 질의와 관찰된 실패 범위, 이용 가능한 정답 판정 인력에 맞춰 정합니다. 가능하면 합성 질의뿐 아니라 실제 사용자 질의도 포함하고, 합성 질의가 실제 표현을 대표한다고 단정하지 않습니다.

정답은 질문에 따라 여러 문서 또는 여러 버전일 수 있습니다. 평가 전에 관련도 기준, 정답 문서 집합, 기준 문서 버전, 접근 권한을 기록합니다. 답이 없는 질문은 관련 문서가 없는 것으로 별도 표기해, 답변 가능한 질문의 검색 성능과 섞이지 않게 집계합니다.

평가 누수를 줄이려면 검색 설정 조정에 쓰는 개발·검증용 질의와 최종 holdout 질의를 분리합니다. 모델·가중치·색인 설정은 개발·검증용 결과로 조정하고, 설정을 확정한 뒤 손대지 않은 최종 holdout으로 최종 성능을 평가합니다. 최종 holdout 결과를 보고 설정을 다시 조정하면 그 holdout은 더 이상 미사용 평가셋이 아니므로, 이후 최종 평가에는 별도의 holdout을 마련합니다.

비교 대상마다 동일한 K, 후보 수, 문서 버전, 사용자 권한 및 권한 필터를 적용합니다. 표본 수와 함께 코드 질의·자연어 질의별 지표, 지연 시간 p50/p95, 비용을 기록합니다. 권한 검증에는 문서를 볼 수 있는 사용자와 볼 수 없어야 하는 사용자의 질문 쌍을 포함합니다.


검색 결합과 선택형 재정렬

Lexical 결과, dense 결과, 결합 결과를 각각 보존해 비교합니다. 가중치 기반 선형 결합을 시험한다면 점수 보정 또는 정규화 후의 점수에 적용한다고 명시하고, 실제 구현에서 점수 분포를 확인합니다. BM25 점수의 범위를 모든 구현에 공통인 고정 범위로 가정하지 않습니다.

Score_Hybrid(d) = alpha * calibrated_dense_score(d) + (1 - alpha) * calibrated_lexical_score(d)

alpha와 점수 보정 방식은 개발·검증용 질의에서 조정합니다. 최종 holdout 결과로 값을 선택하거나 반복 조정하지 않습니다. 선형 결합 결과가 코드 질의와 자연어 질의 중 어느 한쪽에 치우치는지 유형별로 확인합니다.

상호 순위 융합(RRF)은 검색 점수 자체 대신 각 결과 목록에서의 순위를 이용해 목록을 결합하는 한 가지 방법입니다. 아래 식은 개념을 나타내며, L_m은 검색 결과 목록, r_m(d)는 해당 목록 안에서 문서 d의 순위입니다.

RRF(d) = sum over lists containing d of 1 / (k + r_m(d))

문서가 특정 목록에 나타나지 않으면 그 목록에서의 기여도는 0입니다. k는 RRF의 랭킹 상수이고 검색 결과 개수 K와 다르며, 그 자체가 dense 검색의 가중치라는 뜻도 아닙니다. RRF의 수식과 랭킹 상수 설명은 Elasticsearch 공식 RRF 문서를 참고할 수 있습니다. 해당 문서는 Elasticsearch 구현의 동작 설명이므로, 다른 검색 시스템의 세부 동작은 각 제품 문서에서 따로 확인해야 합니다.

RRF를 시험한다면 개별 결과 목록의 순위, 각 목록의 후보 수와 절단 위치, 동률·중복 문서 처리, 목록별 가중치 적용 여부를 기록합니다. 후보 목록의 길이를 바꾸면 최종 순위가 달라질 수 있으므로 동일한 후보 조건으로 비교합니다. RRF와 cross-encoder reranker를 연이어 적용하는 구성도 선택 예시일 뿐이며, 결합만 한 경우와 reranker 적용 후 결과를 별도로 측정합니다.

reranker는 후보 문서의 순서를 다시 정렬하는 선택 단계입니다. 적용 전후의 관련 문서 순위와 코드 오검색 사례를 비교하고, 지연 시간 p50/p95와 비용도 함께 기록합니다. 코드 정확 일치 처리를 별도로 두는 경우에는 코드 추출, 정규화, 일치 판정 및 권한 검사를 각각 확인합니다.


검색 품질 지표와 가상 계산 예시

지표는 정답 정의와 검색 대상 K를 먼저 정한 뒤 계산합니다. 여기서 관련 문서는 질문과 사전에 합의한 관련도 기준을 충족한 문서를 뜻합니다.

지표계산·해석
Hit Rate@K각 질의에서 첫 관련 문서의 순위가 K 이내면 1, 아니면 0으로 두고 평균합니다. 검색되지 않으면 해당 질의의 값은 0입니다.
Recall@K상위 K개 검색 결과 중 관련 문서 수를 전체 관련 문서 수로 나눈 값을 질의별로 계산합니다.
MRR@K상위 K개에서 첫 관련 문서의 순위 역수를 계산해 질의별 평균을 냅니다. 관련 문서가 여러 개여도 첫 관련 문서를 기준으로 계산할 수 있습니다. 검색되지 않으면 0입니다.
NDCG@K등급별 관련도와 순위 감쇄를 반영합니다. 관련도 0~3 등급은 예시이며, 등급 기준을 평가 전에 정합니다. IDCG=0인 질의는 NDCG 집계에서 제외하고 해당 질의 수와 비율을 별도로 보고하는 정책을 사용할 수 있습니다.

가상 계산 예시: K=3이고 어떤 질의의 정답 문서가 4개인데 상위 3개 결과에 그중 1개만 검색됐다면, 해당 질의의 Hit Rate 기여값은 1이고 Recall@3은 1/4, 즉 .25입니다. Hit Rate는 상위 K에 정답이 하나라도 있는지를 보고, Recall은 전체 정답 중 몇 개를 찾았는지를 봅니다. 이 숫자는 지표 차이를 설명하기 위한 가상 예시이며 실제 성능 결과가 아닙니다.

답이 없는 질문은 정답 문서가 없는 상태이므로 Recall이나 NDCG를 일반 질의와 같은 방식으로 해석하지 않습니다. 무응답 질문의 불필요한 문서 반환 여부를 별도 지표나 판정 기준으로 기록하고, IDCG=0 처리 정책도 비교 전에 고정합니다.

실패 원인 점검 예시

실패 진단은 고정된 세 단계 절차가 아니라 확인할 수 있는 원인의 예시입니다. 먼저 질의, 사용자 권한, 문서 버전, 실제 결과 목록을 함께 살펴보고 다음 항목을 필요에 따라 확인합니다.

  • 코드·토큰 처리: 분석기나 전처리가 코드의 문자·하위 토큰을 어떻게 처리하는지, 숫자와 하이픈이 보존되는지, 원문 필드가 올바르게 색인됐는지 확인합니다.
  • 자연어·약어 검색: 실제 검색 결과와 관련도 판정을 비교하고, 약어를 풀어 쓴 질의나 띄어쓰기 변형에서 결과가 어떻게 달라지는지 확인합니다. 코사인 유사도 값만으로 품질이나 실패 원인을 단정하지 않습니다.
  • 결합·재정렬 결과: 개별 목록과 결합·reranker 적용 후의 순위, 후보 수와 절단, 중복·동률 처리 및 설정 차이를 비교합니다. 하나의 설정값만 실패 원인으로 미리 단정하지 않습니다.
  • 권한·문서 상태: 사용자가 접근할 수 있는 문서인지, 문서 버전·삭제 상태가 최신인지, 캐시나 인용에 이전 결과가 남았는지 확인합니다.

문서 변경과 운영 중 검증

검색 품질 검증은 색인 생성 때 한 번으로 끝나지 않습니다. 문서 추가·수정·삭제와 접근 권한 변경 후에 색인 상태, 캐시, 검색 결과 및 인용을 다시 확인합니다. 특히 문서 변경 전후의 버전이 검색 결과에 섞이지 않는지, 권한이 허용된 사용자에게는 검색되고 거부되어야 하는 사용자에게는 노출되지 않는지 쌍으로 점검합니다.

운영 기록에는 질의 유형, 결과와 정답 판정, 문서 버전, 권한 필터, 표본 수, 검색 방식과 설정, K 및 후보 수, 지연 시간 p50/p95, 비용을 포함합니다. 운영 질의 로그를 수집·보관할 때는 개인정보와 비밀값을 제외하거나 가림 처리하고, 이용 목적에 맞는 접근 권한과 보존 기간을 적용합니다. 개발·검증용 결과와 최종 holdout 결과를 구분해 보관하고, 운영에서 발견한 새 실패 사례는 다음 평가셋 갱신에 반영하되 기존 최종 holdout에 섞어 설정을 조정하지 않습니다.

씨홀스 제품 안내에는 S3 호환 오브젝트 스토리지, 자동 벡터 DB 동기화, 시맨틱 청킹, 문서 파싱, 벡터 데이터베이스의 테이블·스키마 관리 및 모니터링 등이 소개되어 있습니다. 이 기능 안내만으로 BM25, 특정 한글 분석기, RRF, 특정 reranker 또는 이 페이지의 검색 조합이 기본 제공된다고 판단하지 않습니다. 분석기, 검색 결합, reranker의 지원 범위와 연동 방식은 별도로 확인해야 합니다.


자주 묻는 질문

제품 코드 검색은 어떤 기준으로 확인하나요?

정확 코드, 유사 코드, 실제 문서에 없는 코드, 오타가 다른 실제 코드로 자동 교정되는 경우를 함께 점검합니다. 관련 버전과 사용자 권한, 복수 정답 여부를 반영하며, 단독 1순위를 모든 질문의 정답 조건으로 두지 않습니다.

가상 질문만으로 검색 성능을 평가해도 되나요?

합성 질문은 초기 평가에 활용할 수 있지만, 실제 사용자 질의와 실패 사례를 함께 검토해야 합니다. 설정 조정에 사용하지 않은 최종 holdout은 설정을 확정한 뒤 평가하고, 그 결과로 다시 조정하지 않습니다.

Hit Rate와 Recall은 같은 지표인가요?

아닙니다. Hit Rate@K는 상위 K개 안에 관련 문서가 하나라도 있는 질의의 비율이고, Recall@K는 전체 관련 문서 중 상위 K개에서 찾은 비율입니다. 정답 문서가 여러 개인 질문에서는 값이 다를 수 있습니다.

RRF를 적용하면 제품 코드 오검색이 해결되나요?

자동으로 해결되지는 않습니다. 코드 원문과 정규화, 개별 결과 목록, 결합 후 순위 및 권한 조건을 확인해야 합니다. RRF는 비교할 수 있는 선택지 중 하나입니다.

Hybrid 검색이 항상 더 좋은가요?

아닙니다. 코드와 자연어 질의별 검색 품질을 같은 문서·버전·권한·후보 수 조건에서 비교하고, 지연 시간과 비용까지 고려해 선택합니다.


검색 연동 범위와 운영 요건을 확인해보세요

씨홀스 제품 안내의 기능 범위를 살펴보고 필요한 분석기·검색 결합·reranker 연동 지원 여부를 별도로 확인하세요.

제품 기능 확인