Przejdź do treści
agentGreg EN · PLUmów 30 min

Research · watermarking LLM · sierpień 2026

Znak wodny to budżet, a lepsze modele mają mniej do wydania

Anthropic zacznie znakować to, co pisze Claude. Zmierzyłem, na czym taki znak wodny działa, na dziewięciu modelach z trzech rodzin i w dwóch językach. Hipoteza, z którą zaczynałem, że polszczyzna sama w sobie jest droga do znakowania, nie przetrwała własnego testu.

Grzegorz Brzezinka· 20 sierpnia 2026· własny eksperyment, jeszcze bez publikacji

W skrócie

14 sierpnia 2026 Anthropic ogłosił, że przyszłe modele Claude będą znakować swoje odpowiedzi we wszystkich produktach, między innymi po to, by spełnić wymogi EU AI Act. W tym samym tygodniu po LinkedInie krążył post, który symulował inny, starszy schemat i twierdził, że 200 słów daje 95% pewności. Zamiast symulować, zmierzyłem: dziewięć modeli z trzech rodzin, polski i angielski, dwa schematy znakowania, około 8 400 generacji i 1980 ponownych przeliczeń po atakach. Wyszły trzy wyniki. Pojemność znaku wodnego spada, gdy modele są lepsze, na wszystkich pięciu szczeblach skali, jakie dało się zbudować przy udowodnionym tym samym tokenizerze. Polska kara, której się spodziewałem, istnieje na powierzchni, ale ma złą nazwę: pojemność na słowo prawie nie zależy od języka, pojemność na token różni się na flagowym modelu 2,28 raza, a progi detekcji liczą tokeny. Do tego decyzja projektowa, dzięki której metoda wybrana przez Anthropic nie zniekształca tekstu, jest tą samą, która czyni ją podatną na edycję. Po drodze dane obaliły moją ulubioną hipotezę i ten artykuł to mówi wprost.

Gdzie właściwie mieszka znak wodny

Oba schematy, które testowałem, działają pod spodem tak samo. Żaden nie poprawia słów po fakcie. Oba korzystają z chwili, w której model wybiera kolejne słowo.

Starszy, „zielona lista” Kirchenbauera i współpracowników z 2023 roku, haszuje poprzedni token tajnym kluczem i na tej podstawie dzieli słownik na „zieloną” ćwiartkę i czerwoną resztę, a potem dodaje stały bonus (oznaczany δ) do wyników zielonych tokenów, zanim model wybierze. Tak napisany tekst zawiera trochę więcej zielonych słów, niż wynikałoby z przypadku. Weryfikator, który zna klucz, liczy je i podaje wynik z, czyli po prostu „o ile odchyleń standardowych powyżej przypadku to jest”. Nowszy, SynthID-Text od Google DeepMind, opublikowany w Nature w 2024 roku, należy do rodziny, której według Anthropic będzie używał Claude. Nie rusza prawdopodobieństw modelu, zmienia tylko źródło losowości, z którego się z nich losuje: rozgrywa mały turniej z kluczem między kandydatami na token, a ziarno bierze z czterech poprzednich tokenów, a nie z jednego. Ta różnica w długości kontekstu okazuje się ważniejsza niż cokolwiek innego w obu schematach i ma niżej osobną sekcję.

Oba potrzebują tego samego surowca: chwili, w której więcej niż jedno słowo byłoby do przyjęcia. Miarą tego jest entropia predykcyjna modelu, jego własna niepewność co do następnego tokenu, liczona w natach. Zero natów oznacza jedną żywą opcję i brak wyboru. Po „Najsłynniejsze dzieło Newtona nosiło tytuł Principia”, czyli po przykładzie samego Anthropic, nie ma czego wybierać, więc nie ma gdzie umieścić znaku. To, że entropia jest zasobem ograniczającym, wiadomo od publikacji pierwszego schematu. Ja zmierzyłem dwa pytania, które z tego wynikają, a które opublikowane prace zostawiają otwarte: co dzieje się z budżetem, gdy modele są lepsze, i kto naprawdę za niego płaci w języku takim jak polski.

Sam mechanizm działał wszędzie, gdzie go sprawdzałem, i warto to powiedzieć jednym zdaniem przed niespodziankami. Na poziomie tokenu korelacja między niepewnością modelu a siłą znaku wynosi +0,427 na najmniejszym Bieliku i +0,291 na flagowym (przy δ=5), wobec −0,053 i −0,009 w kontroli bez znaku. Znak trafia tam, gdzie model się wahał, dokładnie tak, jak obiecano. Cała reszta dotyczy tego, jak mało wahania zostaje i dokąd ono znika.

Wynik 1: pojemność spada, gdy model jest lepszy

