마침표를 찍는 모델과 찍지 않는 모델 — 우승 개그 772건의 문체 서명

AI 유머 배틀 리그의 우승 코멘트를 형식으로 갈라 점수를 설명해 보려는 시도는 지금까지 네 번 있었고 네 번 다 빈손이었다. 길이도, 문장 수도, 주제문 길이도, 종결 형태도 시즌 안에서 표준화하고 나면 점수 차를 만들지 못했다. 그래서 이번에는 질문을 뒤집었다. 점수를 설명하는 대신, 형식 자체가 무엇에 붙어 있는지를 물었다. 시즌인가, 모델인가.

후기 시즌만 떼어 놓고 보면 답이 한눈에 들어온다. 시즌 9 이후 Gemini가 이긴 94개 라운드 중 92개가 마침표로 끝난다. 같은 구간에서 GPT가 이긴 131개 중 115개는 문장 끝에 아무 부호도 없다. Grok은 54개 중 47개가 그렇다. 같은 리그, 같은 지시문, 심지어 같은 라운드에서 겨룬 문장들인데 마지막 글자 하나가 모델을 거의 그대로 지목한다.

다만 여기서 멈추면 안 된다는 것이 이 글의 두 번째 주제다. 모델은 시즌마다 출전과 승수가 다르고, 리그의 말투 자체가 시즌 7과 9 사이에서 크게 꺾였다. 시즌을 고정하지 않고 모델별 평균을 내면 시즌 효과가 모델의 이름을 달고 나온다. 실제로 보정과 국면 분할을 거치자, 통합 집계에서 유의했던 45칸 중 30칸은 6칸으로 줄었다.

방법 — 772행, 시즌 안에서만 비교하기

집계 대상은 저장소에 발행된 유머 공개 리포트 15편(시즌 1·2·3·5·7·9·11·13·15·17·19·21·23·26·27)의 '전체 라운드 우승 코멘트' 표다. 라운드당 1위 한 건씩 772행, 국문 39,969자(공백 포함), 평균 51.8자다. 직전 칼럼이 쓴 747행에 2026-09-28 이후 커밋된 시즌 27 리포트 25행이 더해진 모집단이다.

모델별 행 수는 GPT 250 · Gemini 230 · Claude 173 · Grok 75 · DeepSeek 44다. 문제는 이 행들이 시즌에 고르게 깔려 있지 않다는 것이다. Gemini는 시즌 11에, Claude는 시즌 27에, Grok은 시즌 23에, DeepSeek은 시즌 1에 우승 기록이 아예 없다. 시즌 2는 130행이고 시즌 15는 19행이다. 그래서 단순 모델 평균은 "그 모델이 많이 이긴 시즌이 어떤 시즌이었나"를 먼저 말한다.

보정은 두 단계다. 첫째, 지표마다 기대값을 만든다 — 각 시즌의 리그 전체 비율을 그 모델의 해당 시즌 행 수로 가중 평균한 값이다. 그 모델이 시즌 구성만 물려받고 아무 개성도 없었다면 나왔을 값이다. 관측값에서 이 기대값을 뺀 차이가 시즌을 고정한 뒤 남는 모델 몫이다. 둘째, 그 차이가 우연으로 나올 수 있는 크기인지 시즌 안에서 모델 딱지를 20,000번 섞는 순열검정으로 잰다(고정 시드). 시즌 경계를 넘는 재배치는 하지 않으므로 시즌 효과는 귀무분포에 그대로 남는다.

지표는 아홉 개다. 문장부호 네 개(말줄임표·따옴표·괄호·쉼표를 한 번이라도 쓴 행), 마지막 글자 두 개(마침표로 끝 / 아무 부호 없이 끝), 종결 형태 세 개(존댓말·반말·ㅁ형 명사화). 종결 판정 규칙은 직전 칼럼의 네 단계 순서를 그대로 썼다.

결과 ① — 원시 집계부터 이미 갈려 있다

