Google AI Overviews a AI Mode

Vodoznaky AI textu so SynthID: ako funguje generovanie a detekcia

Technický sprievodca vodoznakmi textu SynthID s príkladmi v Pythone, skóre detekcie, viacerými vodoznakmi, limitmi nahradenia a detekciou bez známych kľúčov.

10 min čítania 4 zodpovedaných otázok

Vodoznak AI textu je signál, ktorý sa zámerne vkladá do generovaného textu. Pre vydavateľa je užitočná otázka konkrétna: dokážeme neskôr rozpoznať výstup z generačného systému, ktorý máme pod kontrolou?

SynthID Text odpovedá na túto otázku. Neurčuje, či bol ľubovoľný článok napísaný AI. Jeho detektor testuje nakonfigurovaný štatistický vzor a neúspešný test necháva pôvod textu nevyriešený. Referenčné úložisko SynthID popisuje generovanie aj detekciu vodoznakov.

Tento sprievodca prechádza lokálnym príkladom v Pythone a potom skúma ťažšie prípady: viacero vodoznakov, prepísanie novým vodoznakom a kontrolu textu, keď pôvodné kľúče nie sú známe.

Čo vodoznak textu vlastne mení

Jazykový model priraďuje pravdepodobnosti možným ďalším tokenom. Tokeny môžu predstavovať slová, časti slov alebo interpunkciu. Generatívny vodoznak mení spôsob výberu ďalšieho tokenu. Výsledné voľby nesú dôkazy, ktoré môže detektor neskôr zmerať.

SynthID používa proces nazývaný turnajové vzorkovanie. Kandidátske tokeny súperia pod pseudonáhodnými skórovacími funkciami. Skóre určuje nedávny kontext tokenov a kľúče vodoznaku. Opakovaním výberu cez niekoľko vrstiev sa uprednostňujú tokeny s merateľným štatistickým vzorom. Detektor rekonštruuje tieto skóre z hotového textu. Nemusí spúšťať pôvodný jazykový model. Pozrite si výskumný článok o SynthID.

1. Predpovedzte možné ďalšie tokeny

Jazykový model vytvára rozdelenie pravdepodobnosti nad svojím slovníkom.

2. Aplikujte nakonfigurovaný vodoznak

Skórovacie funkcie s kľúčmi ovplyvňujú výber tokenov počas generovania.

3. Zverejnite obyčajný text

Štatistický signál sa prenáša vo zvolenej sekvencii tokenov.

4. Rekonštruujte a ohodnoťte

Detektor používa kompatibilnú tokenizáciu a zodpovedajúcu konfiguráciu na hľadanie tohto signálu.

Dlhšie pasáže zvyčajne poskytujú viac dôkazov. Veľmi predvídateľný výstup ponecháva na vodoznačenie menej alternatívnych tokenov. Viac vrstiev môže pomôcť, ale článok uvádza klesajúce výnosy, keďže vrstvy spotrebúvajú dostupnú variáciu vo výbere tokenov.

Štatistické vodoznaky a skryté znaky sú odlišné

Pred výberom detektora určite, aký signál chcete nájsť.

MetódaČo nesie signál?Čo by ste mali testovať?
SynthID TextŠtatistické voľby tokenov vykonané počas generovaniaDôkazy pri zodpovedajúcej konfigurácii vodoznaku
Značka skrytého znakuKonkrétne znaky vložené do reťazcaSekvencia znakov a jej dokumentované kódovanie
Metadáta dokumentuPolia pripojené k dokumentu alebo kontajneruMetadáta, ich pôvod a prípadný podpis
Klasifikátor AI písaniaVzory naučené z ukážkových textovGeneralizácia a falošné pozitívy u zamýšľanej cieľovej skupiny

Skener Unicode nemôže nahradiť detektor SynthID. Nájdenie neobvyklého znaku tiež nedokazuje autorstvo AI. Naše predstavenie bezplatných nástrojov AmICited rozoberá vodoznakové signály založené na znakoch a ich limity. Experiment nižšie sa týka štatistického vodoznačenia.

Logo

Chcete sledovať svoju viditeľnosť v AI?