Uczciwą jednostką pojemności znaku wodnego nie jest token, tylko naty entropii na słowo, mierzone na przebiegu bez znaku, bo to jest surowiec, który wydają oba schematy. Udało mi się zbudować pięć szczebli skali, na których mniejszy i większy model mają bitowo identyczny tokenizer, w trzech niezależnych rodzinach. Segmentacja jest więc przypięta i jeśli coś się zmienia, to model. Wszystkie pięć szczebli spada. gemma-4 z E4B do 12b obniża pojemność do 0,33 mniejszego modelu. Bielik z 1.5B do 4.5B do 0,44, Bielik z Minitron-7B do 11B do 0,62, Qwen3 z 1.7B do 4B do 0,73, Qwen3 z 4B do 14B do 0,80. Średni stosunek na szczebel to 0,58. Lepsze modele są pewniejsze tego, co napisać, a w pewności właśnie nie da się zapisać znaku wodnego.

Detekcja idzie w dół razem z pojemnością. Przy zielonej liście z δ=5, temperaturze 0,7 i 400 tokenach odsetek wykrytych tekstów na czterech Bielikach wynosi 100%, 100%, 69,6%, 21,6%. SynthID potrzebuje więcej niepewności na pozycję, bo turniej z jednym żywym kandydatem nie ma czego rozstrzygać, więc spada szybciej: przy tych samych 400 tokenach wykrywa 86,4% na 1.5B, 30,0% na 4.5B i 0% na obu większych modelach w temperaturze 0,7 oraz 100%, 94,9%, 6,0% i 0% w temperaturze 1,0. Flagowy model piszący przy pełnej temperaturze próbkowania jest niewidoczny dla detektora własnej metody.

Temperatura zasługuje na osobne zdanie, bo to pokrętło, którym dostawca naprawdę kręci. Temperatura próbkowania decyduje, ile z pozostałej niepewności modelu w ogóle wchodzi do gry: na 11B detekcja zielonej listy przy 400 tokenach rośnie z 21,6% w temperaturze 0,7 do 83,7% w 1,0. Dostawca, który serwuje model w niskiej temperaturze, a to normalny wybór przy pracy z faktami, wydaje i tak już mały budżet.

Dla kogoś, kto planuje wdrożenie, kierunek znaczy więcej niż jakakolwiek pojedyncza liczba. Znakowanie słabnie dokładnie wzdłuż osi, na której modele się poprawiają. To trend, który trzeba obejść inżynierią. Czekanie na lepsze modele go nie naprawi, bo to lepsze modele są problemem.

pięć szczebli skali, trzy rodziny, wszystkie w dółprzebieg bez znaku · T=1,0 · ten sam tokenizer w każdej parze · średni stosunek 0,5801234naty entropii na słowo3,7031,627x0,441.5B4.5BBielikx3,0 param.0,6710,416x0,627B11BBielikx1,6 param.3,2082,350x0,731.7B4BQwen3x2,4 param.2,3501,872x0,804B14BQwen3x3,5 param.1,7940,590x0,33E4B12bgemma-4x3,0 param.pięć szczebli skali, trzy rodziny, wszystkie w dółprzebieg bez znaku · T=1,0 · ten sam tokenizer w każdej parze · średni stosunek 0,58
Pojemność znaku wodnego mierzona jako naty entropii na słowo na przebiegu bez znaku w temperaturze 1,0, na pięciu szczeblach skali w trzech rodzinach modeli. Tokenizer jest bitowo identyczny w każdej parze, więc segmentacja nie tłumaczy spadku. Spadają wszystkie pięć szczebli, średni stosunek to 0,58.

Wynik 2: polska kara to tokenizer, nie język

Zaczynałem z przekonaniem, że to polszczyzna jest droga. Hipoteza była przyzwoita: polski jest silnie fleksyjny, forma fleksyjna musi się zgadzać z resztą zdania, zgoda zawęża zbiór poprawnych zamienników, a mniej poprawnych zamienników powinno oznaczać mniej entropii, w której może żyć znak. To da się sprawdzić, sprawdziłem i dane jej nie potwierdzają.

Czyste porównanie to ten sam model piszący o tych samych hasłach w obu językach. Na słowo pojemność prawie nie zależy od języka: 3,703 nata na polskie słowo wobec 3,680 na angielskie na Bieliku-1.5B, 0,416 wobec 0,502 na Bieliku-11B, stosunki 0,99 i 1,21. Na token pojemność flagowego modelu różni się 2,28 raza (0,140 wobec 0,320 nata), bo jego tokenizer mieli polszczyznę na deterministyczne kawałki: 2,956 tokenu na polskie słowo wobec 1,580 na angielskie. A progi detekcji podaje się w tokenach. Przy tych samych 400 tokenach na tym samym flagowym modelu znak zielonej listy jest 3,72 raza silniejszy po angielsku (średni wynik z rośnie z 6,10 do 22,69, detekcja z 83,7% do 100%), a SynthID przechodzi z 0% wykrytych po polsku do 23,5% po angielsku.

