_fuzzy_match_all · Plan Union · Keyword-Subgraph Fallback_fuzzy_match_all: 1-node → 최대 10개 multi-seed (substring/base-form/description 매칭), entity split 문제 해소all plan 금지Hard QA debug 결과(V1), hardfilt10 10개 중 5개가 all fallback으로 74K chars 전체 그래프 덤프를 VLM에 전달했다. 나머지 5개도 single-seed entity linking으로 entity split 케이스를 놓쳤다. 이 retrieval infra 문제를 Tier 2(그래프 빌드 수정)보다 먼저 고쳐야 했다 — retrieval이 깨진 상태에서 그래프를 수정해도 개선을 측정할 수 없기 때문.
모든 변경은 src/vqa_pipeline.py에 집중. 외부 API 호출/그래프 구조는 변경 없음.
_fuzzy_match_all (multi-seed entity linking)| 항목 | V1 (이전) | V3 (이후) |
|---|---|---|
| 평균 context 크기 | 37K chars (절반이 74K 덤프) | 9K chars (최대 14K) |
| Fallback 사용 (hardfilt10) | 5/10 | 0/10 |
| Plans per query | 1개 | 2~3개 |
| hardfilt10 정확도 | 10% (1/10) | 20% (2/10) |
| qa_id | V1 | V3 | 핵심 변화 |
|---|---|---|---|
| hardfilt_003 (SEQUENTIAL) | ✗ (all fallback 74K) | ✓ | plan 2개(celery+pan, cutting_board) → red_onion placement 정확히 뽑음 |
| hardfilt_000 (VISUAL-LOCATION) | ✓ | ✓ | 정답 유지 (plan 1→3개, context 12K→9K) |
| hardfilt_001 (COUNT) | ✗ | ✗ | context 74K→14K 축소, 그러나 count 정보 그래프에 없음 |
| hardfilt_004 (COUNT) | ✗ | ✗ | context 74K→9.7K 축소, 시각 카운팅은 그래프 한계 |
| hardfilt_006 (SEQUENTIAL) | ✗ | ✗ | VLM이 plan params에 CUTTING_ACTION_END_SEC placeholder 리터럴로 남기는 버그 |
| hardfilt_007 (COUNT) | ✗ | ✗ | reasoning은 "two" 맞게 추론했지만 final answer letter 오추출 |
| hardfilt_008 (VISUAL-LOCATION) | ✗ | ✗ | 버너 front/back 위치 정보 그래프에 없음 (visual position attribute 부재) |
| 원인 | 해당 질문 | Tier 2 해결 항목 |
|---|---|---|
| Occurrence count 없음 | Q1, Q4, Q7 | Action occurrence_count |
| Container edges 없음 (stored_in) | Q2, Q5 | Container edges |
| Visual position attribute 없음 | Q8 | Visual position |
| Action chain 정보 없음 | Q9 | Action chain tracking |
| Plan placeholder 버그 + entity alias 미처리 | Q6 | Entity alias + prompt fix |
| MCQ 추출 실수 (reasoning은 맞음) | Q7 (부분) | MCQ 추출 개선 |
participant(celery, frying_pan) + participant(cutting_board) 조합으로 정답.Query plan infra +10%p 개선 자체보다 중요한 것은 이제 그래프 빌드 수정의 효과를 정확히 측정할 수 있게 됐다는 점. V1에서 fallback 74K 덤프 상태였으면 Tier 2 수정 후에도 "retrieval 문제인지 그래프 문제인지" 구분 불가. V3로 retrieval을 고정시켰으니 이제 그래프에 정보를 추가하면 바로 정확도에 반영된다.
Tier 2 그래프 빌드 수정 우선순위:
| 항목 | 예상 효과 (hardfilt10) | 해당 질문 |
|---|---|---|
Container edges (stored_in, inside) | +1~2 정답 | Q2, Q5 |
| Action chain tracking (first/last) | +1~2 정답 | Q6 (partial), Q9 |
| Occurrence count | +1~2 정답 | Q1, Q7 |
| Visual position attribute | +1 정답 | Q8 |
| Entity alias edges | +1 정답 | Q6 |
| MCQ 추출 개선 + Prompt bug fix | +0.5~1 정답 | Q6, Q7 |
Frame-agreement filter: gen_hard_qa_filtered.py에 3rd stage 추가 — Frame-300이 GT에 동의하지 않으면 drop. Q7/Q9 같은 hallucination 케이스 제거.
평가 확장: V3 개선 후 hardest10 / L34hard10 재평가 → 3개 hard 벤치마크 일관 비교. 자세한 per-question 분석은 260421-hardfilt10_walkthrough.html 참조.