clone-n-write

Clone how a real person thinks while writing — then coach them to write better. Deterministic style-fingerprint machinery (corpus stats, genre profiling, outline gates, pre-publish gate) around any drafting model.

0
0
0
public
Forked

clone-n-write

clone-n-write hero

실제 사람이 글을 쓸 때의 사고 과정을 복제하고 — 같은 기계로 그 사람이 글을 더 잘 쓰도록 코칭한다.

“내 문체로 써줘” 류의 프롬프트 대부분은 어휘만 흉내 내다가 어색한 골짜기에 빠집니다. 단어는 비슷한데 생각의 결이 다르기 때문입니다. clone-n-write는 과정을 겨냥합니다 — 저자가 방향을 고르고, 장르별로 개요를 짜고, 자기 발행글에서 차용하며 초고를 쓰고, 스스로 퇴고하는 그 과정을 — 그리고 표면 문체는 마지막에 감이 아니라 코드로 검증합니다.

 저자의 발행글                                새 초고
      │                                         │
      ▼                                         ▼
 build_corpus.py ──▶ 코퍼스 + 장르별       type_profiler.py (장르 판별)
      │              통계 (비공개,               │
      │              gitignore)                  ▼
      │                                 outline-playbooks.md
      │                                 (산문보다 개요 먼저 — 하드 게이트)
      │                                         │
      │                                         ▼
      └──────────▶ quant_scorer.py ◀── 초고 ──▶ rewrite_loop.py
                   (3축 지문 채점,               (황금 앵커 기준)
                    대역 + 왜 + 코칭)                 │
                                                      ▼
                                                   gate.py
                                        (발행 전 4축 게이트:
                                         어미 분포 · 차용 인용 ·
                                         원본 출처 · AI 상투어 2단)

실전 검증 (2026-07)

같은 중립 원고 1편을 서로 다른 두 저자의 문체로 변환하고, 각 저자의 코퍼스에서 잰 지문 대역(밴드)으로 교차 채점한 결과:

저자 A 지문 점수 저자 B 지문 점수
원본 (중립 리포트체) 65.1 53.1
저자 A 문체 변환 89.5 (실글 상위 22%) 70.0
저자 B 문체 변환 83.5 89.4 (실글 상위 17%)

각 변환본이 목표 저자 지문에서 최고점 + 교차 지문에서 하락 — 판별이 성립합니다. 1차 초안은 "합니다체 54.5% (저자 대역 상한 30%)"로 반려됐고 — AI 특유의 격식 도배였습니다 — 진단문의 코칭대로 고친 v2가 수렴했습니다. 측정 → 반려 → 코칭 → 수렴 루프가 실제로 돕니다.

이후 참고 선학습 블라인드 A/B 판정단(실글 15편 학습 → 클론 글 vs 일반 생성 글, “둘 다 아니다” 허용)으로 합격 시험을 돌렸습니다: 8라운드 수리 루프 끝에 신규 생성 세트 91.8%, 재생성 세트 89.9% · 쌍 다수결 19/20(95%). 사후 수리는 85%대에서 천장을 쳤고, 배운 규칙을 생성에 내장해야 90%를 넘었습니다 — 전 과정 기록은 docs/making-of.md에 있습니다.

실제 변환 예시 — 같은 글이 어떻게 바뀌나

위 매트릭스의 실제 산출물 그대로입니다. 원본은 테스트용으로 생성한 중립 원고이고, 아래 두 변환본도 전부 파이프라인 산출물입니다(저자의 실제 발행글·코퍼스는 이 레포에 없습니다).

원본 — 중립 리포트체 (양쪽 지문 65.1 / 53.1점)

AI 도구를 처음 도입하는 사용자는 대체로 세 가지 시행착오를 겪는다. 첫째, 완성된 결과물을 한 번에 얻으려는 기대 때문에 프롬프트를 길고 모호하게 작성하는 경향이 있다. 요구사항이 명확하지 않은 상태에서 도구에 모든 판단을 위임하면 결과물의 품질은 오히려 낮아진다. 둘째, 결과물을 검증하지 않고 그대로 사용하는 문제가 있다. (…) 결국 AI 도구 활용의 성패는 도구의 성능보다 사용자의 운용 방식에 달려 있다.

저자 A 문체 변환 — 89.5점, 실글 상위 22% (문장 단위 사고 전개 · 절제된 격식 · 독자에게 질문)

AI 도구를 처음 쓰는 분들, 넘어지는 지점이 비슷합니다.

