계획서 p.24 가 No.3/4/7 의 평가환경을 python 3.9 로 못박았는데, 실제로는
성능지표 평가 스크립트 3종이 전부 3.9 에서 임포트조차 되지 않았다.
python:3.9-slim 컨테이너에서 재현·수정·재검증했다.
원인: config.py 와 schemas.py 가 `from __future__ import annotations` 없이
`str | None` (PEP 604) 을 썼다. 3.10 부터의 문법이라 클래스 본문이 실행되는
순간 인터프리터가 평가하며 TypeError 로 죽는다. 이 두 파일을 타고 detector /
extractor / clustering / taxonomy / jobs.store / routes / main 이 연쇄로 깨졌다.
No.7 eval_rouge.py → summarizer → core.config
No.3 eval_metadata_f1.py → extractor → api.schemas
No.4 evaluate_pairs.py → detector → api.schemas
개발환경이 3.14 라 로컬에서는 전혀 드러나지 않았다. 정답셋을 받아 측정하는
시점에 발견했다면 일정이 밀렸을 문제다.
수정은 두 가지가 모두 필요하다. future 임포트만 넣으면 pydantic 이 문자열
'str | None' 을 해석하지 못하고("Unable to evaluate type annotation"),
eval_type_backport 만 넣으면 인터프리터가 먼저 죽는다.
검증: 3.9 에서 eval_rouge.py / eval_metadata_f1.py 가 정상 실행되고 수치가
3.14 와 동일하다(ROUGE-1 recall 0.5778). evaluate_pairs.py 와 app.main 임포트도
통과. 3.14 회귀 없음.
재발 방지로 tests/test_py39_compat.py 를 추가했다. Pydantic 모델을 정의하는
모듈에 future 임포트가 있는지 AST 로 검사하므로 3.14 에서도 회귀를 잡는다.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
7.9 KiB
오투오 과업 범위와 성능지표 — 무엇을 개발하고 무엇을 측정하는가
출처:
data/(협약용) 연구개발계획서 PART 2.pdf(2024 문체부 연구개발사업) — 2-4. 연구개발 성능지표 및 평가방법(p.23~24), 나-3. 2단계 개발내용 ㄷ.오투오(p.21), 나. 성과물 목표(p.25). 현재 2단계(2-1년차) 목표치 기준.
1. 성능지표 8개 중 오투오 몫
전체 8개 중 우리가 수치를 책임지는 것은 3개다. 나머지는 컨소시엄 다른 기관 몫이며, 우리 코드가 관여하더라도 측정 주체가 아니다.
| No | 지표 | 2-1년 목표 | 비교수준 | 가중치 | 담당 |
|---|---|---|---|---|---|
| 3 | 메타데이터 추출 F1 | 83 이상 | KLUE NER Leaderboard top5 이내 | 10 | 오투오(요소 분석 모듈) |
| 4 | 표절 여부 판별 정밀도(precision) | 97% | — | 10 | 오투오 |
| 7 | 요약 성능 (N-gram ROUGE) | 65 | gpt-4o 줄글 요약(64%) | 10 | 오투오 |
| 1 | sLLM 환각방지 (Ko-TruthfulQA) | 85 | HF ko LLM 상위10 평균(84.047) | 15 | 고려대 |
| 2 | sLLM 상식생성 (Ko-CommonGen v2) | 55 | (53.095) | 15 | 고려대 |
| 5 | 콘텐츠 요소 추천 NDCG | 80 | — | 10 | 바이칼AI |
| 6 | 메타기반 교정/교열 정확도 | 90 | 구글·MS 맞춤법(92%) | 10 | 바이칼AI |
| 8 | 정량 사용성(UX) 평가 | 85점 | — | 20 | 외부기관 |
⚠️ No.3의 귀속은 확인이 필요하다. 성과물 목록상 오투오는 "콘텐츠 요소 분석 AI 서비스 모듈", 고려대는 "출판콘텐츠추출모델(sLLM)"이라 요소 추출이 양쪽에 걸친다. 측정 주체를 컨소시엄에 확인하고 이 문서를 갱신할 것.
No.4가 재현율이 아니라 정밀도라는 점이 설계를 지배한다. 놓치는 것보다 잘못 지목하는 것이 감점이므로, 애매하면 표절이라고 말하지 않는 쪽이 지표에 유리하다.
2. 오투오 2단계 성과물
- 콘텐츠 요소 분석 AI 서비스 모듈 1식 (고도화)
- 콘텐츠 표절 여부 AI 탐지 모듈 1식 (고도화)
- SW 저작권 등록 1건
"콘텐츠 표절 여부 AI 탐지 모듈"은 AI로 표절을 탐지하는 모듈이다. AI가 쓴 글을 탐지하는 모듈이 아니다. 5장 참조.
3. 계획서가 명시한 개발내용과 현재 상태
가. 스토리 요약/분석 기술 고도화
| 계획서 항목 | 상태 | 남은 일 |
|---|---|---|
| 데이터 수집·전처리 (도메인별 데이터셋 구축) | ⬜ 미착수 | 컴북스 데이터 수령 후 |
| 고도화 요약 모델 (문맥 기반 문장 추출, 키워드·문장 관계 분석) | ✅ summarizer.py TextRank |
실데이터 튜닝 |
| 통합 요약 시스템 (추출적+추상적 하이브리드) | ✅ 구현 | LLM 키 연결 시 동작 |
| 사용자 맞춤형 요약 (길이·상세도·강조 내용 옵션) | ⚠️ 부분 | 상세도·강조 내용 옵션 미구현 |
SummaryRequest에 있는 것은 ratio(길이), max_sentences, use_abstractive뿐이다.
계획서가 명시한 상세도(detail) 와 강조 내용(emphasis) 옵션이 없다. 지표에는
안 잡히지만 성과물 명세에 적힌 기능이므로 개발이 필요하다.
나. 표절 검출 기술 고도화
| 계획서 항목 | 상태 | 남은 일 |
|---|---|---|
| 군집화 기반 부분 표절 수치화 (요소 교체형) | ✅ clustering.py → partial_signal |
실데이터 임계값 튜닝 |
| Human Feedback Preference Optimization으로 sLLM 고도화 | ⚠️ 골격만 | 사람 선호 라벨 + GPU 학습 |
| 점검: 자체 구축 데이터셋으로 판별 수치 정의 | ✅ 하니스 | 자서전 표절 샘플 필요 |
4. 측정 계획 — 지표별 평가환경
계획서가 평가환경까지 못박아 두었다. 측정은 이 환경에서 해야 인정된다.
| No | 평가방법 | 평가환경 |
|---|---|---|
| 3 | KLUE NER 학습 11,000건 / 테스트 2,000건, Leaderboard baseline 10여 개와 상대 비교 | python 3.9 |
| 4 | 자체 제작 실제 표절 글 vs 비표절 글을 classification 하여 precision 계산 | Ubuntu 22.04, python 3.9, 자체 test script (GPU 불필요) |
| 7 | 요약 데이터셋 구축 후 n-gram ROUGE recall 계산 (수식 분모가 참조 n-gram 수). 다중 참조 전제 | A100 GPU, python 3.9, pytorch 2.2.2+cu121, transformers 4.39.3 |
python 3.9 호환성 — 확인 완료, 수정됨 (2026-08-19)
평가환경이 python 3.9 고정인데 실제로 성능지표 평가 스크립트 3종이 전부
임포트 불가였다. Docker python:3.9-slim 에서 재현·수정·재검증했다.
원인: app/core/config.py, app/api/schemas.py 가 from __future__ import annotations 없이 str | None (PEP 604) 을 썼다. 3.10 부터의 문법이라 클래스
본문 실행 시점에 인터프리터가 평가하며 TypeError 로 죽는다.
파급: 이 두 파일을 타고 detector / extractor / clustering / taxonomy /
jobs.store / routes / main 이 연쇄로 깨졌고, 결과적으로
| 지표 | 평가 스크립트 | 3.9 임포트 경로 |
|---|---|---|
| No.7 | eval_rouge.py |
→ summarizer → core.config ❌ |
| No.3 | eval_metadata_f1.py |
→ extractor → api.schemas ❌ |
| No.4 | evaluate_pairs.py |
→ detector → api.schemas ❌ |
개발환경이 3.14 라 로컬에서는 전혀 드러나지 않았다.
수정: 두 파일에 from __future__ import annotations 추가 + requirements.txt
에 eval_type_backport>=0.2; python_version < "3.10" 추가. 둘 다 필요하다 —
future 임포트만 넣으면 pydantic 이 문자열 'str | None' 을 해석하지 못하고,
백포트만 넣으면 인터프리터가 먼저 죽는다.
검증: 3.9 컨테이너에서 eval_rouge.py / eval_metadata_f1.py 가 정상 실행되고
수치가 3.14 와 동일함을 확인했다(ROUGE-1 recall 0.5778). evaluate_pairs.py 와
app.main 임포트도 통과. 3.14 회귀 없음(153 passed).
재발 방지: tests/test_py39_compat.py — Pydantic 모델을 정의하는 모듈에
future 임포트가 있는지 AST 로 검사한다. 3.14 에서도 회귀를 잡는다.
5. AI 생성 의심도의 위상 — 지표가 아니다
성능지표 8개 어디에도 없고, 계획서 개발내용에도 없다. 오투오 성과물인 "콘텐츠 표절 여부 AI 탐지 모듈"은 AI로 표절을 탐지하는 것이지 AI 생성물을 탐지하는 것이 아니다.
따라서 이 기능은 성능을 측정하지 않는다. 정확도·F1·AUROC 를 보고하지 않으며,
목표치도 두지 않는다. 대신 근거와 기준을 설명할 수 있어야 한다. 자세한 내용은
AI_DETECTION.md 의 "위상과 기준" 절에 있다.
6. 요약 — 남은 일
더 개발해야 하는 것
- 사용자 맞춤형 요약 옵션 — 상세도, 강조 내용 (계획서 명시, 현재 없음)
- Human Feedback Preference Optimization — 현재 골격만. 선호 라벨 + GPU 필요
- 도메인별 요약 데이터셋 구축 — 컴북스 데이터 수령 후
python 3.9 호환성 정리— 완료 (2026-08-19)
측정해야 하는 것 (전부 데이터 대기)
- No.4 표절 정밀도 97% — 자체 제작 표절/비표절 글 필요. 정밀도 지표이므로 임계값은 재현율을 희생해서라도 오탐을 줄이는 쪽으로 잡는다
- No.7 요약 ROUGE 65 — 요약 정답셋 300건 별도 구축 필요 (컴북스 미보유).
본 구축 전 파일럿 20건으로 사람 상한을 먼저 측정할 것
(
eval_rouge.py --iaa). 상한이 65 미만이면 규격부터 조정해야 한다. 구축 가이드는DATA_REQUEST_SPEC.md§5 - No.3 메타 추출 F1 83 — KLUE NER 로 측정 가능. 귀속 확인 후 진행
데이터와 무관하게 지금 가능한 것
- SW 저작권 등록 1건 (서류 제출)
- 사용자 맞춤형 요약 옵션 개발
- 바이칼/컴북스 E2E 통합