o2o-plagiarism-ai/docs/DATA_REQUEST_SPEC.md
hbyang 91aa077898 docs: 과업 범위·성능지표 정리와 AI 의심도 위상 명시
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>
2026-08-19 13:54:40 +09:00

145 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 컴북스 요청 데이터 스펙 & 요약 정답셋 작성 가이드
> 오투오 과제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)**: 표절 페어 단위
```json
{"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` 입력과 동일:
```json
{"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` 입력과 동일:
```json
{"text": "원문 전체 ...", "reference": "사람이 작성한 정답 요약 ..."}
```
- **다중 참조** — 계획서 수식이 `Σ_S∈{Reference Summaries}` 로 다중 참조를 전제한다.
측정용 세트는 **1건당 참조 2개**를 권장한다. 표현 다양성을 흡수해 점수가 안정된다.
```json
{"text": "원문 ...", "references": ["작성자 A 요약 ...", "작성자 B 요약 ..."]}
```
- **작성 원칙**
1. 형식: **줄글(연속 산문)**. 비교수준이 "gpt-4o의 줄글 요약(64%)"이므로 불릿은 안 된다.
2. 길이: 원문의 약 20~30% (또는 3~5문장). **비율을 고정**한다. 참조가 길면
recall 분모가 커져 불리하고, 편차가 크면 점수 분산이 커진다.
3. 내용: 원문에 **없는 사실 추가 금지**(환각 방지). 핵심 사건·인물·결말 포함.
4. 표현: 재구성하되 **원문 어휘를 일부러 피하지 말 것.** 억지 패러프레이즈는
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건을 다 만든 뒤에 알면 다시 만들어야 한다.
```bash
# 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.py`
1. `template` — 후보쌍(원본+글A+글B) → 라벨링 템플릿 생성
2. (사람) 각 행에 `chosen`/`rejected` 확정, `label_status="labeled"`
3. `convert` — 라벨 완료 파일 → DPO 학습셋(JSONL) + 검증/통계
- **라벨링 형식 (JSONL)**:
```json
{"pair_id":"p1","prompt":"...[원문]...","candidate_a":"정상 변형글",
"candidate_b":"표절글","label_status":"labeled",
"chosen":"정상 변형글","rejected":"표절글"}
```
- **수량**: 선호학습 최소 500쌍 이상 권장.
---
## 7. 공통 — 납기 명시 요청
정밀도 97%·요약 ROUGE 65 는 위 데이터가 전제이므로, **각 항목 제공 시점**을
함께 확정한다(연말 인수시험 역산). 부분 표본 선제공이 가능하면 군집화/요소추출
튜닝을 데이터 도착 전 표본으로 조기 착수한다.