Projekt dotyczy znakowania wodnego (watermarking) tekstów generowanych przez duże modele językowe (LLM) z wykorzystaniem kodów korekcji błędów (ECC). System pozwala na osadzanie ukrytych informacji w generowanym tekście oraz ich późniejszą detekcję, nawet po wprowadzeniu modyfikacji do tekstu.
-
watermarking.py- Główny moduł implementujący system znakowania wodnego. Zawiera klasyWatermarkLogitsProcessoriWatermarkProcessordo osadzania i wykrywania znaków wodnych w tekście. -
ecc_providers.py- Moduł dostarczający implementacje kodów korekcji błędów. Zawiera klasę abstrakcyjnąECCProvideroraz implementacje dla Reed-Solomon i kodu Hamminga. -
hamming_code.py- Implementacja kodu Hamminga (7,4) do korekcji błędów w danych binarnych. -
test_utils.py- Zestaw funkcji pomocniczych do testowania, w tym ładowanie modeli, generowanie tekstów, operacje na plikach CSV oraz funkcje statystyczne. -
stopwords.txt- Lista słów pomijanych podczas procesu znakowania wodnego.
-
test_watermark_evaluation.py- Skrypt do ewaluacji skuteczności systemu znakowania wodnego. Testuje różne scenariusze z różnymi parametrami (metody ECC, temperatury modelu, itp.). -
test_resilience.py- Skrypt do testowania odporności znaków wodnych na różne ataki (parafrazowanie, tłumaczenie, edycja tekstu).
-
analyze_data.ipynb- Notebook Jupyter do analizy wyników eksperymentów i generowania wykresów. -
evaluation_results.csv- Wyniki ewaluacji systemu znakowania wodnego. -
resilience_results.csv- Wyniki testów odporności na ataki. -
plots/- Katalog z wygenerowanymi wykresami:average_perplexity_analysis.pdf- Analiza średniej perpleksjiavg_detection_rate_resilience.pdf- Średnie wskaźniki detekcji odpornościtpr_fpr_plot.pdf- Wykres TPR/FPR (True/False Positive Rate)
Aby uruchomić projekt, należy zainstalować następujące biblioteki:
# Podstawowe biblioteki do pracy z modelami językowymi
pip install torch
pip install transformers
pip install huggingface_hub
pip install datasets
# Biblioteki do obliczeń naukowych i analizy danych
pip install pandas
pip install matplotlib
pip install seaborn
# Biblioteki do kodów korekcji błędów
pip install reedsolo
# Biblioteki do optymalizacji pamięci i kwantyzacji modeli
pip install bitsandbytes
pip install accelerate
# Biblioteki standardowe (zwykle dostępne):
# - logging, csv, re, random, math, hashlib, secrets, time, typing, os, string, abcAlternatywnie można utworzyć plik requirements.txt z następującą zawartością:
torch
transformers
huggingface_hub
datasets
pandas
matplotlib
seaborn
reedsolo
bitsandbytes
accelerate
I zainstalować za pomocą:
pip install -r requirements.txtPrzed uruchomieniem należy skonfigurować dostęp do HuggingFace:
# Logowanie do HuggingFace (wymagane do niektórych modeli)
huggingface-cli loginpython test_watermark_evaluation.pyTen skrypt:
- Testuje różne scenariusze znakowania wodnego
- Generuje teksty z osadzonymi znakami wodnymi
- Sprawdza skuteczność detekcji
- Zapisuje wyniki do
data/evaluation_results.csv
python test_resilience.pyTen skrypt:
- Testuje odporność znaków wodnych na różne ataki
- Symuluje parafrazowanie, tłumaczenie i edycję tekstu
- Zapisuje wyniki do
data/resilience_results.csv
Otwórz notebook Jupyter do analizy danych:
jupyter notebook data/analyze_data.ipynbLub uruchom w VS Code z zainstalowanym rozszerzeniem Jupyter.
Notebook zawiera:
- Analizę statystyczną wyników
- Generowanie wykresów i wizualizacji
- Eksport wyników do formatu LaTeX
Przykład użycia modułu watermarking.py:
from watermarking import WatermarkLogitsProcessor, check_watermark_embedding
from transformers import AutoTokenizer, AutoModelForCausalLM
# Załaduj model i tokenizer
tokenizer = AutoTokenizer.from_pretrained("model_name")
model = AutoModelForCausalLM.from_pretrained("model_name")
# Utwórz procesor znakowania wodnego
watermark_processor = WatermarkLogitsProcessor(
tokenizer=tokenizer,
ecc_method="hamming",
error_budget_per_chunk=1
)
# Generuj tekst ze znakiem wodnym
# (kod generowania...)
# Sprawdź obecność znaku wodnego
is_watermarked, stats = check_watermark_embedding(
text=generated_text,
tokenizer=tokenizer,
# inne parametry...
)- Projekt wymaga GPU z CUDA do efektywnego działania z dużymi modelami językowymi
- Niektóre modele wymagają akceptacji licencji na HuggingFace
- Czas wykonania testów może być długi ze względu na wielkość modeli i ilość scenariuszy testowych
- Zaleca się użycie środowiska wirtualnego Python do zarządzania zależnościami