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