Hipoteza fleksyjna dostała też bezpośredni test, niezależny od tokenizera. Podział entropii według typu pozycji oddziela wybór, które słowo będzie następne (pozycje na początku słowa), od dopisywania jego reszty (pozycje wewnątrz słowa). Na 1.5B, którego słownik trzyma całe polskie słowa jako pojedyncze tokeny (▁Zdzisław to tam jeden token, a słownik flagowego modelu składa go z ▁Z, dz, is, ław), entropia na początku słowa po polsku wynosi 1,039 raza tyle co po angielsku, a 1,076 na słowo. Jeśli już, to polski daje odrobinę więcej wyboru. To szacunek ostrożny, bo słabszy angielski modelu 1.5B zawyża stronę angielską. Flagowy model pozornie popiera starą hipotezę wynikiem 0,705, ale nie może być świadkiem: przy trzech tokenach na polskie słowo jego pozycja „na początku słowa” jest fragmentem słowa, więc wybór słowa rozmywa się na pozycje, których ta miara nie widzi.

Literatura międzyjęzykowa mówi to samo i powiedziała to pierwsza. Poelman, Bauwens i de Lhoneux (EMNLP 2025) mierzą Accessor Variety, czyli policzoną w korpusie liczbę różnych kontynuacji po danym początku słowa, w 21 językach: angielski 2,12, polski 4,74, fiński 7,14. Bogatsza morfologia daje piszącemu więcej żywych kontynuacji, a nie mniej. Meral i współpracownicy już w 2009 roku argumentowali, że aglutynacyjny turecki jest właśnie z tego powodu żyznym gruntem dla znakowania, a mój najmniejszy model zgadza się z nimi ponad 17-letnią przerwą.

Rozdrabniający słownik należy do Bielika-11B, flagowego modelu otwartego projektu SpeakLeash, z którym współpracuję, i trafił tam przez rodowód, a nie czyjąś decyzję: model powstał przez powiększenie bazy, której słownik nie był budowany pod polski, a tokenizer wędruje razem z wagami. Ten sam słownik okazuje się najlepiej skalibrowanym z polskich tokenizerów w teście fałszywych alarmów na końcu artykułu, z wynikiem 25 razy powyżej deklarowanego poziomu, gdy polski słownik pełnych słów ma 278. To dziedzictwo działa więc w obie strony.

Chcę precyzyjnie powiedzieć, dlaczego poprawiona wersja tego wyniku to lepsza wiadomość niż ta, którą spodziewałem się opublikować. Języka nie da się naprawić, tokenizer tak. Gdyby kara była morfologiczna, każde polskie wdrożenie nosiłoby ją na zawsze. Skoro chodzi o pokrycie słownika, słownik zbudowany pod dany język odzyskuje pojemność, a moje pomiary pokazują, że taka odzyskana wersja już istnieje w mniejszych Bielikach.

ten sam model, te same hasła, dwie walutyBielik-11B · naty entropii · progi detekcji liczą tokeny0.000.300.600,416polski0,502angielski0,140polski2,956 tok/słowo0,320angielski1,580 tok/słowona słowo · stosunek 1,21na token · stosunek 2,28ten sam model, te same hasła, dwie walutyBielik-11B · naty entropii · progi detekcji liczą tokeny
Bielik-11B pisze o tych samych hasłach po polsku i po angielsku. Na słowo pojemność znaku wodnego jest prawie taka sama: 0,416 wobec 0,502 nata. Na token różni się 2,28 raza (0,140 wobec 0,320), bo tokenizer zużywa 2,956 tokenu na polskie słowo i 1,580 na angielskie. Progi detekcji liczą tokeny, co zamienia artefakt segmentacji w 3,72-krotną różnicę siły przy 400 tokenach.

Wynik 3: wybór, dzięki któremu SynthID nie zniekształca tekstu, czyni go kruchym

Zielona lista bierze do haszu jeden poprzedni token. SynthID bierze ziarno turnieju z czterech poprzednich. Szerokie okno w dużej mierze zapracowuje na etykietę „bez zniekształceń”: losowość z kluczem prawie nigdy nie powtarza się w obrębie tekstu, więc nie narasta żadne stałe skrzywienie na poziomie fraz, które czytelnik mógłby zauważyć. To samo szerokie okno rwie się przy edycji. Usuń jedno słowo, a każda pozycja, której czterotokenowy kontekst je zawierał, haszuje się teraz do innej losowości. Jedno usunięcie psuje więc cztery razy więcej punktowanych pozycji niż w zielonej liście.

To pomiar, a arytmetyka zgadza się z obserwowanymi szkodami. Usunięcie 10% słów zostawia zielonej liście 86,9% sygnału detekcji, a SynthID 67,9%. Przy 20% usuniętych: 77,3% wobec 47,6%. Przy połowie usuniętych słów: 51,8% wobec 14,8%. Parafraza wykonana przez Claude’a zostawia zielonej liście 78,7% sygnału, przy detekcji wciąż 100% na tym tekście źródłowym, a SynthID zachowuje 21,8% i detekcja spada do 41,7%. Zmierzony odsetek pozycji z nienaruszonym kontekstem klucza niemal dokładnie przewiduje ocalały sygnał: 0,901 przewidziane wobec 0,869 zaobserwowanego, 0,802 wobec 0,773, 0,519 wobec 0,518 dla okna jednotokenowego oraz 0,662 wobec 0,679 i 0,426 wobec 0,476 dla czterotokenowego. Nie znalazłem tego kompromisu nazwanego nigdzie w opublikowanej literaturze, a to właściwość rodziny metod, którą wdraża Anthropic: decyzja projektowa, która kupuje gwarancję jakości, jest tą samą, która sprzedaje odporność na edycję.

