wip: phase_z2 evidence 파이프라인 + matching 실험(phase2~26) + 프론트 trace 패널 진행분 스냅샷
- 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>
This commit is contained in:
@@ -0,0 +1,404 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Phase 15 — 키워드 실패 → AI 구조+의미 성공</title>
|
||||
|
||||
<style>
|
||||
body {
|
||||
font-family: -apple-system, 'Segoe UI', 'Malgun Gothic', sans-serif;
|
||||
max-width: 1800px;
|
||||
margin: 0 auto;
|
||||
padding: 24px;
|
||||
line-height: 1.6;
|
||||
color: #1e293b;
|
||||
background: #f8fafc;
|
||||
}
|
||||
h1 { color: #1e293b; border-bottom: 3px solid #2563eb; padding-bottom: 12px; }
|
||||
h2 {
|
||||
color: #1a365d;
|
||||
background: #e0e7ff;
|
||||
padding: 10px 16px;
|
||||
border-radius: 6px;
|
||||
margin-top: 32px;
|
||||
}
|
||||
hr { border: none; border-top: 1px solid #cbd5e1; margin: 24px 0; }
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
width: 100%;
|
||||
margin: 12px 0 24px;
|
||||
background: #fff;
|
||||
box-shadow: 0 2px 6px rgba(0,0,0,0.05);
|
||||
}
|
||||
th, td {
|
||||
border: 1px solid #e2e8f0;
|
||||
padding: 10px;
|
||||
text-align: left;
|
||||
vertical-align: top;
|
||||
}
|
||||
th {
|
||||
background: #1e293b;
|
||||
color: #fff;
|
||||
font-weight: 700;
|
||||
text-align: center;
|
||||
width: 120px;
|
||||
}
|
||||
td:first-child {
|
||||
background: #f1f5f9;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
width: 120px;
|
||||
}
|
||||
td img {
|
||||
max-width: 260px;
|
||||
height: auto;
|
||||
display: block;
|
||||
margin: 0 auto 6px;
|
||||
border: 1px solid #cbd5e1;
|
||||
border-radius: 4px;
|
||||
}
|
||||
td br + strong { color: #2563eb; }
|
||||
</style>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<h1>Phase 15 — 왜 키워드만으론 실패하고, AI 구조+의미가 붙으니 성공하는가</h1>
|
||||
<h2>🎬 시나리오</h2>
|
||||
<p><strong>MDX03-1</strong> "1. DX 시행을 위한 필수 요건" (기술·사람·자연 3요소)</p>
|
||||
<p><strong>정답</strong>: Frame 13 (3열 구조 "필수조건" — 기술/사람/자연 카드)
|
||||
<strong>오답으로 자주 잡히는 후보</strong>: Frame 15 ("정책목표" — 성장·비용절감·안전 4개 카드)</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>정답</th>
|
||||
<th>오답(TF-IDF 1위)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><img alt="13" src="../../data/figma_previews/13.png" /><br><strong>Frame 13</strong> — 필수조건</td>
|
||||
<td><img alt="15" src="../../data/figma_previews/15.png" /><br><strong>Frame 15</strong> — 정책목표</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>두 프레임 모두 <strong>3~4열 카드 배치</strong> + 건설·DX 관련 용어가 등장 → 단어만 보면 구분이 어려움.</p>
|
||||
<hr />
|
||||
<h1>Part 1. 기존 방식 — TF-IDF (키워드 표면만 본다)</h1>
|
||||
<h3>TF-IDF Top-3 결과</h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>순위</th>
|
||||
<th>Frame</th>
|
||||
<th>점수</th>
|
||||
<th>결과</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>1위</td>
|
||||
<td><strong>15</strong></td>
|
||||
<td>57%</td>
|
||||
<td>✗ 오답(1위)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2위</td>
|
||||
<td><strong>13</strong></td>
|
||||
<td>39%</td>
|
||||
<td>⭐ 정답</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>3위</td>
|
||||
<td><strong>20</strong></td>
|
||||
<td>25%</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>왜 Frame 15가 1위로 잘못 뽑혔나 — 공통 단어 분해</h3>
|
||||
<p><strong>MDX03-1 ↔ Frame 15 (정책목표) — 공통 단어 상위 8개</strong></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>단어</th>
|
||||
<th>MDX TF-IDF</th>
|
||||
<th>Frame 15 TF-IDF</th>
|
||||
<th>기여도</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>지식</td>
|
||||
<td>0.045</td>
|
||||
<td>0.057</td>
|
||||
<td>0.0026</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>등에</td>
|
||||
<td>0.034</td>
|
||||
<td>0.043</td>
|
||||
<td>0.0015</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>능력</td>
|
||||
<td>0.017</td>
|
||||
<td>0.086</td>
|
||||
<td>0.0015</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>사용자</td>
|
||||
<td>0.027</td>
|
||||
<td>0.051</td>
|
||||
<td>0.0014</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>투자</td>
|
||||
<td>0.036</td>
|
||||
<td>0.031</td>
|
||||
<td>0.0011</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>경험</td>
|
||||
<td>0.051</td>
|
||||
<td>0.022</td>
|
||||
<td>0.0011</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>프로세스의</td>
|
||||
<td>0.020</td>
|
||||
<td>0.051</td>
|
||||
<td>0.0010</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>DX</td>
|
||||
<td>0.054</td>
|
||||
<td>0.017</td>
|
||||
<td>0.0009</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><strong>MDX03-1 ↔ Frame 13 (필수조건, 정답) — 공통 단어 상위 8개</strong></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>단어</th>
|
||||
<th>MDX TF-IDF</th>
|
||||
<th>Frame 13 TF-IDF</th>
|
||||
<th>기여도</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>기술</td>
|
||||
<td>0.050</td>
|
||||
<td>0.052</td>
|
||||
<td>0.0026</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>역량</td>
|
||||
<td>0.020</td>
|
||||
<td>0.104</td>
|
||||
<td>0.0021</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>투자</td>
|
||||
<td>0.036</td>
|
||||
<td>0.042</td>
|
||||
<td>0.0015</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>여건</td>
|
||||
<td>0.020</td>
|
||||
<td>0.069</td>
|
||||
<td>0.0014</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>지식</td>
|
||||
<td>0.045</td>
|
||||
<td>0.026</td>
|
||||
<td>0.0012</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>지속적인</td>
|
||||
<td>0.034</td>
|
||||
<td>0.030</td>
|
||||
<td>0.0010</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>위한</td>
|
||||
<td>0.034</td>
|
||||
<td>0.029</td>
|
||||
<td>0.0010</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Process의</td>
|
||||
<td>0.020</td>
|
||||
<td>0.035</td>
|
||||
<td>0.0007</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>TF-IDF가 실패하는 이유</h3>
|
||||
<ol>
|
||||
<li><strong>단어 표면만 본다</strong>: "요건"이라는 단어가 MDX(필수 <strong>요건</strong>)에도 있고 Frame 15(실행<strong>요건</strong>)에도 있음. 문맥·의미는 완전 다른데 TF-IDF는 그냥 같은 단어로 취급</li>
|
||||
<li><strong>Frame 13의 핵심 단어 "필수조건"이 깨진다</strong>: Kiwi 같은 형태소 분석기는 "필수조건"을 "필수" + "조건"으로 분해. MDX는 "필수 <strong>요건</strong>"을 쓰는데 Frame 13은 "필수<strong>조건</strong>". "요건" ↔ "조건"은 동의어인데 글자가 달라 매칭이 안 됨</li>
|
||||
<li><strong>구조를 못 본다</strong>: "이 MDX는 3요소 병렬 설명이고 Frame 13도 3열 병렬 카드"라는 구조 정보를 TF-IDF는 인지 불가. "몇 열", "어떤 패턴" 정보가 통째로 빠짐</li>
|
||||
</ol>
|
||||
<p>→ 결과: 표면 단어 겹침이 많은 Frame 15가 1위로, 진짜 같은 구조·의미인 Frame 13이 2위로 밀림</p>
|
||||
<hr />
|
||||
<h1>Part 2. AI-Meta — AI가 구조와 의미를 개념 집합으로 정규화</h1>
|
||||
<h3>AI가 사전에 뽑아둔 개념 집합 (metadata_db.yaml)</h3>
|
||||
<p><strong>MDX03-1</strong> (layout_hint: <code>3col-parallel</code>)</p>
|
||||
<p><code>yaml
|
||||
concepts: ['기술', '디지털', '사람', '역량', '자연', '여건', '투자', '지식', '혁신', '경험', '전문지식', '창의성']</code></p>
|
||||
<p><strong>Frame 13</strong> (정답)</p>
|
||||
<p><code>yaml
|
||||
concepts: ['기술', '디지털', '사람', '역량', '자연', '여건', '지식', '투자', '필수조건']</code></p>
|
||||
<p><strong>Frame 15</strong> (TF-IDF가 1위로 찍었던 오답)</p>
|
||||
<p><code>yaml
|
||||
concepts: ['정책', '목표', '실행', '요건', '성장', '비용절감', '안전', '고부가가치']</code></p>
|
||||
<h3>AI-Meta Top-3 결과</h3>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>순위</th>
|
||||
<th>Frame</th>
|
||||
<th>점수</th>
|
||||
<th>결과</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>1위</td>
|
||||
<td><strong>13</strong></td>
|
||||
<td>76.2%</td>
|
||||
<td>⭐ 정답</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>2위</td>
|
||||
<td><strong>27</strong></td>
|
||||
<td>12.7%</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>3위</td>
|
||||
<td><strong>04</strong></td>
|
||||
<td>4.8%</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3>왜 Frame 13이 1위가 됐나 — 개념 교집합</h3>
|
||||
<p><strong>MDX03-1 ∩ Frame 13 (정답)</strong></p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>공통 개념</th>
|
||||
<th>Figma 출현 빈도</th>
|
||||
<th>IDF (희귀도)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>사람</strong></td>
|
||||
<td>1/32</td>
|
||||
<td>3.47</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>여건</strong></td>
|
||||
<td>1/32</td>
|
||||
<td>3.47</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>자연</strong></td>
|
||||
<td>1/32</td>
|
||||
<td>3.47</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>역량</strong></td>
|
||||
<td>1/32</td>
|
||||
<td>3.47</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>지식</strong></td>
|
||||
<td>1/32</td>
|
||||
<td>3.47</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>기술</strong></td>
|
||||
<td>2/32</td>
|
||||
<td>2.77</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>투자</strong></td>
|
||||
<td>2/32</td>
|
||||
<td>2.77</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>디지털</strong></td>
|
||||
<td>5/32</td>
|
||||
<td>1.86</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><strong>공통 8개 (IDF 합 = 24.73)</strong></p>
|
||||
<p><strong>MDX03-1 ∩ Frame 15 (오답)</strong></p>
|
||||
<p><strong>공통 개념 0개</strong> — "요건" 같은 표면 단어는 TF-IDF 단계에서 걸리지만, AI는 "요건"이 Frame 15에서는 "정책 실행요건"을 의미하기에 MDX03-1의 "필수 요건" 개념과 다르게 추출함</p>
|
||||
<h3>AI-Meta가 성공하는 이유</h3>
|
||||
<ol>
|
||||
<li><strong>동의어 정규화</strong>: AI가 MDX03-1 본문을 읽고 "필수 요건"을 직접 단어로 쓰지 않고, 그 내용인 <code>[기술, 사람, 자연, 여건, ...]</code>로 개념화. Frame 13도 같은 핵심 개념으로 태그. <strong>표면 단어가 다르더라도 의미 일치</strong></li>
|
||||
<li><strong>구조 힌트 포함</strong>: <code>layout_hint: 3col-parallel</code>이라는 구조 태그가 있어 "3열 병렬 카드"끼리 매칭 선호 가능 (현재 구현은 concepts만 쓰지만 layout_hint도 활용 가능)</li>
|
||||
<li><strong>희귀 개념 우대</strong>: IDF로 "여건, 사람, 자연, 역량" 같은 이 MDX에만 특징적인 개념은 3.47이라는 큰 가중치. "디지털"처럼 많은 프레임에 나오는 일반어는 1.86으로 낮은 가중치</li>
|
||||
<li><strong>근거가 투명</strong>: 어떤 개념이 겹쳐서 몇 점이 됐는지 한눈에 확인 가능. Cross-encoder 같은 블랙박스와 달리 사람이 metadata_db를 직접 편집해서 튜닝 가능</li>
|
||||
</ol>
|
||||
<hr />
|
||||
<h1>최종 Before/After 비교</h1>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>TF-IDF (키워드만)</th>
|
||||
<th>AI-Meta (키워드+구조+의미)</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>1위 선택</td>
|
||||
<td>Frame 15 ❌</td>
|
||||
<td>Frame 13 ⭐</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>기준</td>
|
||||
<td>단어 표면 겹침</td>
|
||||
<td>개념 집합 일치 (구조 포함)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>동의어</td>
|
||||
<td>못 다룸 ("요건"↔"조건" 실패)</td>
|
||||
<td>AI가 사전에 같은 개념으로 정규화</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>구조</td>
|
||||
<td>무시</td>
|
||||
<td>layout_hint로 명시적 태깅</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>설명 가능성</td>
|
||||
<td>공통 단어 나열 → 설명 제한적</td>
|
||||
<td>개념 교집합 + IDF → 명확</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>튜닝</td>
|
||||
<td>corpus 변경하면 IDF 전체 재계산</td>
|
||||
<td>metadata_db에 개념 추가/수정으로 조정</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>비용</td>
|
||||
<td>AI 불필요, 가벼움</td>
|
||||
<td>사전 AI 1회 호출 필요 (이후 저장된 데이터만 사용)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p><strong>결론</strong>: 키워드 기반은 표면 단어 한계에 막힌다. AI가 구조·의미를 미리 개념 집합으로 정규화하는 순간, 동의어·구조 불일치 문제가 자연스럽게 해결된다.</p>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user