VENETA WorldModel의 기억·자가발전 계층, LongMemEval 벤치마크 결과를 공개합니다
노트 · 측정
VENETA WorldModel의 기억·자가발전 계층, LongMemEval 벤치마크 결과를 공개합니다
범용 기억 벤치마크 LongMemEval — 작성자를 프런티어 모델로 바꿔 끼우고, 계층을 켠 팔과 끈 팔을 같은 예산에서 쟀습니다
2026-10-24
우리는 왜 시험지를 직접 만들었나
VENETA WorldModel의 기억·자가발전 계층은 온프렘 운영 환경을 위해 만들었습니다. 미션 크리티컬한 운영실, 데이터가 건물을 떠날 수 없는 곳, 답을 쓰는 모델이 고객 사내의 로컬 LLM인 곳입니다.
그 환경을 재는 기억 벤치마크가 없었습니다. 기존 벤치들은 전부 외부 프런티어 모델이 기억을 쓴다는 가정 위에 서 있고, 그 가정은 온프렘에서 성립하지 않습니다. 게다가 기존 벤치들은 벤치가 스스로 쓴 대화를 얼마나 기억하는지 묻습니다. 거기엔 승인하고 거절하고 교정하는 운영자가 없습니다. 그러니 이런 질문을 할 수가 없습니다 — “지난번에 뭘 승인했고 게이트는 통과했지?”, “한 번 거절한 규칙이 말만 바꿔서 또 올라오나?” 미션 크리티컬 운영에서 기억이 하는 일이 정확히 그것입니다.
그래서 직접 만들었습니다. 그 벤치마크와 측정 결과는 벤치마크 면에 있습니다.
그런데 반대 경우가 궁금했습니다
우리 계층을 온프렘이 아니라 범용으로 쓰면 어떻게 될까요. 일반 사용자가, 프런티어 모델을 작성자로 두고 쓰는 경우 — 사실 시중의 기억 제품들이 전제하는 바로 그 상황입니다.
그래서 작성자를 Claude Opus 5.5로 바꿔 끼우고, 범용 기억 벤치마크의 대표격인 LongMemEval로 재봤습니다. 우리 벤치가 아니고, 우리가 설계에 참여하지 않았고, 우리 환경을 가정하지도 않은 시험지입니다.
LongMemEval은 무엇을 재려는 시험인가
이 벤치의 목표는 “챗 어시스턴트가 오래된 대화를 기억하는가”입니다. 질문 하나에 그 사용자의 과거 대화 50여 세션이 딸려 옵니다. 평균 489,731자 — 단행본 세 권 분량입니다. 답은 그 안의 어느 한 발화에 숨어 있습니다.
사람으로 치면 이렇습니다. 반년 전 대화에서 지나가듯 한마디 한 것을 지금 물어보는 겁니다. 그리고 다섯 가지를 봅니다:
- 정보 추출 — 그때 뭐라고 했지?
- 다중 세션 추론 — 여러 번에 걸쳐 나온 조각을 합쳐야 답이 나오는 것
- 지식 갱신 — 이사했고 직장을 옮겼습니다. 최신 것을 아는가?
- 시간 추론 — “그거 하기 전에 뭐라고 했지?”
- 절제 — 대화에 없는 것을 물으면 모른다고 말하는가. 이게 의외로 어렵습니다
어떻게 쟀나
① 질문마다 기억을 처음부터 만듭니다. 그 질문의 과거 세션을 날짜가 붙은 기록으로 넣습니다. 넣을 때 모델을 쓰지 않습니다 — 요약하거나 뽑아내지 않고 있는 그대로 넣습니다. 질문끼리 기억을 물려주지도 않습니다. 앞 문제를 풀며 본 것이 뒷 문제를 돕는 일이 없습니다.
② 꺼낼 때 세 갈래로 찾습니다. 의미가 가까운 것, 단어가 겹치는 것, 같은 대상을 말하는 것 — 세 결과를 섞어 순위를 냅니다. 거기에 로컬 모델이 질문을 여섯 가지로 바꿔 쓴 검색어를 더하고, 찾은 발화의 앞뒤 한 턴을 같이 가져옵니다. 그렇게 모인 것이 60,000자를 넘지 않습니다. 489,731자 중 약 12 %입니다.
③ 답은 그 블록만 보고 씁니다. 작성자는 원본 대화를 보지 못합니다. 우리가 골라 준 것만 봅니다.
④ 비교 대상(계층 끔). 같은 작성자에게 기억 계층 없이, 대화를 60,000자로 잘라 그냥 넣습니다. 켠 쪽 블록과 같은 예산이고, 이 쪽도 세 번 돌립니다.
⑤ 채점은 남이 합니다. 이 벤치의 공식 GPT-4o 판정자가 정답과 비교해 맞고 틀림을 정합니다. 우리 채점기가 아닙니다. 교차 확인으로 로컬 모델에게도 같은 답을 채점시켰습니다. 두 팔 6번의 실행에서 두 판정자가 같은 결론을 낸 문항은 500문항 중 490~498개입니다. 공개하는 수치는 공식 판정자 쪽입니다.
⑥ 세 번 돌립니다. 한 번의 운을 숫자로 올리지 않기 위해, 모든 셀을 세 번 돌려 평균과 범위를 함께 적습니다. 문항을 고르지 않습니다 — 500문항 전부입니다.
⑦ 오류도 셉니다. 모델이 형식을 깨서 답이 비면 그건 틀린 것으로 계산합니다. 다시 돌리지 않습니다. 이번 측정에 그런 경우가 한 번 있었고, 그 한 번이 틀린 것으로 들어간 숫자입니다.
결과
| 공식 GPT-4o 판정 | |
|---|---|
| 기억 계층 켬 (3회) | 94.5 % [93.6–95.2] |
| 기억 계층 끔 (3회) | 19.7 % [19.2–20.2] |
능력별로는 이렇습니다.
| 능력 | 문항 | 3회 정답 수 | 3회 평균 |
|---|---|---|---|
| 지식 갱신 | 78 | 76 / 77 / 77 | 98.3 [97.4–98.7] |
| 한 세션 안의 선호 | 30 | 30 / 30 / 30 | 100.0 |
| 어시스턴트가 한 말 | 56 | 55 / 55 / 54 | 97.6 [96.4–98.2] |
| 사용자가 한 말 | 70 | 66 / 69 / 68 | 96.7 [94.3–98.6] |
| 시간 추론 | 133 | 123 / 125 / 124 | 93.2 [92.5–94.0] |
| 다중 세션 추론 | 133 | 118 / 120 / 120 | 89.7 [88.7–90.2] |
절제는 일곱째 줄이 아니라 위 네 줄 안에 있습니다. 도입부에서 「대화에 없는 것을 물으면 모른다고 답하는가」를 짚었는데, 표에 그 줄이 없는 이유입니다. 절제 문항은 30개이고 별도 유형이 아니라 사용자가 한 말 6 · 다중 세션 12 · 시간 추론 6 · 지식 갱신 6에서 뽑혀 있습니다. 그래서 위 표의 문항 수를 다 더하면 500이고, 절제 30은 그 500에 이미 포함돼 있습니다 — 더하지 마십시오. 그 30개만 따로 보면 29 / 28 / 27을 맞혀 93.3 [90.0–96.7]입니다.
100.0은 주장이 아니라 30문항입니다. 「한 세션 안의 선호」는 이 벤치에서 문항이 30개인 능력이고, 세 번 모두 30개를 맞혔습니다. 분모가 작은 칸이라 완벽함의 증거로 읽으면 안 됩니다 — 그래서 이 표는 평균 옆에 문항 수와 런별 정답 수를 같이 싣습니다. 가장 어려운 칸인 「다중 세션 추론」은 133문항에서 89.7이고, 우리가 보고 있는 쪽은 그 칸입니다.
이 숫자에 붙는 조건. 작성자 Claude Opus 5.5 · 500문항 전체 · 공식 GPT-4o 판정 · 양쪽 모두 3회 반복, 평균과 범위 · 두 팔 모두 예산 60,000자 — 켬은 회상 블록의 한도, 끔은 대화 뒷부분을 자른 길이 · 질문마다 빈 기억에서 시작 · 넣을 때 모델 사용 없음.
두 팔의 예산은 같습니다. 한도가 양쪽 다 60,000자이고, 끈 쪽은 모든 문항에서 그 한도까지 채워졌습니다 — 이 벤치의 대화는 한 건도 60,000자보다 짧지 않기 때문입니다. 켠 쪽 블록의 실측 평균은 60,945자로, 머리글 때문에 1.6 % 더 깁니다.
그리고 제품의 기본값은 이것과 다릅니다. 이 수치는 60,000자 블록에서 나왔습니다 — 단행본 세 권짜리 대화 더미에 맞춘 크기입니다. 제품의 기본 회상 예산은 3,000자이고, 그건 운영자의 결정 기록에 맞춘 크기입니다. 과제가 다르면 블록도 다릅니다.
끈 쪽이 만점인 칸이 하나 있습니다
절제만 따로 보면 계층을 끈 쪽이 만점입니다 — 30문항 중 30 / 30 / 30, 세 번 모두 100.0. 켠 쪽은 93.3입니다.
좋은 소식이 아닙니다. 끈 쪽은 대화 뒷부분 60,000자 말고는 아무것도 보지 못합니다. 그래서 거의 모든 질문에 “모르겠습니다”라고 답합니다. 그런데 절제 문항은 “모른다”가 정답입니다. 아무것도 모르는 쪽이, 절제만 따로 재면 만점을 받습니다.
그 만점이 전체 점수 어디에 있는지 보면 분명해집니다. 끈 쪽이 맞힌 99 / 96 / 101개 가운데 30개가 매번 이 문항입니다. 절제를 뺀 나머지 470문항에서는 69 / 66 / 71개, 즉 14.6 % [14.0–15.1]입니다. 19.7 %가 어디서 왔는지가 이것입니다.
그럼 켠 쪽은 왜 93.3인가. 지어내서 틀린 게 아닙니다. 세 번의 실행에서 틀린 6건을 전부 열어 봤는데, 여섯 건 모두 없다는 것을 먼저 정확히 짚었습니다.
「지난 2주 동안 에그타르트를 몇 번 구웠나?」에는 이렇게 답했습니다 — “05-16부터 05-30까지 전부 확인했는데 에그타르트는 어디에도 나오지 않습니다.” 여기서 멈췄으면 정답입니다. 그런데 멈추지 않고, 그 기간에 실제로 구운 것(초콜릿 케이크)을 마저 말했습니다. 전부 사실이고 운영자에게는 더 나은 답이지만, 이 벤치의 절제 채점은 “없다”에서 끝나야 맞습니다.
다만 전부 채점 탓은 아닙니다. 여섯 건 중 3건은 “없다”고 한 뒤에 숫자까지 붙였습니다 — 기록에 없는 버스 요금에 절약액을 추정해 붙인 것 같은 경우입니다. 없는 전제에 수치를 얹은 것이니 이건 틀린 게 맞습니다.
다만 그 3건은 우리 시험지가 불러온 것이기도 합니다. 우리가 작성자에게 주는 지시에 「일부만 있으면 그 부분으로 답하고, 마지막 줄에는 숫자나 날짜, 이름을 적어라」가 들어 있습니다. 버스 요금 건이 정확히 그 모양입니다 — 택시 요금은 기록에 있었으니 “일부는 있는” 경우였고, 마지막 줄에 숫자를 내라고 했고, 모델은 그대로 따랐습니다.
그래서 그 지시를 전제가 기록에 없을 때만 끄는 변경을 만들어 다시 재봤습니다. 절제 문항은 전부 맞게 되었지만, 답할 수 있는 질문에서 “그런 기록이 없습니다”라고 잘못 답하는 경우가 생겨 전체로는 손해였습니다. 그래서 채택하지 않았습니다 — 재기 전에 정해 둔 규칙이 “답할 수 있는 문항에서 손해가 나면 채택하지 않는다”였고, 숫자를 본 뒤에 규칙을 고치지는 않습니다.
이 지시는 벤치마크를 돌리는 쪽에만 있고, 제품에는 없습니다. 그러니 위 3건은 제품이 평소에 하는 행동이 아니라 우리 측정 방식이 만든 것입니다. 우리 시험지가 우리 점수를 깎은 셈인데, 숨기는 것보다 적어 두는 쪽이 맞습니다.
그래서 절제는 혼자 읽는 숫자가 아닙니다. 아무것도 모르면 만점이 나오고, 많이 아는 쪽은 아는 것을 말하다가 깎입니다. 두 숫자를 따로 떼어 보면 정반대 결론이 나옵니다.
우리가 이 숫자로 주장하지 않는 것
다른 기억 제품보다 낫다고 말하지 않습니다. 이 면에는 타사 점수가 없습니다. 같은 조건에서 머리끝을 맞춰 보지 않았으므로 비교할 자격이 없습니다.
이 벤치 하나로 기억을 다 쟀다고 말하지 않습니다. LongMemEval은 사람과 어시스턴트의 긴 대화를 봅니다. 운영실에서 사람이 승인하고 거절하고 교정한 기록을 지키는지는 묻지 않습니다. 그건 우리가 만든 벤치가 묻고, 벤치마크 면에 있습니다.
94.5 %가 제품 설정에서 나온 숫자라고 말하지 않습니다. 위에 적은 대로 블록 크기가 다릅니다.
관련 노트: 벤치마크 · 어떤 로컬 작성자를 고를까 · 도구 호출 신뢰도
