본문으로 건너뛰기

검색 결과 점수 통합

RRF Top-30에 포함된 검색표현을 연결된 원문 청크로 변환하고, 원문 청크가 받은 점수 중 최댓값을 사용해 최종 Top-10을 구성합니다.

입력과 출력

입력원문 청크와 검색표현이 섞인 RRF Top-30 후보
출력통합 점수 기준 Top-10 원문 청크

최종 결과 하나는 다음과 같은 형태입니다.

{
"unit_id": "ruf_69b7096d428d67de25c37a08", // 최종 후보로 선택된 원문 청크 ID
"document_id": "d001468_7f73511172", // 원문 청크가 나온 문서의 ID
"text": "증상 개선이 없으면 즉시 119에 신고한다.", // 답변 근거로 사용할 원문
"score": 0.0241374787, // 직접 검색과 검색표현 경로에서 받은 점수 중 최댓값
"page_number": 1, // 사용자에게 표시할 원본 페이지 번호. 1부터 시작
"winner_retrieval_expression_id": "rte_2f257c9f73b098c121fe6e39", // 최고 점수가 검색표현에서 왔을 때 그 검색표현의 ID
"winner_retrieval_expression_text": "온열질환 응급조치 후 증상이 나아지지 않으면 119에 신고해야 한다." // 최고 점수가 검색표현에서 왔을 때 그 검색표현의 문장
}

최종 순위는 원문 청크로만 구성됩니다. 검색표현을 통해 발견된 원문 청크에는 해당 검색표현이 검색 경로 정보로 함께 기록됩니다. 직접 검색된 원문 청크에는 검색표현 정보가 붙지 않습니다.

동작 방식

  1. 검색표현의 점수를 연결된 모든 원문 청크에 그대로 전달합니다.
  2. 같은 원문 청크가 여러 경로에서 점수를 받으면 그중 Max Score를 최종 점수로 사용합니다.
  3. 최종 점수를 기준으로 정렬하고 중복된 원문 청크가 없는지 확인합니다.
  4. 상위 10개의 원문 청크를 최종 답변 근거로 선정합니다.

검색표현의 점수는 연결된 청크 수로 나누거나 다른 점수와 합산하지 않습니다. 검색표현과 연결된 원문 청크의 수가 검색 순위에 영향을 주지 않도록, 각 청크가 받은 점수 중 가장 높은 값만 사용합니다.

점수가 같으면 OpenSearch에서 먼저 반환된 후보가 앞에 남습니다.

검색표현의 점수를 원문 청크에 전달

[검색표현] rte_c721e454a741beba87385a0e RRF=0.0195015375
├─ [원문 청크] ruf_d0e6ad7d2fe1b06cb8df0f2b 후보점수=0.0195015375
└─ [원문 청크] ruf_9379e0b51c1f291293ae787d 후보점수=0.0195015375

같은 청크가 여러 경로에서 검색된 경우

[원문 청크] ruf_d0e6ad7d2fe1b06cb8df0f2b
- 직접 검색 점수 = 0.0226023976
- 검색표현에서 전달된 점수 = 0.0195015375
- 최종 점수 = max(0.0226023976, 0.0195015375) = 0.0226023976

최종 Top-10

1 ruf_f0482c0499437992c339593c 0.0269439421
2 ruf_7ae68dc5bf2926f9344d9a4d 0.0243830787
3 ruf_69b7096d428d67de25c37a08 0.0241374787 ← rte_2f257c9f73b098c121fe6e39를 통해 검색
4 ruf_ea2e71fd10b08d9e12a13dea 0.0240860215
5 ruf_fa0772dd49096df35fd3bc52 0.0226423903
6 ruf_d0e6ad7d2fe1b06cb8df0f2b 0.0226023976
7 ruf_fdcc99e7fdb84d2fb2e975d6 0.0225392887
8 ruf_9b5cf2a08ad30a601abb67ec 0.0221230159
9 ruf_87c736ea241e82375e747538 0.0213546880
10 ruf_a76f73294b0550361c4cefd1 0.0206307308

설정값

profile key현재 production 값의미
query.native_rrf.final_source_top_k10최종 답변 근거로 사용할 원문 청크 수

현재 최종 근거 수는 최대 10개입니다. 이 값을 변경하면 LLM Context 구성에 들어가는 근거 수도 달라지므로 검색과 QA 성능을 함께 확인해야 합니다.

이 단계에서는 모델을 호출하지 않습니다.

코드 참조

확인할 내용파일·심볼
점수 전달backend/struct4search/query/retrieval/projection.py · DefaultF400ProjectionPolicy
Max Score와 정렬backend/struct4search/query/retrieval/max_score.py · DefaultMaxScorePolicy
최종 결과 선정backend/struct4search/query/retrieval/top_k.py · DefaultTopKPolicy.select
profileconfigs/production.yaml · query.native_rrf.final_source_top_k