모두가 인용하는 AI 메모리 벤치마크는 "모른다"라고 말하는 것을 금지한다
요약
AI 메모리 벤치마크가 답변 불가능한 질문을 의도적으로 배제하고, 모델에게 반드시 답변하도록 강제함으로써 발생하는 측정 오류를 지적합니다. 답변 가능성(Answerability)을 고려하지 않은 기존 벤치마크의 한계와 '절제(abstention)'의 중요성을 다룹니다.
핵심 포인트
- 기존 AI 메모리 벤치마크는 답변 불가능한 질문을 점수 산정에서 제외함
- 프롬프트 지침이 모델의 '모른다'는 답변을 금지하여 결과가 왜곡될 수 있음
- 에이전트 메모리에는 답변할 수 없는 질문에 대해 거절하는 '절제' 능력이 필요함
- 단순 답변 품질을 넘어 답변 가능성 자체를 측정하는 프레임워크가 요구됨
**답변 가능성 문제 (The Answerability Problem)**의 파트 1입니다. Retrieval-Augmented Self-Recall의 후속편입니다. 해당 시리즈에서는 에이전트 메모리에 보정된 절제 (calibrated abstention)가 필요하다고 주장했습니다. 이번 글은 제가 실제로 이를 측정하려고 시도했을 때 일어난 일에 관한 것입니다. 코드와 모든 수치는 다음에서 확인할 수 있습니다: RE-call (MIT).
AI 메모리 분야에서는 벤치마크 전쟁이 벌어지고 있으며, 이는 건강한 경쟁입니다.
Mem0의 논문 (arXiv:2504.19413, Table 2)은 경쟁사인 Zep의 65.99에 맞서 자신은 J=66.88의 LLM-as-judge 점수를 기록했다고 보고했습니다. Zep은 방법론과 자신에게 부여된 점수에 이의를 제기하는 반박문을 발표했습니다. Mem0가 이후 새로운 알고리즘을 발표하면서 LOCOMO에서 92.5, LongMemEval에서 94.4를 기록했습니다. 사람들은 이 모든 것에 대해 논쟁했습니다. 숫자가 누군가에게 중요하다는 것을 알 수 있는 대목입니다.
하지만 양측 모두 동일한 축을 두고 싸우고 있습니다: 메모리가 답변할 수 있는 질문들 중에서, 얼마나 많은 질문에 정답을 맞히는가?
LOCOMO에는 다섯 가지 질문 카테고리가 있습니다. 그중 네 가지가 바로 그 축에 해당합니다. 다섯 번째 카테고리는 **벤치마크의 22.5%**를 차지하는 446개의 질문으로, 답변이 가능해 보이지만 실제로는 불가능한 질문들입니다. 이 질문들은 대화에서 실제 인물과 실제 주제를 언급한 뒤, 그 인물이 결코 말하지 않은 것에 대해 묻습니다. 사건은 맞지만 화자가 틀린 경우입니다. 정답은 "여기에 없습니다(that isn't in here)." 입니다.
저는 기존 업체들이 이 446개의 질문에서 어떤 점수를 받는지 알고 싶었습니다. 그래서 테스트 프레임워크 (harness)를 읽어보았습니다.
두 줄의 코드
Mem0가 공개한 벤치마크 프레임워크 (mem0ai/memory-benchmarks)에는 다음 내용이 포함되어 있습니다:
CATEGORIES_TO_EVALUATE = [1, 2, 3, 4]
카테고리 5, 즉 446개의 모든 적대적 질문 (adversarial questions)은 점수 산정에서 완전히 제외되어 있습니다.
또한 답변 프롬프트에는 다음과 같은 지침이 포함되어 있습니다:
"명시되지 않음(not specified)"이라고 절대 말하지 마라 … 반드시 답변하라 (COMMIT AND ANSWER)
따라서 절제 (abstention)가 측정되지 않는 것이 아닙니다. 프레임워크가 이를 테스트할 질문들을 제거해 버리고, 남은 질문들에 대해서는 모델에게 그렇게 하지 말라고 지시하고 있는 것입니다.
이 지점에서 주의를 기울이고 싶습니다. 왜냐하면 이 관찰에 대한 저렴한 해석(cheap version)이 존재하며, 저는 그런 식의 주장을 하려는 것이 아니기 때문입니다. 만약 당신이 측정하고자 하는 것이 답변의 품질(answer quality)이라면, cat5를 제외하는 것은 방어 가능한(defensible) 선택입니다. 답변 가능한 질문에 대해 거절(refusal)은 어떤 경우든 0점으로 처리되며, 클래스를 섞는 것은 지표를 흐리게 만들기 때문입니다. "COMMIT AND ANSWER(확정하고 답변하라)" 지침은 확답을 피하는(hedges) 모델로부터 발생하는 분산(variance)을 줄여줍니다. 이 두 가지 방식 모두 그 자체로 스캔들이 될 만한 것은 아닙니다.
이들이 결합되어 형성하는 것은 하나의 **범위(scope)**입니다. 결과로 도출되는 수치는 답변이 존재하는 질문들에 대한 답변 정확도(answer accuracy)이며, 시스템에 답변이 존재하지 않을 때 시스템이 어떻게 작동하는지에 대해서는 구조적으로 아무것도 알려줄 수 없습니다. 모든 사람이 그 방식대로 해석하기만 한다면 그것으로 충분합니다. 하지만 실제로는
제가 누군가 부정행위를 했다고 주장하는 것은 아닙니다. 제가 주장하는 것은 이 수치가 지탱할 수 없는 결론을 위해 핵심적인 역할을 한다는 것이며, 이는 제가 발표할 수도 있는 이 벤치마크의 모든 공개된 수치에 해당한다는 것입니다.
회피(abstention)를 측정하는 지표는 어떤 모습일까요?
이 부분이 가장 오래 걸렸고, 제가 가장 반론을 제기하고 싶은 부분입니다.
명백한 지표는 '얼마나 자주 올바르게 거절하는가?'이며, 저는 이것을 **적대적-회피(adversarial-abstain)**라고 부를 것입니다. 이 자체만으로는 완전히 쓸모가 없습니다. 왜냐하면 한 줄로 모든 것을 거부하여 1.00점을 받을 수 있기 때문입니다. 항상 '모른다'고 말하는 메모리는 완벽하게 정직하지만, 동시에 아무 가치도 없습니다.
거울 지표는 **허위-회피(false-abstain)**입니다. 즉, 답변할 수 있었던 질문에 대해 얼마나 자주 거절했는지입니다. 이것 역시 자체적으로 게임화될 수 있습니다. 반대 방향으로 보면, 절대 회피하지 않으면 완벽한 0.000점을 받게 됩니다. 이는 우연히도 'COMMIT AND ANSWER'가 지시하는 바와 정확히 일치합니다.
따라서 이 두 열(column) 중 어느 것도 단독으로는 아무 의미가 없습니다. 퇴행적인 정책에 의해 게임화될 수 없는 양은 차이값입니다:
판별력 (discrimination) = 적대적-회피 - 허위-회피
모든 것을 거부할 경우: 1.00 − 1.00 = 0. 아무것도 거부하지 않을 경우: 0.00 − 0.00 = 0. 여러분이 0보다 큰 점수를 얻을 수 있는 유일한 방법은 _두 클래스를 구별하는 것_이며, 이것이 실제로 문제의 핵심 능력입니다. 이는 균형 정확도(balanced-accuracy)나 Youden's J와 같은 형태이며, 제가 발명했다고 주장하지는 않습니다. 다만 이 분야 누구도 보고하지 않고 있으며, 보고하기가 쉽다는 점을 주장합니다.
그래서 저는 이 도구(harness)를 만들었습니다. 몇백 줄짜리 코드이며, 공개된 LOCOMO 파일로 실행되고, 리포지토리에 포함되어 있습니다:
curl -sLO https://raw.githubusercontent.com/snap-research/locomo/main/data/locomo10.json
python -m recall.eval.locomo_abstention --data locomo10.json --answerable-sample 40
그리고 저는 이 도구로 제 자신의 시스템을 테스트했습니다.
Zero
RE-call, 기본 설정, 모든 446개의 적대적 질문에 대해:
| 모드 (Mode) | 적대적 기권 (Adversarial abstain) ↑ | 답변 가능 질문에 대한 오기권 (Answerable false-abstain) ↓ | 판별력 (discrimination) |
|---|---|---|---|
| 기본 (default) | 0.000 [0.00, 0.01] | 0.000 [0.00, 0.01] | 0.000 |
446개 중 0개. "기대보다 못하다" 수준이 아닙니다. 이것은 기권 메커니즘이 전혀 없는 시스템의 정확한 점수이며, 논문 전체가 보정된 기권 (calibrated abstention)을 다루는 시스템이 기록한 점수입니다. 저는 이 문제에 대해 몇 달 동안 글을 써왔습니다. 저에게는 신뢰 계층 (trust layer), 보정된 코사인 임계값 (calibrated cosine threshold), 그리고 함의 판정기 (entailment judge)가 있지만, 이 문제의 가장 어려운 공개 사례 앞에서 이들은 집단적으로 아무것도 하지 못했습니다.
저는 다른 글을 계획했었습니다. 이 폴더에 2주 동안 머물러 있던 초안의 제목은 _"모든 AI 메모리 벤치마크가 간과하는 단 하나의 질문"_이었고, 그 논지는 다음과 같았습니다: "그들은 이것을 측정하지 않지만, 나는 측정하며, 여기 내 점수가 있다." 저는 그 글을 폐기했습니다. 왜냐하면 이 발견의 정직한 버전은 제가 이 분야에서 공백을 찾아냈다는 것이 아니라, 제가 이 분야의 공백을 발견한 뒤 그 공백 속으로 곧장 빠져버렸다는 것이기 때문입니다.
그것이 훨씬 더 흥미로운 결과이며, 이 시리즈의 나머지 내용이 다루고자 하는 핵심입니다.
그리고 제가 출시하는 모든 레버(lever)는 똑같은 방식으로 실패합니다
더 나아가기 전에, 제가 시도했던 내용의 요약입니다. 네 가지 모드를 테스트했으며, 각 모드는 답변 가능한 질문에 대한 비용 대비 측정되었습니다. 모든 것에 대해 기권하는 시스템은 1.00점을 기록하며 무용지물이 되기 때문입니다:
| 모드 (Mode) | 적대적 기권 (Adversarial abstain) ↑ | 답변 가능 질문에 대한 오기권 (Answerable false-abstain) ↓ | 판별력 (discrimination) |
|---|---|---|---|
| 기본 (default) | 0.000 | 0.000 | 0.000 |
| ... |
가장 뛰어난 절대적 포착(catch)은 최악의 트레이드오프(trade)를 가져옵니다. 즉, 사용자가 실제로 답변을 원했던 질문의 60.3%를 거부합니다. 여기에 실제로 출시할 만한 행(row)은 단 하나도 없습니다.
나중에 두 개의 실제 검색 (retrieval) 버그를 수정했을 때, 판별력 (discrimination)은 0.157에서 0.154로 변했으며, 이는 변하지 않은 것과 다름없습니다. 두 열(column)이 함께 상승했습니다. 검색 개선은 답변 가능성 판단 (answerability judgement)을 개선할 수 없습니다. 왜냐하면 주제에는 맞지만 틀린 문맥을 더 잘 검색해낼수록 점수가 낮아지는 것이 아니라 더 높아지기 때문입니다.
시리즈의 방향
- Part 2: 쿼리(query)와 문서(document)를 공동으로 읽는 크로스 인코더(cross-encoder)를 포함하여 정면 승부를 벌인 6가지 후보 신호(candidate signals)를 측정하지만, 여전히 구분해내지 못합니다. 관련성(Relevance)은 답변 가능성(answerability)이 아닙니다. 또한, 기권(abstention)을 전혀 움직이지 않고도 제가 측정한 가장 큰 검색 이득(+0.106 hit@5)을 보여줍니다.
- Part 3: 보상(payoff). 왜 이 벤치마크와 BEAM이 서로 다른 결론을 내리는지, 그리고 이를 해소하는 숨겨진 변수에 대해 다룹니다. 판별력(Discrimination)은 속성이 아니라 곡선이며, 이제 저는 그것이 사용 가능한 수준을 교차하는 좌표를 말씀드릴 수 있습니다.
- Part 4: 이 설계가 암시하는 트레이드오프(trade-off). LLM을 절대 호출하지 않는 메모리 계층(memory layer)이 무엇을 비용으로 치르고 무엇을 절약하는지에 대해 다룹니다.
내가 이런 방식으로 글을 쓰는 이유
이 분야의 설계를 마지막으로 게시했을 때, 댓글이 포스트 자체보다 더 좋았습니다. 막연한 격려가 아니라, 사람들이 실패 모드(failure mode)를 정확히 지목하고 무엇이 이를 해결할 수 있는지 설명해 주었습니다. 저는 그것들을 실험으로 전환했고, 살아남은 것들을 출시했습니다. 그중 하나는 실제 개선을 만들어냈지만, Part 2에서 보여주듯 이 워크로드에서는 단순 코사인 유사도(plain cosine)보다 낮은 성능을 기록했습니다. 이것이 바로 게시할 가치가 있었던 이유입니다. 서랍 속에 넣어두는 설계는 확신을 쌓아가지만, 게시하는 설계는 반론을 쌓아갑니다. 그리고 반론은 이런 것들을 만드는 누구에게나 이용 가능한 가장 저렴하고 고품질인 신호입니다.
따라서 만약 여러분이 검색 기반 에이전트(retrieval-backed agents)를 구축하거나 평가한다면, 댓글 섹션은 형식적인 절차가 아니라 이 글의 핵심입니다. 측정 방식이 어디서 틀렸는지 제게 알려주세요.
제 자신의 프레임워크와 상충되는 부분이기에 언급할 가치가 있는 한 가지는, 이 분야가 이미 움직이고 있다는 점입니다. Mem0의 최신 BEAM 벤치마크는 기권(abstention) 카테고리를 포함하고 있습니다. 나머지 부분에 대해 어떻게 생각하시든 간에, 그곳의 누군가는 저와 동일한 결론에 도달했고 그에 대해 조치를 취했습니다. 저는 영구적인 문제에 대해 옳다는 것을 증명하기보다, 해결된 문제에 대해 앞서 나가는 쪽을 택하겠습니다.
질문
만약 여러분이 검색 기반 에이전트(retrieval-backed agents)를 구축하거나 평가한다면, 저는 진심으로 알고 싶습니다:
정답이 코퍼스(corpus)에 없을 때 여러분의 시스템이 어떻게 작동하는지 측정하고 있습니까? 만약 측정하고 있다면, 어떤 수치를 보고하십니까?
"환각 (hallucination)이 줄어들었는가"가 아닙니다. 답변할 수 없다는 것을 알고 있는 고정된 질문 세트에 대한 수치, 그리고 답변 가능하지만 거절된 질문 (refused-but-answerable questions)의 비용을 함께 제시해야 합니다. 만약 여러분에게 그런 수치가 있다면, 저는 그것을 보고 싶습니다. 만약 시도해 보았는데 제 결과와 비슷하게 나왔다면, 그것은 훨씬 더 유용할 것입니다.
그리고 만약 판별 (discrimination)이 잘못된 요약 통계량이라고 생각한다면, 그렇게 말씀해 주십시오. 저는 이 주제를 바탕으로 네 개의 글을 더 작성한 뒤에 알게 되는 것보다, 댓글 섹션에서 그 사실을 알게 되는 편이 훨씬 낫습니다.
여기에 제시된 모든 수치는 측정되었으며 재현 가능합니다: results/RESULTS.md §7b 및 results/FINDINGS.md §9b. 테스트 하네스 (harness)는 리포지토리 (repo)에 있습니다. 다음: 파트 2, 관련성 (Relevance)은 답변 가능성 (answerability)이 아니다: 여섯 가지 신호, 그리고 그 중 어느 것도 단순 코사인 (cosine) 유사도를 이기지 못한다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기