안녕하세요! 이번에는 저명한 자연어처리 학회📙인 [EMNLP 2023] 논문을 가져와봤습니다. 최근 감정인식 논문에서 대부분 LLM을 이용하여 데이터셋을 구축하는 경향을 보였습니다. 그런데 저는 ChatGPT-4를 사용하는 중인데도 불구하고, hallucination 현상이 발생하는 것을 자주는 아니여도 많이 목격하였는데 그렇다면 성능이 좋다는 ChatGPT에서도 많이 발생하는 hallucination이 다른 LLM에서는 얼마나 발생될까, 그리고 그러한 LLM으로 만든 데이터셋은 얼마나 신뢰 가능할까?라는 의문이 들었습니다. 그래서 LLM이 생성한 description에서 hallucination을 측정할 수 있는 방법이 없을까 싶어 찾은 논문이 바로 HaluEval이 되겠습니다.
그럼 리뷰 시작하겠습니다!
<Preliminaries>
먼저, 앞에서 LLM의 hallucination에 대해서 언급만하고 자세한 설명은 없었는데요. hallucination은 ‘환각’이라는 의미로, 모델이 잘못된 답변을 그럴듯하게 말하는 현상을 말합니다.
대표적인 예가 바로 ‘세종대왕의 맥북프로 던짐 사건’을 들 수 있습니다. 위의 이미지는 구글에서 발표한 Gemini에 ‘세종대왕 맥북 던짐 사건’에 대해 물어봤을 때 나온 답변을 보여줍니다. 이미지의 답변에서 알 수 있듯이, 역사절 사실 근거가 없는 허구를 역사적 사실인 것처럼 말을 하여 큰 밈이 되었는데요. 이러한 현상 때문에 LLM을 통해 많은 도움을 받을 수 있지만 LLM의 답변을 무조건 신뢰해서는 안됩니다.
<1. Introduction>
23년 정도에 LLM(Large Language Model)이 등장한 이후부터 LLM이 안쓰이는 분야가 없을 정도로 정말 많은 분야에서 LLM을 사용하고 있습니다. 그만큼 LLM이 굉장한 성능을 보인다고 생각할 수 있습니다. 하지만 최근 연구에 따르면, 주로 생성된 content가 기존 source와 충돌하거나 사용가능한 knowledge source로 검증할 수 없는 경우 LLM이 hallucination을 생성하는 경향을 보이는 것으로 나타났습니다. 대부분의 기존 연구는 주로 특정 작업과 소규모의 언어 모델에 대한 hallucination의 원인을 조사하는데 중점을 두고 있는데, 어떤 유형의 context와 LLM이 어느정도까지 환각하는 경향이 있는지는 여전히 불문명합니다.
논문의 저자는 이를 문명하게 하기 위해, 좀 더 LLM hallucination 현상에 대한 연구를 활발히 진행하기 위해, LLM을 위한 Hallucination Evaluation benchmark를 제안합니다. 이를 HaluEval이라 지칭하는데, HaluEval은 LLM 분석 및 평가를 위한 35,000개의 hallucinated/normal sample을 대규모로 수집한 데이터셋 입니다. HaluEval은 ChatGPT 응답을 포함한 5,000개의 general한 일반 사용자 쿼리와 3가지 task(question anwering, knowledge-grounded dialogue, text summarization)에서 추출한 30,000개의 task-specific example로 구축되어 있습니다. HaluEval의 구축 파이프라인은 Figure 1에 간략하게 나와있습니다. 일반 사용자의 쿼리의 경우, human annotation을 위해 Alpaca의 53K instruction tuning dataset을 채택하였다고 합니다. 또한, LLM이 hallucination을 일으킬 가능성이 가장 높은 사용자 쿼리를 추가로 선별하기 위해, ChatGPT를 사용하여 각 쿼리에 대한 세 가지 응답을 샘플링하고, 세 응답 간 유사도가 가장 낮은 5,000개의 쿼리만을 사용했다고 합니다.
hallucination은 LLM의 응답에서 자주 나타날 수 있습니다. 논문의 저자는 이를 확인하고자 필터링된 사용자 쿼리와 ChatGPT 응답을 바탕으로 human labler에게 LLM 응답이 hallucination 정보를 포함하는지 여부를 annotation하고 해당 범위를 표시하도록 하였습니다. Table 1에서 이를 볼 수 있는데, “Retrieve the oldest photo of a cat”는 사용자 쿼리에 대해 ChatGPT가 생성한 응답은 검증할 수 없는 정보를 포함하고 있습니다. 이러한 human-annotated된 쿼리와 응답은 LLM이 어떤 종류의 내용에서 hallucination이 발생하는지에 대한 경향을 분석하고, 이를 해결하기 위한 방법을 고안하는데 사용될 수 있습니다.
여기서 더 나아가, 논문의 저자는 task-specific example을 위해 hallucination sample을 생성하기 위한 자동화된 two-stage 접근 방식을 설계하였습니다. 첫 번째로, 해당 task에서 기존에 사용한 데이터셋(예를 들어서 HotpotQA)를 seed data로 사용하여, ChatGPT를 활용해 두가지 스타일(하나는 one-pass형, 다른 하나는 대화형)의 task-specific instruction로 hallucination sample을 생성합니다. 여러 스타일로 sample을 만들었기 때문에 다양한 각도에서 hallucination sample이 생성될 수 있습니다. 두 번째로, LLM 평가를 위해 가장 그럴듯하고 어려운 hallucination sample을 선택하기 위해, 실제 example로 강화된 filterling instruction을 구체화하고 ChatGPT를 활용하여 sample을 선택합니다. 이렇게 제안된 sampleing-then-filtering 방식을 통해 task-specific example에 대한 hallucinated된 sample을 만들 수 있습니다.
최종적으로, 이렇게 구축한 HaluEval을 통해서 여러 LLM을 평가하였습니다.
본 논문의 key findings에 대해서 정리하면 다음과 같습니다.
- ChatGPT는 응답에서 확인할 수 없는 정보를 조작하여 hallucinated된 content를 생성할 가능성이 큽니다.(무려 약 19.5% 응답률 이라고 합니다)
- 기존의 LLM은 생성된 텍스트에서 이러한 hallucinated된 content를 식별하는데 큰 어려움이 있습니다. (예를 들어서 question answering에서 ChatGPT의 정확도는 62.59%에 불과하다고 합니다)
- 마지막으로, hallucination을 인식하는 데 있어 LLM의 부족한 성능은 명시적인 지식을 제공하고 중간 추론 단계를 추가함으로써 향상될 수 잇습니다. 반면에 hallucinated된 sample을 실제 사실과 대조하는 것은 오히려 LLM을 더 혼란스럽게 만들고 성능을 악화시킵니다.
<2. The HaluEval Benchmark>
HaluEval의 목표는 LLM이 “어떠한 유형의 content”에서 “어느 정도”로 hallucination 현상을 보이는지 이해하는 것이기 때문에, benchmark는 다양한 올바른 sample과 hallucinated 되었을 가능성이 있는 response sample을 포함하고 있습니다. 이러한 데이터는 자동 생성 방법과 human annotation 방법으로 구축하였습니다.
<2.1 Automatic Generation>
앞에서 간략하게 말씀드렸지만, 본 논문에서 사용한 generation pipeline은 two step으로 구성되어 있습니다. 1) 다양한 hallucination을 sampling하는 step, 2) 높은 퀄리티의 hallucination을 filtering하는 step입니다. 논문의 저자는 ChatGPT를 이용하여 자동화하였다고 합니다.
<2.1.1 Diverse Hallucination Sampling>
실제로 LLM을 사용할 때 hallucination은 다양한 측면에서 발생할 수 있기 때문에, 다양한 sample을 생성하기 위해서 두 가지 hallucination sampling 방법을 제안하였습니다. 각 방법에 대해 ChatGPT는 서로 다른 방식으로 hallucination sampling instruction을 따릅니다. Figure 1에서 볼 수 있듯이, 첫 번째 방법은 Table 2에서 입력한 것처럼 전체 instruction을 입력하여 hallucination 답변을 생성하는 “one-pass instruction” 입니다. 반면에 두 번째 방법은 “conversational schema”를 사용하는데, ChatGPT가 instruction의 일부를 연속적으로 학습하고 잘 숙달했는지 확인하는 방법입니다. 학습된 instruction를 기반으로 ChatGPT는 또 다른 hallucination response를 생성합니다. 두 가지 sampling 전략을 통해 각 질문에 대해 다양하고 다면적인 hallucination response를 얻을 수 있으며, 이를 다시 필터링하여 가장 그럴듯하고 어려운 답변을 선택할 수 있습니다.
<2.1.2 Instruction Design>
본 논문의 접근법의 핵심은 ChatGPT가 hallucinated된 sample을 생성하도록 효과적인 instruction을 설계하는 것입니다. 이에 논문의 저자는 hallucination sampling instruction을 ***intention description(의도 설명), hallucination pattern(환각 패턴), hallucination demonstration(환각 시연)***을 포함한 3가지로 구성되어있습니다. Table2를 통해서 확인할 수 있습니다.
의도 설명은 system의 역할을 특징짓고 입력 및 생성 목표를 정의하는 것입니다. hallucination sample의 유형과 품질을 제어하기 위해서 Table 2를 통해 QA와 같은 seed task와 관련된 hallucination pattern과 demonstration을 확인할 수 있습니다. 본 논문에서는 question answering, knowledge-grounded dialogue, text summarization 이렇게 3가지 task에 대한 hallucination sample을 자동으로 생성합니다.
구체적으로는, hallucination pattern은 각 task에 대해서 특정한 패턴을 고려해야하는데, question answering의 경우, comprehension(이해), factualness(사실성), specificity(구체성), inference(추론)의 4가지 패턴을 고려하였습니다. knowledge-grounded dialogue의 경우, 외부 연관성의 종류(extrinsic-soft, extrinsic-hard, extrainsic-grouped) 세 가지 패턴을 고려하였습니다. text summarization의 경우, factual(사실), non-factual(비사실), 내재적(intrinsic)의 세 가지 패턴을 고려하였습니다. 참고로 이러한 패턴은 모두 기존 연구를 통해 고려되었습니다. 이후에 HotpotQA, OpenDialKG, CNN/Daily Mail에서 총 30,000개의 instance를 무작위로 샘플링하여 hallucination sample을 생성하였습니다.
dialogue 및 summarization을 위한 hallucination sampling instruction은 아래의 Table 9-10에서 확인하실 수 있습니다.
<2.1.3 High-quality Hallucination Filtering>
본 논문에서는 LMM에 challeng한 benchmark를 구축하기 위해서 위의 두 가지 샘플링 방법에서 가장 그럴듯하고 어려운 hallucination sample을 선택하는 것을 목표로 합니다. Table 3에서 볼 수 있듯이, 두 개의 hallucination 후보 중에서 가장 좋은 답을 선택하기 위해 ground-truth answer로 강화된 hallucination filtering instruction을 설계하였습니다. 조금 더 디테일하게 말하면, 실제 정답인 ground-truth answer를 사용하여 LLM이 두 개의 잘못된 답변 중에서 가장 신뢰할 수 있는 것을 고르도록 합니다. 틀린 대답인데 가장 신뢰되는 답변이라면 정말 그럴듯하고 어려운 hallucination을 의미합니다. hallucination filtering 과정에서는 test example로 두 개의 hallucinated된 답변이 모델에 입력됩니다. 이 과정에서, 이전에 제공된 demo를 바탕으로 ChatGPT가 실제 정답에 가장 그럴듯하게 hallucinated된 답변을 선택하기를 기대합니다.
dialogue와 summarization에 대한 hallucination filtering instruction은 Table 11-12에 나와있습니다.
이렇게 sampling-then-filtering 프로세스를 통해서 논문의 저자는 최종적으로 30,000개의 hallucinated된 sample을 만들었습니다.
<2.2 Human Annotation>
본 논문에서는 hallucinated sample을 생성하는 것 외에도, human labler를 초대하여 ChatGPT 응답에 hallucinated content가 포함되어 있는지 annotation 달도록 하였습니다.
논문에서 말하길, 최근에 널리 사용되고 있는 Alphaca의 52K instruction tuning dataset의 일반 사용자 쿼리와 ChatGPT 응답을 annotation 하였습니다. 먼저 LLM이 hallucination sample을 생성할 가능성이 가장 높은 사용자 쿼리를 선별하기 위해 사전 선택 절차를 설계하였습니다.
먼저 ChatGPT를 사용해 각 사용자 쿼리에 대해 3개의 응답을 sampling합니다. 그런 다음, BERTScore를 사용해 average semantic similarity를 계산합니다. BERTScore는 간략히 설명드리면, BERT 모델을 사용하여 생성한 단어 임베딩을 이용해 두 문장의 유사성을 측정하여 구합니다. 최종적으로, 유사도가 가장 낮은 5,000개의 사용자 쿼리를 뽑아 사용합니다. 유사도가 낮은 쿼리를 뽑아 사용하는 이유는 최근 연구 결과를 따라 결정하였습니다. 최근 연구에 따르면 hallucination은 LLM의 상충되고 상반된 응답에서 나타날 가능성이 높다고 합니다. 즉 이 말은 LLM이 같은 질문에 대해 여러가지 대답을 생성할 수 있는데 이 중에 특정 대답이 다른 대답들과 상충되거나 반대되는 경우 hallucination을 포함하고 있을 가능성이 높기 때문에 hallucination이 잘 발생할 수 있는 유사도가 낮은 쿼리를 뽑아 사용합니다.
또한, 각 쿼리와 ChatGPT 응답에 대해 human labler는 응답에 hallucination 정보가 포함되어 있는지 여부(”Yes”, “No”)를 annotation하고 해당 구간을 나열합니다. hallucination은 3가지 측면(unverifiable(확인 불가), non-factual(사실과 다름), irrelevant(관련성 없음))에서 고려됩니다. 각 응답은 3명의 labler가 label을 붙이고, max-voting 방식을 채택하여 최종 hallucination label을 결정합니다.
<2.3 Benchmark Analysis and Usage>
<2.1> 섹션에서 two-step의 생성 과정을 통해서 QA, dialogue, summarization 각 task에 대해 10,000개의 example을 포함하여 총 30,000개의 hallucination sample을 생성하였습니다. Table 16을 통해 각 hallucination 패턴에 대해 생성된 sample 수를 확인할 수 있습니다.
또한, <2.2> 섹션에서는 일반 사용자 쿼리에 대한 5,000개의 ChatGPT 응답을 수동으로 annotation 하였습니다. Table 4를 통해서 QA example과 annotation이 달린 쿼리 및 reponse의 예를 볼 수 있습니다. 이 과정에서 annotation이 달린 ChatGPT 응답 중 977개 (즉, 19.5%)의 응답이 hallucination을 포함한 것을 확인하였습니다.
마지막으로, 생성된 task-specific sample과 annotation된 ChatGPT 응답의 subject 분포를 Figure 2와 3을 통해 확인할 수 있습니다. Figure 2,3을 통해 다양한 주제를 다루는 것을 확인할 수 있습니다.
그렇다면 이 benchmark를 이용해서 뭘 할 수 있을까요? 우선 첫 번째로, annotation된 sample을 바탕으로 LLM이 어떤 유형의 내용을 환각하는 경향이 있는지 분석할 수 있습니다. 두 번째로, 생성된 샘플에서 hallucination을 인식하는 LLM의 능력을 평가할 수 있습니다. 예를 들어서 설명해보겠습니다. 질문과 답변이 주어졌을 때, LLM에게 답변에 hallucination이 발성하였는지 여부를 판단하도록 요청할수도 있습니다. 마지막으로, human annotation을 함께 사용하여서 LLM의 output이 hallucination을 포함하는지 평가할 수 있습니다.
<3. Experiments>
<3.1 Experimental Setup>
본 논문에서는 여러 SOTA LLM에 HaluEval benchmark를 사용하였습니다. 간단히 사용한 모델에 대해서 말씀드리면, 5개의 closed-source LLM인 GPT-3, InstructGPT, ChatGPT, Claude, Claude2와 5개의 open-source인 Alpaca, Vicuna, ChatGLM, Falcon, Llama2-Chat를 사용하였습니다. closed-source LLM의 경우 API만을 사용하여 평가하였다고 합닌다.
<3.2 Results and Analysis>
<3.2.1 Hallucination Recognition>
먼저, LLM의 hallucination recognition ability를 평가하기 위해 각 sample의 hallucination 또는 정상 출력(예를 들어 answer)를 무작위로 선택하여 분류합니다. QA, dialogue, summarization의 evaluation instruction은 Table 13-15을 통해 확인할 수 있습니다.
위에 있는 Table 5는 출력된 sample에 hallucination이 포함되어 있는지 분류하기 위해 평가된 LLM의 정확도를 나타냅니다. 연구 결과, LLM이 텍스트 내에 암묵적으로 존재할 수 있는 hallucination을 식별하는 데 여전히 미흡하다는 것을 보여줍니다. 예를 들어 SOTA인 ChatGPT 모델은 사실과 hallucination된 요약을 구별하지 못해서 text summarization에서 겨우 58.53%의 정확도를 달성하였는데, 이 말은 거의 우연 수준의 성능이라 볼 수 있습니다. GPT-3는 아예 3가지 task에서 거의 우연에 가까운 50% 정확도를 기록하였고, Alpaca나 Vicuna는 랜덤 수준 이하의 성능을 보였습니다. 아주 처참하네요. 본 논문의 저자가 말하길, LLM이 부진한 이유로 논문의 저자가 생성한 hallucination sample이 실제 진실과 매우 유사하지만 핵심 사실에서 차이가 나기 때문이라 가정하였습니다.
hallucination pattern에서 ChatGPT에서 잘못 인식한 hallucination sample 수를 Table 6에서 확인할 수 있습니다. Table를 보면, recognition에 실패한 sample의 hallucination pattern이 고르게 분포되지 않음을 확인할 수 있습니다. 예를 들어, QA, dialogue, summarization에서의 실패의 절반 이상이 첫 번째 hallucination pattern에서 발생하는데, 이는 사실적으로는 정확하지만 맥락과 충돌하는 hallucination을 의미합니다. 이는 LLM이 생성된 text에서 사실적 hallucination을 식별하기 위해 관련 지식이 부족하거나 연결할 수 없음 나타냅니다.
논문의 저자는 이를 더 잘 이해하기 위해서 실패한 sample의 subject를 LDA를 통해 시각화하였습니다. 위의 Figure 2와 3을 보시면 빨간색으로 표시된 것이 있는데, hallucination recognition에 실패한 sample을 표시한 것입니다. 논문의 저자는 이를 통해 LLM의 hallucination이 주제에 민감함을 발견했는데, 예를 들어 QA에서 자주 등장하는 주제는 ‘영화, 학교, 회사’입니다. 반면에 ChatGPT는 주로 ‘영화, 회사’의 sample을 인식하지 못하는 것을 보입니다.
<3.2.2 Improvement Strategies>
그렇다면 어떻게 해야 hallucination recognition ability를 올릴 수 있을까요? Table 8를 통해 여러 성능 향상 방법을 사용했을 때의 결과를 볼 수 있습니다.
먼저 첫 번째는 Knowledge Retrieval 입니다. 관련 지식을 검색하는 것은 hallucination을 없애는 데 널리 사용되는 전략입니다. 이에 논문의 저자는 ChatGPT에 위키피디아에서 검색된 knowledge facts를 제공하였습니다. Table 8을 보면 QA에서 62%였던 성능이 76%로 크게 증가한 것을 확인할 수 있습니다.
두 번째는 CoT Reasoning 입니다. chain-of-thought(CoT)라고 불리는 기법으로 중간 추론 단계를 도입하여 LLM의 reasoning 성능을 매우 끌어올린 기법 중 하나 입니다. 그런데 Table 8의 결과를 보면 추론 단계를 생성하는 것이 성능을 약간 개선할 수 있지만 QA와 dialogue에서는 모델의 성능이 저하된 것을 확인할 수 있습니다. 지식을 검색하는 것과 비교할 때, 출력 전에 chain-of-thought을 추가하는 것이 최종 판단을 방해할 수 있다고 합니다. 하지만 text summarization에서는 추론 단계를 생성함으로써 정확도를 58%에서 61%로 향상시킨 것을 볼 수 있습니다. 이러한 이유로는 문서와 요약 간의 사실적 모순이 논리적 추론을 통해 식별될 수 있기 때문입니다.
세 번째는 Sample Contrast 입니다. 논문의 저자는 ChatGPT가 ground-truth sample과 hallucinated된 sample을 구별할 수 있는지 테스트하기 위해서 실제 example을 추가로 제공하였습니다. Table 8에서 볼 수 있듯이 ground-truth sample과 hallucination sample을 구분하는 것은 가장 좋지 않은 성능을 보이는 것을 확인할 수 있습니다. 논문의 저자는 생성한 hallucinatio sample이 실제 sample과 높은 유사성을 가지고 있어 LLM이 이를 구별하는 더 혼란을 초래하였다고 합니다. 개인적으로 그만큼 HaluEval이 높은 퀄리티의 hallucination sample로 구성되어 있다는 것을 말하는 것이라 생각이 듭니다.
이렇게 LLM이 hallucination을 잘 감지하는지, 못한다면 어떻게 성능을 끌어올릴 수 있는지에 대해서 본 논문을 통해서 알 수 있습니다. 조금 아쉬운 부분은 본 연구에서 말하길 LLM이 subject에 따라서 hallucination 민감도가 달라서 과연 내가 연구하려는 분야에서 LLM을 사용하여 description을 생성했을 때 hallucination 정도가 클지 안클지 모르는 상황이라는 것이 아쉽네요. 조금 더 LLM을 이해할 수 있는 시간을 가진 것 같습니다. 그럼 리뷰 마무리하겠습니다. 읽어주셔서 감사합니다!
안녕하세요 김주연 연구원님, 좋은 리뷰 감사합니다.
결국 본 논문의 핵심 contribution은 모델의 hallucination을 평가하기 위한 데이터셋으로 query – answer로 구성된 데이터셋을 구축한 것이 contribution이라고 이해하였습니다.
본 논문에서 hallucination sample을 선택하기 위해 Hallucination Filtering 기법을 사용하였다고 설명해 주셨는데요. 해당 방법이란 gpt가 사용자 instruction에 맞는 2 가지의 답을 도출한 뒤 그 중 신뢰도가 높은 답을 선택하는 것이라고 이해하였습니다. 그런데 해당 과정 중 test에서 hallucinated된 답변을 입력한다고 하셨는데 이는 사람이 직접 생성한 데이터가 들어가게 되는 것일까요…? 사실 해당 과정이 잘 이해되지 않아 전체 pipeline에 대해 설명을 부탁드려되 될까요?
안녕하세요. 댓글 감사합니다.
이해한 바가 맞습니다.
전체적인 pipeline에 대해서 말씀드리면, 먼저 데이터를 자동 생성한 뒤에 사람이 직접 레벨링합니다. 사람이 데이터를 직접 생성하지는 않고, GPT를 통해서 자동으로 생성한 및 필터링 한 데이터를 사람이 hallucination이 맞다 아니다를 annotation 합니다. 여기서 답변이라는 단어 때문에 헷갈리시는 것 같은데 gpt의 response를 답변이라 말한 것입니다.즉 사람이 생성한 데이터가 아닌 gpt를 통해 생성된 데이터가 들어간다는 것이죠.
감사합니다.