---
# System prepended metadata

title: Dokumentacja Grafy

---

# Dokumentacja Grafy vs podstawowe metody do klasyfikacji Fake News

## Spis treści
1. [Ogólne założenia projektu](#ogólne-założenia-projektu) 
2. [Zawartość dokumentacji](#zawartość-dokumentacji) 
3. [Co znajduje się w repozytorium](#co-znajduje-się-w-repozytorium---fakenewsnlp) 
4. [Komendy serwer Emag](#jak-uruchomić-kod-na-maszynce---komendy-serwer-emag) 
5. [Jak korzystać z ClearML](#jak-korzystać-z-clearml) 
6. [Metody tworzące grafy](#metody-tworzące-grafy) 
7. [Opis Tabeli porównującej Grafy](#opis-tabeli-porównującej-grafy-z-poszczególnych-metod) 
8. [Opis Threshold dla każdej metody](#opis-threshold-dla-każdej-metody) 

---

## Ogólne założenia projektu

Projekt służy do porównania metod bazowych z metodami opartymi na budowie grafów w problemie klasyfikacji **Fake Newsów**, początkowo na bazie danych **LIAR**, a następnie na bazie **ISOT**.

Baza danych **LIAR** okazała się źle oznaczona, co skutkowało bardzo niskimi wynikami dla wszystkich metod.  
Baza danych **ISOT** okazała się lepszym wyborem, ponieważ została poprawnie oznaczona przez jej twórców.

W większości przypadków **metody podstawowe** okazały się lepsze od metod opartych na grafach.  
Ostatecznie projekt skupił się na porównaniu różnych metod budowania grafów przy użyciu następujących metryk: 

- **Coverage Score** – gloss recall względem źródła 
- **Entropy / Diversity ROUGE-1** – najlepszy wynik ROUGE 
- **Jaccard Similarity** 
- **Precision / Recall / F1** na poziomie tokenów 
- **chrF++** – Character F-score 
- **Token Accuracy** 
- **Levenshtein Distance** – Edit Distance 
- **BLEU** – Bilingual Evaluation Understudy 

Wyniki można zobaczyć w tabelach porównawczych, opisanych poniżej.

**Miłej zabawy! :)**

---

## Zawartość dokumentacji

Dokumentacja zawiera:
- Instrukcje korzystania z **serwera**, **GitHub** i **ClearML**
- Wyjaśnienie kodu
- Opis działania metod budowania grafów
- Interpretację wyników porównania powyższych metod

---

## Co znajduje się w Repozytorium - FakeNewsNLP?

Branches:
- [main](https://github.com/Badacze/FakeNewsNLP/tree/main) – Notebook zawierający szablon z preprocessingiem i ClearML
- [BagOfWords](https://github.com/Badacze/FakeNewsNLP/tree/BagOfWords) – metoda Bag of Words
- [Bert](https://github.com/Badacze/FakeNewsNLP/tree/Bert) – metoda BERT
- [NER-AI](https://github.com/Badacze/FakeNewsNLP/tree/NER-AI) – metoda NER-AI
- [TF-IDF](https://github.com/Badacze/FakeNewsNLP/tree/TF-IDF) – metoda TF-IDF
- [Word2Vec](https://github.com/Badacze/FakeNewsNLP/tree/Word2Vec) – metoda Word2Vec
- [graph-tool](https://github.com/Badacze/FakeNewsNLP/tree/graph-tool) – grafy
- [maszynka](https://github.com/Badacze/FakeNewsNLP/tree/maszynka) – metody grafowe na serwerze

*(pełny opis w oryginalnym dokumencie)*

---

## Jak uruchomić kod na maszynce? - Komendy serwer Emag

Maszynka postawiona jest na Ubuntu, więc warto znać podstawowe komendy z basha.

#### SSH
```bash
ssh user@adres_IP
ssh ai@10.255.145.217
```

- odpalanie skryptów 
``` bash
nohup python3 skrypt.py > output.log 2>&1 &
```
nohup - działanie po wyjsciu z ssh
">" - przekierowanie wyjścia i/lub błędów do pliku 
& - działanie w tle 
- monitorowanie procesów
``` bash
htop - wszystkie
ntop - jeśli używa grafy
ps aux | grep python - wyłapanie procesów pythona np. żeby zabić jakis po pid
```

- podgląd pliku na bieżąco
``` bash
tail -f log.txt
```

## Jak korzystać z ClearML?

### 1. Wprowadzenie
ClearML to platforma, która umożliwia między innymi:
- rejestrowanie metryk, 
- logów, 
- porównywanie modeli,
- zarządzanie danymi,
- orkiestrację treningów na wielu maszynach.

W naszym projekcie używamy ClearML do śledzenia treningów modeli, porównywania wyników różnych eksperymentów oraz przechowywania zbiorów danych. 


---

### 2. Instalacja ClearML
Dokumentacja: https://clear.ml/docs/latest/docs/clearml_sdk/clearml_sdk_setup

Poradnik w wersji video:
https://youtu.be/s3k9ntmQmD4?si=tqWpVcWaGwF_vLr8

**Instalacja paczki ClearML**
W terminalu naszego środowiska (np. PyCharm) lub systemowym (Linux, macOS) pobieramy paczkę komendą:

```bash
pip install clearml
```

**Konfiguracja**
Po udanej instalacji paczki przechodzimy do konfiguracji ClearML. W terminalu wpisujemy: 

```bash
clearml-init
```

Jeśli tworzymy konfigurację po raz pierwszy to zostaniemy poproszeni o wklejenie **credentials** w terminalu. Aby to zrobić należy wykonać następujące kroki:
 1. W prawym górnym rogu ekranu kliknij ikonę profilu, następnie przejdź do **Settings**
 
![credentials1](https://hackmd.io/_uploads/H1xNnHx3xx.png)



2. Przechodzimy do zakładki **Workspace** i klikamy **Create new credentials**

![credentials2](https://hackmd.io/_uploads/Syml6rxneg.png)

3. Kopiujemy **credentials** i przeklejamy do konsoli

---

### 3. Obsługa

#### 1. Logowanie
W celu zalogowania się do naszego panelu ClearML wchodzimy na stronę: https://app.clear.ml/login

Z metod logowania wybieramy **"Continue with Email"**

![logowanie1](https://hackmd.io/_uploads/rkFpqkx3gg.png)

**Logujemy się za pomocą:**

**Login:** `badacze@interia.pl`  
**Hasło:** `Uk8d67*g3WNn5PH3$A3j`


#### 2. Zarządzanie danymi
**Dokumentacja:**

Zarządzanie danymi: https://clear.ml/docs/latest/docs/getting_started/data_management

Funkcje w zakładce **Datasets**

https://clear.ml/docs/latest/docs/webapp/datasets/webapp_dataset_page, 
https://clear.ml/docs/latest/docs/webapp/datasets/webapp_dataset_viewing

Poradnik video: https://youtu.be/S2pz9jn26uI?si=bEXPSSCnUN13iAYk

Zakładkę **Datasets** znajdziemy na pasku po lewej stronie ekranu:

![datasety1](https://hackmd.io/_uploads/r18hFgg3eg.png)

Po wybraniu dodanego wcześniej datasetu możemy wyświetlić jego szczegóły zmieniając widok na górnym pasku:

![datasety_details](https://hackmd.io/_uploads/rkBTnelnle.png)

Następnie naciskając przycisk **Details** mamy wgląd do informacji takich jak *ID datasetu*, jego *rozmiar* czy *przykładowe dane* ze zbioru.

![datasety_details2](https://hackmd.io/_uploads/H1sly-ehge.png)

Dane do eksperymentów pobieramy w kodzie bezpośrednio z ClearML zamiast z lokalnych plików. Dzięki temu wszyscy w zespole pracują na tych samych, wersjonowanych danych i łatwo można je udostępniać.

Kod odpowiedzialny za dataset:

![dataset_kod](https://hackmd.io/_uploads/By80bZehll.png)

Używane w kodzie ID wybranego datasetu możemy skopiować naciskając pole **"ID"** w jego szczegółach po prawej stronie ekranu:

![dataset_id](https://hackmd.io/_uploads/rJmsMZlhex.png)

#### 3. Projekty i eksperymenty


Poradnik video: https://youtu.be/bjWwZAzDxTY?si=8PxXUhKUzk0YONAS

Aby dostać się do naszych projektów i podglądu wykonywanych eksperymentów wchodzimy w zakładkę **Projects** na pasku z lewej strony ekranu:

![projects_zakladka](https://hackmd.io/_uploads/HJ8BVbxhxl.png)

Dla każdego projektu dostępne są proste statystyki takie jak:
- **TOTAL** - liczba wszystkich tasków znajdujących się w projekcie
- **RUNNING** - liczba aktualnie działających tasków
- **COMPLETED** - liczba tasków zakończonych sukcesem z ostatniej doby

![projects_stats](https://hackmd.io/_uploads/BytuLbghxe.png)


Aby wejść do podglądu tasków wybieramy interesujący nas projekt (u nas **FakeNewsDetection**).


W zakładce **TASKS** po lewej stronie mamy listę wszystkich zadań:

![taski](https://hackmd.io/_uploads/rkNGPQe3eg.png)

Po wybraniu danego taska, mamy możliwość przechodzenia po zakładkach w celu analizy różnych danych w zależności co nas interesuje. Najważniejsze z zakładek to:
- **CONFIGURATION** - konfiguracja parametrów danego taska. Przydatne do wglądu np. gdy testujemy różne kombinacje parametrów. 
- **INFO** - podstawowe informacje i szczegóły taska
- **CONSOLE** - logi z konsoli
- **SCALARS** - różne skalary takie jak wyniki modelu(np. accuracy, f1) lub zużycie zasobów maszyny
- **PLOTS** - bardziej rozbudowane wykresy działania modeli

![taski_details](https://hackmd.io/_uploads/S10qp7xnee.png)

Aby móc wyświetlać aktualną konfigurację, skalary czy wykresy trzeba najpierw ustawić w kodzie "logowanie" odpowiednich danych do ClearML.

Inicjalizacja taska i logowanie jego konfiguracji:

![task_logging](https://hackmd.io/_uploads/HJHDuNx2xx.png)

Config w panelu ClearML:

![config](https://hackmd.io/_uploads/r1iACBe3eg.png)

Istnieje również możliwość porównywania tasków ze sobą. Aby to zrobić należy zaznaczyć wybrane taski i na pasku który pojawi się w dolnej części ekranu nacisnąć **COMPARE**.

![compare1](https://hackmd.io/_uploads/BkQFeUx3el.png)
![compare2](https://hackmd.io/_uploads/Sk_Yg8g3xe.png)
Teraz możemy porównać wartości zaznaczonych tasków takie jak wyniki na skalarach, konfiguracje i inne.

---

## Metody tworzące grafy 

### 1. Coverage Score


Metoda coverage polega na mierzeniu pokrycia słów między dwoma tekstami.
•  Z tekstu wybierane są tokeny spełniające warunki (np. tylko rzeczowniki i czasowniki, min. długość 3 znaki).
•  Porównywane są dwa zbiory słów:
	○  A – zbiór tokenów z tekstu pierwszego
	○  B – zbiór tokenów z tekstu drugiego
Miara coverage określa, jaka część słów z jednego tekstu znajduje się w drugim.

Wzór
Coverage(A, B) = |A ∩ B| / |A| Coverage(B, A) = |A ∩ B| / |B| Coverage_sym(A, B) = max(Coverage(A, B), Coverage(B, A))

Przykład
Dokument A (fake): "Trump says climate change is a hoax created by China." → {trump, say, climate, change, hoax, create, china}
Dokument B (real): "China and US sign climate agreement on reducing emissions." → {china, us, sign, climate, agreement, reduce, emission}

Obliczenie coverage
•  Część wspólna: {china, climate}
•  Coverage(A,B) = 2 / 7 ≈ 0.285
•  Coverage(B,A) = 2 / 7 ≈ 0.285
•  Coverage_sym = 0.285


Węzły = zdania/dokumenty.
Krawędź powstaje, gdy coverage_sym ≥ threshold.

Coverage dobrze sprawdza się w zadaniach typu fake news detection, ponieważ:
•  ignoruje słowa nieistotne (stopwords, krótkie tokeny),
•  koncentruje się na istotnych częściach mowy (rzeczowniki, czasowniki)

### 2. Diversity
Mierzy różnorodność słów (glossów) w tekście. Połączone dwie wypowiedzi są tokenizowane na pojedyncze słowa, a następnie oblicza się:


$$
\text{Diversity} = \frac{\text{liczba unikalnych glossów}}{\text{liczba glossów}}
$$

Wyższa wartość oznacza większą różnorodność słownictwa i mniej powtórzeń w tekście. W ostatniej wersji kodu zastosowano `1 - Diversity`, aby większa wartość odpowiadała większej powtarzalności słów w połączonym tekście.

### 3. Rouge 1
Metoda **ROUGE-1** tworzy graf podobieństwa między wypowiedziami, wykorzystując miarę ROUGE-1 jako miarę podobieństwa. Każda wypowiedź to węzeł, a krawędzie łączą te pary, których ROUGE-1 przekracza ustalony próg threshold (np. 0.3). 

##### Budowa grafu ROUGE-1
1. Dla każdej pary wypowiedzi obliczana jest miara **ROUGE-1**, czyli pokrycie **unigramów**.
  - Recall:

$$
\text{ROUGE-1}_{rec}(A, B) \;=\; \frac{|\text{tokens}(A) \cap \text{tokens}(B)|}{|\text{tokens}(A)|}
$$  

   - Precision:

$$
\text{ROUGE-1}_{prec}(A, B) \;=\; \frac{|\text{tokens}(A) \cap \text{tokens}(B)|}{|\text{tokens}(B)|}
$$  

   - F1-score:

$$
\text{ROUGE-1}_{F1}(A, B) \;=\; \frac{2 \cdot \text{ROUGE-1}_{prec}(A, B) \cdot \text{ROUGE-1}_{rec}(A, B)}{\text{ROUGE-1}_{prec}(A, B) + \text{ROUGE-1}_{rec}(A, B)}
$$  

3. Wynik mieści się w przedziale [0,1] i określa stopień podobieństwa dwóch zdań na podstawie unigramów.3. Wynik ROUGE-1 może być mierzony na trzy sposoby: recall, precision lub F1-score.W praktyce najczęściej stosuje się **recall** lub **F1-score** jako ostateczną wartość podobieństwa (wagę krawędzi w grafie).

### 4. Jaccard Similarity

Metoda Jaccard Similarity tworzy graf podobieństwa między dokumentami, traktując je jako zbiory słów (tokenów). Dla każdej pary dokumentów obliczany jest współczynnik Jaccarda:

$$
J(A, B) = \frac{|A \cap B|}{|A \cup B|}
$$



gdzie:

A, B – zbiory słów z dwóch dokumentów,



Wartość mieści się w przedziale [0,1], gdzie 0 oznacza brak wspólnych słów, a 1 – pełną zgodność. Krawędzie w grafie są tworzone tylko wtedy, gdy podobieństwo Jaccarda przekracza ustalony próg threshold (np. 0.1–0.3).

#### Budowa grafu Jaccard

1. Tokenizacja dokumentów na słowa.
2. Tworzenie zbiorów tokenów (bez duplikatów).
3. Obliczanie wartości Jaccarda dla każdej pary.
4. Dodanie krawędzi, jeśli wynik ≥ threshold.

#### Cechy metody

- Prosta i intuicyjna, łatwa w interpretacji.
- Niezależna od kolejności słów.
- Wrażliwa na długość dokumentów i brak analizy semantycznej (różne słowa o podobnym znaczeniu traktowane są jako odmienne).

### 5. F1 na poziomie tokenów
Metoda F1 tworzy graf podobieństwa między **zdaniami/wypowiedziami**, wykorzystując **F1-score na poziomie tokenów** jako miarę podobieństwa. Każda wypowiedź/zdanie to **węzeł**, a krawędzie łączą te pary, których F1 przekracza ustalony próg ``threshold``(np. 0.4). Wagi krawędzi odpowiadają wartości prawdopodobieństwa.

Podczas predykcji wybierane są najbardziej podobne wypowiedzi z grafu, a do głosowania więkoszściowego uwzględnia się tylko sąsiadów, których podobieńśtwo spełnia dodatkowy próg ``predict_threshold`` (np. 0.3). Na tej podstawie ustalana jest etykieta FAKE/TRUE.

#### Metoda F1 - budowa grafu
1. Każda wypowiedź jest tokenizowana (dzielona na słowa)
2. Dla każdej pary wypowiedzi obliczany jest F1-score na poziomie tokenów: 
    - *Precison* = ile tokenów wypowiedzi A znajduje się w wypowiedzi B = 
    ***wspólne tokeny / liczba tokenów w pierwszej wypowiedzi***,
    - *Recall* = ile tokenów z wypowiedzi B znajduje się w wypowiedzi 
    ***wspólne tokeny / liczba tokenów w drugiej wypowiedzi***
    - *F1* = średnia harmoniczna Precision i Recall
    ***2 * precision * recall / (precision + recall)***.


### 6. chrF++
Metoda **chrF++** tworzy graf podobieństwa między wypowiedziami, wykorzystując miarę chrF++ jako miarę podobieństwa. Każda wypowiedź to węzeł, a krawędzie łączą te pary, których chrF++ przekracza ustalony próg threshold (np. 0.3). 

##### Budowa grafu chrF++
1. Każda wypowiedź jest tokenizowana na **n-gramy znakowe i wyrazowe**.  
2. Dla każdej pary wypowiedzi obliczany jest wynik chrF++ jako ważona średnia F-skorów:

$$
\text{chrF++}(A,B) \;=\; (1 - \beta) \cdot P_{chr} \;+\; \beta \cdot R_{chr}
$$  

gdzie:
- **P_chr** – precyzja n-gramów (znakowych i wyrazowych)
- **R_chr** – recall n-gramów (znakowych i wyrazowych)
- **β** – współczynnik równoważący precision/recall

3. Wynik mieści się w przedziale [0,1] i określa stopień podobieństwa dwóch zdań.

### 7. Token Accuracy
Metoda **Token Accuracy** tworzy graf podobieństwa między wypowiedziami, wykorzystując dokładność tokenową jako miarę podobieństwa. Każda wypowiedź to węzeł, a krawędzie łączą te pary, których Token Accuracy przekracza ustalony próg threshold (np. 0.3). Wagi krawędzi odpowiadają wartości podobieństwa.
Podczas predykcji wybierane są najbardziej podobne wypowiedzi z grafu, a do głosowania większościowego uwzględnia się tylko sąsiadów, których podobieństwo spełnia dodatkowy próg predict_threshold (np. 0.3). Na tej podstawie ustalana jest etykieta FAKE/TRUE.
##### Budowa grafu Token Accuracy

1. Każda wypowiedź jest tokenizowana (dzielona na słowa).
2. Dla każdej pary wypowiedzi obliczana jest dokładność tokenowa:

$$
\text{TokenAccuracy}(A, B) \;=\; \frac{\text{liczba wspólnych tokenów}}{\max(A,B)}
$$


3. Wynik mieści się w przedziale [0,1] i określa stopień podobieństwa dwóch zdań.

### 8. Levenshtein Distance
**Levenshtein Distance** (znany również jako **Edit Distance**) to miara określająca, jak bardzo dwa łańcuchy znaków (słowa, zdania) różnią się od siebie. Konkretnie, definiuje minimalną liczbę pojedynczych operacji edycji niezbędnych do przekształcenia jednego ciągu znaków w drugi.

**Zasada działania:**
1.Stworzenie dwuwymiarowej macierzy o wymiarach i x j
- i - długość pierwszego łańcucha znaków + 1
- j - długość drugiego łańcucha znaków + 1







2.Uzupełnienie pierwszego wiersza wartościami od 0 do i, i pierwszej kolumny wartościami od 0 do j:

|     |  *  |  k  |  i  |  t  |
| --- | --- | --- | --- | --- |
|  *  |  0  |  1  |  2  |  3  |
|  k  |  1  |     |     |     |
|  o  |  2  |     |     |     |
|  t  |  3  |     |     |     |

3.Wypełnienie macierzy według wzoru: M[i][j] = min(M[i-1][j] + 1, M[i][j-1] + 1, M[i-1][j-1] + koszt)

koszt - 0 jak znaki są takie same, 1 jak są inne

**Przykładowa macierz:**

|     |  *  |  k  |  i  |  t  |
| --- | --- | --- | --- | --- |
|  *  |  0  |  1  |  2  |  3  |
|  k  |  1  |  0  |  1  |  2  |
|  o  |  2  |  1  |  1  |  2  |
|  t  |  3  |  2  |  2  |  <font color="#FF0000">1</font>  |

**Obliczony dystans:** 1 (Ostatni element macierzy)


### 9. BLEU (Bilingual Evaluation Understudy)

**BLEU** mierzy, jak bardzo tłumaczenie maszynowe przypomina tłumaczenie referencyjne.


#### Jak działa?
1. Dzielimy tekst na **n-gramy** (ciągi słów).
2. Liczymy **precyzję n-gramów**:
   $$
   P_n = \frac{\text{dopasowane n-gramy}}{\text{wszystkie n-gramy w tłumaczeniu}}
   $$
3. Dodajemy **karę za długość**:
   $$
   BP = \begin{cases} 
   1 & \text{jeśli } c > r \\ 
   e^{(1-r/c)} & \text{jeśli } c \leq r 
   \end{cases}
   $$
   gdzie \(c\) – długość tłumaczenia, \(r\) – długość referencyjna.
4. Wynik końcowy:
   $$
   BLEU = BP \cdot \exp\left(\frac{1}{N}\sum_{n=1}^N \log P_n\right)
   $$
---

#### Przykład
- **Referencja:** `the cat is on the mat`  
- **Tłumaczenie:** `the cat is on mat`

**1-gramy dopasowane:** 4/5  
**2-gramy dopasowane:** 3/4  

$$
P_1 = 0.8, \quad P_2 = 0.75
$$

**Średnia (N=2):**
$$
\exp\left(\tfrac{1}{2}(\log 0.8 + \log 0.75)\right) \approx 0.77
$$

**Kara za długość (c=5, r=6):**
$$
BP = e^{(1-6/5)} \approx 0.82
$$

**BLEU:**
$$
0.77 \times 0.82 \approx 0.63
$$

---

## Opis Tabeli porównującej Grafy z poszczególnych metod
Porównania grafów przy użyciu wskaźników Jaccard, liczby wspólnych krawędzi, podobieństwa krawędzi oraz odległości edycyjnej (GED) pokazują, że stopień podobieństwa między grafami jest zróżnicowany i silnie zależy od użytej metody.

### Metryki porównywania grafów

- **Jaccard (edge Jaccard similarity)**
  Mierzy, jaka część krawędzi w dwóch grafach się pokrywa.
  Oblicza się to jako stosunek liczby wspólnych krawędzi do liczby wszystkich krawędzi w obu grafach.
  Wynik mieści się w przedziale [0,1]. Im bliżej **1**, tym grafy są bardziej podobne pod względem struktury.

- **Common_edges_number**
  Liczba wspólnych krawędzi w obu grafach.
  Im większa wartość, tym więcej relacji między węzłami powtarza się w obu grafach.

- **Edge_similarity**
  Stosunek liczby wspólnych krawędzi do liczby krawędzi w **większym** z grafów.
  Pokazuje, jak bardzo mniejszy graf „pokrywa się” z większym.

- **Edges_GED (Graph Edit Distance)**
  Liczba zmian (dodanie/usunięcie krawędzi), które trzeba wykonać, aby jeden graf przekształcić w drugi.
  Im mniejsza wartość, tym grafy są bardziej podobne.


### Opis poszczególnych porównań

**Najwyższe wartości podobieństwa Jaccarda** uzyskano dla par grafów opartych na metodach **Jaccard (0,1) i F1 (0,1)** – wartość współczynnika wyniosła **0,58**, co oznacza, że ponad połowa krawędzi w obu grafach się pokrywa. Wysokie podobieństwo zanotowano także dla pary **BLEU (0,15) i F1 (0,1) (0,53)** oraz **Jaccard (0,1) i ROUGE-1 (0,10) (0,51)**.

Z drugiej strony, **najniższe wartości Jaccarda** widoczne są dla porównań z grafem opartym na **Coverage Score**, np. z metodą **Diversity (0,4) (0,056)** czy **Levenshtein (0,07)**. Oznacza to, że te grafy mają bardzo mało wspólnych krawędzi i różnią się pod względem struktury.

Analiza wskaźnika **common_edges_number** potwierdza te obserwacje – najwięcej wspólnych krawędzi **(ponad 147 tys.)** zaobserwowano między grafami **Jaccard (0,1) i F1 (0,1)**, natomiast zdecydowanie mniej **(ok. 21 tys.)** między **Coverage Score i Levenshtein**.

Podobne wnioski wynikają z miary **edge_similarity** – największe podobieństwo **(ponad 0,72)** odnotowano dla grafów **Jaccard i F1**, natomiast najniższe **(ok. 0,09–0,10)** dla grafów **Coverage Score i Levenshtein lub Diversity**.

Odległość edycyjna **(edges_GED)** potwierdza, że najbardziej odmienne są grafy bazujące na **Coverage Score (konieczność dokonania ponad 390 tys. zmian)**, natomiast bliższe sobie są grafy tworzone metodami **Jaccard, F1 i BLEU (ok. 120–180 tys. zmian)**.

### Podsumowanie
Najbardziej zbliżone strukturalnie są grafy oparte na metodach **Jaccard, F1, BLEU i ROUGE**, natomiast największe różnice występują w porównaniach z grafami budowanymi na podstawie **Coverage Score i Diversity**, które tworzą bardziej odmienne i mniej gęste struktury.

![Porownanie metod](https://hackmd.io/_uploads/S11If62jlg.png)

- kod porównujacy znajduje sie na branchu "maszynka" w folderze GRAFY_PKL kod zostal zapisany jako csv oraz przekonwertowany do formalu xlsx ;)

## Opis Threshold dla każdej metody
**Threshold (próg)** to wartość graniczna, która decyduje, czy dane połączenie w grafie zostanie zachowane. Jeśli próg jest niski, w grafie zostaje wiele krawędzi (także słabszych). Jeśli próg jest wysoki, zostają tylko najmocniejsze i najbardziej pewne połączenia.

**Najczęstszym progiem używanym w metodach była wartość około 0,1**, odpowiadająca poziomowi bazowemu (baseline), przy której uzyskano **największą liczbę krawędzi w grafach**. Wraz ze wzrostem progu liczba krawędzi systematycznie malała, ponieważ coraz więcej połączeń było odrzucanych jako zbyt słabe. **Szczególnie wyraźny spadek widoczny jest od wartości 0,4** – przykładowo, w metodzie ROUGE-1 liczba krawędzi zmniejszyła się z ponad 179 000 (przy 0,3) do około 104 000 (przy 0,4), a w metodzie chrF++ z prawie 200 000 (przy 0,3) do około 110 000 (przy 0,4). Dalsze zwiększanie progu prowadzi do **gwałtownej redukcji liczby krawędzi** – np. w metodzie Jaccard przy progu 0,1 liczba krawędzi wynosiła prawie 200 000, natomiast przy 0,9 pozostało już tylko 236. Oznacza to, że **wyższe wartości threshold bardzo silnie ograniczają gęstość grafu**, pozostawiając wyłącznie najbardziej jednoznaczne i pewne powiązania. **Podsumowując, niższe progi prowadzą do powstawania dużych i gęstych grafów, a wyższe – do ich znacznego przerzedzenia**.

![Treshold dla wszystkich metod](https://hackmd.io/_uploads/BkOE822jlg.png)

<br>

![Stosunek treshold do ilości krawędzi](https://hackmd.io/_uploads/SJLOrnhsle.png)

[Treshold porównawczy](https://docs.google.com/spreadsheets/d/1FY-BGqq0fRbTxlKTB5yIu76T4yqfEikQl0s3DMJgrCg/edit?gid=0#gid=0)



## Podsumowanie  

W projekcie porównano **podstawowe metody klasyfikacji tekstu** z metodami opartymi na **grafach**. Analiza wykazała, że:  

- **Metody bazowe** (np. TF-IDF, BERT, Bag of Words) w wielu przypadkach osiągały **wyższe wyniki** niż podejście grafowe.  
- **Metody grafowe** są bardziej eksperymentalne, ale pozwalają lepiej zrozumieć **strukturę podobieństw między tekstami** i analizować zależności w danych.  
- **Najbardziej spójne grafy** powstawały przy użyciu metod **Jaccard, F1, BLEU oraz ROUGE-1**, które dawały wysoką zbieżność krawędzi.  
- **Metody Coverage i Diversity** tworzyły natomiast **bardziej odmienne grafy**, o mniejszej gęstości i słabszym pokryciu z innymi.  
- Kluczowym parametrem w budowie grafów okazał się **threshold**, którego niskie wartości prowadziły do powstawania dużych i gęstych grafów, a wysokie – do ich radykalnego przerzedzenia.  

Podsumowując, **grafy mogą być użytecznym narzędziem do analizy powiązań między dokumentami**, jednak wymagają starannego doboru metody oraz parametrów (np. threshold). W praktycznych zadaniach klasyfikacji Fake News lepsze rezultaty dawały **tradycyjne metody NLP**, natomiast podejście grafowe dostarczyło **cennych informacji strukturalnych**, które mogą być rozwijane w dalszych badaniach.  







