Paper Polisher Pro
AI 작성 탐지 (저자용 AI율 자가 점검) · 학술 교정 가이드 · 용어 표준화 · 번역투 감지 · 품질 보고서 · AIGC 규정 준수 레이블 검사 · 문단 수준 귀속 · 학술지 사전 점검. 100% 로컬, 업로드 제로, 자격 증명 제로, 순수 표준 라이브러리 (선택적 onnxruntime 향상 레이어).
⛔ 철칙
- 재현 가능한 수치만. 모든 지표는
eval/run_eval.py의 유보(테스트 분할) 평가에서 비롯됩니다. "100% 탐지율 / F1 98.3%"와 같은 지원되지 않는 주장은 이전 문서에서 제거되었습니다.- 짧은 텍스트에 대한 판정 없음. 100자 미만 텍스트는
risk=unknown을 받습니다. (커뮤니티 교훈: 짧은 텍스트의 거짓 양성은 통제 불가능합니다.)- 지문은 귀속할 뿐, 점수를 매기지 않습니다. (2026-08-15 측정: 탐지기에 지문을 주입하면 사람 거짓 양성이 두 배로 늘어났습니다.)
- 교정/평가 분리. 스펙트럼, 가중치 및 임계값은 교정 절반에만 구축됩니다. 테스트 절반은 최종 평가를 위해 예약됩니다. (분할 전 샘플 내 AUROC 0.9972가 분할 후 실제 0.9187로 붕괴되었습니다.)
TL;DR
- 정의: 100% 로컬 AI율 자가 점검 + 중국어 학술 텍스트용 학술 교정 도구 키트 (최고 정확도를 위한 선택적 지도 모델 포함, 영어는 조언적 규칙 전용 점수 획득).
- 30초 시작:
python3 scripts/pp.py quickstart(모델 제로, 파일 제로 데모) ·python3 scripts/pp.py detect draft.txt --format json· 문장 수준 재작성 제안:python3 scripts/pp.py fix draft.txt· 전체 자가 점검 보고서:python3 scripts/pp.py workflow draft.txt· 환경:python3 scripts/pp.py doctor(하나의 진입점이 모든 하위 명령어를 라우팅합니다.) - 측정 결과 (유보, 지문 바인딩 md5 2631df3d388b): 2026년 이전 AUROC 0.9998 / 현재 세대 0.9400; 인간 FPR@중간 2.3%.
- 한계 인지: 100자 미만 텍스트는 설계상
risk=unknown을 받습니다. 저하 모드의 의학 텍스트는 과대 점수화됩니다. 인간+AI 혼합 문서: 문서 수준 점수는 신뢰할 수 없습니다 (문단 귀속이 실행 가능한 신호입니다). 저자 자가 점검 전용 — 기관 AI 탐지를 회피하기 위한 용도가 아닙니다. - 다음 참고 자료: 시나리오 방법은
references/best-practices.md에, 기능 경계 행렬은 아래에, 종단 간 예제는 § 빠른 시작에 있습니다. FAQ는 다섯 부분 (판정 → 모드 및 설치 → 출력 및 해석 → 안전성 및 검증 → 도구 및 워크플로)으로 그룹화되어 있으며, 필요한 그룹으로 바로 이동할 수 있습니다. 전체 이력은CHANGELOG.md에 있습니다.
30초 작업 라우팅
| 원하는 작업 | 실행 | 심층 문서 |
|---|---|---|
| 초안의 AI율 확인 | pp.py detect draft.txt --format json | § 측정 성능 + 아래 경계 행렬 |
| AI처럼 읽히는 문장 확인 | pp.py fix draft.txt | pp_fix_suggest.py --help |
| 재작성 전후 비교 | pp.py rewrite-check orig.txt rev.txt | FAQ: 재작성 제안 |
| PDF 번역 (레이아웃 유지) | 이 도구 아님 — doc-holmes 사용 | 관련 도구 |
| 쓰기 규범 확인 | pp.py norm draft.txt | FAQ: 스타일 규범 |
| 논문 전체 폴더 일괄 처리 | ai_detector.py --batch DIR --csv s.csv --report r.html | FAQ: 배치 CSV |
| 업로드 제로 주장 검증 | pp.py verify + pp.py test | 안전성 설명 |
| 학술지 사전 점검 (분야 맥락) | ai_detector.py draft.txt --profile journal | § 학술지 사전 점검 |
| 환경 문제 해결 | pp.py doctor / pp.py freshness --status | FAQ: 모드 |
| 모든 결과의 시각적 대시보드 | pp.py html-report draft.workflow.json -o report.html | 스크립트 치트 시트: pp_report_html.py |
| 재작성 라운드 간 초안 추적 | pp.py trend 轮次目录/ -o trend.html | 스크립트 치트 시트: pp_trend.py |
| 적합한 명령어가 확실하지 않음 | pp.py recommend "이 부분의 AI율을 낮춰 주세요" | pp.py recommend --help |
가장 중요한 세 가지 한계 (전체 세부 사항은 아래 행렬 참조)
- 저하 모드에서 의학 등록 과대 점수화 — 규칙 전용 인간 FPR @중간 ≈59% 의학 대 ≈2% 일반; 의학 텍스트에서는
@높음판정만 신뢰하거나 지도 모델을 설치하십시오. - 인간+AI 혼합 문서 — 문서 수준 AUROC 0.52-0.54 (본질적인 평균화 한계); 자동 판정이 아닌 인간 검토 순위로 문단 귀속을 사용하십시오.
- 데이터 범위 — 용어 은행은 2,344개의 의학/학술 용어입니다 (비의학 텍스트는 설계상 낮게 표준화됨); 스타일 레이어는 학술 산문에 대해 교정됩니다 (구어체/서사 입력 = 조언 전용). 도구별 범위: 아래 하위 도구 행렬.
학술 진실성
이 도구는 저자가 자신의 글쓰기 품질을 스스로 검토하고 개선하는 용도입니다. — 더 명확한 문장, 일관된 용어, 자연스러운 스타일. 기관 AI 탐지 시스템을 회피하도록 설계되지 않았으며, AI 생성 작업을 인간이 쓴 것으로 허위 표시하는 데 사용해서는 안 됩니다. 소속 기관의 AI 사용 및 공개 정책을 따르십시오. 번들로 제공되는 aigc_label_check.py는 공개 및 라벨링 규칙(예: 중국 2025년 9월 라벨링 조치)을 준수하는 데 도움을 주기 위해 존재합니다. — AI 지원을 숨기기 위한 것이 아니라 적절히 선언하기 위한 것입니다. 모든 AI 위험 보고서(ai_detector.py / deai_gate.py)에는 이 효과에 대한 명시적인 integrity_notice가 포함되어 있습니다.
측정 성능 (C-ReD + DetectRL-ZH, 유보 테스트 절반, n=5,251)
말뭉치 범위 참고 (v4.8.0): 아래 v3.0 시대 표는 전체 유보 테스트 절반 (n=5,251)에서 측정되었습니다. 번들 샘플 말뭉치는 하위 집합입니다 — 테스트 절반은 n=1,304; 말뭉치별 재현 가능한 수치: 규칙 전용 (PP_NO_SUP) 0.8985 구세대 / 0.7149 현재 세대, 융합 0.9998 / 0.9400 (
eval/results/v480_rules_*.json,v35ctl_*.json; 캐시 키는 모델 지문 AND 엔진 모드를 바인딩합니다.)
| 지표 | v2.0 기준 | v3.0 규칙+스펙트럼 | v3.1 +지도 | v3.4 지도 (버전 시대 기록, 현재는 아래 재측정 행 참조) |
|---|---|---|---|---|
| AUROC (테스트 절반) | 0.7046 | 0.9187 | 0.9997 | 1.0 |
| TPR@FPR5% | 30.4% | 49.0% | 99.95% | 100% |
| TPR@FPR1% | 16.7% | 24.9% | 99.88% | 100% |
| 인간 FPR @교정된 p99 | 측정 안 됨 | 측정 안 됨 | 3.56% (30/844) | 0.71% (6/844) |
| 의역/혼합 공격 AUROC | 0.64 | 0.89 | 1.0 (말뭉치 내) | 1.0 |
| 공격 "AI 지원" 재현율 | — | — | 71.1% | 86.6% |
| OOD 평범 서사/영화 재현율 | — | — | 1/6 | 5/6 지도 전용 · 6/6 로컬 융합 |
v4.4.0 지문 바인딩 재측정 (출하 지도 모델, md5
2631df3d388b): AUROC 0.9998 (테스트 절반, n_base=927), TPR@FPR1% 99.4%, 인간 FPR@중간 2.3% —eval/results/v35ctl_oldgen.json. 위 열은 버전 시대 기록으로 보존됩니다 (이전 모델 계통; v4.4.0 이전에는 바이너리가 지문 처리되지 않았습니다).
어떤 열이 귀하에게 적용됩니까? (구경 탐색: 현재 인용 가능한 기준선은 eval/results/CURRENT.md의 v35ctl_*입니다. 왼쪽 열은 버전 시대 기록입니다.) 기본 패키지는 v3.0 규칙+스펙트럼 엔진 (AUROC 0.9187 열, 전체 유보 말뭉치에서 측정됨, v4.4.0 이전 보관 기준선은 지문 바인딩 이전입니다 — v4.4.0 이후의 모든 평가 결과는 배포된 모델의 md5를 model_fp로 전달하며, 현재 바인딩된 수치는 eval/results/v35ctl_*.json에 있습니다.) 오른쪽 두 열은 선택적 로컬 지도 모델이 필요합니다 (아래 참조). 엔진은 사용자가 어떤 모드에 있는지 정직하게 알려줍니다. 모든 보고서는 지도 레이어가 없거나 건너뛰어졌을 때 degraded_mode / degraded_notice를 전달합니다.
기능 경계 행렬 (탐지기를 신뢰하기 전에 읽으십시오)
| 시나리오 | 동작 |
|---|---|
| 중국어 학술 산문, 전체 스택 | 최상의 경우 (AUROC 0.9998 유보, 인간 FPR@중간 2.3% — v4.4.0 지문 바인딩) |
| 모델 없는 기본 패키지 | 규칙+스펙트럼 (0.9187); 의학 등록 과대 점수화 (규칙 전용 인간 FPR @중간: ~59% 의학 대 ~2% 일반) → 의학 텍스트에서는 @높음 판정만 신뢰 |
| 영어 텍스트 | 언어 게이팅이 중국어 학습 지도 레이어를 설계상 건너뜀; 규칙 전용 영어 골격, 조언 전용 |
| 인간+AI 혼합 문서 | 문서 수준 AUROC 0.52-0.54 (본질적인 평균화 한계); 문단 수준 AUROC 0.69, 교정된 최적 운영 지점 P=0.60 (63% 범위) (references/para_thresholds.json) — 자동 판정 기준 미만; 인간 검토 전용으로만 pp_workflow.py/paragraph_report.py 순위 사용 |
| 편집 범위 회귀 헤드 | ρ=0.540 — 메타데이터로 보고되며 판정에 사용되지 않음 |
| 현재 세대 모델 (2026-09 샘플링) | AUROC 0.9400 (v4.4.0 지문 바인딩 재측정, 443개 문서 현재 세대 평가 세트: K3/K2.7/Qwen3.7-3.8/DS-V4/V4.1/GLM-5.3/M3 포함 9개 계열) vs 2026년 이전 유보 0.9998 — 적당한 검증된 격차. 이전 0.6542-vs-0.9022 수치는 측정 인공물이었습니다 (오래된 점수 캐시 재생 + 검증되지 않은 모델 계통); v4.4.0 이후 두 클래스 모두 구조적으로 방지되었습니다 (모든 결과 JSON에 model_fp 포함) |
| 구어체 / 구두 등록 텍스트 | 스타일 레이어는 학술 산문에 대해 교정됨; 해당 등록 외에서는 스타일 점수를 조언 전용으로 취급 |
하위 도구 범위 행렬 (각 하위 도구의 교정된 영역)
| 하위 도구 | 교정된 영역 | 영역 외 동작 |
|---|---|---|
| ai_detector / deai_gate | 중국어 학술 산문 (유보 교정) | 저하 모드에서 의학 등록 과대 점수화; 영어 조언 전용 규칙; 서사/구어체 입력은 등록 알림 수신 |
| paragraph_report / pp_rewrite_check | 위와 동일 엔진 기준, 문단별 | 동일한 한계; rewrite_check는 동일한 기준으로 두 초안 비교 |
| pp_fix_suggest | 중국어 AI 글쓰기 패턴 라이브러리 (학술 등록) | 영어 텍스트는 기본 연결/리듬 검사만 수행; 결과는 스타일 관찰이며 탐지가 아님 |
| term_check | 중국어 의학/학술 용어 (2,344개 용어 은행) | 비의학 텍스트: 표준화율이 낮게 읽힘 — 이는 은행 범위이지 오류가 아님; --auto-fix는 맥락 존중 |
| translation_smell_check | 중국어 학술 산문 (번역체 패턴) | 영어 스타일 원문: 적용 범위를 가장하는 대신 맹점 용어를 출력함 |
| style_distance | 학술 산문 문체 측정 | 학술 등록 외부에서는 스타일 점수가 조언 전용 (출력에 명시) |
| style_norm | 기계적 규칙 — 등록 무관 | 설계상 점수 없음; 통계적 검사 (숫자/약어)는 짧은 샘플에서 약하며 이를 명시함 |
| aigc_label_check | 파일 메타데이터 / C2PA / 명시적 레이블 설명 | 콘텐츠 탐지기가 아님; 저자가 아닌 라벨링 규정 준수 확인 |
| quality_report | 원고의 가독성/품질 차원 | AI율 측정이 아님; 점수 휴리스틱은 일반적이며 학술지에 맞춰지지 않음 |
| docx_text | .docx 텍스트 추출 (문단 보존) | PDF 변환기가 아님 — PDF는 변환 조언과 함께 거부됨 (제로 종속성 중국어 PDF 추출은 보장될 수 없음) |
| 배치 모드 (--batch) | 파일당 .txt/.md/.docx <5 MB | 5MB 초과는 설계상 건너뜀; 암호화/이미지 전용 docx는 조용한 빈 출력 대신 명시적 오류 생성 |
안전성 및 동작 설명
- 100% 로컬: 모든 기능이 기기에서 실행됩니다. 코드베이스는 아웃바운드 네트워크 호출을 전혀 하지 않습니다. — 네트워크 클라이언트 라이브러리 없음, 네트워크 유틸리티 없음. 유일한 리스너 가능 구성 요소는 선택적 MCP HTTP 폼 (
--transport http)이며, 이는 127.0.0.1 루프백만 바인딩합니다 (AST 검증기의 허용 목록 규칙에 의해 바인딩이 확인됨); AST 스캔은 루프백 바인딩이 없는 모든 리스너를 위반으로 처리합니다. 구조적으로 검증:python3 scripts/pp_verify.py(AST 수준 스캔; 종료 코드 0 = 네트워크 호출 제로, 모든 스크립트 컴파일). 레거시 텍스트 grepgrep -rEin "urllib|requests|socket|import http" scripts/는 보고서 바닥글에 몇 개의 URL 문자열을 표시할 수 있습니다. — 이는 문자열 상수의 데이터일 뿐 네트워크 코드가 아닙니다. AST 검증기가 이 둘을 구분합니다. - 업로드 없음, 자격 증명 없음: 자격 증명, 키 또는 개인 데이터를 읽거나 전송하지 않습니다. 유일한 두 환경 변수는
PP_NO_SUP(지도 레이어 건너뛰기)와PP_LANG(en은pp.py진입점 표면을 영어로 전환)입니다. — 둘 다 로컬 동작 전환입니다. - 지속성 없음: 예약된 작업, 자동 시작 항목 또는 시스템 구성 변경을 생성하지 않습니다. 임시 파일 (레이어 간 JSON, 프로브 텍스트)은 사용 후 삭제됩니다.
- 원격 코드 없음: 원격 모델 또는 스크립트를 로드하지 않습니다. 선택적 지도 모델은 사용자가 로컬 경로에 배치합니다.
- 데이터 경계: 사용자가 지정한 파일, 시스템 임시 디렉터리 및 자체 패키지 데이터 디렉터리(교정/신선도 아티팩트)만 읽고 씁니다. 보고서는 사용자가 지정한 위치로만 전송됩니다.
- 학술 진실성: 위 섹션 참조 — 정책 준수 공개와 함께 저자 자가 검토 및 품질 개선을 위한 도구입니다. 탐지 회피용이 아닙니다.
종료 코드 계약 (v5.8.0부터 안정적)
| 종료 코드 | 의미 | 일반적인 경우 |
|---|---|---|
| 0 | 성공 | 보고서 생성됨 · verify 제로 네트워크 통과 · test 스위트 통과 |
| 1 | 실행되었으나 통과하지 못함 | 엔진 런타임 실패 (메시지에 복구 조언 포함) · test 실패 · verify 드리프트 · freshness 기준선 드리프트 |
| 2 | 사용법 또는 입력 오류 | 알 수 없는 하위 명령어 · 파일 없음 · 100자 미만 텍스트 · 구문 분석 불가능한 입력 파일 |
| 3 | 환경 준비 안 됨 | pp_setup.py 모델 설치/검증 실패 — 먼저 pp.py doctor 실행 |
프로그래매틱 미러: pp_api는 잘못된 입력에 대해 ValueError(↔ 종료 2)를, 런타임 실패에 대해 RuntimeError(↔ 종료 1)를 발생시키며, 둘 다 메시지에 복구 조언을 포함합니다. 이 코드는 안정성 약속입니다. — 향후 릴리스에서 용도가 변경되지 않습니다.
안티 패턴 (각각 올바른 방법 포함)
이 섹션은 판단 유형 규칙만 나열합니다 (하지 말아야 할 것). 운영 방법 질문은
references/faq.md에 있습니다 (pp.py faq <키워드>로 검색 가능). — 둘은 반복하지 않고 서로 교차 참조합니다.
- <100자를 입력하고 판정을 기대하지 마십시오. —
risk=unknown은 설계상입니다 (짧은 텍스트의 거짓 양성은 통제 불가능). ✅ 대신: 300자 이상 제출하거나, 판정이 없고 짧은 샘플에서 작동하는 스타일 규범 검사(pp.py norm)를 사용하십시오. - 의학 텍스트에 대한 저하 모드 점수를 신뢰하지 마십시오.
...