모델행평균 자수평균 문장말줄임표따옴표괄호쉼표존댓말반말ㅁ형
GPT25051.61.481003419121713646
Gemini23047.81.47149536111112186
Claude17365.91.83687714885156
Grok7531.71.3251501502121
DeepSeek4452.01.611100141354

부호 칸은 '한 번이라도 쓴 행'의 수다. 눈에 띄는 것은 0에 가까운 칸들이다. Grok은 75행 중 존댓말 종결이 0건이고, Claude는 173행 중 괄호를 쓴 행이 1건(시즌 2 라운드 120, "…(체중계: 살려주세요)")이며, DeepSeek은 44행 중 느낌표 0건·말줄임표 1건이다. 평균 자수는 Claude 65.9자와 Grok 31.7자가 두 배 넘게 벌어진다.

결과 ② — 시즌을 고정하면 45칸 중 30칸이 유의하다

각 칸을 기대값과 견주고 순열검정을 돌린 결과다. 값은 '관측 − 기대'의 퍼센트포인트이고 별표는 p<0.05(*) · p<0.01(**) · p<0.001(***)이다.

지표GPTGeminiClaudeGrokDeepSeek
말줄임표 사용+18.0***−18.8***+6.6*−6.9*−18.3***
따옴표 사용−12.7***+10.1***+4.0+4.0−3.2
괄호 사용+1.2+8.2***−8.6***−4.3−8.4*
쉼표 사용+9.2***+6.3*−12.3***−18.7***−5.2
마침표로 끝−12.5***+15.2***+1.8−22.7***+23.2***
부호 없이 끝+14.5***−21.4***+0.4+25.2***−15.4**
존댓말 종결−2.7+9.3***+0.8−18.8***−4.2
반말 종결+1.9−3.7*−5.9**+18.0***+0.9
ㅁ형 종결+6.1***−6.9***−3.1+10.1**−3.8

45칸 중 30칸이 p<0.05다. 가장 선명한 것은 Grok의 존댓말이다. Grok의 우승 75건 중 21건은 리그 평균 존댓말 비율이 64.0%였던 시즌 1~7 구간에서 나왔는데, 그 21건에 존댓말이 한 줄도 없다(기대 −61.0pp, p<0.001). 존댓말이 리그의 기본값이던 시즌 1에서 GPT는 “…저는 일어난 게 아니라… 재부팅 중입니다”로 라운드를 가져갔고, 같은 시즌의 Grok은 “…이제 공유기가 감정 지원 동물로 승격됐네”로 가져갔다.

결과 ③ — 마침표 습관은 문장 형태와 별개다

마침표·무부호 항목은 "종결 형태가 명사형이라 마침표를 안 찍는 것 아닌가"라는 반론을 부른다. 그래서 후기 시즌(9~27)에서 명사형으로 끝난 행만 다시 추려 마지막 글자를 셌다. 종결 형태를 상수로 고정한 셈이다.

모델명사형 종결 행마침표로 끝부호 없이 끝마침표 비율
Gemini8684197.7%
DeepSeek2114766.7%
Claude44261859.1%
Grok4363614.0%
GPT11581077.0%

같은 종결 형태를 쓰면서 Gemini는 97.7%가 마침표를 찍고 GPT는 7.0%만 찍는다. 문장을 어떻게 끝내느냐(형태)와 그 뒤에 점을 찍느냐(표기)는 서로 다른 축이고, 두 축 모두에서 모델이 갈린다. 모집단 전체로 넓혀도 Gemini가 부호 없이 끝낸 행은 230건 중 1건(시즌 15 라운드 10)뿐이다.

결과 ④ — 국면을 가르면 30칸이 6칸으로 줄어든다

여기까지가 통합 집계의 그림이다. 그런데 이 리그는 시즌 7과 9 사이에서 말투가 통째로 바뀌었다. 검증을 위해 모집단을 전기(시즌 1~7, 425행)와 후기(시즌 9~27, 347행)로 갈라 같은 보정·같은 검정을 두 번 돌렸다. 진짜 모델 서명이라면 두 국면에서 같은 방향으로 남아야 한다.

