Korean Watermarking by Syllable Juxtaposition

띄어쓰기를 지워도
남는 워터마크

AI가 쓴 한국어 글에 보이지 않는 표시를 남기고, 비밀 키 하나로 다시 찾습니다. 표시는 토큰이 아니라 이웃한 한글 음절 쌍에 실려 있어 띄어쓰기, 보이지 않는 문자, 토크나이저가 바뀌어도 검출 점수가 그대로입니다.

pip install "git+https://github.com/Mingjaam/Ko-MaJ.git"
AI가 글을 쓰는 중
0.0z 점수 (음절 쌍)
0검사한 음절 쌍
–토큰 쌍 유지율

실험에서 EXAONE-3.5-7.8B가 Ko-MaJ(δ=3)로 쓴 문장입니다. 칸 왼쪽 막대는 앞 음절과 이루는 쌍의 색이고, 초록 쌍이 우연(25%)보다 많을수록 z가 큽니다. 아래 칩은 Qwen2.5 토크나이저의 분할입니다.

아래로 넘기기
Why Ko-MaJ

토큰이 아니라 한글 음절에 표시한다

한국어는 띄어쓰기가 틀려도 읽는 데 문제가 없지만, 공백이 바뀌면 토큰 분할이 통째로 달라집니다. 그래서 토큰 위에 찍은 기존 워터마크는 공백 수정 한 번에 약해지고, 검사하려면 그 모델의 토크나이저가 있어야 합니다.

키만으로 검출

모델, 토크나이저, 형태소 분석기가 필요 없습니다. 검출기 하나로 여러 회사 모델의 출력을 모두 확인할 수 있고, 글 1,000개를 0.1초 안에 검사합니다.

정의상 불변

서식 문자를 지우고 NFC로 정규화한 한글 음절열이 같으면 점수도 같습니다. 띄어쓰기 변경, ZWSP, 자모 분해, 재토큰화에 흔들리지 않습니다.

어느 모델에나

생성할 때 로짓만 조정하므로 추가 학습이 없습니다. HuggingFace transformers와 vLLM에 한 줄로 붙고, 생성 속도 저하가 거의 없습니다.

Live demo

지금 브라우저에서 검사해 보세요

검출은 키만 있으면 되기 때문에 서버 없이 이 페이지 안에서 바로 돌아갑니다. 예시 글은 실험에서 EXAONE-3.5-7.8B가 공개 실험 키(h1, δ=3)로 쓴 출력의 일부입니다.

z = −40임계 4812+
0.0z 점수
0음절 쌍 (중복 제외)
0%초록 비율 (우연 25%)

판정 기준은 z > 4(표준정규분포에서 우연히 나올 확률 약 0.003%)입니다. 키를 한 글자만 바꾸거나 변형을 생성 때와 다르게 고르면(예시 글은 h1) 워터마크 글의 z가 0 근처로 떨어집니다. 실제로 쓸 때는 공개된 실험 키 대신 자신만의 키를 쓰세요.

How it works

세 단계로 표시하고, 키로 찾는다

01 · 정규화

한글 음절만 남긴다

서식 문자(ZWSP 등)를 지우고 자모로 쪼개진 글자를 NFC로 합친 뒤, 완성형 한글 음절만 남깁니다. 공백·문장부호·영문은 판정에 들어가지 않습니다.

02 · 초록 쌍

이웃 음절 쌍을 키로 판정

음절 11,172개로 만든 약 1억 2천만 쌍 각각을 비밀 키 해시로 초록(25%) 또는 빨강으로 나눕니다.

G(a, b) = [ H(K, a, b) < 0.25 ]
03 · 생성

음절을 완성하는 토큰을 민다

모델이 다음 토큰을 고를 때, 그 토큰이 새로 완성하는 음절 쌍 중 초록의 비율만큼 점수 δ를 더합니다. 바이트 조각은 글자가 완성될 때 셉니다.

ℓ′(v) = ℓ(v) + δ · g(v) / |S(v)|
04 · 검출

초록이 너무 많으면 워터마크

같은 쌍은 한 번만 세고, 초록 쌍이 25%보다 얼마나 많은지 z 점수로 잽니다. 필요한 것은 키 하나입니다.

z = (NG − γN) / √(Nγ(1−γ))
Usage

설치하고 바로 쓰기

검출은 numpy만 있으면 됩니다. 생성 플러그인은 transformers 또는 vLLM이 필요합니다.

매개변수기본값설명
key–비밀 키(정수). 생성과 검출에 같은 키를 씁니다.
delta2.5세기. 클수록 잘 잡히지만 글이 부자연스러워집니다. 7B 이상 모델에서 2~3을 권합니다.
varianth1h1(앞 1음절 문맥) · h2(앞 2음절) · h2r(h2 + 반복 문맥 제외: 반복 억제)
threshold4.0검출 z 임계값. 운영 환경에서는 같은 길이의 사람 글로 보정하세요.
max_syllables없음앞 N음절만 검사(논문은 200)
Results

공백을 지워도 그대로

4개 한국어 LLM, 프롬프트 500개, 앞 200음절, 사람 글로 정한 오탐률 약 1% 기준. 기존 기법은 공식 코드와 공식 검출기를 그대로 썼습니다.

띄어쓰기를 모두 지운 뒤의 탐지율 (%)

한계도 같이 적어 둡니다