LLMLingua의 식별 과정 중심에는 퍼플렉시티(perplexity) 라는 개념이 있습니다.

  • 퍼플렉시티란?: 언어 모델이 특정 단어 시퀀스 다음에 나올 단어를 얼마나 잘 예측하는지를 나타내는 척도입니다.
    • 낮은 퍼플렉시티: 다음에 나올 단어를 예측하기 쉬움을 의미합니다. 즉, 해당 부분은 정보량이 적고 예측 가능하며, 다소 중복될 수 있습니다. (예: “하늘은 매우…”) 다음에 “푸르다”가 나올 확률이 높습니다.
    • 높은 퍼플렉시티: 다음에 나올 단어를 예측하기 어려움을 의미합니다. 즉, 해당 부분은 정보량이 많고 핵심적인 내용을 담고 있을 가능성이 높습니다.
  • LLMLingua의 활용: LLMLingua는 이 원리를 역으로 이용하여, 퍼플렉시티가 낮은, 즉 가장 예측하기 쉬운 토큰부터 제거합니다. 정보량이 적은 단어를 없애 프롬프트의 핵심 의미를 보존하려는 것입니다.

Z.1.1) LLMLingua의 2단계 압축 과정

Z.1.1.1) 1단계: 거시적 압축 (Coarse-grained Compression) - 문장/요소 단위

먼저 프롬프트 전체를 큰 덩어리로 보고 어떤 부분을 더 많이 압축할지 결정합니다.이 단계는 ‘예산 컨트롤러(Budget Controller)’ 가 담당합니다.

  • 구성 요소 분석: 프롬프트는 보통 여러 부분으로 구성됩니다 (예: 지시문, 몇 가지 예시(Few-shot examples), 실제 질문).
  • 압축 예산 할당: 예산 컨트롤러는 각 구성 요소의 중요도를 평가하여 압축률(압축 ‘예산’)을 다르게 할당합니다. 예를 들어, 핵심적인 ‘지시문’이나 ‘질문’보다는 반복적인 패턴을 보이는 ‘예시’ 부분을 더 높은 비율로 압축하도록 결정합니다.이 중요도 평가 역시 퍼플렉시티를 기반으로 이루어집니다.

Z.1.1.2) 2단계: 미시적 압축 (Fine-grained Compression) - 토큰 단위

거시적 압축 단계에서 할당된 예산에 맞춰 각 부분의 텍스트를 토큰 수준에서 실제로 압축합니다.

  • 반복적 토큰 제거: LLMLingua는 텍스트 내에서 가장 중요도가 낮은 토큰(가장 퍼플렉시티가 낮은 토큰)을 찾아 제거합니다.
  • 중요도 재계산: 중요한 점은 하나의 토큰을 제거한 뒤, 문장 전체의 문맥이 바뀌므로 주변 토큰들의 중요도(퍼플렉시티)를 다시 계산한다는 것입니다. 이 과정을 반복적으로(iteratively) 수행하며 설정된 압축률에 도달할 때까지 가장 불필요한 토큰을 순차적으로 계속 제거합니다.

Z.1.2) 추가적인 최적화: 분포 정렬 (Distribution Alignment)

LLMLingua는 압축을 위해 BERT나 LLaMA-7B 같은 작은 모델을 사용하지만, 최종적으로 프롬프트를 처리하는 것은 GPT-4와 같은 거대 언어 모델(LLM)입니다 이 두 모델 간의 언어적 이해(분포) 차이를 줄이기 위해, 명령어 튜닝(Instruction Tuning)을 통해 작은 모델이 큰 모델의 관점에서 중요한 정보를 더 잘 보존하도록 조정합니다. 이를 ‘분포 정렬’이라고 하며 압축된 프롬프트의 품질을 높이는 데 기여합니다.

결론적으로 LLMLingua는 퍼플렉시티라는 정보량 척도를 기준으로, 예산 컨트롤러를 통한 거시적 제어와 반복적 토큰 제거를 통한 미시적 압축을 결합하여 프롬프트의 핵심 의미는 최대한 보존하면서 불필요한 정보는 효과적으로 제거하는 방식으로 작동합니다. 이렇게 압축된 프롬프트는 사람이 읽기에는 어색할 수 있지만, 기계(LLM)가 이해하기에는 충분한 정보를 담고 있어 더 빠르고 저렴한 추론을 가능하게 합니다.