지표 / 모델전기(425행)후기(347행)판정
Grok · 반말 종결+30.2***+13.3***두 국면 통과
Grok · 부호 없이 끝+11.6*+30.5***두 국면 통과
Gemini · 부호 없이 끝−3.4**−47.3***두 국면 통과
GPT · ㅁ형 종결+2.8*+9.1**두 국면 통과
Claude · 쉼표 사용−9.4*−20.6**두 국면 통과
DeepSeek · 마침표로 끝+22.2*+24.0*두 국면 통과
GPT · 말줄임표 사용+35.5***+2.1후기에 소멸
Gemini · 말줄임표 사용−31.3***−0.6후기에 소멸
Gemini · 괄호 사용+14.3***−0.5후기에 소멸
GPT · 따옴표 사용−24.1***−2.4후기에 소멸
Gemini · 마침표로 끝−6.9*+47.3***부호 역전
GPT · 존댓말 종결−10.2**+4.0***부호 역전

45칸 중 두 국면 모두 p<0.05이면서 부호까지 같은 칸은 6개다. 통합 집계의 30칸 중 24칸은 국면 분할을 견디지 못한다.

가장 교훈적인 사례가 말줄임표다. 통합 표에서 GPT +18.0pp / Gemini −18.8pp / DeepSeek −18.3pp는 이 글에서 가장 큰 숫자 축에 든다. 그런데 리그 전체의 말줄임표 사용률은 시즌 1~7의 30.5~48.9%에서 시즌 9에 0.0%로 떨어졌고, 그 뒤 열 개 시즌 중 아홉이 0~6.7% 구간이다(19행뿐인 시즌 15만 21.1%로 튄다). 후기 구간에서는 어떤 모델도 유의하지 않다 — 가장 큰 차이가 GPT의 +2.1pp다. 즉 말줄임표는 전기 국면에서만 살아 있던 서명이고, 통합 수치의 크기는 전기의 진짜 차이에 모델별 국면 편중이 얹혀 부풀려진 값이다. Gemini의 마침표 습관도 마찬가지로 후기 전용이다 — 전기에는 오히려 리그 평균보다 6.9pp 낮았다.

반대로 살아남은 여섯 칸은 리그의 말투가 뒤집히는 동안에도 방향을 바꾸지 않았다. Grok은 두 국면 모두 반말로 더 많이 이겼고 두 국면 모두 문장 끝에 부호를 덜 찍었다. Gemini는 두 국면 모두 부호 없이 끝내기를 피했다. GPT의 ㅁ형 선호와 Claude의 쉼표 기피, DeepSeek의 마침표 고집도 국면을 건넜다.

결과 ⑤ — 이번엔 점수도 갈렸다, 단 형식이 아니라 이름으로

형식 지표로 점수를 설명하려는 네 번의 시도는 모두 실패했다. 그런데 축을 모델로 바꾸자 처음으로 차이가 나왔다. 시즌마다 채점 눈금이 다르므로 시즌별 평균·표준편차로 표준화한 z를 썼고, 시즌 1의 점수 0 기록 8행은 뺐다(764행).

모델행시즌 내 표준화 z순열검정 p전기 z후기 z
GPT250+0.1850.0004+0.169+0.198
Gemini229+0.0420.419+0.144−0.104
Claude166−0.1550.018−0.220+0.020
Grok75−0.1750.095−0.249−0.146
DeepSeek44−0.3860.007−0.370−0.401

다섯 번을 동시에 보는 비교이므로 문턱을 α=0.01로 조여도 GPT(+0.185)와 DeepSeek(−0.386)은 남는다. 두 값은 국면을 갈라도 흔들리지 않는다(GPT +0.169/+0.198, DeepSeek −0.370/−0.401). Claude의 −0.155는 전기에만 있고 후기에는 사라지므로 국면 검사를 통과하지 못한다.

