- src: phase_z2 composition/mapper/pipeline/placement_planner/retry, ai_fallback(prompts/schema/validate), mdx_text_atoms 신규 - Front: PipelineTracePanel 신규, FramePanel/SlideCanvas/Home/designAgentApi 등 갱신 + 테스트 4종 추가 - templates/phase_z2: catalog(component_expansion_registry, node_slot_mapping 신규), frames, families, slide_base 갱신 - tests/matching: phase2~26 매칭 실험 스크립트·리포트·온톨로지 전체 (미커밋 진행분) - tests: b4_v4 evidence, task5~28.5 시리즈, regression(imp95 baseline) 등 신규 테스트 대량 추가 - docs/reference: MDX 구조 인벤토리, MDX→Frame 구조 계약 문서 - scripts: mdx 계약/parity/coverage/viewport 체크, gitea comment, run sync 유틸 - .gitignore: tmp*.json, chromedriver, .orchestrator, *.pkl, Front_test* 등 임시/스냅샷 제외 미완성 작업의 보존용 스냅샷 커밋 (2026-07-02) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
6.2 KiB
6.2 KiB
Phase 15 — 왜 키워드만으론 실패하고, AI 구조+의미가 붙으니 성공하는가
🎬 시나리오
MDX03-1 "1. DX 시행을 위한 필수 요건" (기술·사람·자연 3요소)
정답: Frame 13 (3열 구조 "필수조건" — 기술/사람/자연 카드) 오답으로 자주 잡히는 후보: Frame 15 ("정책목표" — 성장·비용절감·안전 4개 카드)
| 정답 | 오답(TF-IDF 1위) |
|---|---|
![]() Frame 13 — 필수조건 |
![]() Frame 15 — 정책목표 |
두 프레임 모두 3~4열 카드 배치 + 건설·DX 관련 용어가 등장 → 단어만 보면 구분이 어려움.
Part 1. 기존 방식 — TF-IDF (키워드 표면만 본다)
TF-IDF Top-3 결과
| 순위 | Frame | 점수 | 결과 |
|---|---|---|---|
| 1위 | 15 | 57% | ✗ 오답(1위) |
| 2위 | 13 | 39% | ⭐ 정답 |
| 3위 | 20 | 25% |
왜 Frame 15가 1위로 잘못 뽑혔나 — 공통 단어 분해
MDX03-1 ↔ Frame 15 (정책목표) — 공통 단어 상위 8개
| 단어 | MDX TF-IDF | Frame 15 TF-IDF | 기여도 |
|---|---|---|---|
| 지식 | 0.045 | 0.057 | 0.0026 |
| 등에 | 0.034 | 0.043 | 0.0015 |
| 능력 | 0.017 | 0.086 | 0.0015 |
| 사용자 | 0.027 | 0.051 | 0.0014 |
| 투자 | 0.036 | 0.031 | 0.0011 |
| 경험 | 0.051 | 0.022 | 0.0011 |
| 프로세스의 | 0.020 | 0.051 | 0.0010 |
| DX | 0.054 | 0.017 | 0.0009 |
MDX03-1 ↔ Frame 13 (필수조건, 정답) — 공통 단어 상위 8개
| 단어 | MDX TF-IDF | Frame 13 TF-IDF | 기여도 |
|---|---|---|---|
| 기술 | 0.050 | 0.052 | 0.0026 |
| 역량 | 0.020 | 0.104 | 0.0021 |
| 투자 | 0.036 | 0.042 | 0.0015 |
| 여건 | 0.020 | 0.069 | 0.0014 |
| 지식 | 0.045 | 0.026 | 0.0012 |
| 지속적인 | 0.034 | 0.030 | 0.0010 |
| 위한 | 0.034 | 0.029 | 0.0010 |
| Process의 | 0.020 | 0.035 | 0.0007 |
TF-IDF가 실패하는 이유
- 단어 표면만 본다: "요건"이라는 단어가 MDX(필수 요건)에도 있고 Frame 15(실행요건)에도 있음. 문맥·의미는 완전 다른데 TF-IDF는 그냥 같은 단어로 취급
- Frame 13의 핵심 단어 "필수조건"이 깨진다: Kiwi 같은 형태소 분석기는 "필수조건"을 "필수" + "조건"으로 분해. MDX는 "필수 요건"을 쓰는데 Frame 13은 "필수조건". "요건" ↔ "조건"은 동의어인데 글자가 달라 매칭이 안 됨
- 구조를 못 본다: "이 MDX는 3요소 병렬 설명이고 Frame 13도 3열 병렬 카드"라는 구조 정보를 TF-IDF는 인지 불가. "몇 열", "어떤 패턴" 정보가 통째로 빠짐
→ 결과: 표면 단어 겹침이 많은 Frame 15가 1위로, 진짜 같은 구조·의미인 Frame 13이 2위로 밀림
Part 2. AI-Meta — AI가 구조와 의미를 개념 집합으로 정규화
AI가 사전에 뽑아둔 개념 집합 (metadata_db.yaml)
MDX03-1 (layout_hint: 3col-parallel)
concepts: ['기술', '디지털', '사람', '역량', '자연', '여건', '투자', '지식', '혁신', '경험', '전문지식', '창의성']
Frame 13 (정답)
concepts: ['기술', '디지털', '사람', '역량', '자연', '여건', '지식', '투자', '필수조건']
Frame 15 (TF-IDF가 1위로 찍었던 오답)
concepts: ['정책', '목표', '실행', '요건', '성장', '비용절감', '안전', '고부가가치']
AI-Meta Top-3 결과
| 순위 | Frame | 점수 | 결과 |
|---|---|---|---|
| 1위 | 13 | 76.2% | ⭐ 정답 |
| 2위 | 27 | 12.7% | |
| 3위 | 04 | 4.8% |
왜 Frame 13이 1위가 됐나 — 개념 교집합
MDX03-1 ∩ Frame 13 (정답)
| 공통 개념 | Figma 출현 빈도 | IDF (희귀도) |
|---|---|---|
| 사람 | 1/32 | 3.47 |
| 여건 | 1/32 | 3.47 |
| 자연 | 1/32 | 3.47 |
| 역량 | 1/32 | 3.47 |
| 지식 | 1/32 | 3.47 |
| 기술 | 2/32 | 2.77 |
| 투자 | 2/32 | 2.77 |
| 디지털 | 5/32 | 1.86 |
공통 8개 (IDF 합 = 24.73)
MDX03-1 ∩ Frame 15 (오답)
공통 개념 0개 — "요건" 같은 표면 단어는 TF-IDF 단계에서 걸리지만, AI는 "요건"이 Frame 15에서는 "정책 실행요건"을 의미하기에 MDX03-1의 "필수 요건" 개념과 다르게 추출함
AI-Meta가 성공하는 이유
- 동의어 정규화: AI가 MDX03-1 본문을 읽고 "필수 요건"을 직접 단어로 쓰지 않고, 그 내용인
[기술, 사람, 자연, 여건, ...]로 개념화. Frame 13도 같은 핵심 개념으로 태그. 표면 단어가 다르더라도 의미 일치 - 구조 힌트 포함:
layout_hint: 3col-parallel이라는 구조 태그가 있어 "3열 병렬 카드"끼리 매칭 선호 가능 (현재 구현은 concepts만 쓰지만 layout_hint도 활용 가능) - 희귀 개념 우대: IDF로 "여건, 사람, 자연, 역량" 같은 이 MDX에만 특징적인 개념은 3.47이라는 큰 가중치. "디지털"처럼 많은 프레임에 나오는 일반어는 1.86으로 낮은 가중치
- 근거가 투명: 어떤 개념이 겹쳐서 몇 점이 됐는지 한눈에 확인 가능. Cross-encoder 같은 블랙박스와 달리 사람이 metadata_db를 직접 편집해서 튜닝 가능
최종 Before/After 비교
| TF-IDF (키워드만) | AI-Meta (키워드+구조+의미) | |
|---|---|---|
| 1위 선택 | Frame 15 ❌ | Frame 13 ⭐ |
| 기준 | 단어 표면 겹침 | 개념 집합 일치 (구조 포함) |
| 동의어 | 못 다룸 ("요건"↔"조건" 실패) | AI가 사전에 같은 개념으로 정규화 |
| 구조 | 무시 | layout_hint로 명시적 태깅 |
| 설명 가능성 | 공통 단어 나열 → 설명 제한적 | 개념 교집합 + IDF → 명확 |
| 튜닝 | corpus 변경하면 IDF 전체 재계산 | metadata_db에 개념 추가/수정으로 조정 |
| 비용 | AI 불필요, 가벼움 | 사전 AI 1회 호출 필요 (이후 저장된 데이터만 사용) |
결론: 키워드 기반은 표면 단어 한계에 막힌다. AI가 구조·의미를 미리 개념 집합으로 정규화하는 순간, 동의어·구조 불일치 문제가 자연스럽게 해결된다.

