RAG(Retrieval-Augmented Generation) 시스템이 "관련 있는 정보가 없다" 고 판단하는 방법은 보통 검색 단계(Retrieval)에서 계산되는 유사도(Similarity) 점수를 기준으로 한다.
가장 일반적인 방법으로 질문 임베딩과 문서 임베딩의 코사인 유사도를 계산한다.
질문: BERT MLM
문서1: 김치찌개 레시피 → 0.15
문서2: 된장찌개 만드는 법 → 0.18
문서3: 파스타 레시피 → 0.12
만약 Threshold(임계값)를 0.7로 설정한다면 0.18 < 0.7 이므로 "관련 정보를 찾을 수 없다"고 답변한다.
상위 문서 하나만 보는 것이 아니라 여러 개를 활용한다.
예)
Top 5 Similarity
0.42
0.39
0.35
0.31
0.28
평균
(0.42+0.39+0.35+0.31+0.28)/5 = 0.35
평균이 기준 이하인 경우 "No Context Found"로 처리한다.
유사도가 높아 보여도 실제로는 애매한 경우가 있다.
Top1 = 0.61
Top2 = 0.60
Top3 = 0.59
이렇게 모든 문서가 비슷하게 애매할 수 있다.
Top1 = 0.88
Top2 = 0.52
Top3 = 0.48
이런 경우에는 Top1이 매우 강한 후보가 된다.
그래서 Gap = Top1 - Top2 을 계산하여 활용하기도 한다.
이를테면 아래와 같이 Score는 높고 Gap이 작은 경우
Top1 = 0.82
Top2 = 0.80
Gap = 0.02
따라서 추가 검색을 수행하거나 Top-K 문서를 모두 LLM에 전달하는 방법을 쓸 수 있다.
혹은 Score도 높고 Gap도 큰 경우도 있는데
Top1 = 0.91
Top2 = 0.55
Gap = 0.36
이런 경우에는 Top1만 사용할 가능성이 좋다.
Score도 낮고 Gap도 작으면?
Top1 = 0.41
Top2 = 0.40
Gap = 0.01
이런 경우에는 관련 문서가 없다는 것으로 판단하는 강한 근거가 된다.
실제로는 Gap만 보기 보다는 Top1 Score + Gap + Re-ranker Score 를 다 같이 본다.
예)
1. 벡터 검색으로 20개 추출
2. Cross Encoder가 재평가
3. 관련성 점수 산출
사용모델 예
BGE Reranker
Cohere Rerank
MonoT5
검색된 문서를 LLM에 함께 전달한다.
질문:
{query}
검색 문서:
{context}
문서만 사용하여 답변하시오.
답을 찾을 수 없으면
"I don't know"라고 답하시오.
** 다만 이 방법은 LLM이 추측(hallucination)할 가능성이 있어 단독으로 쓰는 경우는 적다.
Vector Search
↓
Top-K Retrieval
↓
Re-ranker
↓
Threshold 검사
↓
통과하면 LLM
실패하면 "정보 없음"