이 글은 Kaggle Benchmarking Challenge에 제출된 내용입니다.
제가 벤치마킹한 내용
여기에 영수증이 있습니다. 항목 중 한 줄과 전체 합계의 절반이 테이프로 가려져 있습니다. '총합은 얼마인가요?'라는 질문에 대한 정답은 **'알 수 없습니다(I can't tell)'**입니다. 보이는 숫자 .61만으로는 나머지 부분을 확정할 수 없고, 항목 중 하나가 숨겨져 있어 합산 자체가 불가능하기 때문입니다.
저는 네 가지 비전 모델에게 이 질문을 했습니다. 네 개의 다른 총합이 나왔으며, 모두 .61로 끝났습니다. 그중 세 개는 92–100의 높은 신뢰도를 보였습니다:
Four models, four made-up totals
실제 총합은 255.61이었습니다. Gemini 3 Flash가 제시한 230.61은 보이는 항목(211.03)에 숨겨진 항목을 위해 임의로 만든 19.58을 더하여, 결과가 .61로 끝나도록 조작된 값입니다.
2분 영상 설명:
제가 측정한 행동 양식: 요청하는 숫자가 물리적으로 가려져 있을 때, 비전 모델이 '알 수 없다'고 말할지 아니면 임의로 추측하여 값을 제시하는지 여부입니다. 그리고 만약 보이는 정보만으로 계산할 수 있다면, 합계를 제대로 하는지도 측정했습니다. 영수증이나 청구서는 휴대폰 사진을 찍어 엄지손가락이나 접힌 종이, 스티커 등으로 일부를 가린 후 어시스턴트에게 붙여넣는 경우가 많습니다. 이때 자신감 있게 추측한 잘못된 총합은 경고 없이 그럴듯하지만 틀린 숫자가 될 수 있습니다.
자극(Stimuli). 시드 기반 렌더러가 일반적인 청구서(소매점 영수증, 식당 계산서, 공과금 고지서, 서비스 인보이스, 실험실 인보이스, 수수료 명세서; 가상의 발행처; USD/EUR/GBP/CAD/AUD/CHF)를 그립니다. 모든 금액은 코드로 생성되므로 정답 키가 정확하며 수동으로 입력된 부분이 없습니다. 소계(subtotal), 세율(tax rate), 단가(unit price), 또는 '지불액(amount paid)' 항목이 없기 때문에, 총합에 도달하는 유일한 방법은 총합 자체를 사용하거나 항목들의 합계를 사용하는 것입니다.
| 코드 | 테이핑된 정보 | 정답 |
|---|
clean | 없음 | 총합계 |
| ... | | |
D와 N은 쌍둥이입니다. 동일한 페이지에 총합계가 붙어 있으며, 두 번째 테이프 조각의 위치만 다릅니다. 조건당 48장의 지폐를 사용했습니다. | | |
Same bill, four versions
프롬프트(Prompts). 일반 프롬프트는 총합계와 0–100 사이의 신뢰도를 요청하며, 답변 필드는 자유 형식 텍스트이므로 "보이지 않음(not visible)"이라고 말하기 쉽습니다. 저는 또한 별도의 탐지 질문("총합계가 보이는가? 보이는 금액들로부터 계산할 수 있는가?") 버전, "UNREADABLE을 말해도 좋다" 버전, 그리고 두 단계 버전(먼저 탐지하고, 같은 채팅에서 추출)도 테스트했습니다.
엄격성(Rigour). 가설, 임계값 및 분석은 모델 호출 전에 사전 등록되었습니다. 12장 지폐를 별도의 지폐에 대해 먼저 실행했으며, 이후의 모든 변경 사항은 날짜가 기록된 편차로 기록됩니다. 채점은 LLM 심사 없이 결정론적 정규 표현식(regex)을 사용합니다. 신뢰 구간은 지폐에 대한 클러스터 부트스트랩입니다.
테스트 모델 (Models Tested)
- Claude Sonnet 5 (Anthropic)
- Gemini 3 Flash (Google)
- Gemini 3.1 Flash-Lite (Google)
- GPT-5.4 nano (OpenAI)
이 모델들은 Kaggle Benchmarks 모델 프록시에서 시각 능력을 갖춘 모델이며, 단일 이미지 확인을 통과했습니다 (나머지는 텍스트 전용입니다). 이 모델들은 세 개의 실험실 범위를 포괄하며 소형부터 최첨단급까지 다양합니다. 모든 모델은 제공업체 기본 설정으로 kaggle-benchmarks를 통해 실행되었으며, 이미지당 샘플 1개, 최대 병렬 요청 수는 4개였습니다.
사전 점검(Sanity checks):
- 네 가지 모델 모두 깨끗한 지폐는 매번 읽었으며 (48/48), 위장된 지폐도 매번 읽었습니다 (48/48). 따라서 이미지는 판독 가능합니다.
- 만들어진 521개의 숫자 중 0개가 숨겨진 총합계와 일치했으므로, 페이지의 어떤 정보도 이를 유출하지 않습니다.
- 4,704개의 채점된 응답에서 오류는 0개였습니다.
발견 사항 (Findings)
1. 총합계가 절반만 보이는 것이 아예 없는 것보다 더 나쁘다
Answers when the total cannot be known
| Model | Total fully taped: makes one up | Total half taped: makes one up |
|---|
| Claude Sonnet 5 | 38% | 92% |
| ... | | |
| Preregistered H1 (fully taped, 계산 불가능한 지폐에서 임의로 만들어진 총액에 대한 ≥ 40% 지원, 중앙 신뢰도 ≥ 70)는 지지됨: 44% [35–52], 중앙 신뢰도 85. 반쪽만 테이프로 붙인 효과(파일럿 이후 추가되어 새 지폐에서만 테스트됨)는 지지됨: +54 포인트 [46–62]. | | |
눈에 보이는 숫자는 닻 역할을 합니다. Claude와 Gemini 3 Flash의 반쪽만 테이프로 붙인 답변 중 98%가 눈에 보이는 숫자를 유지했습니다. 약 4분의 1은 눈에 보이는 조각을 총액으로 보고했고, 나머지는 그 주변의 숨겨진 숫자를 지어냈습니다.
2. '자신감 있게'는 모델에 따라 다르다
Confidence of made-up totals
임의로 만들어진 총액(전체 테이프로 붙인 경우)에 대한 중앙 진술 신뢰도: Gemini 3 Flash 95, Gemini 3.1 Flash-Lite 95, GPT-5.4 nano 62, Claude Sonnet 5 20. Claude는 추측하지만, 자신이 추측하고 있다고 말합니다. 모든 확정된 숫자에 걸쳐 Gemini 3 Flash는 71% 정확도에서 평균 98의 신뢰도를 보인 반면, Claude는 70%에서 평균 77을 기록했습니다 (가장 잘 보정됨).
3. 그들은 알고 있지만 어쨌든 답한다
Gemini 3 Flash says the total is hidden, then gives one
[Knows vs does](https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fagy3r4q02fv1u1chvliz.png
별도로 질문했을 때, Claude, Gemini 3 Flash, 그리고 Flash-Lite는 48개 중 48개 영수증에서 총액이 '보이지 않으며' '계산할 수 없다'고 답했습니다. 하지만 같은 영수증에 대해 단순히 질문을 던지자 여전히 21–44%의 확률로 임의의 총액을 제시하는 경우가 있었습니다 (nano: 플래그를 지정한 42개 중 71%). 실패는 인식 능력 문제가 아닙니다. 모델은 정보가 사라졌음을 알 수 있지만, 그럼에도 불구하고 '질문에 답하기'라는 지침이 우선합니다.
4. 합계를 구하는 것은 습관의 문제가 아니라 역량의 문제
총액이 테이프로 가려져 있지만 모든 줄 항목이 보이는 경우, Claude와 Gemini 3 Flash는 48/48번 성공적으로 계산했습니다. 실패 사례는 더 작은 모델들(Flash-Lite 31%, nano 79%)에서 나왔습니다. Nano는 줄을 더하라고 명시적으로 지시해도 실패하는 경우가 있어 (12/48개만 정확), 이는 정책 문제가 아니라 산술 능력의 문제입니다. 사전에 등록된 H2(≥ 30% 실패)는 지지되지 않았습니다 (28% [22–33]).
5. 해결책: 먼저 확인하고, 그 후에 답변하기
Fixes
- **'UNREADABLE이라고 말할 수 있습니다(You may say UNREADABLE)'**는 Claude와 Gemini 3 Flash의 임의 총액 제시를 제거했지만 (0/48), Gemini 3 Flash가 계산할 수 있는 총액 중 약 3분의 1을 포기하는 결과를 낳았습니다 (100% 대비 65%).
- **먼저 확인하고, 그 후에 답변하기(Check first, then answer)**는 모든 모델에서 임의 총액 제시를 **0–2%**로 유지했으며, Gemini 3 Flash가 복구 가능한 총액을 다시 계산해냈습니다 (98%).
제가 사전에 등록한 비교 연구에서는 'UNREADABLE이라고 말할 수 있습니다'보다 임의 총액 제시에서 ≥ 10포인트 더 높은 점수를 얻기 위해 2단계 접근 방식이 필요했습니다. 하지만 그렇지 않았는데, 단순히 권한만 부여해도 이미 대형 모델들의 비율을 0%로 만들었기 때문입니다. 2단계 버전의 진정한 장점은 모델들이 계산할 수 있는 총액에 대해 포기하지 않게 한다는 점입니다.
6. 실제 영수증: 더 나아지기는커녕, 더 안 좋아짐
이것이 깨끗하게 합성된 청구서의 인공물(artefact)인지 확인하기 위해, 저는 또한 사진으로 찍은 영수증의 공개 데이터셋인 CORD에서 실제 영수증 사진 30장을 가져와 사용했으며, 이 데이터셋 자체의 레이블을 정답 키로 사용했습니다. 저는 라벨만으로는 총액을 계산할 수 없는 영수증들만을 사용했고, 금액(레이블이 아닌)은 동일한 방식으로 테이프로 붙였습니다. 이 부분은 탐색적인 성격이며, 샘플 크기가 작습니다.
A real receipt with the total taped
| 모델 | 깨끗한 영수증 읽기 | 총액 알 수 없음: 임의 추론 | 중앙값 신뢰도 | 자체 테스트: '숨겨져서 계산 불가' |
|---|
| Claude Sonnet 5 | 30개 중 29개 | 30개 중 12개 (40%) | 22 | 30/30 |
| ... | | | | |
- Gemini 3 Flash는 합성 청구서에서 임의로 추론한 총액 비율이 21%였던 것에서 실제 영수증에서는 73%로 증가했습니다. 신뢰도는 여전히 95%를 유지했으며, 자체 테스트에서도 총액이 숨겨져 계산 불가능하다고 30/30번 보고했습니다.
- Check-first 방식은 실제 사진에서도 작동합니다. 임의 추론한 총액은 각각 Claude에서 2/30, Flash-Lite에서 1/30, nano에서 0/30으로 감소했습니다. Claude와 Flash-Lite는 여전히 복구 가능한 총액을 계산해냈습니다 (각각 29/30, 28/30). 실제 영수증에 대한 Gemini 3 Flash의 check-first 실행은 당일 할당량에 맞지 않았습니다.
- 임의로 추론한 숫자 77개 중 3개가 숨겨진 총액과 정확히 일치했는데, 이들은 모두 Gemini 3 Flash에서 나왔으며 모두 반올림된 금액(예: 40.000)이었습니다. 이는 제 5% 누출 임계값 미만이긴 하지만, 실제 영수증에는 제가 테이프로 붙이지 않은 단서가 포함될 수 있다는 점을 상기시켜줍니다.
- Nano는 이 사진들을 신뢰성 있게 읽지 못합니다 (깨끗한 청구서 30장 중 20장). 따라서 nano의 행은 약한 증거입니다.
제가 놀란 점
- 부분적인 지우개(Partial erasure)가 함정입니다. 완전히 가려진 총합은 종종 '알 수 없습니다(I can't tell)'라는 답변을 받지만, 두 자리만 보이게 남겨두면 모든 모델이 나머지 숫자를 채워 넣습니다.
- 모든 모델이 알고 있었습니다. 별도의 탐지기(probe)는 48/48번 정확했지만, 일반적인 질문은 여전히 꾸며낸 숫자를 만들어냈습니다. 모델에게 먼저 확인하도록 요청하는 것만으로도 이를 수정할 수 있었습니다.
- 신뢰도는 증거가 아닌 모델을 추적했습니다: Gemini가 볼 수 없는 숫자에 대해 95점을 부여했고, Claude는 같은 종류의 추측에 대해 20점을 부여했습니다.
한계점 (Limits)
- 합성된 청구서(Synthetic bills)는 의도적으로 간단합니다(이것이 '알 수 없습니다'가 증명적으로 정확하게 만드는 요소입니다). 따라서 실제 청구서는 더 어렵고, 더 쉽지 않을 가능성이 높습니다. 실제 영수증 확인 결과도 같은 방향을 가리킵니다.
- 항목당 단일 샘플; 제공업체 기본 온도(provider-default temperature)를 사용했습니다.
- 마감 기한 때문에 Claude Sonnet 5와 Gemini 3 Flash는 위의 핵심 조건에서 실행되었습니다. 추가 테이프 수준(25/50/75%)은 두 개의 작은 모델에 대해서만 실행되었습니다. 이는 해당 실행 전에 기록되었으며, 어떤 가설도 이 수준들을 사용하지 않습니다.
- 이전 연구(#167)에서는 페이지가 누락되었을 때 텍스트 모델이 총합을 지어내는 것을 보여주었습니다. 여기에 비전 설정(vision setting), 테이프 투여량 사다리(tape-dose ladder), 그리고 계산 가능/불가능한 쌍둥이(computable/not-computable twins)가 추가되었습니다.
다음에 측정할 것 (What I'd measure next)
- 두 개의 큰 모델에 대한 전체 테이프 투여량 사다리(25/50/75%)와 반복 샘플을 사용한 재시험(test–retest).
- 물리적으로 테이프로 붙이고 인쇄하여 휴대폰으로 촬영한 청구서.
- 실제 생활에서 다루어지는 다른 필드들: 날짜, 계좌 번호, 수량.