SynthID: narzędzia do dodawania znaków wodnych i wykrywania tekstu wygenerowanego przez LLM

Generatywna sztuczna inteligencja (generatywna AI) może generować bogatszy wachlarz bardzo zróżnicowanych treści na niespotykaną dotąd skalę. Chociaż większość tych działań jest uzasadniona, istnieje obawa, że może to przyczyniać się do rozpowszechniania nieprawdziwych informacji i przypisywania treści innym osobom. Znak wodny to jedna z technik ograniczających te potencjalne skutki. Znaki wodne niezauważalne dla ludzi można stosować w treściach generowanych przez AI, a modele wykrywania mogą oceniać dowolne treści, aby wskazać prawdopodobieństwo, że zostały oznaczone znakiem wodnym.

SynthID to technologia firmy Google DeepMind, która umożliwia dodawanie znaków wodnych i identyfikowanie treści wygenerowanych przez AI poprzez umieszczanie cyfrowych znaków wodnych bezpośrednio w obrazach, plikach audio, tekstach lub filmach wygenerowanych przez AI. SynthID Text jest udostępniony na licencji open source, aby umożliwić deweloperom dodawanie znaków wodnych do wygenerowanego tekstu. Aby uzyskać bardziej szczegółowy opis techniczny metody, przeczytaj artykuł w Nature.

Implementacja tekstu SynthID Text jest dostępna w wersji Hugging Face Transformers w wersji 4.46.0 lub nowszej, którą możesz wypróbować w oficjalnym SynthID Text Space. Na GitHubie jest też dostępna implementacja referencyjna, która może być przydatna dla osób odpowiedzialnych za utrzymanie oprogramowania typu open source i współtwórców, którzy chcą zastosować tę technikę w innych środowiskach.

Zastosowanie znaku wodnego

W praktyce SynthID Text to procesor logitów, który jest stosowany w ramach procesu generowania modelu po Top-K i Top-P. Uzupełnia on logit modelu za pomocą pseudolosowej funkcji g, aby zakodować informacje o zapisie wodnym w sposób, który ułatwia określenie, czy tekst został wygenerowany przez Twój model, bez znacznego wpływu na jakość tekstu. Pełny opis techniczny algorytmu oraz analizy wpływu różnych wartości konfiguracji na skuteczność znajdziesz w artykule.

Znaki wodne są konfigurowane w celu parametryzacji funkcji gi sposobu jej zastosowania podczas generowania. Każda używana konfiguracja znaku wodnego powinna być przechowywana w bezpieczny i prywatny sposób, w przeciwnym razie znak wodny może być łatwo powielany przez inne osoby.

W każdej konfiguracji znaku wodnego musisz zdefiniować 2 parametry:

  • Parametr keys to lista unikalnych, losowych liczb całkowitych, które są używane do obliczania wyników funkcji g w słowniku modelu. Długość tej listy określa, ile warstw znaku wodnego jest stosowanych. Aby dowiedzieć się więcej, zapoznaj się z załącznikiem C.1 w publikacji.
  • Parametr ngram_len służy do zrównoważenia odporności i możliwości wykrycia. Im większa wartość, tym łatwiej wykryć znak wodny, ale jednocześnie staje się on bardziej podatny na zmiany. Długość 5 jest dobrą wartością domyślną.

Możesz dostosować znak wodny zgodnie ze swoimi potrzebami:

  • Tabela próbkowania jest konfigurowana za pomocą 2 właściwości: sampling_table_sizesampling_table_seed. Aby zapewnić bezstronne i stabilne działanie funkcji g podczas próbkowania, należy użyć sampling_table_size o wartości co najmniej\( 2^{16} \) . Należy jednak pamiętać, że rozmiar tabeli próbkowania wpływa na ilość pamięci wymaganej w momencie wnioskowania. Jako sampling_table_seed możesz użyć dowolnej liczby całkowitej.
  • Powtarzające się n-gramy w poprzedzających tokenach context_history_size nie są opatrzone znakiem wodnym w celu ułatwienia ich wykrywania.

Aby wygenerować tekst z zastosowaniem znaku wodnego SynthID Text za pomocą swoich modeli, nie musisz przeprowadzać dodatkowego treningu. Wystarczy konfiguracja znaku wodnego, która zostanie przekazana do metody .generate() modelu, aby aktywować procesor logitów SynthID Text. Przykłady kodu pokazujące, jak zastosować znak wodny w bibliotece Transformers, znajdziesz w tym poście na blogutym artykule.

Wykrywanie i weryfikowanie znaków wodnych

Wykrywanie znaku wodnego jest oparte na prawdopodobieństwie. Detektor bayesowski jest dostępny w Hugging Face Transformers i na GitHub. Ten detektor może zwracać 3 możliwe stany wykrywania – z wododnym lub niewododnym znakiem wodnym albo niepewny – a jego działanie można dostosować, ustawiając 2 wartości progowe, aby uzyskać określony współczynnik wyników fałszywie dodatnich i fałszywie ujemnych. Aby dowiedzieć się więcej, zapoznaj się z załącznikiem C.8 w publikacji.

Modele korzystające z tego samego tokenizatora mogą też mieć wspólną konfigurację i detektor znaku wodnego, dzięki czemu będą miały wspólny znak wodny, o ile zestaw treningowy wzorca do wykrywania treści zawiera przykłady ze wszystkich modeli, które mają ten sam znak wodny.

Gdy masz wytrenowany detektor, możesz określić, czy i w jaki sposób chcesz go udostępniać użytkownikom oraz ogółowi odbiorców.

  • Opcja Full-private nie zwalnia ani w żaden sposób nie ujawnia detektora.
  • Opcja półprywatna nie powoduje uwolnienia detektora, ale ujawnia go za pomocą interfejsu API.
  • Opcja publiczny umożliwia innym użytkownikom pobranie i używanie wykrywacza.

Ty i Twoja organizacja musicie zdecydować, które podejście do weryfikacji wykrywania jest najlepsze dla Twoich potrzeb, biorąc pod uwagę możliwości obsługi powiązanej infrastruktury i procesów.

Ograniczenia

Znaki wodnego w Tekście SynthID są odporne na niektóre przekształcenia, takie jak przycinanie fragmentów tekstu, modyfikowanie kilku słów czy lekkie parafrazowanie, ale ta metoda ma pewne ograniczenia.

  • W przypadku odpowiedzi na pytania dotyczące faktów stosowanie znaku wodnego jest mniej skuteczne, ponieważ nie ma możliwości zwiększenia generacji bez obniżenia dokładności.
  • Wyniki wskaźnika ufności mogą się znacznie obniżyć, gdy tekst wygenerowany przez AI zostanie dokładnie przeredagowany lub przetłumaczony na inny język.

SynthID Text nie jest przeznaczony do bezpośredniego powstrzymywania zamierzonych przeciwników przed wyrządzaniem szkód. Może to jednak utrudniać wykorzystywanie treści generowanych przez AI do celów szkodliwych. Można je też łączyć z innymi podejściami, aby uzyskać lepsze pokrycie w przypadku różnych typów treści i platform.