A sama gwarancja jakości jest węższa niż jej nazwa. Mierzone jako średnie log-prawdopodobieństwo pod własnym, nieskrzywionym rozkładem modelu, w parach po ziarnie, na dokładnie pierwszych 200 tokenach na 11B, zielona lista kosztuje −0,0246 przy δ=2 i −0,3002 przy δ=5, a SynthID kosztuje −0,0419, przedział ufności [−0,0546; −0,0293], który nie zawiera zera. (Liczone na całych generacjach zamiast na dopasowanym oknie, wynik dla δ=5 to −0,4183; gdy ktoś cytuje którąś z tych liczb, ma znaczenie, którą.) Realny koszt metody, o której udowodniono, że nie zniekształca tekstu, to nie sprzeczność, tylko źle cytowana gwarancja: „bez zniekształceń” znaczy nieskrzywiona po uśrednieniu po kluczach, a każde wdrożenie, które chce weryfikować własny tekst, musi ustalić jeden klucz. Przy ustalonym kluczu próbkowanie przechyla się w stronę tokenów, które akurat dobrze wypadają w turnieju, a to jest losowe względem tego, jak prawdopodobny był token, więc lekko w stronę mniej prawdopodobnych słów. Ten przechył narasta przez trzydzieści warstw turnieju. Metoda zachowuje się dokładnie tak, jak udowodniono. Dowód dotyczy średniej po hipotetycznych kluczach, a Wasze wdrożenie nie jest średnią.

szersze okno klucza łatwiej się rwie% zachowanego sygnału detekcji · tekst źródłowy Bielik-1.5B · T=1,00255075100usuń 10%usuń 20%usuń 50%parafrazazielona lista (klucz z 1 tokenu)SynthID (klucz z 4 tokenów)szersze okno klucza łatwiej się rwie% zachowanego sygnału detekcji · tekst źródłowy Bielik-1.5B · T=1,0
Odsetek sygnału detekcji, który przetrwał edycję, na tych samych tekstach źródłowych (Bielik-1.5B, temperatura 1,0), dla schematu z kluczem z jednego poprzedniego tokenu (zielona lista) i z czterech (SynthID). Usunięcie połowy słów zostawia zielonej liście 51,8%, a SynthID 14,8% sygnału. Parafraza przez Claude’a: 78,7% wobec 21,8%.

Wynik 4: przetrwanie ataku zależy od zapasu, nie od metody

Pytanie „czy ten znak wodny jest odporny na parafrazę” okazuje się nie mieć odpowiedzi, bo ten sam atak na ten sam schemat daje przeciwne werdykty w zależności od tego, ile sygnału było na starcie. Polski tekst z 1.5B startuje z medianą z równą 30; po parafrazie przez Claude’a detekcja wciąż wynosi 100%. Flagowy model startuje z 5,52 i ta sama parafraza obniża detekcję z 75% do 20%. Wzorcowy wynik z literatury dla tego ataku (Krishna i współpracownicy, NeurIPS 2023, z parafrazerem DIPPER) to spadek ze 100% do 57,2%, a moje dwa modele lądują po obu jego stronach. Pytanie, które warto zadać dostawcy, brzmi więc: „ile odchyleń standardowych zapasu zostawia mój model, mój język i moja temperatura”, bo atak odejmuje właśnie od zapasu.

Jeden wynik zaskoczył mnie na tyle, że sprawdziłem go drugi raz: podróż w obie strony przez angielski (z polskiego na angielski i z powrotem, oba kroki przez Claude’a) jest łagodniejsza niż zwykła parafraza. SynthID zachowuje 0,321 sygnału po takim tłumaczeniu wobec 0,218 po parafrazie; na zielonej liście flagowego modelu to 0,591 wobec 0,385. Tłumaczenie próbuje wiernie odtworzyć tekst, a wierne odtworzenie zachowuje sformułowania. „Napisz to innymi słowami” to polecenie, by zmaksymalizować dokładnie tę zmianę, która zabija znak.

Potem pytanie, na które naprawdę chciałem odpowiedzi, bo to realistyczny scenariusz obejścia i nie wymaga żadnego API: weź tekst oznaczony przez model A, poproś darmowy lokalny model B o „sparafrazuj poniższy fragment, zachowując styl” i oceń wynik detektorem modelu A. To już nie zaburzenie sygnału, tylko jego wymiana, bo wynik pochodzi z rozkładu modelu B, a zielona lista modelu A ma zaczepienie tylko tam, gdzie B skopiował sformułowania. Wypranie tekstu z 1.5B (z tym wygodnym z równym 30) przez lokalnego Bielika-11B zostawia 0,191 sygnału, gdy parafraza Claude’a zostawiła 0,787. Darmowy lokalny model jest lepszym narzędziem do prania niż czołowe API. Wciąż jednak nie usuwa znaku niezawodnie: 63,8% wypranych tekstów i tak zostaje wykrytych, bo parafraza kopiuje ciągi słów, a skopiowane ciągi niosą ze sobą znak. Przy flagowym źródle z niewielkim zapasem to samo pranie obniża detekcję do 21,7%, więc i tu decyduje zapas.

