Skip to main content

EleutherAI로 대규모 언어 모델(LLM) 평가하기

이 글에서는 자동회귀 언어 모델을 평가하기 위한 도구의 필요성을 살펴보고, 가장 많이 쓰이는 지표를 자세히 설명하며, 직접 lm-eval도 수행합니다. 이 글은 AI 번역본입니다. 오역이 의심되는 부분이 있으면 댓글로 알려주세요.
Created on September 15|Last edited on September 15
이 글에서는 EleutherAI의 lm-eval 패키지를 활용해 대규모 언어 모델(LLM)을 평가하는 방법을 살펴봅니다. 먼저 왜 이런 평가가 필요한지 설명한 뒤, 업계에서 흔히 사용하는 평가 지표를 정리하고, 마지막으로 lm-eval을 직접 사용해 실습해 보겠습니다.
이번 글에서 다룰 내용은 다음과 같습니다:

목차



바로 시작해 봅시다.

LLM 평가 소개

최신 발전 동향 자연어 처리 연구, 예를 들어 도입 트랜스포머 모델은 다양한 언어 관련 과제에서 큰 발전을 이루는 데 분명히 기여해 왔습니다.
그러나 평가 방법론의 견고성과 재현성을 심층적으로 검증한 연구는 많지 않습니다. 최근 몇 년 사이 대규모 언어 모델(LLM)의 규모와 능력이 급격히 성장했지만, 동시에 이러한 모델과 그 학습·평가 데이터가 어떤 방식으로 평가되어야 하는지에 대한 우려도 커지고 있습니다.
엄격하고 체계적인 평가 절차는 실무자가 자신들이 개발한 모델의 역량과 한계를 이해하는 데 도움을 줍니다. 하지만 LLM은 방대한 데이터로 학습되는 경우가 많고, zero-shot, one-shot, few-shot 설정에서 다양한 과제를 수행할 수 있기 때문에 평가가 매우 어려워집니다. 예를 들어, LLM의 평가 성능은 특히 프롬프트를 어떻게 정확히 제시하느냐에 극도로 민감합니다. 또한 많은 평가 벤치마크는 명확한 설계 기준이 부족해, 벤치마크 작성자가 의도하지 않은 방식으로 평가가 구현되기 쉽습니다.
특히 학습 데이터 유출의 영향을 부각하는 체계적 분석과 재현 가능한 평가 결과는 문제를 더욱 복잡하게 만듭니다. 모델의 평가 성능이 아키텍처뿐 아니라 학습 데이터에도 의존하기 때문입니다. 실제로 분석 이전에 적용되는 서로 다른 전처리 기법과 평가 데이터셋의 다양한 버전은 재현성 문제를 야기하여, 실무자들이 평가를 다시 수행하기보다 기존 평가 결과를 그대로 인용하도록 만듭니다.
다시 말해, 이러한 대규모 모델을 평가하는 일은 꽤나 어렵습니다. 이제 일반적으로 어떻게 평가하는지 살펴보겠습니다.

평가 지표

전통적으로 언어 모델의 성능은 측정함으로써 평가됩니다 퍼플렉서티, 교차 엔트로피, 문자당 비트수 (BPC). 반면 대규모 언어 모델은 이러한 벤치마크를 능가하고 다음과 같은 새로운 능력을 발휘하는 것으로 나타났습니다 산술, 퓨샷 러닝, 그리고 다단계 추론그럼에도 불구하고 이러한 LLM에도 결함은 있습니다, 편향을 드러내는 그리고 그럴듯한 허위 정보를 만들어내는.
전통적인 내재적 지표들은 언어 모델 자체를 학습하는 과정에서는 매우 유용하지만, LLM을 비교하고 벤치마크하는 수단을 제공하는 데에는 한계가 있습니다. 언어 모델이 계속 대형화되고 실제 응용 분야에서 더 널리 사용될수록, 이들이 점점 더 나빠지거나 아직 발견되지 않은 방식으로 사용자에게 해를 끼치지 않는지 확인하는 것이 중요합니다.
최근의 벤치마크들은 논리 및 상식 추론, 데이터셋 특이적 편향, 정보를 추적하는 모델의 능력, 그리고 태스크별 그래디언트 최적화 없이 수행하는 다운스트림 태스크를 통해 이러한 문제를 점검합니다. 이러한 벤치마크의 예로는 다음과 같은 것들이 있습니다 CoQA, 람다, 헬라스왜그, LogiQA이러한 벤치마크들은 우리가 LLM에 기대하는 행동과, 우리가 사용하는 학습 목표와 데이터의 결과로 실제로 관찰되는 행동 사이의 불일치를 평가하는 방법을 제공합니다.
LLM을 평가하기 위한 도구는 연구자와 실무자가 발표된 최신 성과를 재현하고 검증할 수 있도록 엄밀하고 견고하며 재현 가능한 프레임워크를 제공해야 합니다. 또한 이 프레임워크는 편향되었거나 불필요하고 원치 않는 요소를 제거하여 학습 데이터를 정규화하고 디컨타미네이션할 수 있는 메커니즘을 제공해야 합니다. 마지막으로, 서로 다른 평가 버전을 감지하고 보고하며, 검증 및 테스트 데이터셋으로의 데이터 누수를 방지할 수 있어야 합니다.
lm-eval을 소개합니다.