Sledujte, ako AI chatboty spomínajú vašu značku v ChatGPT, Perplexity a ďalších platformách.

Generovanie textu s vodoznakom v Pythone

Úložisko Google je výskumná referencia a výslovne neodporúča používať jeho podtriedy modelu v produkcii. Odkazuje na implementáciu v Hugging Face Transformers. Referencia tiež poskytuje prístupy detekcie založené na priemere, váženom priemere a trénovanom bayesovskom modeli. Poznámky k používaniu úložiska

Nasledujúci príklad používa Python 3.13, Transformers 4.57.1 a PyTorch 2.8.0. Ide o reprodukovateľné verzie príkladu, nie o tvrdenie, že sú to najnovšie vydania. Beží na CPU a pri prvom použití stiahne verejný model distilbert/distilgpt2. Tento malý model udržiava experiment dostupný; kvalita jeho písania nie je reprezentatívna pre súčasných asistentov.

Vytvorte izolované prostredie:

python3.13 -m venv .venv
source .venv/bin/activate
python -m pip install "transformers==4.57.1" "torch==2.8.0"

Uložte bloky Pythonu z tohto sprievodcu v poradí do watermark_demo.py. Začnite generovaním:

import torch
from transformers import (
    AutoModelForCausalLM,
    AutoTokenizer,
    SynthIDTextWatermarkingConfig,
    SynthIDTextWatermarkLogitsProcessor,
    set_seed,
)

MODEL_ID = "distilbert/distilgpt2"
tokenizer = AutoTokenizer.from_pretrained(MODEL_ID)
model = AutoModelForCausalLM.from_pretrained(
    MODEL_ID, use_safetensors=True
).to("cpu").eval()

# Verejné demonštračné kľúče. Nikdy ich nepoužívajte ako súkromnú produkčnú značku.
watermark = SynthIDTextWatermarkingConfig(
    keys=[104729 + 7919 * i for i in range(30)],
    ngram_len=5,
    sampling_table_size=65536,
    sampling_table_seed=42,
    context_history_size=1024,
    skip_first_ngram_calls=True,
)

inputs = tokenizer(
    "A community garden can change a neighborhood in several ways. ",
    return_tensors="pt",
)

def generate(config):
    set_seed(17)
    with torch.inference_mode():
        output = model.generate(
            **inputs,
            watermarking_config=config,
            do_sample=True,
            max_new_tokens=384,
            temperature=0.9,
            top_k=50,
            pad_token_id=tokenizer.eos_token_id,
        )
    # Ponechajte pokračovanie; zadaný prompt nebol označený vodoznakom.
    return output[:, inputs["input_ids"].shape[1]:]

marked_ids = generate(watermark)
unmarked_ids = generate(None)
print(tokenizer.decode(marked_ids[0], skip_special_tokens=True))

Generovanie musí vystaviť kompatibilný vzorkovací pipeline. Odovzdanie hotovej odpovede z hostovanej API do tejto konfigurácie ju nemôže dodatočne označiť. Novú verziu by musel vygenerovať samostatný model.

V produkcii vytvorte jedinečné náhodné kľúče a konfiguráciu uchovávajte v súkromí. Zachovajte revíziu tokenizéra, revíziu modelu, verziu konfigurácie a súvisiaci detektor. Rotácia kľúčov vytvára novú konfiguráciu; starú konfiguráciu detekcie si ponechajte, ak stále potrebujete rozpoznávať starší výstup. Usmernenie Google k implementácii

Ako detekcia vodoznaku počíta dôkazy

Detekcia začína tokenizáciou kandidátskeho textu a rekonštrukciou skóre pre každé spôsobilé okno tokenov a vrstvu vodoznaku. V tu použitej implementácii sa tieto binárne skóre nazývajú hodnoty g. Spriemerujeme ich po vylúčení opakovaných kontextov a pozícií na tokene konca sekvencie alebo za ním. Prvé štyri tokeny pokračovania samy netvoria úplné okno piatich tokenov.

Nasledujúca funkcia používa metódy skórovania a maskovania v Transformers. Prijíma vždy jednu sekvenciu bez paddingu a vracia surový priemer, nie pravdepodobnosť autorstva.