첫 번째. 첫 시도에 완성본을 기대하는 것. 프롬프트는 긴데 정작 요구사항이 없는 경우. 내가 뭘 원하는지 정리가 안 된 채로 판단을 통째로 맡기면 결과물은 오히려 나빠져요.

두 번째, 검증 없이 그대로 쓰는 습관. AI는 그럴듯하게 틀린 말을 한다. 중요한 자료일수록 출처 확인이 먼저.

마지막이 제일 아까운 경우. 한 번 실패하고 도구 자체를 접어버리는 것. 도구마다 성격을 파악하는 시간이 필요하고, 작은 일부터 맡겨보면서 범위를 넓히는 쪽이 경험상 가장 빨랐다.

결국 성패는 도구 성능이 아니라 쓰는 사람의 운용 방식. 여러분은 어느 지점에서 멈추셨나요?

저자 B 문체 변환 — 89.4점, 실글 상위 17% (초단문 행갈이 · 후킹 첫줄 · 리스트 · 붙여쓰기 이완)

AI 처음쓰는 사람들 90%가 밟는 지뢰 3개
오늘도 주변에서 봤다

1.첫판에 완성본 뽑으려함
프롬프트만 길게씀 요구사항은 없음
그러면 AI가 알아서 해주냐?
안해준다 결과물만 산으로간다

2.검증안하고 그대로씀
AI는 그럴듯하게 거짓말한다
중요한자료면 출처확인 무조건해라

3.한번 망하고 바로 접음
이게 제일아깝다
도구는 원래 손에 익는시간이 필요함
작은일부터 시켜보면 각이나온다

결론
성능차이가 아니라 운용차이다
도구탓 그만하고 작은거부터 돌려보셈

같은 내용이 완전히 다른 두 글이 됐습니다 — 문장 호흡(저자 A 문장당 7.9어절 vs 저자 B 4.2어절), 종결 습관(절제된 격식 혼합 vs 음슴·구종결 64%), 독자를 대하는 방식(질문을 건넴 vs 리스트로 후킹)까지. 이 차이는 전부 각 저자의 코퍼스에서 측정된 대역이고, 변환은 그 대역에 수렴할 때까지 반려·코칭을 반복한 결과입니다.

반려 → 코칭 → 수렴이 실제로 돈 기록

저자 A 변환의 1차 초안은 게이트에서 이렇게 반려됐습니다(실측 로그):

[어미 분포] 합니다체 54.5% · 이 저자 대역 상한 30%  → 반려
  왜   : AI가 격식을 흉내 낼 때 나오는 전형적인 "합니다 도배".
        이 저자의 실지문은 구 단위로 끊는 명사 종결이 절반 이상이고,
        합니다는 절제해서 씁니다
  코칭 : 격식 종결의 절반을 명사 종결·구 단위 행갈이로 바꾸세요

이 코칭대로 고친 v2가 위의 89.5점입니다. "감으로 비슷하게"가 아니라 — 측정이 반려하고, 진단이 고칠 방향을 말하고, 재채점이 수렴을 확인합니다.

코칭이 실제로 어떻게 나오나

채점기는 72/100 같은 점수를 내지 않습니다. 저자의 실제 코퍼스에서 측정한 장르별 지문 대역을 읽고, 지표마다 진단문을 냅니다:

[문장 리듬] 당신의 변동계수 0.91 · 이 장르 대역 0.55–0.72
  왜   : 이 저자는 중간 길이 호흡으로 씁니다. 길고-짧음이 널뛰면 "AI 목소리"로 읽힙니다
  코칭 : 가장 긴 문장 3개를 쪼개세요. 긴 문장은 문단당 1개까지만

[질문 비율] 당신의 0% · 대역 4–11%
  왜   : 수사적 질문은 이 저자가 화제를 독자에게 건네는 방식입니다
  코칭 : 도입부의 단정 하나를 질문으로 바꿔 보세요

대역 + 왜 + 코칭 — 전부 측정 데이터에서 나오고, 일반적인 "글쓰기 요령"에서 나오지 않습니다.

모드 안내

gate.py의 두 모드 — 목적이 다르면 잣대도 다르다

모드 언제 무엇이 다른가
--mode copy (기본) 저자 모방 충실도가 목표일 때 — 그 사람 명의로 나갈 글 저자의 실제 습관은 일반 작문 규범에 어긋나도 허용. AI 상투어 검사도 "저자 코퍼스에 실제로 없는 표현"만 하드 차단(2단: 코퍼스 0회 = 즉시 반려 / 저자도 쓰는 표현 = 빈도 상한만)
--mode universal 보편적으로 좋은 글이 목표일 때 — 명의 없는 일반 원고 더 엄격한 일반 규범 적용. 저자 습관 면책이 없음
python3 gate.py draft.md                      # copy 모드 (기본)
python3 gate.py draft.md --mode universal     # 보편 윤문 모드
python3 gate.py draft.md --ts 2026-07-03T12:00:00+09:00   # 실행 시각 스탬프
# 산출: draft.md.stylegate.json (pass 여부 + 축별 판정 + 사유)