LM-Eval이란 무엇인가요?

The lm-eval 에서 공개한 파이썬 패키지 EleutherAI오픈 소스 AI 연구를 가능하게 하려는 연구자들의 풀뿌리 커뮤니티인 EleutherAI는 LLM 평가를 위한 대표적인 프레임워크를 제공합니다. 이 라이브러리는 유연하고 토크나이저에 구애받지 않는 인터페이스를 통해, 다양한 자연어 작업에서 오토리그레시브 언어 모델을 평가하고 결과를 보고하기 위한 단일 프레임워크를 제공합니다. 언어 이해 (NLU) 작업. 현재는 다음과 같은 모델 평가를 지원하는 200개가 넘는 평가 작업이 있습니다. GPT-2 ,T5, GPT-J, GPT-Neo, GPT-NeoX, Flan-T5.

LM-Eval 설치 및 사용

이 평가 하니스는 pip로 설치할 수 있습니다. 패키지를 설치하려면 다음 명령을 실행하세요. pip install lm-eval 설치가 완료되면 간단한 명령줄 인터페이스를 사용해 모델을 제로샷, 원샷, 퓨샷 설정에서 평가할 수 있습니다.
기본 평가를 실행하려면 다음 명령을 사용하세요:
python main.py \
--model gpt2 \ # A huggingface model type
--device 0 \ # device use for evaluation
--tasks lambada,hellaswag # comma separated list of tasks to evaluate
기본적으로 Hugging Face Models의 GPT-2(117M) 모델을 평가합니다. 스크립트에 전달할 수 있는 다른 인자는 다음과 같습니다:
  • 모델: 모델 이름(gpt2, gpt3, t5)
  • model_args: 초기화를 위해 Hugging Face AutoModel에 전달할 인자
  • tasks: 모델을 평가할 작업의 목록을 쉼표로 구분해 입력합니다.
  • num_fewshot: 모델에 전달할 few-shot 컨텍스트의 예시 개수.
  • batch_size: 평가 시 단일 배치에 포함될 예시 수
  • device: 평가를 실행할 디바이스 ID. (예: "cpu" 또는 "cuda:0")
  • no_cache: 평가 중 모델 결과를 캐시할지 여부.
  • description_dict사용자 지정 태스크 설명을 담는 사전으로, 다음 형식입니다: task_name: description
  • decontamination_ngrams_path: 테스트 세트 디컨타미네이션에 사용되는 n_gram 중복 항목이 들어 있는 디렉터리 경로.
이 스크립트는 OpenAI의 GPT-3 모델 평가에도 사용할 수 있습니다. 다음 환경 변수를 추가하기만 하면 됩니다: OPENAI_API_KEY 그리고 다음 인자를 넣어 스크립트를 실행하세요 --model=gpt3

개발 및 맞춤화

이 패키지는 태스크 개발과 맞춤화도 지원합니다. 이를 통해 열린 기여가 활발해졌고, 이미 200개가 넘는 태스크가 등록되어 있습니다. 라이브러리는 매우 단순하고 직관적인 구조로 구성되어 있으며, 핵심 구성 요소는 두 가지입니다:
  • 모델 예: (GPT-2, GPT-3, T5)
  • 작업 예: (MNLI, SQuAD, LaMDA)
두 구성 요소는 모두 레지스트리 데이터 구조 명령줄을 통한 손쉬운 초기화를 위해서입니다. 두 가지를 좀 더 자세히 살펴보겠습니다:

모델

