
장문 요약에서 숫자가 사라지는 원인은 「Lost in the Middle」, 3단계 분할 프롬프트로 대처하기
요약
LLM이 긴 문맥의 중간 정보를 놓치는 'Lost in the Middle' 현상을 방지하기 위한 3단계 분할 프롬프트 전략을 소개합니다. 단일 요약 대신 구조 파악, 수치 추출, 리스크 추출로 쿼리를 나누어 정보 누락과 할루시네이션을 최소화하는 실무적인 방법을 다룹니다.
핵심 포인트
- Lost in the Middle: 입력값 중반의 정보를 경시하는 LLM의 구조적 약점
- 단일 쿼리 대신 목적별로 3개(구조, 수치, 리스크)의 쿼리로 분할하여 요청
- 수치 추출 시 '축어적 인용'과 '반올림 금지' 제약을 명시하여 정확도 향상
- 할루시네이션 방지를 위해 '기재 없음' 옵션을 명시적으로 허용
TL;DR
- 긴 자료를 LLM에 한 번에 요약시키면, 중간에 묻힌 수치나 조건이 누락되기 쉽다. 원인은 「Lost in the Middle」이라 불리는, 입력값 중반의 정보를 경시하기 쉬운 LLM의 구조적 경향
- 대책으로서, 1회의 요약 요청을 「전체 구조 파악」, 「수치의 축어적 추출」, 「리스크 추출」의 3개 쿼리로 분할하고, 각각 출력 형식을 고정하면 누락을 줄일 수 있다
- 분할하더라도 모델의 읽기 실수 자체가 제로가 되지는 않으므로, 금액·기일 등 치명적인 항목은 반드시 원본 참조로 돌아가는 운용을 하고 있다
배경
긴 제안서나 사양서를 ChatGPT에 「요약해줘」라고 일괄적으로 던졌을 때, 본문 중반에 있던 금액의 자릿수가 반올림되어 출력되어 그대로 사내 공유를 할 뻔한 적이 있다. 단발적인 읽기 실수인가 생각했지만, 여러 번 시도해도 자료의 중반에 위치하는 수치나 조건문에서 유사한 결락이 재현되었다.
원리: 왜 중반의 정보가 경시되는가
이는 「Lost in the Middle」으로 알려진 현상으로, 입력이 길어질수록 관련 정보가 문서의 앞부분 또는 뒷부분에 있는 경우에는 정답률이 높고, 중간에 있는 경우에는 정답률이 떨어지는 U자형 성능 저하가 관측되고 있다. Transformer의 어텐션 (Attention) 메커니즘에 기인하는 구조적인 약점으로, 모델의 세대가 올라가도 완전히 해소되지 않는다고 알려져 있으며, 긴 문맥 (Long Context)을 다룰수록 무시할 수 없는 요인이 된다 (관련하여 「Context Rot」이라는 명칭으로 불리기도 한다).
실무상의 포인트는 두 가지다.
- 1회의 프롬프트에 「전체상도」, 「수치도」, 「리스크도」와 같이 여러 요구사항을 섞을수록, 모델은 두루뭉술한 요약에 치우쳐 개별 수치의 축어성 (Verbatim)을 희생하기 쉽다
- 요구사항을 분할하고 각 쿼리의 출력 포맷을 고정하면, 모델이 「해당 쿼리에서 무엇을 우선해야 하는가」를 좁히기 쉬워진다
대책: 쿼리를 3개로 분할하기
이하는 실제로 사용하고 있는 프롬프트 세트이다. 3개 쿼리 모두 동일한 자료를 붙여넣고, 목적을 하나로 좁혀서 던진다.
쿼리 1: 구조 파악
다음 자료를 읽고,
1. 이 자료의 결론을 1줄로
2. 장 구성(목차)을 불렛 포인트로
...
쿼리 2: 수치의 축어적 추출
동일한 자료에서 의사결정에 관련된 숫자(금액·날짜·건수 등)만을,
자료에 적혀 있는 그대로 인용해 주세요.
반올림하거나 개략적인 수치로 바꾸지 마세요.
...
「자료에 적혀 있는 그대로 인용」, 「반올림하지 말 것」이라는 제약을 명시하지 않으면, 요약 시 암묵적으로 자릿수나 단위가 반올림될 수 있다. 출처의 제목을 병기하게 하는 것은 나중에 원본과 대조할 때의 검색 비용을 낮추기 위함이며, 이 또한 운용상 효과적이다.
쿼리 3: 리스크 추출
동일한 자료에서 판단을 그르치면 곤란한 우려 사항이나 리스크를 최대 3개,
각각 「무슨 일이 일어날 수 있는가」를 1줄로 들어내 주세요.
자료에 적혀 있지 않은 내용은 추측으로 보완하지 말고 「기재 없음」으로 처리해 주세요.
「기재 없음」을 명시적으로 허용하는 문장이 없으면, 모델이 자료에 없는 전제를 보완하여 답해버리는 경우가 있다. 할루시네이션 (Hallucination) 대책으로서 효과적이다.
효과가 없었던 것
- 1개 쿼리에 전부 집어넣고 프롬프트만 정교하게 만들기: 「전체상·수치·리스크를 전부 포함하여 자세히」라는 방대한 단일 프롬프트를 시도했으나, 출력이 두루뭉술해져 결국 어떤 수치가 중요한지를 인간이 해석해야 하는 상황이 남았다. 요구사항을 나누는 편이 각 출력의 밀도가 높아졌다.
- 모델을 키우면 해결될 것이라 기대하기: 더 긴 컨텍스트 윈도우 (Context Window)를 가진 모델로 바꿔도, U자형 경향 자체는 남는다. 컨텍스트 길이의 확대는 「들어가는 것」의 해결이지, 「균등하게 읽는 것」의 해결이 아니다.
- 요약 결과를 그대로 의사결정에 사용하기: 쿼리 2에서 반올림하지 말라는 제약을 넣어도 모델의 읽기 실수가 제로가 되는 것은 아니다. 금액·기일 등 오류가 치명적인 항목은 출력을 계기로 원본의 해당 부분을 인간이 육안으로 확인하는 공정을 빼놓지 않는다.
운용상의 주의사항
ChatGPT 무료 버전은 파일 업로드에 하루 제한이 있으므로, 일상적으로 대량의 자료를 다루는 경우에는 NotebookLM과 같은 장문맥 특화 도구로 전환하는 것도 검토할 여지가 있다. NotebookLM은 1개 소스당 수십만 단어 규모까지 다룰 수 있는 반면, 페이지당 도표가 많으면 소비되는 토큰이 늘어나 실질적인 처리량이 줄어든다는 점에는 주의하고 있다.
요약
장문 요약의 정밀도 저하는 프롬프트 작성의 숙련도 문제를 넘어, Transformer의 어텐션 메커니즘 (Attention Mechanism)에 기인하는 구조적인 경향이 배경에 깔려 있다. 이를 완전히 제거할 수 없다는 전제하에, 쿼리 (Query)를 목적별로 분할하여 출력 포맷 (Output Format)을 고정하고, 치명적인 항목은 원본 참조를 남기는 방식으로 운영하여 리스크를 낮추는 것이 현실적이라고 생각한다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기