토큰 비용이 걱정된다면? LLM 다이어트 기술 ‘Selective Context’ 완벽 가이드
LLM 기반 서비스를 개발하거나 연구해 보신 분들이라면 누구나 겪는 ‘통증’이 있습니다. 월말에 날아오는 API 청구서를 보고 심장이 철렁하거나, Context Length Exceeded라는 에러 메시지 앞에서 눈물을 머금고 데이터를 잘라내야 했던 경험이죠.
“성능은 유지하면서, 입력 프롬프트 길이를 절반으로 줄일 수 있다면 어떨까요?”
마치 다이어트 보조제 광고 문구 같지만, 오늘 소개해 드릴 ‘Selective Context(선별적 문맥)’ 기술을 활용하면 현실이 됩니다. 최신 연구를 바탕으로, 우리 모델을 똑똑하게 다이어트시키는 원리와 적용 방법을 명쾌하게 정리해 드리겠습니다.
우리는 왜 ‘군더더기’에 비용을 지불하고 있을까요?
본질적인 질문부터 던져보겠습니다. 우리가 LLM에 입력하는 모든 단어가 정말 필수적일까요?
정보 이론의 대가인 클로드 섀넌(Claude Shannon)에 따르면, 인간의 언어는 본질적으로 중복성(Redundancy)이 매우 높습니다. 쉬운 이해를 위해 일상 대화를 예로 들어보겠습니다.
A: “오늘 시간 날 때 마트에 식료품 좀 사러 갈 수 있었어?”
B: “응, 나 시간 나서 식료품 샀어.”
여기서 B의 대답을 정보 전달 관점에서 압축하면 어떨까요?
B: “식료품 샀어.” (혹은 “샀어”)
“나”, “시간 나서” 같은 말은 문법적으로는 필요하지만, 정보 전달 측면에서는 잉여(Redundant)에 가깝습니다. 이미 문맥상 뻔히 알 수 있는 내용이기 때문이죠.
LLM도 마찬가지입니다. 모델은 이미 방대한 텍스트 패턴을 학습했기 때문에 문법적 구조나 뻔한 전개를 이미 알고 있습니다. 즉, 우리는 모델이 이미 알고 있는 뻔한 내용까지 토큰(비용)을 써가며 입력하고 있는 셈입니다.
Selective Context의 핵심은 간단합니다.
“모델이 예측하기 쉬운 뻔한 정보는 지우고, 예측하기 힘든 핵심 정보(놀라운 정보)만 남기자.”
핵심 원리: ‘놀라움’을 측정하라 (Self-Information)
그렇다면 기계가 어떻게 ‘군더더기’와 ‘핵심’을 구분할까요? 이 논문에서는 자기 정보(Self-Information)라는 개념을 사용하여 ‘놀라움’을 수치화합니다.
- 낮은 자기 정보: 모델이 다음 단어를 쉽게 예측 가능 → 뻔한 정보 → 삭제 (Redundant)
- 높은 자기 정보: 모델이 예측하기 어려움 → 희소하고 중요한 정보 → 보존 (Informative)
이를 수식으로 표현하면 다음과 같습니다.
I(x) = -log₂ P(x)
여기서 P(x)는 모델이 해당 토큰을 예측할 확률입니다. 확률이 높을수록(뻔할수록) 정보량 I(x)는 낮아집니다.
압축 프로세스
- 계산 (Compute): 가벼운 모델(GPT-2, LLaMA-7B 등)로 텍스트 내 토큰들의 정보량을 계산합니다.
- 단위 병합 (Merge): 토큰 단위 삭제는 문장을 파괴할 수 있습니다. 토큰을 구(Phrase)나 문장 단위로 묶어 평균 정보량을 구합니다.
- 선별 (Select): 정보량 상위 p%의 내용만 남기고 나머지는 삭제합니다.
실험 결과: 반으로 줄여도 똑똑할까?
가장 큰 우려는 “내용을 반이나 날렸는데 모델이 멍청해지지 않을까?”일 것입니다. 결론부터 말씀드리면, “지방은 빠지고 근육은 남았다”고 볼 수 있습니다.
효율성: 확실한 비용 절감
- 메모리: 추론 시 메모리 사용량 36% 감소
- 속도: 추론 시간 32% 단축
- 비용: 입력 토큰 50% 감소 시, API 비용 정확히 50% 절감
성능: 놀라운 방어력
입력 내용을 50% 압축했을 때의 성능 변화는 다음과 같습니다.
- 요약 및 QA: 성능 저하가 거의 없습니다. 배경 설명 같은 뻔한 내용은 사라졌지만, ‘방법론’이나 ‘결과’ 같은 핵심은 살아남았기 때문입니다.
- 유사도: 정답과의 유사도(BERTScore) 하락폭은 0.023점에 불과했습니다.
- 사실성: 환각(Hallucination) 현상도 크게 증가하지 않았습니다.
엔지니어를 위한 실전 적용 가이드
이 기술을 바로 서비스에 적용하고 싶으신가요? 시행착오를 줄이기 위한 최적의 세팅을 제안합니다.
Step 1. 압축률(Ratio)은 20~35%가 안전 구간
무조건 많이 줄이는 게 능사는 아닙니다.
- 권장: 20~35% 압축 (성능 영향 거의 없음 + 비용 절감)
- 최대: 50% 압축 (성능 양호)
- 주의: 65% 이상 압축 시 문맥 파악에 문제가 생길 수 있습니다.
Step 2. 필터링은 ‘단어’가 아닌 ‘구(Phrase)’ 단위로
“나… 밥… 먹…” (모델이 혼란스러워함)
명사구, 동사구 단위로 묶어서 판단하세요. spaCy 같은 라이브러리를 활용하면 명사구 단위 처리가 가장 효율적입니다.
Step 3. 작은 모델로 전처리하여 비용 아끼기
정보량 계산을 위해 비싼 GPT-4를 쓸 필요는 없습니다. GPT-2나 LLaMA-7B 같은 가벼운 오픈소스 모델로 전처리(압축)를 먼저 수행하고, 엑기스만 뽑린 프롬프트를 거대 모델에 전달하세요. 전처리에 드는 시간은 수십 ms 수준으로 무시할 만합니다.
마치며: Less is More
Selective Context는 단순히 비용을 아끼는 ‘구두쇠 기술’이 아닙니다. 한정된 컨텍스트 윈도우(Context Window) 안에 더 많은 문서, 더 긴 대화 로그를 담을 수 있게 해주는 ‘확장 기술’입니다.
이런 경우에 강력히 추천합니다
- RAG 시스템: 검색된 수많은 문서(Retrieved Documents)를 프롬프트에 다 넣기 힘들 때
- 챗봇 서비스: 사용자 대화 내역이 길어져 비용이 기하급수적으로 늘어날 때
- 문서 분석: 수백 페이지의 리포트를 한 번에 요약해야 할 때
이제 무작정 프롬프트를 욱여넣지 마세요. Selective Context로 영리하게 다이어트하시길 바랍니다. 여러분의 모델은 더 가벼워지고, 서비스의 마진율은 더 높아질 것입니다.