서브 패키지 lm-eval.models 라이브러리가 지원하는 모델이 포함됩니다. 현재 패키지에 등록된 모델은 다음과 같습니다:
MODEL_REGISTRY = {
"hf": gpt2.HFLM, # huggingface compatible causal language models
"gpt2": gpt2.GPT2LM, # huggingface GPT-2 models and variants
"gpt3": gpt3.GPT3LM, # OPENAI GPT-3 model - requires an OPENAI API KEY
"textsynth": textsynth.TextSynthLM, # models supported by textsynth.com API
"dummy": dummy.DummyLM, # Baseclass that implements the models API - can be subclassed to extend to custom models
}
새로운 모델을 구현하려면 간단히 ` subclass를 정의하세요.BaseLM 클래스에서 lm-eval.base 그리고 사용자 정의 모델의 구현에 맞게 해당 속성과 메서드를 재정의하세요. 마지막으로 서브클래스를 다음에 등록합니다 MODEL_REGISTRY 위에서 설명한 대로 CLI 스크립트가 모델을 초기화할 수 있도록 합니다.

작업

The Task 클래스는 lm-eval 패키지에서 모든 자연어 작업의 기반입니다. 이 클래스에는 어떤 오토레그래시브 언어 모델이든 few-shot 평가를 수행하는 데 필요한 모든 것이 포함되어 있습니다. 200개가 넘는 사전 구현 작업이 있지만, 라이브러리는 또한 단계별 가이드 의 서브클래스를 정의하려면 Task 새로운 또는 사용자 정의 작업을 평가하기 위한 클래스.
더 구체적으로는, 다음을 사용해 새로운 작업을 만들 수 있습니다 작업 템플릿 라이브러리에서 제공합니다. 평가하려는 작업 유형에 따라 새로운 일반 작업을 만들거나 새로운 객관식 작업을 만들 수 있습니다. 템플릿에는 다음이 포함되어 있습니다 #TODO 사용자 정의 Task를 설정하는 데 도움이 되는 지침입니다. 요약하면, 다음 작업을 수행하는 코드를 추가해야 합니다.
  1. 다음 방법으로 작업 데이터를 다운로드하기: Hugging Face 데이터셋 라이브러리
  2. 작업을 위한 문서 처리(예: 공백 제거, 탈토크나이징)
  3. 페워샷 평가를 위한 서식 예시.
  4. 비오염 처리 학습 데이터 중복을 제거하기 위해.
  5. 작업을 등록하세요 작업 레지스트리.


작업 버전 관리

재현성을 높이기 위해 모든 작업에는 버전 필드. 커맨드 라인에서 실행하면 표의 한 열로 보고되며, 평가자가 반환하는 딕셔너리의 "version" 필드에도 포함됩니다.
버전의 목적은 작업 정의가 변경될 때(예: 버그 수정) 이전의 결함 있는 구현으로 계산된 지표가 무엇인지 정확히 파악하여 불공정한 비교를 피할 수 있도록 하기 위함입니다. ��업 버전은 0에서 시작하며, 하위 호환을 깨는 변경이 있을 때마다 1씩 증가합니다. 결과를 보고할 때는 각 작업의 버전도 함께 명시하는 것을 권장합니다.

작업 설명

최근의 언어 모델은 지시문 기반의 퓨샷 추론을 수행하는 경우가 많습니다. 이는 퓨샷 프롬프트에 예시를 제공하는 것에 더해, 작업 설명도 함께 모델에 제공하는 방식을 의미합니다.
예를 들어, 머신 번역, 지시문은 대략 다음과 같이 보입니다 Translate from English to German이는 작업별로 평가 스크립트에 설명 딕셔너리로 제공할 수 있습니다. 저자들은 평가를 위한 작업 설명을 설정하는 데 유용한 가이드를 제공합니다.

비오염 처리

평가 과정에서는 종종 모델의 일반화 능력에 주목합니다. 그러나 대부분의 LLM은 대개 매우 방대한 인터넷 데이터셋(예: the)으로 학습되기 때문에 파일 특정 작업의 테스트 세트가 모델 학습 데이터셋에 포함되어 있을 가능성이 높은데, 이를 데이터 누출 또는 오염이라고 합니다. 이 문제를 완화하기 위해, 해당 패키지는 또한… 비오염 처리 도구 OpenAI의 “에 따른 방법론을 따르는”언어 모델은 퓨샷 학습자다.테스트 문서가 어떤 학습 문서와라도 N그램이 겹치면 그 문서는 오염된 것으로 간주됩니다. 단순화를 위해, 라이브러리는 N그램 범위를 13으로 정의합니다. 이는 오염된 테스트 예제를 탐지하고 벤치마크의 정제된 버전을 생성함으로써 테스트 세트 누출의 영향을 측정하는 유용한 방법을 제공합니다.

사람 평가

자동화된 평가는 언어 모델의 성능을 평가하고 비교하며 측정하는 방법을 제공하지만, 대부분의 벤치마크는 창의성, 유머, 몰입감 같은 능력은 평가하지 않습니다.
언어 모델이 다양한 실용적 애플리케이션의 핵심 구성 요소가 되어 갈수록, 사람 평가자를 통해 성능을 측정하는 일도 중요합니다. 예를 들어, 다음은 사람 평가자를 통해 LLM의 실제 적용 분야 7가지를 다루고 성능을 논의한 글. 이러한 평가는 오늘날 언어 모델의 한계를 드러낼 뿐만 아니라, 평가 데이터셋에 주의를 기울이는 것의 중요성도 강조합니다.

결론

대규모 언어 모델(LLM)이 거의 모든 새로운 NLP와 NLU 파이프라인의 핵심 구성 요소가 되면서, 실무자는 견고하고 표준화된 방식으로 평가를 수행하고 보고하는 일이 필수적입니다. lm-eval 패키지는 평가를 표준 형식으로 수행하고 보고하는 데 필요한 핵심 도구를 제공합니다. 이는 진척 상황을 공정하게 평가할 뿐만 아니라, 아직 성능이 충분하지 않은 영역에서 LLM의 개발을 확장하는 데에도 결정적인 역할을 합니다.


이 글은 AI가 번역한 기사입니다. 오역이 있을 수 있으니 댓글로 알려 주세요. 원문 보고서는 아래 링크에서 확인할 수 있습니다: 원문 보고서 보기