검색 결과 점수 통합
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에 신고해야 한다." // 최고 점수가 검색표현에서 왔을 때 그 검색표현의 문장
}
최종 순위는 원문 청크로만 구성됩니다. 검색표현을 통해 발견된 원문 청크에는 해당 검색표현이 검색 경로 정보로 함께 기록됩니다. 직접 검색된 원문 청크에는 검색표현 정보가 붙지 않습니다.
동작 방식
- 검색표현의 점수를 연결된 모든 원문 청크에 그대로 전달합니다.
- 같은 원문 청크가 여러 경로에서 점수를 받으면 그중 Max Score를 최종 점수로 사용합니다.
- 최종 점수를 기준으로 정렬하고 중복된 원문 청크가 없는지 확인합니다.
- 상위 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