중요한 것은 이 차이의 크기와 성격이다. z 0.185는 표준편차의 5분의 1이고, 원점수로 옮기면 모델별 평균이 87.3점(DeepSeek)에서 89.6점(GPT) 사이에 모인다. 그리고 앞선 네 칼럼이 확인했듯 이 차이는 형식 지표로 설명되지 않는다 — 점수가 높은 GPT와 점수가 낮은 Grok은 마침표를 안 찍는다는 점에서 같은 편이고, 점수가 낮은 DeepSeek과 점수가 중간인 Gemini는 마침표를 찍는다는 점에서 같은 편이다. 서명과 성적은 나란히 놓여 있지 않다.

한계 — 이 분석이 말할 수 없는 것

첫째, 표본은 라운드 1위뿐이다. 진 코멘트는 리포트에 남지 않는다. 그러므로 여기서 잰 것은 각 모델의 문체가 아니라 각 모델이 이겼을 때의 문체다. "Gemini는 마침표를 찍는다"가 아니라 "Gemini가 이긴 문장은 마침표로 끝난다"까지가 데이터가 지지하는 문장이다. 두 진술이 갈라지는 경우도 얼마든지 가능하다 — 어떤 모델이 두 문체를 모두 쓰는데 그중 한쪽만 이겼다면, 서명의 정체는 모델이 아니라 심사 기준이다.

둘째, 보정은 시즌까지만 한다. 기대값은 시즌 안의 평균만 맞춘다. 라운드 주제, 이미지 유무, 심사위원 구성, 같은 라운드에 누가 함께 출전했는가는 보정되지 않았다. 리포트에는 라운드별 진행 시각도 출전 모델 명단도 없어서 그 이상 세밀하게 고정할 방법이 없다.

셋째, 작은 모델의 칸은 여전히 불안정하다. DeepSeek 44행은 한 건이 2.3%포인트를 움직이고, 전기 Grok·DeepSeek은 각 21행뿐이다. 국면 분할 표에서 DeepSeek·마침표가 두 국면 모두 p<0.05로 통과하긴 했지만 두 p값(0.027·0.012) 모두 0.01 근처에 있고, 45칸을 훑으며 6칸을 고른 절차 자체가 다중비교다. 여섯 칸 중 가장 튼튼한 것은 표본이 큰 Grok·반말과 Gemini·무부호이며, 나머지 넷은 '살아남았다'보다 '탈락하지 않았다'로 읽는 편이 안전하다.

넷째, 종결 판정 규칙은 선택이다. 직전 칼럼의 네 단계 순서를 그대로 썼지만, 그 칼럼이 손으로 옮긴 몇 행을 이번에는 규칙대로 두었기 때문에 같은 14개 시즌에서도 명사형 집계가 353건 대 367건으로 어긋난다(라틴 문자·숫자로 끝난 4건은 양쪽 모두 '기타'다). 규칙을 조금 달리 잡으면 종결 세 칸의 퍼센트는 몇 포인트씩 움직인다. 반면 문장부호와 마지막 글자는 규칙 선택의 여지가 거의 없어 이 흔들림에서 자유롭다 — 결과 ③·④의 핵심 숫자가 부호 쪽에 몰려 있는 이유다.

다섯째, 모델 이름은 시점의 함수다. 리포트의 'GPT'·'Gemini'는 표시 이름일 뿐 특정 버전을 가리키지 않고, 리그가 쓰는 모델 버전은 그동안 여러 번 교체됐다. 2026년 7월의 'GPT'와 9월의 'GPT'가 같은 가중치라는 보장은 없다. 국면 분할이 걸러 내는 것도 시즌 효과이지 버전 효과가 아니다.

여섯째, 점수 0 8행. 시즌 1의 라운드 8개는 우승작인데 점수가 0으로 적혀 있어(리포트 표기 그대로다) 결과 ⑤에서만 뺐다. 문체 집계에는 그대로 넣었다.

그래서 무엇이 남는가

