할루시네이션을 잡아내기 위해 로컬 RAG에 검증 레이어를 추가했습니다
Ollama를 사용하여 로컬 연구 보조 도구를 만들었습니다. 제가 작성한 논문들을 기반으로 작동하며, 데이터가 제 컴퓨터 외부로 유출되지 않습니다.
할루시네이션을 방지하고 싶었습니다. 확신에 찬 말투로 잘못된 수치를 인용하는 도구는 위험하기 때문입니다.
그래서 검증 레이어를 추가했습니다. 작동 방식은 세 단계로 나뉩니다:
- 답변을 작은 주장(claim) 단위로 나눕니다.
- LLM을 사용하여 각 주장이 소스(source)와 일치하는지 확인합니다.
- 소스에서 뒷받침되지 않는 주장에 플래그(flag)를 표시합니다.
그 결과, 뼈아픈 교훈을 얻었습니다. 제 자신의 데이터에 대해 두 번이나 틀린 결론을 내렸습니다.
첫째, 모델이 실제 수치를 제시했지만 잘못된 문맥을 사용했습니다. 존재하지 않는 테스트 세트에 대해 AUROC 0.804를 인용했습니다. 숫자는 실제였지만, 문맥은 거짓이었습니다. 검증기는 숫자가 일치했기 때문에 이를 통과시켰습니다.
둘째, 모델이 논문의 다른 부분에서 숫자를 가져왔습니다. 특정 값을 잘못된 실험 결과로 할당한 것입니다.
테스트를 통해 배운 점은 다음과 같습니다:
검증은 값이 없는 경우만 잡아냅니다. 만약 숫자가 텍스트에 전혀 없다면 검증기가 잡아낼 수 있습니다. 하지만 숫자가 실제 존재하더라도 잘못된 사실에 연결되어 있다면, 검증은 실패할 때가 많습니다.
동일한 모델을 판독자로 쓰면 사각지대가 생깁니다. 답변을 작성한 모델과 이를 판단하는 모델이 같으면, 자신의 실수를 무비판적으로 승인(rubber-stamp)해 버립니다. 다른 모델을 판독자로 사용하면 잘못 할당된 숫자를 잡아내는 데 도움이 됩니다.
플래그가 항상 거짓을 의미하는 것은 아닙니다. 플래그는 세 가지를 의미할 수 있습니다:
- 실제 할루시네이션.
- 소스를 찾지 못한 검색(retrieval) 오류.
- 검색된 텍스트에는 없었지만 실제로는 사실인 내용. 플래그가 표시되면 단순히 해당 주장을 삭제하기보다 데이터를 다시 검색(re-retrieving)해 보세요.
- 정답(ground truth)이 필요합니다. 실제 정답을 모르면 할루시네이션을 측정할 수 없습니다. 저는 제 연구에 대해 두 번이나 잘못된 결과를 발표할 뻔했습니다. 파일을 간단히 검색해 보는 것만으로 두 오류를 모두 바로잡을 수 있었습니다.
RAG 구축을 위한 실질적인 조언:
- 답변을 생성하는 모델과 다른 모델을 판독자로 사용하세요.
- 더 나은 검색(retrieval)에 집중하세요. 대부분의 "할루시네이션"은 단순한 검색 실패입니다.
- 플래그를 단순한 오류 신호가 아니라, 더 깊이 파고들라는 프롬프트로 취급하세요.
선택 사항 학습 커뮤니티: https://t.me/GyaanSetuAi