def score_ids(token_ids, config):
    if token_ids.ndim != 2 or token_ids.shape[0] != 1:
        raise ValueError("Pass one unpadded sequence with shape [1, length].")
    if token_ids.shape[1] < config.ngram_len:
        return {"mean_g": None, "usable_windows": 0}

    processor = SynthIDTextWatermarkLogitsProcessor(
        **config.to_dict(), device=torch.device("cpu")
    )
    with torch.inference_mode():
        values = processor.compute_g_values(token_ids).float()
        unique = processor.compute_context_repetition_mask(token_ids)
        before_eos = processor.compute_eos_token_mask(
            token_ids, tokenizer.eos_token_id
        )[:, config.ngram_len - 1:]
        mask = unique & before_eos.bool()
        usable = int(mask.sum().item())
        if usable == 0:
            return {"mean_g": None, "usable_windows": 0}
        # Booleovské indexovanie zachováva dimenziu vrstvy.
        mean_g = float(values[mask].mean().item())
    return {"mean_g": mean_g, "usable_windows": usable}

print("marked:", score_ids(marked_ids, watermark))
print("unmarked:", score_ids(unmarked_ids, watermark))

def score_text(text, config):
    ids = tokenizer(
        text, add_special_tokens=False, return_tensors="pt"
    )["input_ids"]
    return score_ids(ids, config)

published_text = tokenizer.decode(
    marked_ids[0],
    skip_special_tokens=True,
    clean_up_tokenization_spaces=False,
)
print("published text:", score_text(published_text, watermark))
print("empty text:", score_text("", watermark))

Priama kontrola podľa ID tokenov izoluje generovanie od serializácie textu. Druhá kontrola preveruje cestu, ktorú detektor vidí po zverejnení. Vyhodnoťte svoj skutočný publikačný a textovo-extrakčný pipeline, pretože môže zmeniť vstup.

Skóre 0,60 neznamená 60 % pravdepodobnosť, že text napísala AI. Táto funkcia nemá kalibrovanú rozhodovaciu hranicu. Krátka pasáž môže dosiahnuť vysoké skóre náhodou. Ak sú dôkazy nedostatočné, uveďte nepresvedčivý výsledok.

Pre užitočný detektor zozbierajte reprezentatívny ľudský text, výstup modelu bez vodoznaku a výstup s vodoznakom. Kalibračné údaje uchovávajte oddelene od údajov na záverečné hodnotenie. Zvoľte hranicu pre prijateľnú mieru falošných pozitívov, vyhodnoťte miery detekcie na odložených vzorkách a výsledky rozdeľte podľa jazyka, dĺžky a typu obsahu. Jediná dvojica označený/neoznačený len overí, že príklad beží.

Ako trénovanú alternatívu ponúka Hugging Face bayesovský detektor a pracovný postup trénovania detektora. Detektor natrénovaný na nesúvisiace kľúče nie je priamou náhradou vášho detektora. Náhodne inicializovaný alebo demonštračný checkpoint nepreukazuje presnosť detekcie.

Dokážete detegovať AKÝKOĽVEK vodoznak SynthID bez jeho kľúčov?

Zverejnený prístup k detekcii vyžaduje zodpovedajúcu konfiguráciu. Potrebujete aj kompatibilnú tokenizáciu. To, že poskytovateľ používa algoritmus SynthID, vám nedáva jeho konfiguráciu a verejné úložisko nie je detektorom pre výstup každého poskytovateľa.

Google opisuje súkromné detektory, detektory sprístupnené cez API a verejne distribuované detektory. Poskytovateľ by mohol ponúknuť overenie bez zverejnenia svojej súkromnej konfigurácie. Detekcia a overiteľnosť

Pre vlastný systém môžeme skontrolovať register známych konfigurácií. Pridajte tento príklad na porovnanie správnych kľúčov s nesúvisiacimi demonštračnými kľúčmi:

other_settings = watermark.to_dict()
other_settings["keys"] = [key + 1_000_003 for key in watermark.keys]
other_watermark = SynthIDTextWatermarkingConfig(**other_settings)

