Bu projede, Türkçe metinleri 12 farklı kategoriye göre sınıflandıran makine öğrenmesi modelleri eğitilmiştir. Proje, geleneksel makine öğrenmesi yaklaşımları (TF-IDF + SVM/Naive Bayes) ve modern derin öğrenme yaklaşımları (LSTM ve BERT) için ayrı script'ler içermektedir.
Modelimiz aşağıdaki 12 kategoriyi sınıflandırabilmektedir:
Metin örneklerini oluşturmak için Claude 3.7 Sonnet, Grok3 ve Gemma3'ten yararlandık. Metin örnekleri önce markdown formatında oluşturuldu. Eğitim öncesinde tüm veriyi yalın hale dönüştürdük. Bunun için markdown_to_plaintext.py betiğini kullandık.
Çalışmalarımızda ağırlığı Geleneksel Makine Öğrenmesi yerine BERT Tabanlı Modele ağırlık verdik.
Projeyi çalıştırmak için aşağıdaki kütüphanelere ihtiyacınız olacaktır:
pip install scikit-learn pandas numpy matplotlib seaborn joblib tqdm
Derin öğrenme modelleri için:
pip install tensorflow # LSTM modeli için
pip install torch transformers # BERT modeli için
Bu model daha hızlı eğitilir ve daha az kaynak gerektirir. Büyük veri setlerinde bile makul sonuçlar verir.
python text-categorization-model.py
Bu script:
.joblib formatında kaydedecekBu model daha iyi sonuçlar verir ancak daha fazla GPU kaynağı ve eğitim süresi gerektirir.
python bert-model.py
Bu script:
Eğitilmiş modeli kullanarak yeni metinleri sınıflandırmak için test scriptini kullanabilirsiniz:
# Bir metin için tahmin yapma
python model-test-script.py --text "Osmanlı İmparatorluğu'nun kuruluş dönemi..." --model turkce_metin_siniflandirici_svm.joblib
# Bir dosyayı sınıflandırma
python model-test-script.py --file ornek.txt --model turkce_metin_siniflandirici_svm.joblib
# Bir dizindeki tüm txt dosyalarını sınıflandırma
python model-test-script.py --dir test_dosyalari/ --model turkce_metin_siniflandirici_svm.joblib
BERT modeli ile tahmin:
python model-test-script.py --text "Örnek metin..." --model turkce_bert_siniflandirici_epoch4 --model-type deep_learning
Farklı modellerin performansı aşağıdaki metriklerle değerlendirilecektir:
Eğer donanımınızda bellek sınırlamaları varsa, veri seti boyutunu azaltabilirsiniz:
# Her kategoriden daha az örnek kullanmak için:
sample_size = 100 # Her kategoriden 100 örnek
BERT modelinin parametrelerini değiştirebilirsiniz:
# BERT model parametreleri
BERT_MODEL_NAME = "dbmdz/bert-base-turkish-cased" # Türkçe BERT modeli
MAX_LENGTH = 256 # Maksimum token uzunluğu
BATCH_SIZE = 16 # Batch boyutu
EPOCHS = 4 # Eğitim turları
LEARNING_RATE = 2e-5 # Öğrenme oranı
Farklı BERT modellerini deneyebilirsiniz:
dbmdz/bert-base-turkish-uncased: Küçük harfli Türkçe BERTdbmdz/convbert-base-turkish-cased: Türkçe ConvBERTxlm-roberta-base: Çok dilli RoBERTabert-base-multilingual-cased: Çok dilli BERTVeri Dengesi: Her kategorinin yaklaşık olarak aynı sayıda örneğe sahip olması, daha dengeli bir model eğitimine yardımcı olur.
Metin Ön-İşleme: Türkçe metinlerin daha iyi işlenmesi için stemming, lemmatization veya noktalama işaretlerini kaldırma gibi ek ön-işleme adımları ekleyebilirsiniz.
Model Seçimi: Küçük veri setleri için geleneksel modeller (SVM), büyük veri setleri için derin öğrenme modelleri (BERT) daha iyi performans gösterebilir.
GPU Kullanımı: BERT modeli eğitimi için GPU kullanılması önerilir. GPU yoksa, daha küçük batch boyutu ve daha az epoch sayısı ile eğitim yapabilirsiniz.
Bellek Yetersizliği: Büyük veri setleri bellek yetersizliğine neden olabilir. sample_size değerini düşürerek daha az veri ile çalışabilirsiniz.
Uzun Metinler: BERT modeli maksimum 512 token işleyebilir. Uzun metinler otomatik olarak kırpılacaktır. Eğer metinleriniz genellikle uzunsa, metin özetleme teknikleri kullanabilirsiniz.
Türkçe Karakterler: Türkçe karakterlerin düzgün işlendiğinden emin olmak için dosyaların UTF-8 formatında olması önemlidir.
Kategori Dengesizliği: Bazı kategorilerin diğerlerinden çok daha fazla örneğe sahip olması durumunda class_weight='balanced' parametresini kullanabilirsiniz.
Kodlama çalışmalarını ağırlıklı olarak Claude 3.7 Sonnet ile birlikte yürüttük. Ürettiğimiz modelin bazı dosyaları 100MB'dan büyük olduğu için github yüklememize izin vermiyor. Ama bu modeli siz de kolaylıkla üretebilirsiniz.
Python3.12
13 commits
Python
100.0%
Bu projede, Türkçe metinleri 12 farklı kategoriye göre sınıflandıran makine öğrenmesi modelleri eğitilmiştir. Proje, geleneksel makine öğrenmesi yaklaşımları (TF-IDF + SVM/Naive Bayes) ve modern derin öğrenme yaklaşımları (LSTM ve BERT) için ayrı script'ler içermektedir.
Modelimiz aşağıdaki 12 kategoriyi sınıflandırabilmektedir:
Metin örneklerini oluşturmak için Claude 3.7 Sonnet, Grok3 ve Gemma3'ten yararlandık. Metin örnekleri önce markdown formatında oluşturuldu. Eğitim öncesinde tüm veriyi yalın hale dönüştürdük. Bunun için markdown_to_plaintext.py betiğini kullandık.
Çalışmalarımızda ağırlığı Geleneksel Makine Öğrenmesi yerine BERT Tabanlı Modele ağırlık verdik.
Projeyi çalıştırmak için aşağıdaki kütüphanelere ihtiyacınız olacaktır:
pip install scikit-learn pandas numpy matplotlib seaborn joblib tqdm
Derin öğrenme modelleri için:
pip install tensorflow # LSTM modeli için
pip install torch transformers # BERT modeli için
Bu model daha hızlı eğitilir ve daha az kaynak gerektirir. Büyük veri setlerinde bile makul sonuçlar verir.
python text-categorization-model.py
Bu script:
.joblib formatında kaydedecekBu model daha iyi sonuçlar verir ancak daha fazla GPU kaynağı ve eğitim süresi gerektirir.
python bert-model.py
Bu script:
Eğitilmiş modeli kullanarak yeni metinleri sınıflandırmak için test scriptini kullanabilirsiniz:
# Bir metin için tahmin yapma
python model-test-script.py --text "Osmanlı İmparatorluğu'nun kuruluş dönemi..." --model turkce_metin_siniflandirici_svm.joblib
# Bir dosyayı sınıflandırma
python model-test-script.py --file ornek.txt --model turkce_metin_siniflandirici_svm.joblib
# Bir dizindeki tüm txt dosyalarını sınıflandırma
python model-test-script.py --dir test_dosyalari/ --model turkce_metin_siniflandirici_svm.joblib
BERT modeli ile tahmin:
python model-test-script.py --text "Örnek metin..." --model turkce_bert_siniflandirici_epoch4 --model-type deep_learning
Farklı modellerin performansı aşağıdaki metriklerle değerlendirilecektir:
Eğer donanımınızda bellek sınırlamaları varsa, veri seti boyutunu azaltabilirsiniz:
# Her kategoriden daha az örnek kullanmak için:
sample_size = 100 # Her kategoriden 100 örnek
BERT modelinin parametrelerini değiştirebilirsiniz:
# BERT model parametreleri
BERT_MODEL_NAME = "dbmdz/bert-base-turkish-cased" # Türkçe BERT modeli
MAX_LENGTH = 256 # Maksimum token uzunluğu
BATCH_SIZE = 16 # Batch boyutu
EPOCHS = 4 # Eğitim turları
LEARNING_RATE = 2e-5 # Öğrenme oranı
Farklı BERT modellerini deneyebilirsiniz:
dbmdz/bert-base-turkish-uncased: Küçük harfli Türkçe BERTdbmdz/convbert-base-turkish-cased: Türkçe ConvBERTxlm-roberta-base: Çok dilli RoBERTabert-base-multilingual-cased: Çok dilli BERTVeri Dengesi: Her kategorinin yaklaşık olarak aynı sayıda örneğe sahip olması, daha dengeli bir model eğitimine yardımcı olur.
Metin Ön-İşleme: Türkçe metinlerin daha iyi işlenmesi için stemming, lemmatization veya noktalama işaretlerini kaldırma gibi ek ön-işleme adımları ekleyebilirsiniz.
Model Seçimi: Küçük veri setleri için geleneksel modeller (SVM), büyük veri setleri için derin öğrenme modelleri (BERT) daha iyi performans gösterebilir.
GPU Kullanımı: BERT modeli eğitimi için GPU kullanılması önerilir. GPU yoksa, daha küçük batch boyutu ve daha az epoch sayısı ile eğitim yapabilirsiniz.
Bellek Yetersizliği: Büyük veri setleri bellek yetersizliğine neden olabilir. sample_size değerini düşürerek daha az veri ile çalışabilirsiniz.
Uzun Metinler: BERT modeli maksimum 512 token işleyebilir. Uzun metinler otomatik olarak kırpılacaktır. Eğer metinleriniz genellikle uzunsa, metin özetleme teknikleri kullanabilirsiniz.
Türkçe Karakterler: Türkçe karakterlerin düzgün işlendiğinden emin olmak için dosyaların UTF-8 formatında olması önemlidir.
Kategori Dengesizliği: Bazı kategorilerin diğerlerinden çok daha fazla örneğe sahip olması durumunda class_weight='balanced' parametresini kullanabilirsiniz.
Kodlama çalışmalarını ağırlıklı olarak Claude 3.7 Sonnet ile birlikte yürüttük. Ürettiğimiz modelin bazı dosyaları 100MB'dan büyük olduğu için github yüklememize izin vermiyor. Ama bu modeli siz de kolaylıkla üretebilirsiniz.
Python3.12
13 commits
Python
100.0%