type_profiler.py의 장르 프로파일

같은 저자라도 장르마다 지문이 다릅니다(사색글과 정보글의 어미 분포는 서로 다른 사람 수준으로 갈립니다). 프로파일은 코퍼스에서 장르별로 캘리브레이션하며, 판별은 선언된 라벨이 아니라 어미 분포 최근접(nearest-centroid) 으로 합니다:

python3 type_profiler.py     # 데모: 샘플 문장의 장르 판별 + 대역 이탈 진단

rewrite_loop.py의 합성 판정

정량(어미·연결·시그니처 3축) + 정성(다중 심사: 독자 시점·페르소나·사실 구조)을 합성해 "다음에 어느 축을 고칠지"를 지시합니다:

python3 rewrite_loop.py      # 데모: 합성 점수 + 다음 퇴고 가이드

구성 요소

파일 역할
skill/SKILL.md 8단계 집필 파이프라인 정본 (장르 판별 → 개요 → 개요 승인 게이트 → 차용 초고 → 4렌즈 리뷰 → 정량 패스 → 최종 게이트)
skill/outline-playbooks.md 장르별 개요 템플릿 + “산문보다 개요 먼저” 하드 게이트 + 4렌즈(구조/독자/회의론자/목소리) 리뷰
skill/gate.py 발행 전 4축 게이트 — 어미 분포 가드 · 차용 인용 확인 · 원본 출처(저자 발행본 유래) · AI 상투어 2단 검출
skill/build_corpus.py 저자 발행글 → 코퍼스 + 장르별 통계 증류 (소스는 각자 지정, 코퍼스는 비공개 유지)
skill/type_profiler.py 어미 분포 기반 장르 판별 (표준 라이브러리만, 형태소 분석기 불요)
skill/quant_scorer.py · rewrite_loop.py 정량 3축 채점 + 황금 앵커 기준 퇴고 루프
skill/band_scorer.py 코퍼스 대역 지문 채점기 — raw 점수 + 저자 실글 분포 백분위 + 실글 p25 캘리브레이션 컷 + 과잉 전형성 경고 + 표본 부족 시 판정 거부
skill/connective_lib.py 연결 조직 패턴(예고·회수·수미상관) + 합성 예문
skill/check_endings.py · humanize_whitelist.py · check_corpus_phrases.py 보조 가드: 어미 카운터 · 윤문 시 시그니처 보호 · 연어 기반 봇 말투 검출
skill/multibot_judge.py 다중 심사 프롬프트 빌더 (사실검증 / 독자 시점 / 문체 역할)
skill/test_*.py 실행 가능한 스펙 9종

전부 Python 표준 라이브러리입니다. 도구 자체는 API를 호출하지 않습니다 — 초고를 쓰는 모델이 무엇이든, 그 둘레의 결정론적 검증 층입니다.

사용법 — 처음부터 끝까지

0. 동작 확인 (코퍼스 없이)

cd skill
for t in test_*.py; do python3 "$t"; done   # 9종 전부 green

1. 코퍼스 구축 (저자 1인당 1회)

  1. build_corpus.py를 저자의 발행글(AI 초안 ❌)에 연결해 실행 → corpus/ 생성(이 레포에선 gitignore).
  2. 캘리브레이션 체크리스트(SKILL.md):
    • type_profiler.PROFILES
    • AI 상투어 2단 구축 — 코퍼스 0회 표현 = 하드 티어 / 저자도 쓰는 표현 = 빈도 상한 티어. 남의 금지어 목록이 아니라 당신 코퍼스에서
    • BOT_AUTHOR_HINTS·AUTHOR_NAME_HINTS·PERSONA_VAULT_ROOT
    • 장르별 대역(어미 %·문장길이 변동계수·마커 빈도) 측정 + 왜 그 값이 그 장르의 지문인지