known_configs = {
    "demo-original-v1": watermark,
    "demo-other-v1": other_watermark,
}
for name, config in known_configs.items():
    print(name, score_text(published_text, config))

Spustite zostavený súbor príkazom python watermark_demo.py. Toto porovnanie prináša dôkazy pre dve známe konfigurácie. Nedokáže objaviť ľubovoľný neznámy kľúč a zámerne neoznačuje ani jedno skóre ako detekciu.

Kontrola mnohých konfigurácií znamená aj vykonanie mnohých štatistických testov. Ak každý test pripúšťa falošné pozitívy, akceptovanie akéhokoľvek pozitívu môže zvýšiť celkovú mieru falošných pozitívov. Kalibrujte celý postup vyhľadávania. Tam, kde jednotlivé testy poskytujú platné p-hodnoty, je konzervatívnou možnosťou vydeliť celkovú povolenú mieru falošných pozitívov počtom testov. Túto aritmetiku neuplatňujte priamo na surové skóre mean_g.

Ak sa nezhoduje žiadna známa konfigurácia, vhodným výsledkom je „Nebol detegovaný žiadny podporovaný vodoznak.“ Možnosti stále zahŕňajú ľudské písanie, výstup AI bez vodoznaku, neznámy vodoznak a upravenú pasáž, ktorej signál je príliš slabý.

Môže ten istý text niesť viacero vodoznakov SynthID?

Zvážiť treba dva odlišné návrhy.

Viacero vrstiev v jednej konfigurácii

SynthID už podporuje zoznam kľúčov. V príklade 30 kľúčov vytvára 30 vrstiev v rámci jedného nakonfigurovaného vodoznaku. Detektor kombinuje ich dôkazy. Tieto kľúče automaticky nepredstavujú 30 samostatne priraditeľných autorov alebo organizácií. Konfigurácia vodoznaku

Samostatne detegovateľné značky platformy a zákazníka

Predpokladajme, že chcete, aby celoplatformový detektor a samostatný detektor špecifický pre zákazníka rozpoznali tú istú pasáž. Prideľovanie skupín vrstiev na tieto účely je možnosťou experimentálneho návrhu, nie dokumentovanou zárukou knižnice.

Púhe spojenie dvoch zoznamov kľúčov nepreukazuje, že oba pôvodné detektory stále fungujú. Každý detektor by potreboval vyhodnotenie na kombinovanom procese generovania vrátane svojej pozície v sekvencii vrstiev. Zmerajte mieru detekcie každej značky, krížové zhody s inými zákazníkmi a správanie po úpravách. Ide o inžiniersky návrh, ktorý potrebuje experimenty, a nie o tvrdenie, že SynthID poskytuje nezávislé priradenie viacerým vlastníkom hneď po vybalení.

Ak centrálna služba potrebuje len identifikovať zákazníka, jednoduchším návrhom je jedna konfigurácia na zákazníka s interným registrom. Aj tento návrh potrebuje kalibráciu v rámci celého registra. Neposkytuje samostatnú celoplatformovú značku, ktorú by bolo možné skontrolovať bez prehľadávania zákazníckych konfigurácií.

Môžete nahradiť existujúci vodoznak?

SynthID neukladá do textu pole ako watermark_id. Neexistuje žiadna hodnota metadát, ktorú by bolo možné prepísať. Pôvodný signál je rozložený naprieč voľbami tokenov.

Ak prepíšete pasáž pomocou druhého generátora s vodoznakom, nový proces generovania vnesie vlastný signál. Vplyv na skorší signál závisí od výslednej sekvencie tokenov. Google uvádza, že mierne úpravy môžu zachovať detegovateľnosť, zatiaľ čo dôkladné prepísanie alebo preklad môžu podstatne znížiť spoľahlivosť. Dokumentované limity transformácií

Z toho vyplýva, že druhý vodoznak nezaručuje vymazanie prvého. Oba signály môžu zostať detegovateľné alebo jeden či oba môžu klesnúť pod svoje detekčné hranice. Je to odvodenie o kombinovanom pracovnom postupe; citovaná dokumentácia neurčuje mieru prežitia pre každú dvojicu vodoznakov.

