Skip to content

Xgreg2001/magisterka

Repository files navigation

Praca Magisterska - Kamil Włodarski

Opis projektu

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.

Struktura plików

Pliki główne

  • watermarking.py - Główny moduł implementujący system znakowania wodnego. Zawiera klasy WatermarkLogitsProcessor i WatermarkProcessor do 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ą ECCProvider oraz 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.

Skrypty testowe i ewaluacyjne

  • 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).

Katalog data/

  • 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 perpleksji
    • avg_detection_rate_resilience.pdf - Średnie wskaźniki detekcji odporności
    • tpr_fpr_plot.pdf - Wykres TPR/FPR (True/False Positive Rate)

Wymagane biblioteki

Biblioteki Python

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, abc

Instalacja za pomocą pip

Alternatywnie 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.txt

Sposób uruchamiania

1. Konfiguracja środowiska

Przed uruchomieniem należy skonfigurować dostęp do HuggingFace:

# Logowanie do HuggingFace (wymagane do niektórych modeli)
huggingface-cli login

2. Ewaluacja systemu znakowania wodnego

python test_watermark_evaluation.py

Ten skrypt:

  • Testuje różne scenariusze znakowania wodnego
  • Generuje teksty z osadzonymi znakami wodnymi
  • Sprawdza skuteczność detekcji
  • Zapisuje wyniki do data/evaluation_results.csv

3. Testowanie odporności na ataki

python test_resilience.py

Ten skrypt:

  • Testuje odporność znaków wodnych na różne ataki
  • Symuluje parafrazowanie, tłumaczenie i edycję tekstu
  • Zapisuje wyniki do data/resilience_results.csv

4. Analiza wyników

Otwórz notebook Jupyter do analizy danych:

jupyter notebook data/analyze_data.ipynb

Lub 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

5. Użycie programowe

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...
)

Uwagi

  • 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors