AI 글은 통계로 잡힌다 — AI 티를 파이썬으로 측정하는 법

AI 글은 통계로 잡힌다 — 문체 지문 파이썬 측정

AI 글은 눈이 아니라 통계로 잡힌다. 사람 눈이 “이거 AI가 썼네” 하고 잡아내는 그 감의 정체가 문체의 통계이기 때문이다. 이 글은 그 감을 숫자로 옮겨, 파이썬 결정론 게이트로 AI 티를 측정하는 방법을 정리한 기록이다.

감으로 잡던 사람이 파이썬으로 넘어간 이유

요즘 블로그나 제품 리뷰를 읽다 “이거 AI가 썼네” 하고 3초 만에 덮는 일이 잦아졌다. 나도 그랬다. 4월에는 그 감을 체크리스트로 적어 발행까지 했다.

그런데 감은 미덥지 않다. 사람마다 다르고, 모델이 버전업할 때마다 흐려진다. 그 글에도 “이 체크리스트의 쓸모는 길어야 1년”이라고 적어뒀다.

결론부터 적는다. AI 글은 통계로 잡히고, 그 통계 지문은 파이썬으로 측정된다.

발행 전 모든 글에 그 게이트를 돌린다. 이 글도 그 게이트를 통과해야 나간다.

“AI가 썼네”라고 느낀 그 감의 정체

한 번쯤 이런 적이 있을 거다. 문장은 매끄러운데 어딘가 밋밋해서 AI를 의심한 적이 있다.

왜 그렇게 느꼈는지는 설명하지 못한 적도 있다. 그 감을 규칙으로 적어봤지만 다음 글에서 또 놓친 적도 있다.

그 감은 사실 통계다. 사람 눈이 잡아낸 건 문체의 분산이 부족하다는 신호였다.

사람 눈이 잡던 걸 연구는 숫자로 잡는다

문체 계량(stylometry)으로 AI 글을 가려내는 연구는 지금 정확도 81~98%를 보고한다. 그중엔 사전 학습 없이 문체 통계만 쓰는 zero-shot 방식으로 90.6%를 찍은 결과도 있다 (arXiv 2507.00838).

2026년 PAN 워크숍의 탐지 과제에서는 통계 파이프라인이 에세이·뉴스·소설 장르를 걸쳐, 난독화된 글까지 포함해 F1 0.898을 찍었다 (arXiv 2602.09147).

핵심은 이거다. LLM은 저마다 고유한 문체를 가진다. 연구자들은 이걸 사람의 개인어(idiolect)에 비유한다 (arXiv 2509.10179).

ChatGPT의 문체와 Gemini의 문체가 다르고, 둘 다 사람 글보다 분산이 좁다. 균질함이 곧 서명이다.

감은 측정할 수 없지만 지문은 측정된다

여기서 4월의 방식과 지금의 방식이 갈린다.

4월 (주관) 지금 (결정론)
판단 주체 사람 눈 파이썬
재현성 읽는 사람마다 다름 같은 글 = 같은 판정
근거 경험칙 발행 29편 밴드
비용 읽는 시간 ≈0 (LLM 호출 없음)

발행한 블로그 29편(2026-04-12~07-02)에서 산문만 뽑아 문체 밴드를 계산했다. 문장은 평균 8.1어절, 정상 범위 6.8~9.2어절이다.

마침표는 1,000어절당 29.8회로, 짧은 문장을 꼬박 닫는다는 뜻이다. hedge(“것 같다”)는 1,000어절당 0.2회로, 같은 저자의 일기 코퍼스(5.1회)의 25분의 1이다.

1인칭 “나”는 1.0회로, 일기(14.3회)와 정반대다. 문장 길이 변주(변동계수)는 0.48~0.60을 지켜야 한다. 균질하면 게이트가 잡는다.

