diff --git a/docs/TEST_PLAN_2026_PHASE2.md b/docs/TEST_PLAN_2026_PHASE2.md
index 62ed120..1622e49 100644
--- a/docs/TEST_PLAN_2026_PHASE2.md
+++ b/docs/TEST_PLAN_2026_PHASE2.md
@@ -1,6 +1,6 @@
# 2-1년차 현장시험 및 검증 — 시험절차서 (초안)
-> 작성: 에이아이오투오 / 초안 일자 2026-09-14
+> 작성: 에이아이오투오 / 초안 일자 2026-09-14 (사전 측정 반영 2026-09-15)
> 선행 시험: 구미전자정보기술원 `GERIR.CE.2511-02.009` (2025-11-19 시험, 3개 항목 PASS)
> 근거: (협약용) 연구개발계획서 PART 2, 2-4. 연구개발 성능지표 및 평가방법 (p.23~24)
@@ -21,11 +21,14 @@
전 차수와 동일한 3개 항목을 2-1년차 목표치로 재시험한다.
-| No | 성능지표 | 단위 | 1-2년차 결과 | **2-1년차 목표** |
-|---|---|---|---|---|
-| 3 | 메타 데이터 추출 (F1-score) | % | 81 (PASS) | **83 이상** |
-| 4 | 표절 여부 판별 정밀도 (Precision) | % | 95.2 (PASS) | **97** |
-| 7 | 요약 성능 (N-gram ROUGE score) | % | 63 (PASS) | **65** |
+| No | 성능지표 | 단위 | 1-2년차 결과 | **2-1년차 목표** | 사전 측정 |
+|---|---|---|---|---|---|
+| 3 | 메타 데이터 추출 (F1-score) | % | 81 (PASS) | **83 이상** | **87.50** |
+| 4 | 표절 여부 판별 정밀도 (Precision) | % | 95.2 (PASS) | **97** | **98.40** |
+| 7 | 요약 성능 (N-gram ROUGE score) | % | 63 (PASS) | **65** | 미측정 |
+
+> 사전 측정은 시험 신청 전 자체 검증값이다. No.3·No.4 는 목표치를 충족하였고,
+> No.7 은 정답셋 미구축으로 측정하지 않았다(6.0 항 참조).
---
@@ -55,20 +58,24 @@
#### 2.3.2 시험 환경 상세 정보
-| 구분 | 사양 | |
-|---|---|---|
-| **시험 PC** | 운영 SW | macOS / Windows |
-| | 시험 도구 | SSH 터미널 |
-| **GPU 서버** | CPU | Intel Xeon |
-| | GPU | NVIDIA A100 80G |
-| | 운영 SW | Ubuntu 22.04 |
-| | 시험 도구 | Python 3.9 (컨테이너), PyTorch 2.2.2+cu121, transformers 4.39.3 |
-| | 구현 모듈 | 메타 데이터 추출 모듈, 표절 여부 판별 모듈, 요약 모듈 |
+| 구분 | 시스템 사양 | 운영 SW 및 시험도구 | 구현 모듈 |
+|---|---|---|---|
+| 시험 PC | 시험관 지참 노트북 | SSH 터미널 | 없음 |
+| **GPU 서버** | GPU : NVIDIA RTX 3090 24G × 2
CPU : Intel i9-12900KS (24 core)
RAM : 125GB | Ubuntu 18.04.6 (호스트)
Docker 24.0.2
CUDA 12.2
**평가 컨테이너 : Python 3.9** | 메타 데이터 추출 모듈,
표절 여부 판별 모듈,
요약 모듈 |
-> **평가환경 고정 근거** — 계획서 p.24 가 항목별 평가환경을 명시하고 있다.
-> No.3·No.4 는 `python 3.9`, No.7 은 `A100 GPU / python 3.9 / pytorch 2.2.2+cu121 /
-> transformers 4.39.3`. 서버 시스템 파이썬 버전과 무관하게 **평가는 전용 컨테이너에서
-> 수행**하여 규격을 충족한다.
+> **평가환경에 관하여** — 계획서 p.24 는 No.3·No.4 를 `python 3.9`, No.7 을
+> `A100 GPU / python 3.9 / pytorch 2.2.2+cu121 / transformers 4.39.3` 로 명시한다.
+> 파이썬 버전은 **호스트와 무관하게 전용 컨테이너에서 고정**하여 충족한다
+> (`Dockerfile.eval`, `Dockerfile.ner`).
+>
+> 시험 서버는 **실제 솔루션이 가동 중인 서버**로 한다. 표절 판별 모듈이 이 서버에서
+> 운영 중이며(`o2o-plagiarism-api`), 계획서가 No.4 를 `GPU 불필요` 로 규정하므로
+> GPU 사양은 결과에 영향을 주지 않는다. 실제로 동일 시험셋을 서로 다른 두 환경
+> (macOS / 본 서버)에서 실행하여 **정밀도·재현율·TP/FP/TN/FN 이 완전히 일치**함을
+> 확인하였다(3.1.6 항).
+>
+> 다만 **No.7 은 계획서가 A100 을 명시**하므로, 해당 항목의 시험 환경은 접수 시
+> 시험기관과 별도 협의한다.
### 2.3.3 평가방법
@@ -160,14 +167,78 @@ docker run --rm -v $PWD:/app -w /app o2o-plagia-eval:py39 \
목표 0.97 대비 여유가 있으며, 오탐 8건 중 7건이 주제 근접 시료에서 발생하여
난이도가 실제 운영 조건을 반영하고 있음을 확인하였다.
+#### 3.1.6 환경 간 재현성 확인
+
+동일 시험셋을 서로 다른 두 환경에서 실행한 결과가 완전히 일치하였다.
+
+| 환경 | precision | recall | TP / FP / TN / FN |
+|---|---|---|---|
+| 개발 PC (macOS, Python 3.14) | 0.9840 | 0.9860 | 493 / 8 / 492 / 7 |
+| **시험 서버 (RTX 3090, Python 3.9 컨테이너)** | **0.9840** | **0.9860** | **493 / 8 / 492 / 7** |
+
+변형 유형별 수치까지 동일하다. 시험셋 또한 난수 시드가 고정되어 있어 양쪽에서
+같은 구성으로 재생성되었다(작성자 290명 → 참조 203 / 질의 87).
+
### 3.2 메타 데이터 추출 F1 (성능지표 #3)
-KLUE NER 학습 11,000건 / 테스트 2,000건으로 상대 평가. 평가 스크립트
-`scripts/eval_metadata_f1.py`, 평가환경 python 3.9.
+#### 3.2.1 시험방법
-> **확인 필요** — 성과물 목록상 요소 추출이 오투오(콘텐츠 요소 분석 모듈)와
-> 고려대(출판콘텐츠추출모델 sLLM) 양쪽에 걸쳐 있다. 측정 주체를 컨소시엄에
-> 확인한 뒤 본 절차서를 확정한다.
+```
+① KLUE 데이터셋의 NER(개체명 인식) 데이터셋을 활용하여 학습 데이터로 모델을 학습
+② 학습되지 않은 테스트 데이터를 활용하여 개발된 모델에 대한 상대 평가 진행
+```
+
+#### 3.2.2 모델 및 데이터
+
+전 차수와 동일한 과제 설정이며, 사전학습 모델만 상위 모델로 교체하였다.
+
+| 구분 | 1-2년차 | **2-1년차** |
+|---|---|---|
+| 사전학습 모델 | `klue/bert-base` | **`klue/roberta-large`** |
+| 구조 | TokenClassification, 13 labels | 동일 |
+| 태그 | DT / LC / OG / PS / QT / TI (BIO) | 동일 |
+| 학습 데이터 | 약 11,000건 | **21,008건 (KLUE NER 전체 학습셋)** |
+| 평가 데이터 | 2,000여건 | 5,000건 (KLUE NER validation) |
+
+#### 3.2.3 시현 절차
+
+```bash
+# 학습 + 평가 (약 40분)
+docker run --rm --gpus all -v $PWD:/w -w /w -e HF_HOME=/w/.cache/hf o2o-ner:latest \
+ python scripts/train_klue_ner.py --model klue/roberta-large \
+ --out-dir data/models/klue_ner_large --epochs 3 --batch-size 8 --lr 1e-5
+
+# 학습 완료 모델로 평가만 재실행
+docker run --rm --gpus all -v $PWD:/w -w /w o2o-ner:latest \
+ python scripts/train_klue_ner.py --eval-only --out-dir data/models/klue_ner_large
+```
+
+산출물: `data/models/klue_ner_large/result.json`
+
+#### 3.2.4 사전 측정 결과 (자체 검증)
+
+| 모델 | micro avg F1 | 비고 |
+|---|---|---|
+| 전 차수 (`klue/bert-base`, 학습 11,479건) | 0.8113 | 성적서 8p |
+| `klue/bert-base` (학습 전체 21,008건) | 0.8324 | 구현 재현 확인 |
+| **`klue/roberta-large`** | **0.8750** | **본 차수 적용** |
+
+태그별 F1:
+
+| 태그 | 전 차수 | **본 차수** | support |
+|---|---|---|---|
+| DT | 0.8459 | **0.9065** | 7,670 |
+| LC | 0.7563 | **0.8209** | 6,997 |
+| OG | 0.7862 | **0.8588** | 11,492 |
+| PS | 0.8641 | **0.9105** | 12,397 |
+| QT | 0.9882 | 0.9590 | 7,530 |
+| TI | 0.7674 | **0.8308** | 16,674 |
+
+> **구현 일치 확인** — `support` 합계 62,760 이 전 차수 성적서(8p)와 정확히 일치한다.
+> 동일한 평가 데이터에 동일한 방식으로 측정하였음을 의미한다.
+>
+> `klue/bert-base` 로도 0.8324 로 목표를 충족하나 여유가 0.24%p 에 불과해 재학습 시
+> 난수에 따라 미달할 수 있어, 4.5%p 여유가 확보되는 `roberta-large` 를 적용한다.
### 3.3 요약 성능 ROUGE (성능지표 #7)
@@ -210,13 +281,42 @@ KLUE NER 학습 11,000건 / 테스트 2,000건으로 상대 평가. 평가 스
## 6.0 준비 현황
+### 6.1 항목별 요약
+
+| No | 지표 | 목표 | 사전 측정 | 상태 |
+|---|---|---|---|---|
+| 3 | 메타 데이터 추출 F1 | 83 | **87.50** | **시험 가능** |
+| 4 | 표절 판별 정밀도 | 97 | **98.40** | **시험 가능** |
+| 7 | 요약 ROUGE | 65 | 미측정 | **미준비** |
+
+### 6.2 세부 현황
+
| 항목 | 상태 |
|---|---|
-| 표절 시험셋 1,000건 | **완료** (`data/eval/testset_v2/`) |
-| 표절 평가 스크립트 | **완료** (`scripts/run_precision_eval.py`) |
-| 평가 전용 컨테이너 (python 3.9) | **완료** (`Dockerfile.eval`) |
-| 표절 사전 측정 | **완료** (0.9840) |
-| 메타 추출 — 측정 주체 확인 | 미완 (컨소시엄 문의 필요) |
-| 요약 정답셋 — 파일럿 20건 | 미완 |
-| 요약 정답셋 — 본 구축 300건 | 미완 |
-| 시험 서버 확정 (A100 환경) | 미완 |
+| **표절(No.4)** | |
+| 시험셋 1,000건 | 완료 (`data/eval/testset_v2/`, 시드 고정) |
+| 평가 스크립트 | 완료 (`scripts/run_precision_eval.py`) |
+| 평가 컨테이너 (python 3.9) | 완료 (`Dockerfile.eval`) |
+| 사전 측정 | 완료 (**0.9840**) |
+| 환경 간 재현성 | 완료 (두 환경 결과 완전 일치) |
+| **메타 추출(No.3)** | |
+| 학습·평가 스크립트 | 완료 (`scripts/train_klue_ner.py`) |
+| 학습 컨테이너 (GPU) | 완료 (`Dockerfile.ner`) |
+| 전 차수 구현 재현 | 완료 (support 62,760 일치) |
+| 사전 측정 | 완료 (**0.8750**) |
+| 측정 주체 확인 | **미완** — 성과물 목록상 요소 추출이 오투오와 고려대 양쪽에 걸쳐 있어 컨소시엄 확인 필요 |
+| **요약(No.7)** | |
+| 평가 스크립트 | 완료 (`scripts/eval_rouge.py`) |
+| 정답셋 파일럿 20건 | **미완** |
+| 정답셋 본 구축 300건 | **미완** |
+| 지표 정의 확인 | **미완** — 계획서는 ROUGE recall, 전 차수 코드는 f1 반환. 정의 일치 필요 |
+| 전 차수 방식 검토 | **미완** — 전 차수 로그에 `optimal_60_modification` / `success_rate 0.15` 기록. 목표치에 맞춘 요약문 수정으로 보여 그대로 승계하기 어려움 |
+| **공통** | |
+| 시험 서버 확정 | 표절·메타는 본 서버로 가능. No.7 은 A100 명시로 별도 협의 |
+
+### 6.3 다음 작업
+
+1. **요약 파일럿 20건** — 사람 간 일치도(IAA)로 사람 상한을 먼저 측정한다.
+ 상한이 65 미만이면 300건 구축 전에 규격 조정을 협의해야 한다.
+2. **No.3 측정 주체 확인** — 컨소시엄 문의.
+3. **No.7 시험 환경 협의** — A100 필요 여부 및 대체 가능성.