본문 바로가기
C.W.K.
Stream
Lesson 02 of 05 · published

Lost in the Middle

~26 min · position-bias, lost-in-the-middle, retrieval

Level 0Window Watcher
0 XP0/50 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete

총 길이보다 자리가 더 중요해

2023년 Liu et al.의 Lost in the Middle: How Language Models Use Long Contexts가 좀 섬뜩한 걸 보여줬어. 필요한 정보가 긴 context 한가운데 있으면 모형 정확도가 뚝 떨어진다는 거야. 성적표가 U자를 그려. 맨 앞이 제일 좋고, 맨 뒤가 그다음이고, 가운데가 제일 나빠. 이 현상은 모형 계열을 가리지 않고, 몇 년치 성능 향상에도 안 없어졌어.

강의로 치면

90분짜리 강의를 떠올려봐. 시작은 기억나. 마무리도 기억나. 47분쯤? 거의 안개야. 모형도 똑같아. 그냥 밀어넣기가 위험한 게 이거야. 맞는 사실을 넣어놓고도 모형이 제일 못 쓰는 자리에 놓을 수 있거든.

그래서 실전에서는

중요한 지시문은 prompt 맨 앞 *아니면* 맨 뒤에 둬. 할 일을 context 사이에 끼워 넣고 묻지 마. RAG로 가져온 chunk도 순서가 중요해. 제일 관련 있는 걸 1번과 2번, 그리고 뒤에서 두 번째와 마지막 자리에 놓고, 가운데엔 두지 마. 100K token 덩어리 한가운데 데이터를 박아놓고 "줬으니까 알아서 보겠지" 하지도 말고.

그 사실이 일의 성패를 가른다면, 거대한 prompt 한가운데 묻지 마. 통계적으로 모형이 그걸 제일 안 쓰는 자리가 딱 거기야.

Code

자리를 고려한 배치 — front, middle, tail·yaml
context_order:
  front:
    - live rules
    - source of truth
    - task objective
  middle:
    - supporting references
    - optional detail
  tail:
    - latest human decision
    - latest tool result
    - next action
빠른 A/B 테스트·python
def test_lim(model, fact, distractor_blob):
    # A: fact at start
    a = model.ask(f"FACT: {fact}\n\n{distractor_blob}\n\nWhat was the fact?")
    # B: fact in middle
    mid = len(distractor_blob) // 2
    b = model.ask(f"{distractor_blob[:mid]}\nFACT: {fact}\n{distractor_blob[mid:]}\n\nWhat was the fact?")
    return {"start": a, "middle": b}
# 차이가 놀랄 거야.

External links

Exercise

어수선한 prompt 하나를 골라서 front, middle, tail 영역으로 다시 배치해봐. 권한이 걸린 사실은 양 끝으로. 그다음 같은 prompt를 결정적인 사실을 가운데 뒀을 때와 앞에 뒀을 때로 나눠 A/B 해봐.
Hint
규칙이랑 현재 상태는 양 끝 자격이 있어. 배경 설명은 가운데여도 괜찮고.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.