이 계산을 파이썬 표준 라이브러리로만 돌린다. LLM 호출이 없어서 결정론이다. 같은 글은 언제 돌려도 같은 판정이 나온다.

strip_blog_prose.py  post.md  /tmp/prose.txt
verify_style.py  /tmp/prose.txt  fingerprint-slim.json  blog  blog

밴드를 벗어나면 pass: false가 뜬다. 그 지표만 고쳐서 다시 돌린다.

문체 밴드 게이트 — 지표가 정상 밴드를 벗어나면 fail (문장 길이·1인칭·변주는 pass, 이모지는 fail)

연구가 AI 글을 통계로 잡아낸 그 원리를, 방향만 돌려 발행 전 글에 들이댄 것이다. 남이 재는 잣대로 글을 먼저 재는 셈이다.

이 게이트가 하지 않는 것

오해를 먼저 막는다. 이건 AI 탐지기가 아니다. AI가 썼는지 사람이 썼는지 판별하지 않는다.

이미 발행한 톤과 이 글이 얼마나 일치하는지만 본다. 문체 지문 게이트지 진위 판별기가 아니다.

더 불편한 지점도 적는다. 게이트는 사람다움을 재지 않는다. AI가 개입해 만든 발행 톤과의 일치를 잰다. 그러니 “AI 티 제거”라기보다 “AI 티의 일관성 관리”에 가깝다.

게이트를 통과했다고 “안 들킨다”는 뜻도 아니다. 통과는 발행 밴드 안에 들어왔다는 것뿐이다. 지문을 관리 가능한 대상으로 바꾼 것이지 탐지를 우회한 게 아니다.

실제로 이 게이트는 내 옛 글도 떨어뜨린다. 5월 이후 글은 홀드아웃 검증에서 2건 다 통과했는데, 4월 글 2건은 탈락했다.

이모지와 행 길이가 밴드를 벗어났기 때문이다. 규범이 자리 잡기 전 흔적을 게이트가 걸러낸 것이다. 손이 아니라 밴드가 판단했다.

감을 규칙으로, 규칙을 숫자로

Q. AI 글은 정말 통계로 다 잡히나?
A. 짧은 샘플에서는 흔들린다. 200단어 아래에서는 오탐이 늘어난다 (Oxford DSH fqag064). 긴 글일수록 지문이 선명해진다.

Q. 이 방식을 그대로 쓰려면?
A. 자기 발행 글 20편 이상에서 네 지표를 뽑는다. 문장 평균 길이, 마침표 밀도, hedge 빈도, 1인칭 밀도다. 각 지표의 하위 10%~상위 90% 구간을 정상 밴드로 잡고, 새 글이 그 밖으로 나가면 실패로 찍는다. 파이썬 표준 라이브러리 수십 줄이면 되고 모델 호출이 없어 비용이 거의 0이다.

감으로 시작해도 된다. 그런데 감은 다음 글에서 새고, 모델 버전이 바뀌면 무뎌진다. 그래서 감을 규칙으로, 규칙을 숫자로 옮겼다. 밴드에 안 맞는 사례가 쌓이면 그때 다시 조정하려고 한다.

관련 글


글쓴이 — 프론트엔드 8년차 개발자. Claude Code 기반 블로그 발행 파이프라인을 운영하며, 이 글에서 다룬 문체 게이트를 실제 발행 전 단계로 쓴다. 밴드 수치는 2026-07-04 기준 실측이며 발행 글이 쌓이면 갱신한다.

태그: #AI글쓰기 #문체분석 #stylometry #AI탐지 #Claude #블로그자동화

댓글

이 블로그의 인기 게시물

맥 스튜디오 M4 Max 128GB 로컬 LLM 4개 속도 비교 — gemma4·llama3.3·qwen3 실측

Claude Opus 4.7 출시 총정리 — 뭐가 달라졌고 지금 써야 하나

Claude Code로 블로그 발행 15분을 1줄로 — 해고 후 첫 자동화 경험