From b2d02306b9903c17a705d41a0a6ac8fbb94b47df Mon Sep 17 00:00:00 2001 From: hbyang Date: Tue, 15 Sep 2026 11:13:11 +0900 Subject: [PATCH] docs: record No.3/No.4 pre-measurement in the test plan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 사전 측정값을 절차서에 반영한다. 메타 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) --- docs/TEST_PLAN_2026_PHASE2.md | 164 +++++++++++++++++++++++++++------- 1 file changed, 132 insertions(+), 32 deletions(-) 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 필요 여부 및 대체 가능성.