Trzeci odczyt tabeli prania to ten, którego bym nie zgadł: skuteczność prania idzie za biegłością modelu piorącego w języku docelowym, a nie za jego rozmiarem. Qwen3-4B jest najgorszym praczem, z 0,783 pozostałego sygnału, choć jest prawie wielkości Bielika-4.5B, który osiąga 0,524. Model, który słabo pisze po polsku, kopiuje więcej oryginału zamiast go przepisać, a kopiowanie zachowuje znak wodny.

Jedno ograniczenie trzeba powiedzieć wprost. Nic z tego nie dało się uruchomić na prawdziwych odpowiedziach Claude’a, bo nikt spoza Anthropic nie ma klucza. Mechanizm testowałem z Bielikiem jako oznaczonym źródłem. Wniosek powinien się przenosić, bo model piorący nie wie i nie dba o to, kto oznaczył tekst, ale to analogia, a nie pomiar na Claudzie.

najlepsze narzędzie do prania jest darmowe i lokalnezachowana część znaku · % = nadal wykryte · źródło Bielik-1.5B, z=300.000.501.000,787ClaudeAPI · 100%0,783Qwen3-4Blokalnie · 100%0,524Bielik-4.5Blokalnie · 82,5%0,191Bielik-11Blokalnie · 63,8%najlepsze narzędzie do prania jest darmowe i lokalnezachowana część znaku · % = nadal wykryte · źródło Bielik-1.5B, z=30
Część sygnału zielonej listy (δ=5), która zostaje w tekście Bielika-1.5B po parafrazie przez cztery różne modele, oceniana detektorem modelu źródłowego. Parafraza Claude’a zachowuje 0,787 znaku. Darmowy lokalny Bielik-11B zostawia 0,191, najsilniejsze zmierzone pranie, a 63,8% jego wyników nadal jest wykrywanych. Jakość prania idzie za biegłością w polskim, nie za rozmiarem modelu: Qwen3-4B, prawie wielkości Bielika-4.5B, wypada najgorzej z czterech.

Znak wciąż nie wie, że model kłamie

Pierwotnie interesowały mnie znaki wodne z powodu hipotezy o halucynacjach: jeśli znak jedzie na swobodzie modelu, a zmyślanie to rodzaj swobody, to konfabulowany tekst powinien nieść silniejszy znak niż tekst, który model zna. Dawałoby to darmowy sygnał halucynacji w tekście, który i tak jest znakowany z innych powodów. Zarejestrowałem ją z góry i nie przeszła, choć nie tak czysto jak podręcznikowy wynik zerowy.

Przy porównaniu dobrze znanych, mało znanych i wymyślonych polskich haseł przy stałej długości 200 tokenów 5 z 28 informatywnych komórek pokazuje istotną różnicę, wobec 1,4 oczekiwanej przez przypadek, a istotne komórki układają się według pojemności: zmyślony tekst niesie więcej znaku na modelu o najwyższej pojemności i mniej na dwóch o najniższej. Intrygujący wzór, który się nie replikuje. Na wszystkich dziewięciu modelach korelacja na poziomie komórek między pojemnością a kontrastem wynosi +0,410 (p=0,006), ale po klastrowaniu po modelach, co jest uczciwą jednostką, bo komórki są zagnieżdżone w modelach, przedział ufności to [−0,021; +0,593], a Qwen3 i gemma-4 dają tylko małe wartości dodatnie, bez zmian znaku, które widać u Bielików. Zapisałem to jako eksploracyjne i nieustalone, i tak też powinien to traktować każdy czytelnik. Wynik zerowy nie jest artefaktem mojego korpusu: wymyślone nazwy to mutacje prawdziwych, a maskowanie, które mogłoby z tego wynikać, nie pokazuje zależności dawka-odpowiedź w żadnej komórce (p od 0,32 do 0,82).

Praktyczna wersja nie zmienia się względem mojego pierwotnego wniosku: znak wodny odpowiada, z ograniczoną pewnością, na pytanie „czy napisała to maszyna”, a na pytanie „czy to prawda” nie ma zdania. Detektor halucynacji zbudowany na sile znaku wodnego to generator liczb losowych. Halucynacje potrzebują własnego sygnału i tego dotyczy reszta moich badań.

Weryfikator jest kruchy, a jego odsetek fałszywych alarmów nie jest taki, jak deklaruje

Wszystko dotąd zakładało, że weryfikator działa. Ta ostatnia część jest dla każdego, kto ma go kupić albo zbudować, bo nie ma nic wspólnego z modelem, a wszystko z hydrauliką. Statystyka zielonej listy to hasz z kluczem i każde jej wejście musi dokładnie odpowiadać generatorowi.