2. 글쓰기 파이프라인 (8단계 — SKILL.md 정본)

  1. 장르 판별 → 2. 개요 작성(신규 글은 방향 후보 2–3개 제시 → 저자 선택 → 템플릿 채움) → 3. 작법 점검(개요가 어떤 "좋은 도입"을 쓰고 어떤 "흔한 실패"를 피하는지 명명) → 4. 개요 승인 — 하드 게이트(승인 전 산문 금지) → 5. 차용 초고(같은 장르 발행글 2–3편에서 도입·연결·마무리 수법 차용) → 6. 4렌즈 리뷰(구조→독자→회의론자→목소리 순, 목소리는 마지막) → 7. 정량 패스(quant_scorer.py+check_endings.py — 대역 대비 진단) → 8. 최종 게이트(gate.py).

3. 발행 전 게이트

python3 gate.py my-draft.md --mode copy
cat my-draft.md.stylegate.json   # pass: true 여야 발행

4. 대역 채점 (band_scorer)

# 밴드 구축 (저자 실글 점수 분포까지 캘리브레이션 — 1회)
python3 band_scorer.py build corpus.jsonl author-band.json
# 초고 채점
python3 band_scorer.py score my-draft.txt author-band.json
# → raw 점수 + percentile_vs_author("실글 대비 상위 몇 %") + pass_hint(실글 p25 컷) + over_typical(실글 p90 초과 = 과잉 전형성 경고)

알려진 한계 (2026-07 다회 스트레스 테스트 실측)

같은 기계를 서로 다른 두 저자 코퍼스(530편/209편)에 적용해 5축으로 공격한 결과를 그대로 적습니다:

  1. 절대 점수는 함정이다. 저자 본인의 발행글도 절반이 “대역 중앙” 기준 85점을 못 넘습니다(자연 분산). 그래서 band_scorer는 백분위·실글 캘리브레이션 컷·과잉 전형성 경고로 보고합니다 — 점수 하나만 뽑아 쓰지 마세요.
  2. 정량 지표는 내용에 무감합니다. 지표만 흉내 낸 무의미한 글이 실글 하위 25% 이상의 점수를 받습니다. 정성 심사(4렌즈 리뷰·multibot_judge)와의 합성 없이 단독 합격 판정에 쓰면 뚫립니다 — 모든 채점 출력에 이 경고가 박혀 있는 이유.
  3. 짧은 글은 판정하지 않습니다. 문장 8개 미만은 분포 지표가 무의미해 점수 대신 insufficient_sample을 반환합니다.
  4. 전장르 통합 밴드는 "저자"가 아니라 "저자×주류 장르"를 잽니다. 유머 위주 코퍼스의 밴드로 정서 글을 재면 저자 본인 문체도 남의 글처럼 나옵니다. 장르별로 코퍼스를 나눠 밴드를 만드는 것이 정답입니다.
  5. 어미 검출은 표면형 정규식이라 교착어 결합형을 일부 놓칩니다 — 같은 자를 양쪽에 적용하는 상대 비교에서만 공정합니다.
  6. 코퍼스 위생이 숫자를 조용히 오염시킵니다. 실측: 크롤 코퍼스 209편 중 92%의 선두에 크롤러가 남긴 채널명·날짜 줄이 남아 있었고, 근사 중복(조회수 숫자만 다른 재캡처) 8쌍이 정확-중복 검사를 통과해 살아남았습니다. 판별 서열(어느 저자 글인가)은 견뎠지만 지문 수치(문장당 어절·리듬 변동·어미 비율)와 점수가 전부 편향됐습니다 — 위 표는 정화 후 재계산 값입니다. build_corpus.py의 위생 게이트(반복 보일러플레이트 줄 검출 + 근사 중복 드롭)가 이 사례에서 나왔고, 새 코퍼스를 물릴 때 빌드 로그의 ⚠️ 위생 경고를 반드시 확인하세요.

방법론 노트 (왜 이렇게 만들었나)

  • 어휘가 아니라 어미. 한국어에서 문장 종결형(합니다체/해요체/평어/음슴체) 분포는 가장 강한 장르·저자 지문입니다 — 1,000편+ 코퍼스에서 z-점수 +1.5~+1.8 실측. 기능어·어미 지문은 의식적으로 꾸미기 어렵기 때문에 좋은 신호입니다(Burrows’ Delta의 통찰을 한국어에 적용).
  • AI 상투어 목록은 폴클로어가 아니라 코퍼스에서. 흔히 도는 “AI 티 나는 표현” 목록의 상당수는 실제 사람 코퍼스에도 나옵니다. 무턱대고 금지하면 모방 충실도가 깨집니다 — 그래서 2단.
  • 개요 먼저, 항상. 가장 레버리지 큰 게이트 하나를 꼽으라면: 장르 개요가 승인되기 전에 산문을 쓰지 않는 것.

English

영문 요약과 원문 문서는 README.en.md에 있습니다.

License

MIT

v0.3.3[beta]