# 2-1년차 현장시험 및 검증 — 시험절차서 (초안) > 작성: 에이아이오투오 / 초안 일자 2026-09-14 (사전 측정 반영 2026-09-15) > 선행 시험: 구미전자정보기술원 `GERIR.CE.2511-02.009` (2025-11-19 시험, 3개 항목 PASS) > 근거: (협약용) 연구개발계획서 PART 2, 2-4. 연구개발 성능지표 및 평가방법 (p.23~24) --- ## 1.0 일반사항 ### 1.1 제품 정보 | 구분 | 내용 | |---|---| | 시 료 명 | 출판콘텐츠 분석 및 공유 기술용 AI 모델 | | 모 델 명 | `ai_publish_o2o.v2` | | 시 료 수 | 1 | | 성적서 용도 | 솔루션 성능 결과 증빙용 | ### 1.2 시험 항목 — 3개 항목 전 차수와 동일한 3개 항목을 2-1년차 목표치로 재시험한다. | 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 항 참조). --- ## 2.0 시험 방법 ### 2.1 시험 규격 - 시험규격: 시험절차서 기준 - 시험항목: 시험절차서 3개 항목 ### 2.2 시험 장비 정보 | 구분 | 사용 장비 | 용도 | |---|---|---| | 1 | 노트북 (시험관 지참) | 코드 시현 서버 접속용 | | 2 | GPU server | 코드 시현용 | ### 2.3 시험 환경 #### 2.3.1 시험 구성 ``` ① 실제 솔루션에 활용되는 AI 모델들을 평가에 사용 ② 시험용 PC 로 실제 AI 모델이 가동중인 GPU 서버에 접속 ③ 성능 평가를 GPU 서버에서 진행 ``` #### 2.3.2 시험 환경 상세 정보 | 구분 | 시스템 사양 | 운영 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` 로 명시한다. > 파이썬 버전은 **호스트와 무관하게 전용 컨테이너에서 고정**하여 충족한다 > (`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 평가방법 | 순번 | 평가지표 (성능지표) | 평가방법 | 비고 | |---|---|---|---| | 1 | 메타 데이터 추출
(F1-score) | KLUE 데이터셋의 NER 데이터셋을 활용하여, 약 11,000개의 학습 데이터로 개발된 모델을 학습시키고, 2,000여개의 테스트 데이터를 활용하여 개발된 모델에 대한 상대 평가 진행 | 과제 성능지표 3번에 해당 | | 2 | 표절 여부 판별 정밀도
(precision) | 자체 제작된 실제 표절 글과, 표절이 아닌 글을 Classification 하여, precision 계산 | 과제 성능지표 4번에 해당 | | 3 | 요약 성능
(N-gram ROUGE score) | 자체 제작된 요약 데이터셋을, 요약 모델에 테스트하여 N-gram ROUGE score 계산 | 과제 성능지표 7번에 해당 | --- ## 3.0 시험 항목별 세부 절차 ### 3.1 표절 여부 판별 정밀도 (성능지표 #4) #### 3.1.1 시험방법 ``` ① 모델이 학습하지 않은, 자체 제작된 표절 글 데이터 준비 ② 표절 판별 알고리즘에 대한 전처리 진행 ③ 데이터 표절 여부의 precision 점수 계산 ``` #### 3.1.2 시험 데이터 구성 — 총 1,000건 모델이 학습하지 않은 데이터임을 **작성자 단위 분리**로 보장한다. ``` 전체 작성자 290명 ├─ 203명 → 참조 코퍼스(검색 인덱스)에 적재 └─ 87명 → 시험 질의로만 사용 (인덱스에 미포함) ``` | 라벨 | 건수 | 구성 | |---|---|---| | 표절 | 500 | 참조 코퍼스의 글을 변형
완전복제 100 / 부분복제 100 / 문장재배열 100 / 어휘치환 150 / 축약 50 | | 비표절 | 500 | 인덱스 미포함 작성자의 글 원문
**주제 근접 시료 150** + 일반 350 | - **주제 근접 시료(하드 네거티브) 150건**: 참조 코퍼스와 어휘가 많이 겹치는 글. 실제 오탐이 발생하는 유형이므로 난이도 확보를 위해 의도적으로 포함한다. - **대필(인칭 전환) 유형은 제외**: 같은 사건을 당사자와 대필자가 각각 기술한 글은 원문이 그대로 남으나, 표절 여부가 계약·동의로 갈려 텍스트만으로 판정할 수 없다. - **재현성**: 구성 비율과 난수 시드를 `manifest.json` 에 사전 기록하여, 동일 시험셋을 재생성할 수 있다. #### 3.1.3 판정 조건 | 조건 | 기준값 | | |---|---|---| | ① 결합유사도 | ≥ 0.65 | 어휘 0.45 + 표현 0.30 + 문자 0.15 + 모티프 0.10 | | ② **최장 연속 일치** | **≥ 35자 (9어절)** | **필수 조건** | | ③ 문서 단위 커버리지 | ≥ 0.30 | | ②를 필수로 둔다. 유사도만 높고 그대로 겹친 구간이 없는 후보는 채택하지 않는다. 같은 주제를 다룬 글은 의미 유사도가 함께 상승하기 때문이다. **35자 산출 근거** — 어절 기준 3~9 스윕 및 문서쌍 148,240 쌍 전수 대조 결과, 4어절 이하는 임의 조합의 99% 이상에서 겹침이 발생하여 신호로 쓸 수 없고, 9어절부터 잔존하는 겹침은 실제 유사 원고로 확인되었다. #### 3.1.4 시현 절차 ```bash # ① 시험셋 구성 확인 cat data/eval/testset_v2/manifest.json wc -l data/eval/testset_v2/pairs.jsonl # 1000 # ② 판정 기준 확인 python -c "from app.core.config import Settings; s=Settings(); print( s.persistent_similarity_threshold, s.persistent_min_exact_span, s.persistent_min_coverage, s.require_exact_span_evidence)" # ③ 평가 실행 (약 10분) docker run --rm -v $PWD:/app -w /app o2o-plagia-eval:py39 \ python scripts/run_precision_eval.py --testset data/eval/testset_v2 ``` 산출물: `data/eval/testset_v2/result.json` (precision / recall / F1 / 변형 유형별 분해) #### 3.1.5 사전 측정 결과 (자체 검증) | 항목 | 수치 | |---|---| | 정밀도 (precision) | **0.9840** | | 재현율 (recall) | 0.9860 | | F1 | 0.9850 | | TP / FP / TN / FN | 493 / 8 / 492 / 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.1 시험방법 ``` ① 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.1 시험방법 ``` ① 자체 제작된 요약 데이터셋 준비 ② 요약 모델에 학습되지 않은 데이터 1,000건에 대해 모델 요약 진행 ③ 생성된 결과물에 대한 N-ROUGE score 측정 ``` 평가 스크립트 `scripts/eval_rouge.py`. ROUGE 는 **recall 기준**으로 계산한다 (수식 분모가 참조 n-gram 수). 다중 참조를 전제한다. > **선행 과제** — 정답셋 본 구축 전, 파일럿 20건으로 사람 간 일치도(IAA)를 측정하여 > 사람 상한을 먼저 확인한다(`eval_rouge.py --iaa`). 상한이 목표 65 미만이면 규격 > 조정이 필요하며, 파일럿 단계에서의 조정은 추가 비용이 발생하지 않는다. --- ## 4.0 시험 데이터 게재에 관한 요청사항 전 차수 성적서에는 시험 데이터 원문 예시가 게재되었다(성적서 9p, 13p). 본 차수 표절 항목의 시험 데이터는 개인 자서전을 기반으로 하므로, **성적서 게재용 예시는 익명화가 완료된 생활수기 자료로 대체**하여 제출한다. 접수 시 시험기관에 함께 요청한다. --- ## 5.0 일정 (안) | 단계 | 내용 | 비고 | |---|---|---| | 접수 | 시험 신청 및 시험절차서 제출 | | | 사전 협의 | 시험 항목·환경·데이터 게재 범위 확정 | 4.0 항 포함 | | 시험 | 3개 항목 현장 시험 (1일) | 에이아이오투오 판교 연구소 | | 성적서 발행 | | 시험 후 약 5일 | --- ## 6.0 준비 현황 ### 6.1 항목별 요약 | No | 지표 | 목표 | 사전 측정 | 상태 | |---|---|---|---|---| | 3 | 메타 데이터 추출 F1 | 83 | **87.50** | **시험 가능** | | 4 | 표절 판별 정밀도 | 97 | **98.40** | **시험 가능** | | 7 | 요약 ROUGE | 65 | 미측정 | **미준비** | ### 6.2 세부 현황 | 항목 | 상태 | |---|---| | **표절(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 필요 여부 및 대체 가능성.