Weź ten sam tekst, ten sam klucz i tę samą konfigurację i zweryfikuj na innej maszynie: przy δ=2 wynik z spada z 6,75 do −0,29, przy δ=5 z 11,50 do 0,04, przy δ=10 z 22,47 do 0,37. Weryfikator nie zgłasza błędu, tylko raportuje „brak znaku wodnego”. Wyizolowałem przyczynę bez ładowania modelu: torch.randperm z tym samym ziarnem daje inną permutację na różnych urządzeniach. Deklarowany rozmiar słownika robi to samo, tylko ciszej. Llama-3.1 i PLLuM tokenizują ten korpus na identyczne identyfikatory tokenów i różnią się wyłącznie deklarowaną długością słownika, 128 256 wobec 128 258, czyli dwoma tokenami specjalnymi, które nigdy nie występują w tekście. Przesunięcie tej jednej liczby całkowitej o ±2 zmienia średnie z na tekście ludzkim z −0,385 na +0,426, a przesunięcie +2 dokładnie odtwarza wartość PLLuM. Nawet przepuszczenie tekstu tam i z powrotem przez tokenizer nie jest darmowe: zdekodowanie i ponowne zakodowanie zamienia 400 zapisanych identyfikatorów tokenów w 398, co kosztuje 4,9% sygnału zielonej listy i 2,9% sygnału SynthID, zanim jakikolwiek atakujący cokolwiek zrobi. Nic z tego nie jest dziurą w którymś ze schematów. To właściwość implementacji referencyjnej i lista kontrolna dla każdego, kto buduje weryfikator: przypnij klucz, przypnij backend, przypnij deklarowany słownik i weryfikuj na zapisanych identyfikatorach tokenów, gdzie się da.

A teraz liczba, która powinna niepokoić każdego, kto kieruje detektor na człowieka. Przepuściłem 250 ludzkich tekstów z polskiej Wikipedii, pochodzących z 86 biografii, czyli tekst, którego nie napisał żaden model, przez statystykę zielonej listy przy standardowym progu (z co najmniej 4), którego deklarowany odsetek fałszywych alarmów to 0,003%. Po uśrednieniu po pięciu kluczach haszujących rzeczywisty odsetek wynosi 278 razy tyle co deklarowany na słowniku pełnych słów Bielika, 101 razy na słowniku PLLuM i nominalnie 25 razy na słownikach Bielika-7B/11B, Llama-3.1 i Qwen3, choć każdy z nich to pojedynczy alarm; tylko EuroLLM nie dał żadnego fałszywego alarmu. Mechanizm to efektywna liczebność próby. To, czy para (kontekst, token) jest zielona, ustala się raz, przy wyborze klucza, a proza powtarza swoje pary, więc około 100 000 punktowanych tokenów zawiera tylko od 971 do 6197 niezależnych losowań haszu, zależnie od tokenizera. Deklarowany odsetek nie jest błędny jako matematyka. Próba jest mniejsza, niż wygląda, więc ogony są grubsze, niż sugeruje liczba tokenów.

Jeden wynik z mojej wcześniejszej analizy tych danych wycofuję i wolę zrobić to publicznie niż po cichu. Uszeregowałem wcześniej tokenizery według średniego dryfu na tekście ludzkim: jedne miały skłonność do fałszywych oskarżeń, inne do przeoczonych znaków. Przy pięciu kluczach zakres każdego tokenizera nakłada się na zakres każdego innego: ranking był właściwością jednego losowania klucza, a nie tokenizerów. Z przeglądu kluczy przetrwał uśredniony po kluczach odsetek fałszywych alarmów podany wyżej i lekcja: deklarowanej wartości p nie wolno cytować bez kalibracji na docelowym języku i tokenizerze, bo dwa polskie słowniki pełnych słów leżą o dwa rzędy wielkości powyżej niej, a wiersze z 25 razy opierają się na pojedynczym alarmie każdy.

fałszywe alarmy na tekście ludzkim a deklarowany poziom250 ludzkich tekstów (86 biografii) · z>=4, deklar. FP 0,003% · średnio po 5 kluczach0140280278x1.5B/4.5Bn_eff 971101xPLLuM-8Bn_eff 619725x7B/11Bn_eff 273925xLlama-3.1n_eff 619725xQwen3-4Bn_eff 2636brakEuroLLMn_eff 1939fałszywe alarmy na tekście ludzkim a deklarowany poziom250 ludzkich tekstów (86 biografii) · z>=4, deklar. FP 0,003% · średnio po 5 kluczach
Fałszywe alarmy na 250 ludzkich tekstach z polskiej Wikipedii (z 86 biografii) przy standardowym progu (z ≥ 4, deklarowany odsetek 0,003%), uśrednione po pięciu kluczach haszujących, jako wielokrotność deklarowanego poziomu. Pod każdym słupkiem: efektywna liczba niezależnych losowań haszu stojąca za około 100 000 punktowanych tokenów. Dwa polskie słowniki pełnych słów leżą o dwa rzędy wielkości powyżej deklarowanego poziomu. Słupki z 25 razy to po jednym alarmie.

Co już było wiadomo, a co to dodaje

