furkanyllmz's picture
Add files using upload-large-folder tool
024d1ea verified
|
Raw
History Blame Contribute Delete
7.19 kB
---
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.