긴 프롬프트를 압축하는 세 가지 버전의 LLMLingua

jihyelee·2024년 4월 9일
1

up-to-date-ai

목록 보기
4/13

배경지식

  • 프롬프트
    • 언어모델로부터 응답을 얻기 위해 사용되는 인풋
    • 설명(instruction), 예시(demonstration), 질문 등 다양한 구성요소로 이루어짐
  • 인컨텍스트 학습 (in-context learning)
    • 언어모델의 인풋에 다양한 예시 등을 제공함으로써 모델이 해당 문맥(context)을 활용해 특정 태스크를 해결할 수 있도록 하는 방법
    • 파인튜닝(fine-tuning)과 다르게 모델의 파라미터를 수정하지 않음
  • chain-of-thought 프롬프팅
    • 언어모델로 하여금 답변을 할 때 일련의 생각 과정을 유도함으로써 더욱 정확한 답변을 얻어낼 수 있는, 단순하지만 효과적인 프롬프팅 기법
  • 인스트럭션 튜닝 (instruction tuning)
    • 언어모델이 사람의 질문을 잘 이해하고 대답할 수 있도록, 설명(instruction)이 주어지면 적절하게 대답할 수 있도록 학습하는 방법
    • 최근 등장한 언어모델은 이를 위해 데이터셋을 만들 때 특정한 템플릿을 따르라고 안내

문제점

  • 최근 좋은 성능을 위해 언어모델에 들어가는 프롬프트의 길이를 늘리는 추세
    • 인컨텍스트 학습과 chain-of-thought 프롬프팅 등의 기법은 언어모델에 들어가는 프롬프트의 길이를 늘림
  • 하지만 긴 프롬프트는 모델의 추론 속도를 저하시키고 더 큰 비용을 야기

해결책

LLMLingua (EMNLP 2023)

  • 잘 훈련된 작은 언어모델을 활용하여 프롬프트의 길이를 효과적으로 줄이는 방법론
  • 예산 조절 (budget controller)
    • 원래 프롬프트에 존재하는 다양한 구성요소에 각기 다른 압축률을 동적으로 할당
    • 프롬프트의 기존 의미는 유지하면서도 최대한 압축할 수 있도록
    • 일반적으로 예시에는 더 높은 압축률을, 설명과 질문에는 더 낮은 압축률을 부여
    • perplexity를 계산하여 어떤 정보가 더욱 중요한지를 파악
  • 토큰 단위 반복 알고리즘 (token-level iterative algorithm)
    • 토큰들 사이의 조건부 의존성을 고려함으로써 더욱 정교하게 프롬프트를 압축
    • 각 구간마다 조건부 확률을 계산하고 압축 시 임계값을 지정
  • 추가적인 인스트럭션 튜닝 방법론 (instruction tuning)
    • 프롬프트를 사용할 거대한 언어모델과 프롬프트 압축에 사용하는 작은 언어모델은 분포 간 불일치 (distribution discrepancy)가 존재
    • 이를 줄일 수 있는 추가적인 방법론 또한 제시

LongLLMLingua (ICLR ME-FoMo 2024)

  • 질문과 연관성이 높은 중요 정보들이 생략되지 않도록 기존 방법론을 보강
    • 문맥에 기반한(conditioned on) 질문의 perplexity를 계산함으로써 질문과 문맥 사이의 관계를 파악
      • LLMLingua는 문서 차원에서 perplexity를 계산
    • 또한 contrastive perplexity를 사용해 토큰 단위로 압축을 진행할 때 해당 토큰과 질문 사이의 관계를 고려
  • 거대언어모델이 긴 문맥을 가진 정보를 처리할 때 중간의 정보가 사라지는 현상을 완화
    • 질문에 따른 문서의 중요도 점수를 바탕으로 문서의 순서를 재편
  • 후속 복구 방법
    • 언어모델의 응답과 기존의 프롬프트, 압축된 프롬프트의 토큰 사이의 관계를 활용해 본래의 내용을 복구
    • 응답의 정확도를 높일 수 있음
  • 1/4의 토큰을 사용하여 RAG 성능을 약 21.4% 향상

LLMLingua-2 (under review, 2024)

  • 거대언어모델을 활용한 데이터 증류 (data distillation)
    • GPT-4와 같은 거대한 언어모델이 가진, 중요한 정보를 잃지 않고 프롬프트를 압축하는 지식을 가져와 데이터 증류 절차에 활용
    • 본래의 텍스트와 압축된 형태의 텍스트 쌍을 포함한 데이터셋 제공
  • 프롬프트 압축 문제를 토큰 분류 태스크로 접근
    • 각 토큰을 보존 혹은 삭제 레이블로 분류
    • 특징을 추출하는 트랜스포머 인코더 모델을 활용해 양방향의 문맥을 모두 활용해 프롬프트를 압축
    • 작은 모델을 활용해 latency를 줄임
    • 압축된 프롬프트가 원래의 문맥에 충실함을 보장할 수 있음

코드

  • pip install을 통해 LLMLingua를 설치하고, 쉽게 프롬프트 압축을 진행할 수 있음
  • 더욱 자세한 예시는 LLMLingua의 깃헙을 참고 (글 하단 링크 참고)
pip install llmlingua

LLMLingua

from llmlingua import PromptCompressor

llm_lingua = PromptCompressor()
# llm_lingua = PromptCompressor("microsoft/phi-2") # phi-2 모델을 사용하거나
# llm_lingua = PromptCompressor("TheBloke/Llama-2-7b-Chat-GPTQ", model_config={"revision": "main"}) # LLaMA-2-7B 기반 모델 또한 사용 가능
compressed_prompt = llm_lingua.compress_prompt(prompt, instruction="", question="", target_token=200)

LongLLMLingua

from llmlingua import PromptCompressor

llm_lingua = PromptCompressor()
compressed_prompt = llm_lingua.compress_prompt(
    prompt_list,
    question=question,
    ratio=0.55,
    # 아래는 LongLLMLingia를 위한 특별한 파라미터들
    condition_in_question="after_condition",
    reorder_context="sort",
    dynamic_context_compression_ratio=0.3, # or 0.4
    condition_compare=True,
    context_budget="+100",
    rank_method="longllmlingua",
)

LLMLingua-2

from llmlingua import PromptCompressor

llm_lingua = PromptCompressor(
    model_name="microsoft/llmlingua-2-xlm-roberta-large-meetingbank",
    use_llmlingua2=True, # llmlingua-2를 사용할 지 결정
)
compressed_prompt = llm_lingua.compress_prompt(prompt, rate=0.33, force_tokens = ['\n', '?'])

## LLMLingua-2의 작은 모델 버전을 사용할 수도 있음
llm_lingua = PromptCompressor(
    model_name="microsoft/llmlingua-2-bert-base-multilingual-cased-meetingbank",
    use_llmlingua2=True, # llmlingua-2를 사용할 지 결정
)

참고 링크

  • LLMLingua github
  • LLMLingua: Compressing Prompts for Accelerated Inference of Large Language Models (EMNLP 2023, link)
  • LongLLMLingua: Accelerating and Enhancing LLMs in Long Context Scenarios via Prompt Compression (ICLR ME-FoMo 2024, link)
  • LLMLingua-2: Data Distillation for Efficient and Faithful Task-Agnostic Prompt Compression (2024, link)
profile
Graduate student at Seoul National University, majoring in Artificial Intelligence (NLP). Currently AI Researcher and Engineer at LG CNS AI Lab

0개의 댓글

관련 채용 정보