SCOPE_AND_METRICS.md 신규. 연구개발계획서(2-4 성능지표, 나-3 개발내용, 나 성과물 목표)를 대조해 오투오 몫을 정리했다. - 성능지표 8개 중 우리가 수치를 책임지는 것은 No.3·4·7 세 개다. - No.4 는 재현율이 아니라 정밀도라 애매하면 표절이라 말하지 않는 쪽이 지표에 유리하다. 이 성질이 설계를 지배한다. - 사용자 맞춤형 요약의 상세도·강조 내용 옵션이 계획서에 있는데 미구현이다. - python 3.9 호환성 위험: 평가환경이 3.9 고정인데 config.py 와 schemas.py 가 from __future__ import annotations 없이 PEP 604 를 쓴다. 둘 다 Pydantic 모델이라 어노테이션이 런타임에 평가된다. 현재 개발환경이 3.14 라 안 드러난다. - No.3 귀속이 오투오/고려대 사이에서 불분명해 확인이 필요하다. AI_DETECTION.md 에 「위상과 기준」절 추가. AI 생성 판별은 성능지표 8개 어디에도 없고 계획서 개발내용에도 없다. "콘텐츠 표절 여부 AI 탐지 모듈"은 AI로 표절을 탐지하는 모듈이지 AI가 쓴 글을 탐지하는 모듈이 아니다. 따라서 정확도를 보고하지 않는다. 정답 라벨이 없는 대상에 정확도를 주장하면 검토자를 과신하게 만들 뿐이다. 대신 근거(79권 대비 문체 이례도)와 기준(실측 백분위 컷)을 명시하고, 할 수 있는 말과 없는 말을 표로 구분했다. 8장의 예시 컷이 자리표시자 값이라 실측값으로 갱신했다. DATA_REQUEST_SPEC.md §5 요약 정답셋 가이드 보강. 다중 참조 포맷, 줄글 규격, dev/test 분리(test 는 사람 직접 작성 — LLM 이 쓴 정답을 LLM 출력으로 맞히면 점수가 부풀고 방어할 수 없다), book 단위 누출 방지, §5.1 파일럿 절차, §5.2 recall 정정 이력. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
8.2 KiB
컴북스 요청 데이터 스펙 & 요약 정답셋 작성 가이드
오투오 과제2(콘텐츠 표절 탐지 / 요소 분석) 2단계 고도화에 필요한 데이터 스펙. 데이터 수령 즉시 학습·검증에 투입할 수 있도록, 포맷을 본 문서로 사전 고정한다. 관련 평가 스크립트:
scripts/eval_rouge.py,scripts/eval_metadata_f1.py,scripts/analyze_case_coverage.py
0. 요약 — 무엇을, 왜, 어떤 포맷으로
| # | 데이터 | 용도(성능지표) | 제공 주체 | 비고 |
|---|---|---|---|---|
| 1 | 표절/비표절 샘플 글 | 표절 정밀도 97% (No.4) | 컴북스 | 39 케이스·자서전 도메인 커버 |
| 2 | article 본문 3만건 + 저작권 확보분 | 요소 추출·군집화 코퍼스 | 컴북스 | 1단계 계획 수량 |
| 3 | 도메인별 텍스트 | 요약 모델 범용성 (No.7) | 컴북스+공개 | 장르 다양성 |
| 4 | 콘텐츠 요소(메타) 정답 라벨 | 메타 추출 F1 83 (No.3) | 컴북스 1단계분 | KLUE NER 공개로 보완 |
| 5 | 요약 정답셋(reference summary) | 요약 ROUGE 65 (No.7) | 별도 구축 | 컴북스 미보유 → 역할분담 |
| 6 | Human Feedback 선호 라벨 | 표절검출 HF 고도화 | 별도 구축 | 라벨링 공수 필요 |
→ #1~#4 는 컴북스 직접 제공, #5·#6 은 컴북스가 줄 수 없는 데이터로 제작 주체를 먼저 합의해야 한다.
1. 표절/비표절 샘플 글 (정밀도 97% 평가)
- 포맷 (JSONL): 표절 페어 단위
{"pair_id": "A1-001", "source_text": "원본 ...", "suspect_text": "검사 대상 ...", "is_plagiarism": true, "case_id": "A1", "note": "시·노래 가사 무단 인용"} - 필수 커버리지: 자동 탐지 대상 케이스(
detectable_internal=True, 현재 10종)를 모두 포함. 케이스별 최소 30건 이상 권장(정밀도 0.97 신뢰구간 확보).- 현재 요청 대상 케이스 목록은
python -m scripts.analyze_case_coverage로 산출.
- 현재 요청 대상 케이스 목록은
- 도메인: 출판 콘텐츠뿐 아니라 자서전 도메인 표절/비표절을 별도 분리 제공. (현 평가셋 999쌍은 출판 콘텐츠 기준 → 자서전 도메인 정밀도 미검증)
- 균형: 표절:비표절 ≈ 1:1. 비표절에는 '합법적 인용·정상 2차 창작'을 포함해 과탐(FP)을 줄이는 hard-negative 로 활용.
2. article 본문 데이터 (요소 추출·군집화 코퍼스)
- 포맷:
data/reference/와 동일한.txt또는 JSONL{"doc_id","title","text"} - 수량: 계획서 기준 3만건. 우선 1.5천~3천건 표본 선제공 가능하면 군집화·요소 추출 튜닝을 조기 착수.
- 저작권: 학습/평가 사용 가능 범위(CCL 또는 계약)를 메타로 명시 →
license필드.
3. 도메인별 텍스트 (요약 범용성)
- 장르 다양성 확보용(소설/에세이/자서전/실용 등). 요약 모델의 도메인 편향 방지.
- 포맷은 #2 와 동일.
genre필드 권장.
4. 콘텐츠 요소(메타) 정답 라벨 (메타 F1)
- 포맷 (JSONL) —
scripts/eval_metadata_f1.py입력과 동일:{"text": "원문 ...", "characters": ["홍길동"], "motifs": ["복수"], "keywords": ["활빈당","탐관오리"], "genre": "역사"} - 컴북스 1단계 '콘텐츠 구성요소 정의' 라벨을 article 단위로 제공.
- 공개 보완: KLUE NER(
--klue)로 인물(PS) 추출 F1 을 즉시 측정 가능.
5. 요약 정답셋(reference summary) 작성 가이드 — 별도 구축 필요
컴북스 데이터에는 '본문'만 있고 '요약 정답'이 없다. ROUGE(No.7) 평가는 정답 요약이 전제이므로 아래 가이드에 따라 별도 구축한다. 제작 주체 합의 필요: (A) 컴북스가 작성 / (B) 오투오가 GPT 생성 후 컴북스 검수 / (C) 혼합.
-
포맷 (JSONL) —
scripts/eval_rouge.py입력과 동일:{"text": "원문 전체 ...", "reference": "사람이 작성한 정답 요약 ..."} -
다중 참조 — 계획서 수식이
Σ_S∈{Reference Summaries}로 다중 참조를 전제한다. 측정용 세트는 1건당 참조 2개를 권장한다. 표현 다양성을 흡수해 점수가 안정된다.{"text": "원문 ...", "references": ["작성자 A 요약 ...", "작성자 B 요약 ..."]} -
작성 원칙
- 형식: 줄글(연속 산문). 비교수준이 "gpt-4o의 줄글 요약(64%)"이므로 불릿은 안 된다.
- 길이: 원문의 약 20~30% (또는 3~5문장). 비율을 고정한다. 참조가 길면 recall 분모가 커져 불리하고, 편차가 크면 점수 분산이 커진다.
- 내용: 원문에 없는 사실 추가 금지(환각 방지). 핵심 사건·인물·결말 포함.
- 표현: 재구성하되 원문 어휘를 일부러 피하지 말 것. 억지 패러프레이즈는 ROUGE 를 깎을 뿐 요약 품질과 무관하다.
-
수량과 제작 주체 — dev 와 test 를 나눈다.
세트 건수 제작 방식 용도 dev 150 LLM 초안 + 사람 편집(경로 B) 튜닝·반복 측정 test 150 사람이 원문만 보고 직접 작성(경로 A), 참조 2개 공인인증 최종 측정 test 를 LLM 으로 만들면 안 되는 이유: 우리 요약 파이프라인의 최종 단계가 LLM 추상 요약이다. LLM 이 쓴 정답을 LLM 출력으로 맞히면 점수가 부풀고, "정답셋을 GPT 로 만들고 GPT 요약을 평가했다"는 지적을 방어할 수 없다.
-
누출 방지: 분할 단위는 에피소드가 아니라
book_name. 같은 책이 dev 와 test 에 동시에 들어가면 그 책 어휘에 맞춰져 test 점수가 부풀려진다. 도메인 분산을 위해 권당 최대 10건, 30권 이상에 분산한다.
5.1 먼저 할 일 — 파일럿 20건으로 사람 상한을 잰다
본 구축 전에 반드시 선행한다. 사람 둘이 같은 글을 요약해도 표현 선택이 달라 ROUGE 는 100 이 안 나온다. 그 상한이 65 보다 낮으면 어떤 시스템도 목표를 달성할 수 없고, 300건을 다 만든 뒤에 알면 다시 만들어야 한다.
# 20건 × 2명이 서로 안 보고 독립 작성 → references 에 2개씩 넣고
python scripts/eval_rouge.py data/eval/pilot.jsonl --iaa
스크립트가 상한과 목표를 비교해 규격 조정 필요 여부까지 알려준다. 파일럿 비용은 20건 × 2명 × 15분 ≈ 5시간으로, 전체 공수의 약 3% 다.
상한이 낮게 나왔을 때의 대응: 참조 요약을 더 길게(30~40%) 잡거나, 원문 표현을 더 많이 살리는 방향으로 규격을 완화한다. 규격 조정은 파일럿 단계에서는 공짜다.
5.2 지표는 F1 이 아니라 recall
계획서 p.24 수식의 분모가 참조 n-gram 수이므로 ROUGE-N recall 이 지표다.
scripts/eval_rouge.py 는 recall 을 목표 0.65 와 대조하고 F1 은 참고로만 출력한다.
(2026-08-19 정정 — 그전까지 F1 으로 대조해 우리에게 불리하게 채점하고 있었다.)
6. Human Feedback 선호 라벨 — 별도 구축 필요
표절 검출 HF Preference Optimization(계획서 p.22)용. '표절 글을 비선호'로 학습. 단순 표절/비표절 데이터가 아니라 사람의 선호 판단 라벨이 필요(라벨링 공수).
- 파이프라인:
scripts/build_preference_dataset.pytemplate— 후보쌍(원본+글A+글B) → 라벨링 템플릿 생성- (사람) 각 행에
chosen/rejected확정,label_status="labeled" convert— 라벨 완료 파일 → DPO 학습셋(JSONL) + 검증/통계
- 라벨링 형식 (JSONL):
{"pair_id":"p1","prompt":"...[원문]...","candidate_a":"정상 변형글", "candidate_b":"표절글","label_status":"labeled", "chosen":"정상 변형글","rejected":"표절글"} - 수량: 선호학습 최소 500쌍 이상 권장.
7. 공통 — 납기 명시 요청
정밀도 97%·요약 ROUGE 65 는 위 데이터가 전제이므로, 각 항목 제공 시점을 함께 확정한다(연말 인수시험 역산). 부분 표본 선제공이 가능하면 군집화/요소추출 튜닝을 데이터 도착 전 표본으로 조기 착수한다.