File size: 7,185 Bytes
3b1c2bb
024d1ea
 
 
3b1c2bb
024d1ea
 
 
 
 
 
 
3b1c2bb
024d1ea
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
---
language:
- tr
- en
license: mit
tags:
- fasttext
- text-classification
- quality-filter
- turkish
- pretraining-data
pipeline_tag: text-classification
---

# fastText-TR-Quality-Classifier

*[Türkçe açıklama için aşağı kaydırın / Scroll down for Turkish description](#türkçe)*

## English

A binary text quality classifier — labels Turkish web pages as **`clean`**
(usable for LLM pretraining) or **`garbage`** (spam/ads/low-quality) for
LLM pretraining corpus construction.

### Model Details

- **Architecture:** fastText supervised classifier
- **Dimension:** 100
- **Labels:** `__label__clean`, `__label__garbage`
- **Vocabulary:** ~3.5M words/n-grams
- **Language:** Turkish

**Training hyperparameters:**

| Parameter | Value | Meaning |
|---|---|---|
| `lr` (learning rate) | 1.0 | A standard/above-default learning rate for fastText |
| `epoch` | 25 | 25 passes over the training data |
| `wordNgrams` | 2 | Word bigrams used as features in addition to unigrams |
| `dim` | 100 | Word vector dimension |
| `loss` | softmax | Standard softmax loss (2-class here) |

### Training Data

- **Source:** Turkish web text extracted from CommonCrawl (2025/2026 monthly
  crawls) with trafilatura, from raw HTML.
- **Size:** ~480,000 labeled examples.
- **Labeling method:** Predictions from a fine-tuned Turkish BERT classifier
  (0-5 quality score) were converted into binary (clean/garbage) labels and
  used as training data — i.e. this model distills the decisions of a much
  slower BERT classifier at scale (knowledge distillation).
- The BERT model itself was fine-tuned on 5,876 manually/LLM-scored examples.

### Performance

- On a validation chunk the BERT model had never seen, this fastText
  model's predictions agreed with the source BERT model's predictions
  **94.4%** of the time.
- On a synthetic test set (8 hand-written examples: betting/escort spam,
  academic summary, news text, product description, etc.), 8/8 correct
  classifications, mostly with ≥96.9% confidence.
- fastText inference is ~90x faster than BERT on the same hardware (Apple
  M4 Pro, CPU): ~8,880 docs/sec vs ~96.5 docs/sec.

### Files

- `model.bin` — the full classifier (word vectors + classification layer).
  Use this for inference (predicting `clean`/`garbage`).
- `model.vec` — plain-text word vectors only (no classification layer).
  Useful if you want to reuse the learned word embeddings elsewhere, e.g.
  as `pretrainedVectors` when training a different fastText model.

### Usage

```python
import fasttext

model = fasttext.load_model("model.bin")

text = "example Turkish web text here"
labels, scores = model.predict(text.replace("\n", " "), k=-1)
label_scores = dict(zip(labels, scores))

if label_scores.get("__label__clean", 0) >= 0.5:
    print("Usable content")
else:
    print("Flagged as low quality / spam")
```

### Limitations

- Trained on general CommonCrawl web content; performance on very
  different domains (e.g. social media, code, academic PDFs) was not
  tested.
- The `clean` label means "usable for LLM pretraining", not "factually
  correct" or "non-toxic" — separate filters (PII masking, toxicity/spam
  keyword lists) are still recommended.
- Training labels were ultimately derived from a BERT model's predictions,
  so this model may inherit that model's own errors/biases.

### License

MIT. Training data was derived from CommonCrawl (a public web crawl);
see CommonCrawl's own terms of use.

---

## Türkçe

İkili (binary) metin kalite sınıflandırıcısı — Türkçe web sayfalarını LLM
ön-eğitim (pretraining) verisi olarak **`clean`** (kullanılabilir) veya
**`garbage`** (spam/reklam/düşük-kalite) olarak etiketler.

### Model Detayları

- **Mimari:** fastText supervised classifier
- **Boyut (dim):** 100
- **Etiketler:** `__label__clean`, `__label__garbage`
- **Kelime dağarcığı:** ~3.5M kelime/n-gram
- **Dil:** Türkçe

