docs: record No.3/No.4 pre-measurement in the test plan

사전 측정값을 절차서에 반영한다. 메타 F1 0.8750(목표 83), 표절 정밀도
0.9840(목표 97) 로 두 항목은 시험 가능 상태다. 요약은 정답셋이 없어 미측정이다.

시험 환경표를 실제 시험 서버 사양으로 바꾼다. 계획서가 No.4 를 GPU 불필요로
규정하고, 동일 시험셋을 macOS 와 시험 서버에서 돌려 정밀도·재현율·혼동행렬이
완전히 일치함을 확인했으므로 GPU 사양은 결과에 영향을 주지 않는다. 다만 No.7 은
계획서가 A100 을 명시하므로 해당 항목만 별도 협의 대상으로 남긴다.

No.3 절을 새로 쓴다. 전 차수는 저장소의 요소 추출기가 아니라 KLUE NER 토큰
분류였고, support 62,760 이 성적서와 일치해 같은 측정임을 확인했다. bert-base
로도 0.8324 로 목표를 넘지만 여유가 0.24%p 라 재학습 시 미달할 수 있어
roberta-large 를 적용한다.

요약 항목에는 남은 위험을 명시한다. 계획서는 ROUGE recall 인데 전 차수 코드는
f1 을 반환했고, 로그의 optimal_60_modification / success_rate 0.15 는 목표치에
맞춰 요약문을 수정한 흔적으로 보여 그대로 승계하기 어렵다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
hbyang 2026-09-15 11:13:11 +09:00
parent c97e0c296e
commit b2d02306b9

View File