Część ramy, od której zaczynałem, okazała się już opublikowana, a uczciwa mapa ma znaczenie, jeśli chcecie na czymkolwiek z tego polegać. To, że entropia jest zasobem, który wydaje znak wodny, jest ustalone: opiera się na tym oryginalna praca Kirchenbauera, wyniki Christa, Gunna i Zamira o niewykrywalności oraz praca o SynthID w Nature. Wersja językowa też jest zajęta: Park, Park, An i Han (LUNA, ACL 2026) używają entropii następnej części mowy jako jawnego przybliżenia pojemności na siatce sześciu języków dobranych typologicznie i stwierdzają, że bogatsza morfologia nie zmniejsza pojemności, co mój pomiar na początku słowa niezależnie potwierdza na języku, którego nie testowali. Mohamed i Gubri, na 133 językach, przypisują porażki wielojęzycznego znakowania rzadkości słownika tokenizera, wprost nie morfologii; mój Wynik 2 to wersja ich wyniku korpusowego mierzona w czasie działania, na poziomie pozycji, wewnątrz modelu podczas generacji.

Czego nie znalazłem nigdzie opublikowanego: że pojemność spada wraz z jakością modelu, pokazanego na pięciu szczeblach skali w trzech rodzinach przy przypiętym tokenizerze (LUNA w ogóle nie testuje skali); kompromisu długości kontekstu klucza z Wyniku 3, z mechanizmem zmierzonym, a nie wyargumentowanym; efektywnej liczebności próby jako wyjaśnienia złej kalibracji detektora na prawdziwym tekście; oraz rozkładu pojemności języka na wybór słowa i dopisanie formy, który jest też, na ile wiem, pierwszym pomiarem pojemności znaku wodnego na fleksyjnym języku słowiańskim.

Dlaczego to ważne, jeśli wypuszczacie modele

Jeśli to Wy macie obowiązek znakowania, Wasza wykrywalność jest właściwością Waszego modelu, Waszego języka i Waszych ustawień dekodowania, a nie przyjętego schematu, i ma kierunek: każda aktualizacja modelu wydaje entropię, na którą liczyliście. Zmierzcie ją, zanim ją obiecacie, i zmierzcie ponownie przy zmianie modelu, bo dostawca może być w pełni zgodny z przepisami i nadal wypuszczać tekst, którego nikt nie zidentyfikuje.

Jeśli Wasi użytkownicy piszą w języku, który tokenizer rozdrabnia, kara jest prawdziwa i da się ją naprawić, w słowniku, a nie w języku. Zanim przyjmiecie od kogokolwiek, że „ten język trudno znakować”, poproście o pojemność na słowo, nie na token. Liczba na token miesza język z tokenizerem, a liczba na słowo jest tą, która się przenosi.

Jeśli jesteście po stronie odbiorcy, szkoły albo zespołu rekrutacyjnego, deklarowany odsetek fałszywych alarmów to stwierdzenie o niezależnych losowaniach, których prawdziwa proza nie dostarcza. Na dwóch polskich słownikach pełnych słów rzeczywisty odsetek wyniósł 278 i 101 razy tyle co deklarowany. Cztery kolejne słowniki dały dokładnie po jednym alarmie, co przy oczekiwaniu 0,04 jest na granicy i nie dowodzi 25-krotnej różnicy, a EuroLLM nie dał żadnego. Werdykt znaku wodnego to dowód na poziomie „to uzasadnia rozmowę”, nigdy na poziomie oskarżenia, a bez przebiegu kalibracyjnego na własnym języku nie macie żadnej liczby.

Jeśli modelujecie zagrożenie obejścia: zakładajcie, że przeciwnik ma darmowy lokalny model, bo to najlepsze narzędzie do prania, jakie zmierzyłem, lepsze niż czołowe API, i zakładajcie, że wciąż przegra z tekstem o dużym zapasie. I trzymajcie w architekturze osobno pochodzenie i prawdziwość. Znak wodny nie ma zdania, czy tekst jest prawdziwy.

Jak to testowałem i co po drodze zrobiłem źle

Dziewięć modeli instrukcyjnych z trzech rodzin: Bielik 1.5B, 4.5B, Minitron-7B i 11B, Qwen3 1.7B, 4B i 14B oraz gemma-4 E4B i 12b. Dwa schematy: zielona lista Kirchenbauera z zieloną frakcją 0,25 przy δ=2 i δ=5 (δ=10 w teście backendu) oraz SynthID-Text. Dwa języki na Bielikach, trzy temperatury, około 8 400 generacji, 238 testów statystycznych. Każdy prompt przechodzi raz na ramię, więc ramię bez znaku daje empiryczną linię bazową dla każdej statystyki. Niepewność na token pochodzi z osobnego przebiegu teacher-forced z wyłączonym znakiem, więc wyjaśnienie nigdy nie jest skażone samym zabiegiem. Część z atakami przelicza 1980 wyników po usuwaniu, przycinaniu, parafrazie, tłumaczeniu w obie strony i praniu przez inny model, z bramką jakości, która odrzuciła 8 z 360 przebiegów prania (śmieci z symboli, odmowy, za krótkie teksty), każde odrzucenie zapisane z powodem. Kontrolą ludzką jest 250 ludzkich tekstów z polskiej Wikipedii, z 86 biografii. Przedziały ufności są liczone bootstrapem i klastrowane po jednostce, która naprawdę jest niezależna, co prowadzi do części wartej przeczytania, nawet jeśli pominiecie wszystkie liczby.