**Eğitim hiperparametreleri:**

| Parametre | Değer | Anlamı |
|---|---|---|
| `lr` (learning rate) | 1.0 | fastText için standart/varsayılan-üstü bir öğrenme oranı |
| `epoch` | 25 | Eğitim verisi üzerinden 25 tur geçildi |
| `wordNgrams` | 2 | Tekli kelimelerin yanı sıra kelime ikilileri (bigram) da özellik olarak kullanıldı |
| `dim` | 100 | Kelime vektör boyutu |
| `loss` | softmax | Çok sınıflı (burada 2 sınıflı) standart softmax kaybı |

### Eğitim Verisi

- **Kaynak:** CommonCrawl'dan (2026 ve 2025 aylık crawl'ları) çekilip
  trafilatura ile ham HTML'den çıkarılmış Türkçe web metinleri.
- **Boyut:** ~480.000 etiketli örnek.
- **Etiketleme yöntemi:** Fine-tune edilmiş bir Türkçe BERT sınıflandırıcının
  (0-5 arası kalite puanı) tahminleri, ikili (clean/garbage) etikete
  dönüştürülüp eğitim verisi olarak kullanıldı — yani bu model, daha yavaş
  çalışan bir BERT sınıflandırıcının kararlarını büyük ölçekte "distile"
  ediyor (knowledge distillation).
- BERT modelinin kendisi, 5.876 elle/LLM ile puanlanmış örnek üzerinde
  eğitilmişti.

### Performans

- Doğrulama seti (BERT'in hiç görmediği bir CommonCrawl chunk'ı) üzerinde,
  bu fastText modelinin tahminleri ile kaynak BERT modelinin tahminleri
  arasında **%94.4 uyum** gözlemlendi.
- Sentetik test setinde (8 el-yapımı örnek: bahis/escort spam'i, akademik
  özet, haber metni, ürün açıklaması vb.) 8/8 doğru sınıflandırma,
  çoğunlukla ≥%96.9 güvenle.
- fastText'in inference hızı, aynı donanımda (Apple M4 Pro, CPU) BERT'e göre
  ~90 kat daha hızlı ölçüldü (~8.880 doküman/saniye vs ~96.5 doküman/saniye).

### Dosyalar

- `model.bin` — tam sınıflandırıcı (kelime vektörleri + sınıflandırma katmanı).
  Inference (clean/garbage tahmini) için bunu kullanın.
- `model.vec` — sadece düz metin (text) formatında kelime vektörleri,
  sınıflandırma katmanı yok. Öğrenilen kelime embedding'lerini başka bir
  yerde (örn. farklı bir fastText modelini `pretrainedVectors` ile
  başlatmak için) yeniden kullanmak isterseniz faydalıdır.

### Kullanım

```python
import fasttext

model = fasttext.load_model("model.bin")

text = "örnek Türkçe web metni buraya"
labels, scores = model.predict(text.replace("\n", " "), k=-1)
label_scores = dict(zip(labels, scores))

if label_scores.get("__label__clean", 0) >= 0.5:
    print("Kullanılabilir içerik")
else:
    print("Düşük kalite / spam olarak işaretlendi")
```

### Sınırlamalar

- Model, CommonCrawl kaynaklı genel web içeriği üzerinde eğitildi; çok
  farklı bir alan/tür (örn. sosyal medya, kod, akademik PDF) üzerinde
  performansı test edilmedi.
- `clean` etiketi "LLM pretraining için kullanılabilir" anlamına gelir,
  "faktüel doğru" ya da "toksik değil" anlamına gelmez — ayrı filtreler
  (PII maskeleme, toksisite/spam kelime listesi) hâlâ önerilir.
- Eğitim etiketleri nihayetinde bir BERT modelinin tahminlerinden türetildi,
  o modelin kendi hatalarını/önyargılarını miras almış olabilir.

### Lisans

MIT. Eğitim verisi CommonCrawl'dan (kamuya açık web taraması) türetilmiştir;
CommonCrawl'ın kendi kullanım şartlarına bakınız.