01사전 등록
가설·지표·λ 스윕·반증 조건은 어떤 실행보다 먼저 PREREGISTRATION.md에 커밋됩니다. 채점과 결과 매핑은 먼저 작성되고 단위 테스트를 거쳤습니다 —— 사후에 지표를 골라 유리한 결과를 만들 수 없습니다.
지표의 문제
대칭적인 점수는 모든 것에 답하는 메모리에 보상을 줍니다 —— store가 뒷받침할 수 없는 질문까지 포함해서요. VeriBench는 배포가 실제로 지불하는 방식으로 메모리를 채점합니다: NET(λ) = (정답 − λ·오답) / n. λ는 침묵 대비 오답의 선언된 비용입니다. 법률·의료는 높은 λ로, 브레인스토밍은 낮은 λ로 운영합니다. 숫자 하나를 λ ∈ {1, 2, 5, 10}에서 스윕 —— 어떤 실행보다도 먼저 고정.
✓ LLM 심판 없음, 네트워크 없음, 리더보드 쇼 없음 —— 명령 하나, 원시 JSON은 저장소에 커밋.
메모리 벤치마크는 얼마나 돌아오는지를 잽니다. 틀리게 돌아오는 것에 값을 매기는 벤치마크는 없습니다.
코퍼스의 답변 가능한 절반에서는 게이트 있는 메모리와 날것의 벡터 스토어가 거의 동일하게 검색합니다 —— recall@k는 차이를 보지 못합니다. 차이는 store가 답할 수 없는 질문에서 나타납니다: 기권 임계값이 없는 메모리는 그래도 최근접 이웃을 완전한 확신으로 반환합니다. 프로덕션에서 그것은 조작된 답이고, 대칭 벤치마크에서는 보이지 않습니다.
NET(λ)는 구조적으로 그것을 보이게 만듭니다: 정답은 +1, 오답은 −λ, 침묵은 0. 손익분기 정확도는 λ/(1+λ) —— Verimem의 SLA 노브가 store를 맞추는 바로 그 임계값입니다. 벤치마크는 운영자가 조정에 쓰는 바로 그 숫자에서 store를 측정합니다.
가설·지표·λ 스윕·반증 조건은 어떤 실행보다 먼저 PREREGISTRATION.md에 커밋됩니다. 채점과 결과 매핑은 먼저 작성되고 단위 테스트를 거쳤습니다 —— 사후에 지표를 골라 유리한 결과를 만들 수 없습니다.
우리가 쓰지 않은 실제 데이터셋: HaluEval QA와 SQuAD v2(답변 가능 + 답변 불가 분할, 서로소). 정답 판정은 id로 결정 가능한 검색 —— 루프 어디에도 LLM 심판이 없습니다.
뒤섞인 store는 깊은 순손실로 떨어져야 하고(실제: NET(1) = −0.94), 임계값을 끈 동일 검색은 답변 불가에서 조작해야 합니다(실제: 오답 100건). 대조군이 통과하면 벤치마크가 고장난 것 —— 대조군이 존재하는 이유입니다.
맞대결은 두 엔진에서 동일한 embedder(multilingual-e5-base)를 오프라인으로 사용합니다. mem0는 raw-store 모드(그 LLM은 한 번도 호출되지 않음 —— 이 축은 누락이 아니라 선언에 의해 범위 밖입니다).
| 시스템 | ✓ | ✗ | ∅ | coverage | NET(1) | NET(2) | NET(5) | NET(10) | λ부터 순손실 |
|---|---|---|---|---|---|---|---|---|---|
| Verimem · 임계값 τ=0.8(제품 기본값) | 182 | 4 | 114 | 0.62 | +0.593 | +0.580 | +0.540 | +0.473 | 45.5 |
| mem0 2.0.11 · 출하 상태(임계값 없음) | 200 | 100 | 0 | 1.00 | +0.333 | 0.000 | −1.000 | −2.667 | 2.0 |
| mem0 + 볼트온 임계값 0.75(평가셋에서 조정) | 166 | 0 | 134 | 0.55 | +0.553 | +0.553 | +0.553 | +0.553 | 절대 아님 |
| 같은 store, 임계값 OFF(τ=0 대조군) | 192 | 100 | 8 | 0.97 | +0.307 | −0.027 | −1.027 | −2.693 | 1.9 |
| 뒤섞인 대조군(sanity: 실패해야 함) | 5 | 287 | 8 | 0.97 | −0.940 | −1.897 | −4.767 | −9.550 | 0.02 |
양방향으로 정직하게 읽으세요: 출하 상태의 mem0는 λ=2를 넘으면 순손실로 돌아섭니다 —— 답변 불가 절반에서 조작된 답 100건; Verimem의 제품 기본값은 λ≈45까지 순이익을 유지합니다. 하지만 임계값은 어떤 엔진에도 볼트온할 수 있습니다: 이 평가셋에서 조정한 임계값이면 mem0는 평평한 +0.553에 도달 —— 이 코퍼스에서 λ≥5일 때 우리 기본값을 이깁니다. 남는 차이: 엔진 자체는 임계값을 탑재하지 않고, 볼트온 임계값은 테스트셋에서 골랐으며, 평평한 선은 확신 없는 것에는 일절 답하지 않음을 뜻합니다 —— coverage 0.55 대 0.62, λ=1에서 정답 182 대 166.
| 시스템 | ✓ | ✗ | ∅ | coverage | NET(1) | NET(2) | NET(5) | NET(10) | λ부터 순손실 |
|---|---|---|---|---|---|---|---|---|---|
| Verimem · 임계값 τ=0.8(제품 기본값) | 163 | 49 | 88 | 0.71 | +0.380 | +0.217 | −0.273 | −1.090 | 3.3 |
| Verimem · 최적 임계값 0.85(평가셋에서 조정) | 98 | 7 | 195 | 0.35 | +0.303 | +0.280 | +0.210 | +0.093 | 14.0 |
| mem0 2.0.11 · 출하 상태(임계값 없음) | 200 | 100 | 0 | 1.00 | +0.333 | 0.000 | −1.000 | −2.667 | 2.0 |
| mem0 + 볼트온 임계값 0.80(평가셋에서 조정) | 44 | 0 | 256 | 0.15 | +0.147 | +0.147 | +0.147 | +0.147 | 절대 아님 |
SQuAD의 방해 지문은 점수 대역을 압축하고, 그것이 드러납니다: 제품 기본값에서 crossover는 λ≈3.3까지 내려가고, λ=10에서 NET을 양수로 유지하려면 coverage 0.35를 지불해야 합니다. 기권은 노브이지 마법이 아닙니다 —— 정직의 값은 코퍼스가 정합니다. 잘못은 이 표를 숨기는 것입니다.
위의 표들: 외부 데이터, 답변 가능 + 답변 불가, 임계값 켬 vs 끔 vs 경쟁사, 뒤섞인 대조군. 조작이 값이 매겨진 사건이 되는 축입니다.
허위 상관을 충실히 뒷받침한 store는 do(X) 질문에 자신만만하게 오답하고 —— λ=1에서도 순손실이 됩니다. 출처는 인과가 아닙니다. 둘을 구분 못 하는 벤치마크는 그 혼동에 보상을 줍니다.
담합(N개의 신원, 단일 피드) + 신뢰받는 슬리퍼. 순이익을 유지하는 것은 2채널 신뢰 정책 —— 독립적 뒷받침 및 결과 피드백 —— 뿐입니다. 단일 채널은 각각 두 공격 중 정확히 하나에 무너집니다. Verimem의 2채널 source-trust 뒤에 있는 축입니다.
모든 축, 결정적, API 키 제로
git clone https://github.com/aureliocpr-ctrl/verimem && cd verimem
pip install -e .
python -m benchmark.veribench.run_all # every axis, one reproducible entrypoint 스펙, 사전 등록, 모든 원시 결과 JSON은 저장소의 benchmark/veribench/와 benchmark/results/에 있습니다. 경쟁사의 참여를 환영합니다 —— mem0 어댑터가 동작하는 예시로 트리 안에 있습니다. 여러분 엔진의 공식 어댑터를 PR로 보내주시면 같은 조건에서 실행합니다.