Ten projekt cztery razy zawyżył własną istotność przez łączenie danych na złym poziomie i zapisuję wszystkie cztery, bo każdy przetrwał, dopóki ktoś go nie poszukał. Łączenie tokenów zamiast generacji sprawiło, że pilotaż pokazał wynik mechanizmu na odwrót. Traktowanie każdej pary (kontekst, token) w haszu jako niezależnego losowania zamieniło coś, co było szumem, w „skrzywienie o +2,6 punktu” rozkładu zerowego, bo 100 000 tokenów zawiera około tysiąca niezależnych losowań, a nie 100 000. Łączenie komórek testowych w obrębie modelu sprawiło, że uporządkowany według pojemności trend halucynacji wyglądał na p=0,003, gdy przedział klastrowany po modelach obejmuje zero. A łączenie temperatur w obrębie ramienia dało „odsetek detekcji 53,7%”, który był naprawdę średnią z 21,6% i 83,7%, dwóch liczb, których żadne wdrożenie by nie zmieszało. Trzy z czterech wyłapał adwersarialny przegląd mojej własnej analizy, a nie ja. Jeśli bierzecie z tego artykułu jedną lekcję metodologiczną, weźcie tę: jednostka niezależności to decyzja i to najłatwiejsze miejsce w całym potoku, żeby okłamać samego siebie.

Dwie kolejne poprawki też należą do zapisu. Wczesna wersja analizy oceniała ramię SynthID detektorem zielonej listy, co nie mierzy niczego poza odsetkiem fałszywych alarmów tego detektora na tekście spoza schematu; każda liczba o SynthID w tym artykule pochodzi z jego własnej statystyki turniejowej, już po tej poprawce. A jedną zarejestrowaną z góry hipotezę wycofałem, zamiast testować ją do porażki: przewidywałem, że tokenizer, który dzieli słowa na więcej kawałków, osiąga próg detekcji w mniejszej liczbie słów, bo szybciej wydaje tokeny. Arytmetyka była dobra, przesłanka fałszywa. Dodatkowe kawałki to deterministyczne końcówki rozdrobnionych słów, nie niosą entropii, a budżet tokenów podzielony przez liczbę tokenów na słowo zakłada, że każdy token ma równą pojemność, co Wynik 2 pokazuje jako dokładnie nieprawdziwe. Sama liczba tokenów na słowo różni się między tymi tokenizerami o 65%, więc pokusa przeliczania wróci. Nie ulegajcie jej.

Ograniczenia, o których wiem: jeden korpus (biografie) i jeden rejestr, więc kod, odpowiedzi supportu i proza prawnicza to otwarte pytania z własnymi profilami entropii. Najwyższy przedział entropii jest na dużych modelach prawie pusty, więc górna część krzywej mechanizmu opiera się na przedziale od 3 do 4 natów. Kontrola angielska istnieje tylko na dwóch Bielikach w temperaturze 1,0. Qwen3 jest o jedno pokolenie za swoim najnowszym rodzeństwem, wybrany dlatego, że nowsze wydania nie oferują drabiny rozmiarów; te liczby opisują modele z ery Qwen3. I dwie zarejestrowane z góry części nigdy nie ruszyły: zaślepiony sędzia jakości polskiej fleksji w tekście ze znakiem i bez oraz teacher-forcing dwóch modeli na identycznym tekście, który oddzieliłby w Wyniku 1 pewność modelu od wyboru treści.

Co sprawdzam dalej

Najpierw dwie nieuruchomione części, bo są zarejestrowane z góry, a projekt leży gotowy: zaślepiony sędzia fleksji oraz sparowany teacher-forcing, który pokazałby, ile spadku pojemności wynika z tego, że lepszy model jest pewniejszy tego samego tekstu, a ile z wybierania bardziej przewidywalnego tekstu do napisania. Potem inne rejestry, bo biografie to jeden profil entropii, a umowy, kod i odpowiedzi supportu będą miały własne. I pakiet kalibracyjny dla każdego tokenizera na problem fałszywych alarmów, bo deklarowana wartość p, która myli się o czynnik od 25 do 278, jest gorsza niż brak liczby. Ciąg dalszy nastąpi.

To opis eksperymentu, a nie publikacja naukowa. Liczby pochodzą z moich własnych przebiegów na dziewięciu modelach z trzech rodzin w sierpniu 2026, na dwóch opublikowanych schematach podlinkowanych niżej, obok najbliższych opublikowanych prac.

To część tej samej linii pracy co moje dwie publikacje o tym, co polskie modele wiedzą o własnej wiedzy, Pokrętło pewności, które można odczytać i przekręcić oraz Czy Bielik wie, czego nie wie?, a także projektu Eskadra Bielika, który buduje suwerenne polskie modele językowe.