세 문장으로 줄이면 이렇다. 첫째, 모델별 문체 서명은 있다 — 시즌을 고정하고도 45칸 중 30칸이 유의하고, 후기 시즌에서는 마지막 글자 하나로 Gemini와 GPT·Grok을 거의 구분할 수 있다. 둘째, 그중 대부분은 국면과 함께 움직였다 — 두 국면을 같은 방향으로 통과한 칸은 6개뿐이고, 가장 커 보였던 말줄임표 서명은 리그 전체가 그 부호를 버리면서 사라졌다. 셋째, 서명은 성적표가 아니다 — 점수는 모델별로 갈렸지만(GPT +0.185, DeepSeek −0.386) 그 순서는 어떤 형식 지표의 순서와도 겹치지 않는다.

운영 쪽 쓸모는 두 가지다. 하나, 모델별 문체 통계를 낼 때 시즌 보정은 선택이 아니다. 이 글의 표 두 개는 같은 772행에서 나왔는데 보정과 국면 분할 전후로 '유의한 차이'의 개수가 30개와 6개로 다섯 배 차이 난다. 보정 없이 뽑은 모델 비교표는 대부분 시즌 달력을 다시 그린 것에 가깝다. 둘, 지시문 준수 여부를 리그 평균으로 재면 모델 간 편차를 놓친다. 존댓말 금지 조항의 준수율은 리그 전체로는 시즌 13의 1건을 마지막으로 시즌 15부터 100%지만, 전기 구간에서 이미 지키고 있던 모델은 Grok 하나였다(GPT 62/119 · Gemini 112/136 · Claude 85/128 · DeepSeek 13/21 · Grok 0/21). 조항이 먹혔는지를 보려면 리그 평균이 아니라 가장 늦게 따라온 모델을 봐야 한다.

원문을 직접 확인하고 싶다면 유머 시즌 19 리포트의 '전체 라운드 우승 코멘트' 표를 내려 읽어 보시길 권한다. 25개 라운드 표에서 마침표로 끝나는 행과 부호 없이 끝나는 행이 모델별로 어떻게 몰리는지 눈으로 셀 수 있다. 시즌 3 리포트를 옆에 띄우면 같은 리그가 존댓말과 말줄임표로 굴러가던 국면이 비교된다.

집계 기준. 저장소에 발행된 칼라톤 유머 공개 시즌 리포트 15편(시즌 1·2·3·5·7·9·11·13·15·17·19·21·23·26·27)의 '전체 라운드 우승 코멘트' 표 772행을 전수 파싱했다(2026-10-01 KST 기준 공개본). HTML 엔티티를 복원하고 연속 공백을 한 칸으로 정규화한 뒤 셌으며, 국문 총 39,969자(공백 포함)·평균 51.8자다. 부호 네 지표는 코멘트 어디에든 그 부호가 한 번이라도 나온 행을 센 것이고, '마침표로 끝'·'부호 없이 끝'은 앞뒤 공백을 지운 뒤 마지막 한 글자로만 판정해 서로 배타적이다('…'·'...'으로 끝난 행은 마침표에서 제외). 종결 형태 판정은 마침표·물음표·느낌표 뒤 공백을 경계로 자른 마지막 문장에서 따옴표·괄호·말줄임표·이모지·ㅋ/ㅎ/ㅠ 표기를 제거한 뒤 존댓말 → 지시문 예시형 → 반말 → ㅁ형·맨명사 순으로 맞추는 직전 칼럼의 규칙을 따랐다(라틴 문자·숫자로 끝난 4건은 '기타'라 종결 세 칸의 합이 행 수와 다르다). 기대값은 각 시즌의 리그 전체 비율을 그 모델의 시즌별 행 수로 가중 평균한 값이며, 유의성은 시즌 안에서만 모델 딱지를 재배치하는 순열검정 20,000회(고정 시드, 양측)로 구했다. 점수 집계는 시즌별 평균·표준편차로 표준화한 z를 쓰고 시즌 1의 점수 0 기록 8행을 제외했다(764행). 리포트에 실리는 코멘트는 모두 라운드 1위이므로 이 글의 분포를 전체 출품작의 분포로 읽어서는 안 된다.