논문 소개
Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection (link)
LangChain 구현 코드
https://github.com/langchain-ai/langgraph/blob/main/examples/rag/langgraph_self_rag.ipynb
LangChain 구현 코드와 논문 차이
- 기존 논문에는 다시 문서 검색을 수행할때 "기존 쿼리 + 가장 순위가 높은 이전응답"을 활용해 검색 진행
- LangChain example에서는 "쿼리 재작성"을 통한 새로운 쿼리를 검색어에 사용
- 기존 논문에서는 각각의문서(d)에 대해 질문-문서 관련성, 질문-답변 관련성, 질문-문서-응답 환각여부를 판단하고 가장 좋은 응답을 선택
- LangChain example에서는 관련된 문서가 하나라도 있다면 전체 문서들에 대해 응답 생성
- 기존 논문과는 다르게 구현 코드에서는 초반에 검색여부를 결정하는 부분이 없음
- 기존 논문은 Llama-2-7B모델을 활용해 특정 토큰을 생성할 수 있도록 학습을 진행, 토큰에 기반한 Ranking 등의 방법을 사용
- LangChain example에서는 API로 호출하는 Blackbox LLM 사용(Structured Output)
Self-RAG
Self-RAG(Self-Reflective Retrieval-Augmented Generation)은 RAG(retrieval-augmented Generation)모델이 스스로 검색한 문서와 생성된 응답을 평가(Self-Reflection, Self-Grading)하는 전략이다.
self-RAG에서는 모델이 검색된 문서가 질문과 관련이 있는지, 생성된 답변이 문서에 기반하고 있는지(환각 여부 판단), 생성된 답변이 질문에 유용한지 등을 스스로 평가한다.
self-RAG 모델은 다음과 같은 4가지 중요한 결정을 수행함
1. 검색을 수행할지 여부 결정
- Input: x(question) OR x (question), y (generation)
- Decides when to retrieve D chunks whith R
- output: Yes(검색수행), No(검색 불필요), Continue(기존 결과 유지)
- → RAG 시스템은 질문을 받았을 때, 검색기를 사용하여 문서를 가져와야 하는지 판단을 해야 함
- → 일부의 경우에는 추가적인 검색 없이도 답변을 할 수 있기 때문에, 검색 여부를 모델이 결정
2. 검색된 문서 (Chunks, D)가 질문 (x)과 관련이 있는지 평가
- Input: (x (question), d (chunk)) for d in D
- d provides useful information to solve x
- output: relevant(질문과 관련 있음), irrelevant(질문과 무관함)
- → 검색된 문서 조각들이 질문과 관련 있는지 평가하는 과정
- → 검색된 문서 중 질문과 무관한 데이터는 제거할 수 있음
3. 생성된 답변(y)이 검색된 문서 (d)에 기반하고 있는지 평가 (환각 검출)
- Input: x (question), d (chunk), y (generation) for d in D
- All of the verification-worthy statements in y (generation) are supported by d
- output: fully supported(완전히 문서에 기반함), partially supported(부분적으로 문서에 기반함), no support (문서에서 근거를 찾을 수 없음 → 환각 가능성이 높음)
- → 모델이 생성한 답변이 검색된 문서의 정보를 정확히 반영하는지 평가
- → 문서에서 근거를 찾을 수 없는 내용을 포함하는 경우 "환각 Hallucination"이 발생할 수 있음
- → 이러한 과정을 통해 모델의 신뢰도를 높일 수 있음
4. 생성된 답변(y)이 질문(x)에 유용한지 평가
- Input: x (question), y (generation) for d in D
- y(generation) is a useful response to x (question)
- output: {5,4,3,2,1}{5:매우 유용함 ---> 1: 전혀 유용하지 않음)
- → 모델이 생성한 답변이 질문에 실제로 도움이 되는지 평가
- → 단순히 문서에서 가저온 정보가 아니라, 질문의 의도를 잘 반영하고 있는지 확인하는 과정
반응형