https://arxiv.org/pdf/2309.15217
위 논문은 RAG (Retrival Augmented Generation) 을 평가하는 방법에 대한 논문이다.
오늘은 이에 대해 포스팅해보려고 한다.
** 시작은 창대하나 끝은 미약한 글이 될 거 같다. method 까지만 정리했기 떄문이다. evaluation 이나 experiment 부분을 보려면 논문을 더 확인하기 바란다.
Abstract
RAG 를 evaluation 하는 것은
retrieval system 이 관련있는 context 를 찾아내는 능력이나 LLM 이 이러한 passage 를 적절하게 사용하는 능력을 평가하는 것이 어렵다는 점,
또한 생성된 문장을 평가하는 것 자체가 어렵다는 점 때문에 문제가 있다.
RAGAS 에서는 human annotation ground truth 없이 이러한 능력을 빠르게 평가한다.
Introduction
LLM 은 이미 학습된 내용 이외의 지식에 대한 질문에 답하지 못한다. 그리고 corpus 에서 흔치 않게 있는 지식에 대해서는 학습이 어렵다는 문제가 있다.
이에 대한 해결책이 RAG이다.
이 RAG 는 장점은 많지만 tuning 이 많이 필요하고 retrieval model, LM, 프롬프트나 corpus 에 성능이 많이 좌우된다.
model 의 probability 나 ppl 을 이용한 eval 은 chatGPT 등 closed model 에 적절하지않고 결과가 정확하지 않을 수 있다.
RAGAS 는 llamaindex 와 Langchain와도 통합하여 사용이 가능하다.
3. Evaluation Strategies
question q, 검색된 context c(q), answer a_s(q) 이라고 하자.
RAG 구축시 usually human-annotated 데이터셋 이나 reference answers 를 사용하지 않는다.
그러므로 metric 도 referenec free 여야 한다.
** [참조!] 현재 RAGAS 라이브러리(v2 기준) 는 여러가지 metric 이 있다. 그리고 그 중에는 이 논문에서는 소개하지 않는 Context recall 과 context precision 이 있다. 그리고 라이브러리에는 이 논문에서 소개하는 Context relevancy 가 사라진다. 아마 너무 부정확했을까..? 그건 모르겠다
Faithfulness
Answer 는 주어진 (검색된) context 에 기반해야한다. 즉, hallucination
이를 평가하기 위해 LLM 을 이용해 S(a_s(q)) statement 들을 extract 한다.
state 를 만들어 긴 문장을 더 간결하고 집중된 주장(assertions)으로 만든다.
: 주어진 질문과 답을 보고 주어진 응답의 각 문장에 대해 1개 이상의 진술을 생성하시오.
위와 같은 프롬프트를 사용한다.
각 statement s_i 가 c(q) 로부터 추론되었는지 확인한다. (논문에서는 verification function $v(s_i, c(q))$ 를 사용한다고 되어있는데 프롬프팅 이외 다른 함수를 사용하는지 확인해야 한다)
: 주어진 맥락과 다음 진술을 고려한 다음, 그 맥락에 존재하는 정보가 그것을 뒷받침하는지 결정합니다. 평결에 도달하기 전에 각 진술에 대해 간략한 설명을 제공합니다(예/아니오). 주어진 형식의 마지막에 각 진술에 대해 순서대로 최종 평결을 제공합니다. 지정된 형식에서 벗어나지 마십시오.
final faithfulness score F 는 $\frac{|V|}{|S|}$ 로 구하는데,
|V| = 위에서 Yes 라고 정의된 statement 개수, |S| = 총 statement 개수
Answer relevance
생성된 answer 가 주어진 question 을 해결할 수 있어야 함.
답변에 대한 factuality 는 평가하지 않고 incomplete 하거나 중복된 정보가 있는 경우에만 penalty 를 준다.
주어진 답변 $a_s(q)$ 에 대해 LLM 에게 n 개의 가능한 question 을 생성하라고 요구한다.
이후 (OpenAI API 에서 사용가능)text-embedding-ada-002 model 을 이용해 모든 question 에 대한 임베딩을 얻는다.
각 q_i 에 대해 오리지널 q 와 cosine similarity sim(q, qi)를 계산하여 아래와 같이 answer relevance score를 얻을 수 있다.
Context relevance
검색된 context 가 관련 정보를 거의 포함하지 않아야 한다. context 가 너무 길면 context length 사용이 많아지고, 제공되는 정보에 비해 쓰레기가 많다.
context c(q)는 q 에 응답하는 데에 필요한 정보를 얼마나 독점적으로(exclusively) 포함하는지 에 따라 관련이 있는지 없는지 판단한다.
특히 이 metric 은 중복정보를 포함하는 것에 패널티를 주는 것을 목표로 한다.
question q 과 its context c(q) 가 주어질 때 아래 프롬프트를 통해 LLM 은 q 에 답하기 위해 필요한 중요한 문장 부분집합 S_ext 를 c(q) 에서 추출한다.
: 다음 질문에 답하는 데 잠재적으로 도움이 될 수 있는 제공된 맥락에서 관련 문장을 추출하십시오. 관련 문장이 없거나 주어진 맥락에서 질문에 답할 수 없다고 생각되면 "정보 부족"이라는 문구를 반환하십시오. 후보 문장을 추출하는 동안 주어진 맥락에서 문장을 변경할 수 없습니다.
위는 context relevance score 이다.
5. Experiments
wikieval 이라는 데이터셋을 이 논문에서 만들었다. : wikipedia 문서를 이용하여 test 진행한다.
GPT score 란 ChatGPT 에게 위 표의 3가지 quality 에 대해 0-10 score 를 매겨달라고 요청하는 방식이다.
'LLM 관련 논문 정리' 카테고리의 다른 글
Dataset Decomposition: Faster LLM Training with Variable Sequence Length Curriculum (0) | 2024.11.16 |
---|---|
DoRA: Weight-Decomposed Low Rank Adaptation (0) | 2024.05.02 |
LLAMA-2 from the ground up (0) | 2024.02.11 |
SOLAR model paper (1) | 2024.01.13 |
SPoT: Better Frozen Model Adaptation through Soft Prompt Transfer (0) | 2023.11.23 |