@ -1,6 +1,6 @@
# 2-1년차 현장시험 및 검증 — 시험절차서 (초안) # 2-1년차 현장시험 및 검증 — 시험절차서 (초안)
> 작성: 에이아이오투오 / 초안 일자 2026-09-14 > 작성: 에이아이오투오 / 초안 일자 2026-09-14 (사전 측정 반영 2026-09-15)
> 선행 시험: 구미전자정보기술원 `GERIR.CE.2511-02.009` (2025-11-19 시험, 3개 항목 PASS) > 선행 시험: 구미전자정보기술원 `GERIR.CE.2511-02.009` (2025-11-19 시험, 3개 항목 PASS)
> 근거: (협약용) 연구개발계획서 PART 2, 2-4. 연구개발 성능지표 및 평가방법 (p.23~24) > 근거: (협약용) 연구개발계획서 PART 2, 2-4. 연구개발 성능지표 및 평가방법 (p.23~24)
@ -21,11 +21,14 @@
전 차수와 동일한 3개 항목을 2-1년차 목표치로 재시험한다. 전 차수와 동일한 3개 항목을 2-1년차 목표치로 재시험한다.
| No | 성능지표 | 단위 | 1-2년차 결과 | **2-1년차 목표** | | No | 성능지표 | 단위 | 1-2년차 결과 | **2-1년차 목표** | 사전 측정 |
|---|---|---|---|---| |---|---|---|---|---|---|
| 3 | 메타 데이터 추출 (F1-score) | % | 81 (PASS) | **83 이상** | | 3 | 메타 데이터 추출 (F1-score) | % | 81 (PASS) | **83 이상** | **87.50** |
| 4 | 표절 여부 판별 정밀도 (Precision) | % | 95.2 (PASS) | **97** | | 4 | 표절 여부 판별 정밀도 (Precision) | % | 95.2 (PASS) | **97** | **98.40** |
| 7 | 요약 성능 (N-gram ROUGE score) | % | 63 (PASS) | **65** | | 7 | 요약 성능 (N-gram ROUGE score) | % | 63 (PASS) | **65** | 미측정 |
> 사전 측정은 시험 신청 전 자체 검증값이다. No.3·No.4 는 목표치를 충족하였고,
> No.7 은 정답셋 미구축으로 측정하지 않았다(6.0 항 참조).
--- ---
@ -55,20 +58,24 @@
#### 2.3.2 시험 환경 상세 정보 #### 2.3.2 시험 환경 상세 정보
| 구분 | 사양 | | | 구분 | 시스템 사양 | 운영 SW 및 시험도구 | 구현 모듈 |
|---|---|---| |---|---|---|---|
| **시험 PC** | 운영 SW | macOS / Windows | | 시험 PC | 시험관 지참 노트북 | SSH 터미널 | 없음 |
| | 시험 도구 | SSH 터미널 | | **GPU 서버** | GPU : NVIDIA RTX 3090 24G × 2<br>CPU : Intel i9-12900KS (24 core)<br>RAM : 125GB | Ubuntu 18.04.6 (호스트)<br>Docker 24.0.2<br>CUDA 12.2<br>**평가 컨테이너 : Python 3.9** | 메타 데이터 추출 모듈,<br>표절 여부 판별 모듈,<br>요약 모듈 |
| **GPU 서버** | CPU | Intel Xeon |
| | GPU | NVIDIA A100 80G |
| | 운영 SW | Ubuntu 22.04 |
| | 시험 도구 | Python 3.9 (컨테이너), PyTorch 2.2.2+cu121, transformers 4.39.3 |
| | 구현 모듈 | 메타 데이터 추출 모듈, 표절 여부 판별 모듈, 요약 모듈 |
> **평가환경 고정 근거** — 계획서 p.24 가 항목별 평가환경을 명시하고 있다. > **평가환경에 관하여** — 계획서 p.24 는 No.3·No.4 를 `python 3.9`, No.7 을
> No.3·No.4 는 `python 3.9`, No.7 은 `A100 GPU / python 3.9 / pytorch 2.2.2+cu121 / > `A100 GPU / python 3.9 / pytorch 2.2.2+cu121 / transformers 4.39.3` 로 명시한다.
> 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 평가방법 ### 2.3.3 평가방법
@ -160,14 +167,78 @@ docker run --rm -v $PWD:/app -w /app o2o-plagia-eval:py39 \
목표 0.97 대비 여유가 있으며, 오탐 8건 중 7건이 주제 근접 시료에서 발생하여 목표 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) ### 3.2 메타 데이터 추출 F1 (성능지표 #3)
KLUE NER 학습 11,000건 / 테스트 2,000건으로 상대 평가. 평가 스크립트 #### 3.2.1 시험방법
`scripts/eval_metadata_f1.py`, 평가환경 python 3.9.
> **확인 필요** — 성과물 목록상 요소 추출이 오투오(콘텐츠 요소 분석 모듈)와 ```
> 고려대(출판콘텐츠추출모델 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) ### 3.3 요약 성능 ROUGE (성능지표 #7)
@ -210,13 +281,42 @@ KLUE NER 학습 11,000건 / 테스트 2,000건으로 상대 평가. 평가 스
## 6.0 준비 현황 ## 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/`) | | **표절(No.4)** | |
| 표절 평가 스크립트 | **완료** (`scripts/run_precision_eval.py`) | | 시험셋 1,000건 | 완료 (`data/eval/testset_v2/`, 시드 고정) |
| 평가 전용 컨테이너 (python 3.9) | **완료** (`Dockerfile.eval`) | | 평가 스크립트 | 완료 (`scripts/run_precision_eval.py`) |
| 표절 사전 측정 | **완료** (0.9840) | | 평가 컨테이너 (python 3.9) | 완료 (`Dockerfile.eval`) |
| 메타 추출 — 측정 주체 확인 | 미완 (컨소시엄 문의 필요) | | 사전 측정 | 완료 (**0.9840**) |
| 요약 정답셋 — 파일럿 20건 | 미완 | | 환경 간 재현성 | 완료 (두 환경 결과 완전 일치) |
| 요약 정답셋 — 본 구축 300건 | 미완 | | **메타 추출(No.3)** | |
| 시험 서버 확정 (A100 환경) | 미완 | | 학습·평가 스크립트 | 완료 (`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 필요 여부 및 대체 가능성.