LLM, 장황함을 스스로 막을 수 있을까?
출처: Dev.to
« Je n’ai fait celle-ci plus longue que parce que je n’ai pas eu le loisir de la faire plus courte. »
— Blaise Pascal, Lettres provinciales, Lettre XVI (1656)
“나는 이 글을 더 짧게 만들 여유가 없었기 때문에 더 길게 만들었다.”
파스칼의 농담이 바로 문제의 핵심이다: 짧은 버전이 오히려 비용이 많이 든다. LLM은 반대로, 내용을 늘린다. 그래서 질문은 “모델이 스스로의 장황함을 억제할 수 있는가?”이며, 결정적인 조항이 숨겨져 있을 때 트리밍 비용은 어떻게 되는가이다: *“…제휴사에게만 공개한다…”*에서 *“제외하고”*를 빼면 답이 뒤바뀐다.
테스트
우리는 ContractNLI를 사용한다: 실제 NDA와 각각 전문가가 매긴 Entailment / Contradiction / NotMentioned 라벨. 라벨을 결정짓는 조항, 즉 숨겨진 “예외에 의한 부정” 조건을 함정(trap) 으로 표시한다. 측정 지표는 결정-생존(decision‑survival) 으로, 평가자가 개입하지 않는다: 전체 문서(상한)에서 답을 구하고, 압축 후 다시 답을 구해 전문가 라벨과 정확히 일치하는지 확인한다. 생존율은 전체 문서에서 정답을 맞춘 비율 중 압축 후에도 정답을 유지하는 비율이다. 압축은 질문을 알지 못하고 문서당 한 번만 수행한다.
세 가지 압축기(Groq 사용: llama-3.1-8b, qwen3-32b, gpt-oss-120b), 하나의 고정 리더(llama-3.3-70b), 61개의 NDA에 걸친 400개 항목, 두 가지 프롬프트: 단순(“Summarise this”)과 정교한(손실 없는 지시). 원래 상한은 66%였지만 함정에서는 87%로, 라벨 구성 비율에 따른 현상이다. 그래서 우리는 정확도보다 생존율을 보고한다.
발견 1: 프롬프트 엔지니어링은 아직 살아 있다
함정 조항에 대한 결정‑생존율:
| 압축기 | 단순 | 정교 |
|---|---|---|
llama-3.1-8b | 57% | 74% |
qwen3-32b | 88% | 93% |
gpt-oss-120b | 91% | 95% |
용량이 부족한 상황일수록 더 나은 프롬프트가 큰 효과를 낸다.
발견 2: 함정은 단순 모델을 곤경에 빠뜨린다
일반(함정이 아닌) 조항에 대한 결정‑생존율:
| 압축기 | 단순 | 정교 |
|---|---|---|
llama-3.1-8b | 87% | 87% |
qwen3-32b | 88% | 94% |
gpt-oss-120b | 94% | 91% |
작은 모델은 일반 조항에서는 손실이 거의 없지만, 숨겨진 예외에서는 크게 무너진다. 함정에서는 57%로 떨어지지만, 일반 조항에서는 87%를 유지한다. 대형 모델은 이런 격차가 없다.
발견 3: 압축 비율은 크게 차이 난다
실제 압축 비율(출력 토큰 / 입력 토큰):
| 압축기 | 단순 | 정교 |
|---|---|---|
llama-3.1-8b | 0.22 | 0.36 |
qwen3-32b | 0.27 | 0.37 |
gpt-oss-120b | 0.37 | 0.43 |
가장 작은 모델이 가장 높은 압축률(0.22)을 보였지만, 가장 많은 함정을 놓친다. 이는 게으른 것이 아니라, 핵심 조항을 버리는 방식으로 비율을 맞춘 것이다. 크게 놀라운 일은 아니다.
흥미로운 점은 32B qwen이 120B gpt-oss보다 더 높은 압축률(0.37 vs 0.43)을 유지하면서도 비슷한 충실도를 보였다는 것이다. 이는 간결함이 모델 고유의 특성일 수 있음을 시사하지만, 확증하려면 더 넓은 테스트가 필요하다.
발견 4: 한계에 도전해도 여전히 작동한다
단어 예산을 강제하는 프롬프트를 0.35와 0.25 목표로 적용했을 때, qwen만 비율이 0.37에서 0.32로 감소했으며, 함정에서 95%의 충실도를 유지했다. 이후 더 낮은 비율을 요구하면 0.32에서 멈추고 내용을 더 줄이지 않는다. llama-3.1-8b와 gpt-oss-120b는 전혀 압축을 tighten하지 않았다. 어느 경우든 충실도는 변하지 않았다. 이는 모델이 스스로 제한을 두는 흥미로운 현상이다.
발견 5: 추론 모델은 다르게 행동한다
gpt-oss는 처음에 끔찍해 보였다: 입력보다 살짝 짧은 0.74 비율과 의심스러운 높은 생존 점수. 쉬운 작업을 망치는 강력한 모델은 이상 현상이지 발견이 아니다. 이는 추론 모델이며, 체인‑오브‑생각(chain‑of‑thought)이 숨겨진(reasoning_format=hidden) 상태에서 토큰 예산을 그대로 사용한다. 그래서 어려운 문서에서는 토큰 예산을 다 써버려 과도하게 길거나 빈 요약을 만든다(61개 중 6개가 빈 요약으로 반환돼 압축률이 완벽하게 0으로 평가됨). 다음 파라미터 하나만 바꾸면 해결된다:
reasoning_effort | 동일 답변에 필요한 토큰 |
|---|---|
| 높음 | 596 |
| 낮음 | 55 |
제한을 두면 gpt-oss는 훌륭한 압축기(0.43, 빈 요약 0개)가 된다. 추론 모델을 생성 작업에 벤치마크할 때는 사고(생각) 예산을 제한하지 않으면, 토큰 예산이 벽에 부딪히는 현상을 측정하게 된다.
솔직한 한계점
-
우리는 충실도를 라벨이
NotMentioned인 경우에 약한 리더(NotMentioned정확도 46%)를 통해 측정한다. 따라서 해당 항목들의 기반이 다소 불안정하다. -
그 리더는
llama-3.1-8b와 같은 계열이라 자체 디코딩 이점이 있다. 따라서 이미 낮은 함정 점수가 오히려 낙관적으로 보일 수 있다. -
몇몇 긴 문서는
gpt-oss가 낮은 노력 설정에서도 잘리므로, 해당 문서는 비율 계산에서 제외했다. -
하나의 코퍼스, 하나의 도메인, n = 400. 여기서 중요한 것은 패턴이며, 개별 수치가 아니라는 점이다.
결론
LLM이 장황함을 스스로 억제할 수 있을까? 어느 정도는 가능하며, 그 한계는 모델에 의해 정해진다. 좋은 프롬프트는 작은 모델을 다듬고, 단어 예산은 qwen을 0.32까지 더 압축시키지만 그 지점에서 멈춘다. 추론 모델의 숨겨진 사고를 제한하면 토큰에 빠져들지 않는다. 또한 간결함은 어느 정도 선천적인 특성으로, 32B 모델이 120B 모델보다 무료로 더 간결했지만, 최종적으로는 결정-making에 비용이 든다.
앞으로의 방향
이번 연구는 두 가지 흐름을 열었다:
- 더 많은 모델, 더 다양한 시나리오. NDA 3개의 압축기만으로는 작은 구멍이다. 자연스러운 확장은 같은 연구실 내 다양한 규모 모델, 다른 연구실, 그리고 결정 조항이 다른 방식으로 숨겨진 스펙, 정책, 의료 지침 등 다양한 도메인이다.
- 얼마나 멀리 밀어낼 수 있는가. 단어 예산을 0.37에서 0.32까지 낮추었을 때
qwen이 멈췄다. 나는 한 점이 아니라 전선을 알고 싶다: 각 모델이 프롬프트 개선만으로 어느 정도까지 유지되는지, 강력한 토큰 상한을 걸면 모델이 편안한 영역을 넘어섰을 때 어떻게 되는지, 작은 모델을 구원하는 프롬프트가 큰 모델에도 동일하게 적용되는지 등이다.
프롬프트 엔지니어링은 아직도 밝은 미래를 가지고 있을지도 모른다.
~ Ben