Neznáma prvá konfigurácia vytvára praktický limit. Náš vlastný detektor dokáže vyhodnotiť našu značku, ale nedokáže preukázať, že pôvodná značka zmizla. To vyžaduje prístup k pôvodnému zodpovedajúcemu detektoru. Aj negatívny výsledok znamená, že detektor pri svojom nastavení nenašiel dostatok dôkazov, nie dôkaz, že boli odstránené všetky stopy.

Ako testovať prekrývajúce sa vodoznaky

Pred tvrdením, že značky koexistujú alebo že jedna nahrádza druhú, použite testovaciu maticu. Položky nižšie opisujú experimenty, ktoré treba vykonať, nie namerané výsledky.

Skupina vzoriekDetektor ADetektor BČo porovnanie kontroluje
Ľudský text a text AI bez vodoznakuSpustiťSpustiťZákladná miera falošných pozitívov
Text vygenerovaný len s ASpustiťSpustiťDetekcia A a náhodné zhody s B
Text vygenerovaný len s BSpustiťSpustiťDetekcia B a náhodné zhody s A
Text vygenerovaný experimentálnou kombinovanou konfiguráciouSpustiťSpustiťČi je každá zamýšľaná značka detegovateľná
Text A prepísaný pod BSpustiťSpustiťPrežitie A a detekcia B po prepísaní
Krátke výňatky a upravené verzie každej skupinySpustiťSpustiťCitlivosť na publikačný pracovný postup

Použite odložené prompty a uveďte použiteľné dĺžky textu, počty vzoriek, verzie detektorov, hranice a miery falošných pozitívov. Zahrňte neistotu okolo uvádzaných mier. Vyhodnotenie zopakujte, keď zmeníte kľúče, tokenizáciu, verzie modelu alebo nastavenia generovania. Kým tieto kontroly neexistujú, opisujte koexistenciu a nahradenie ako neoverené.

Čo to znamená pre vydavateľov a viditeľnosť v AI

Detekcia vodoznakov a monitorovanie citácií v AI odpovedajú na odlišné otázky. Test vodoznaku sa pýta, či pasáž nesie dôkazy o konkrétnej konfigurácii generovania. Monitorovanie citácií kontroluje, ktoré zdroje sa objavujú v odpovediach AI.

Chýbajúci vodoznak neuvádzajte ako dôkaz ľudského autorstva ani detegovaný vodoznak ako dôkaz, že bola citovaná konkrétna webová stránka. V publikačných pracovných postupoch uchovávajte záznamy o generovaní a redakčné priradenie popri akomkoľvek štatistickom detektore. Každý poskytuje dôkazy, ktoré ostatné neposkytujú.

Bolo to užitočné? Pošlite to ďalej.

LinkedIn X

Najčastejšie kladené otázky

Viktor Zeman je spolumajiteľ spoločnosti QualityUnit. Aj po 20 rokoch vedenia firmy zostáva predovšetkým softvérovým inžinierom so špecializáciou na AI, programatické SEO a backendový vývoj. Podieľal sa na mnohých projektoch vrátane LiveAgent, PostAffiliatePro, FlowHunt, UrlsLab a mnohých ďalších.

Viktor Zeman
Viktor Zeman
CEO, AI Engineer

Sledujte, kde AI cituje váš obsah

Pomocou monitorovania citácií zistite, na ktoré stránky sa odpovede AI odkazujú. Detekcia vodoznakov odpovedá na inú otázku o pôvode textu.

Zistiť viac

Ako AI modely spracúvajú obsah?
Ako AI modely spracúvajú obsah?

Ako AI modely spracúvajú obsah?

Zistite, ako AI modely spracúvajú text prostredníctvom tokenizácie, embeddingov, transformačných blokov a neurónových sietí. Pochopte kompletný proces od vstupu...

11 min čítania
Detekcia AI obsahu
Detekcia AI obsahu: Nástroje na identifikáciu AI-generovaného obsahu

Detekcia AI obsahu

Zistite, čo je detekcia AI obsahu, ako fungujú detekčné nástroje využívajúce strojové učenie a NLP a prečo sú dôležité pre monitoring značky, vzdelávanie a over...

12 min čítania