VLM 환각 평가의 yes/no 토큰 선택이 POPE F1을 6.13점 흔든다
Token-Set Choice Confounds POPE: A Systematic Audit of Yes/No Extraction in VLM Hallucination Evaluation
무엇인가
이 논문은 VLM 환각 완화 기법을 POPE 벤치마크로 재현하려던 과정에서 출발한다. 저자들이 측정한 LLaVA-1.5-7B 베이스라인은 adversarial split에서 82.21 F1이었고, 비교하려던 기존 베이스라인 73.54, 79.30, 81.00보다 1.21~8.67점 높았다. 문제는 모델이 아니라 평가 코드에 있었다. yes/no를 판정하는 readout이 어휘 사전의 두 ID, 3582("yes")와 1217("no")의 로짓을 비교하는 방식이었는데, 세 split에 걸친 9,000개 greedy-decode 질문에서 이 두 ID는 단 한 번도 생성되지 않았다.
어떻게 동작하나
이유는 토크나이저 수준에서 기계적이다. LLaMA-2의 SentencePiece 토크나이저는 문장 중간 위치의 단어 첫 토큰에 공백 바이트를 붙이는데, LLaVA-1.5 프롬프트 템플릿이 리터럴 문자열 ASSISTANT: 로 끝나기 때문에 정답 단어가 정확히 그 위치에 놓인다. 그래서 모델은 3869(" Yes", 공백 접두)와 1939(" No")를 내놓는다. 3582와 1217은 어휘 사전에는 유효하게 존재하지만 이 모델이 ASSISTANT: 뒤에서 절대 선택하지 않는 후보다. 저자들은 이를 candidate exclusion이라 부른다.
무엇과 다른가
제안하는 수정은 평가 코드 한 줄 수준이다. yes 계열 표면형 4개(3582, 8241, 4874, 3869)와 no 계열 4개(1217, 3782, 694, 1939)의 최대 로짓을 비교하는 8토큰 readout이다. max 집계를 쓰는 이유는 greedy 디코더가 최고 로짓 토큰 하나를 내놓기 때문이며, 그 토큰이 yes 집합에 속하는 것과 max 조건이 성립하는 것이 동치이기 때문이다. 합이나 softmax 집계는 모델이 실제로 샘플링하지 않는 형태까지 가중하게 되어 디코더 자체의 규칙에서 벗어난다.
어떻게 쓰나
같은 예측 집합을 두 프로토콜로 읽으면 수치가 갈린다. 8토큰 readout에서 adversarial 0.8221, popular 0.8498, random 0.8713이다. 2토큰 readout은 adversarial에서 yes-rate를 0.760까지 끌어올려 recall 0.9587을 얻지만 precision이 0.6307로 무너지며 F1 0.7608이 된다. 차이 6.13점은 혼동행렬 산술로 정확히 재구성된다. adversarial에서 T=1,174, G=1,318이고, 모델이 낸 " No" 중 실제 negative를 false positive로 뒤집는 비율 ρ_N=660/1,318=0.501, false negative를 true positive로 올리는 비율 φ=264/326=0.810을 넣으면 0.8221과 0.7608이 그대로 나온다. popular는 ρ_N=0.409로 F1 0.7961, random은 ρ_N=0.307로 F1 0.8397이며, φ는 세 split 모두 0.81 근처로 유지된다. 저자들은 이 재구성이 회계 항등식일 뿐 메커니즘을 독립적으로 검증하는 것은 아니라고 명시한다.
전제와 한계
저자들은 LLaVA-1.5-7B POPE를 보고한 논문 6편을 조사했는데, adversarial 이득은 +0.70에서 +10.81 범위였고 6편 중 5편이 6.13점보다 작았다. 베이스라인은 73.54에서 82.07까지 8.53점이나 벌어져 있는데, 어느 논문도 readout 방식을 밝히지 않는다. 저자들 자신의 82.21도 4-bit NF4 양자화에서 나온 값이라 고정밀로 측정된 공개 베이스라인과 나란히 놓을 수 없다고 선을 긋는다. readout과 정밀도가 맞춰지기 전까지 보정된 이득은 계산하지 않는다.
수정된 베이스라인 위에서 저자들이 직접 시도한 추론 시점 보정 9가지(grounding 기반 6개, contrastive 3개)는 모두 0.8221을 넘지 못했다. 3,000개 질문 진단에서는 오답이 정답보다 이미지에 더 많은 어텐션을 끌었다(Cohen's d=-0.46, p=1.4×10⁻²⁴). grounding 기반 보정이 전제하는 것과 반대 방향이다. 4개 VLM(LLaVA-1.6-Mistral-7B, InstructBLIP-Vicuna-7B, mPLUG-Owl2-LLaMA2-7B, Qwen2-VL-7B-Instruct)에 대한 감사에서도 LLaVA-1.5의 ID를 그대로 옮기면 어휘가 다른 두 모델에서 F1이 0.00으로 떨어졌고, 각 모델 토크나이저에서 유도한 readout은 모든 모델·split에서 0.80~0.92를 유지했다. 문자열 파싱은 세 모델에서 이 방식과 소수점 넷째 자리까지 일치했지만, InstructBLIP에서는 디코딩된 텍스트가 정답 토큰으로 시작하지 않아 0.6667 all-yes 바닥으로 붕괴했다.
실무적 권고는 네 가지다. 질문마다 생성 토큰 ID와 디코딩 문자열을 함께 로깅하고, 실제 프롬프트 템플릿 아래에서 yes/no 토큰 집합을 검증하고, 토크나이저에서 유도한 단일 토큰 로짓 readout을 쓰고, 예측 단위 레코드를 공개하라는 것이다. 한계도 분명하다. 주 감사는 체크포인트 하나, 양자화 수준 하나(4-bit NF4, RTX 3070 Ti 8GB에서 9,000질문 76.3분)에서 수행되어 고정밀도에서도 6.13점이 같은지 알 수 없다. 9가지 보정은 adversarial split에서만 돌렸고, 공백 접두 동작은 LLaMA 계열이 공유하지만 구체적 ID는 어휘마다 다르므로 새 모델로 옮길 때 들고 가야 하는 것은 고정된 8토큰 집합이 아니라 진단 절차다.