|
--- |
|
library_name: transformers |
|
tags: |
|
- turkish |
|
- continue-pre-training |
|
license: apache-2.0 |
|
datasets: |
|
- Alaeddin/wikipedia-turkish |
|
language: |
|
- tr |
|
metrics: |
|
- perplexity |
|
base_model: |
|
- facebook/xglm-564M |
|
pipeline_tag: text-generation |
|
--- |
|
|
|
Bu model, `facebook/xglm-564M` temel alınarak Türkçe diline devam ön eğitimi yapılmış bir metin üretim modelidir. Türkçe Wikipedia verileri üzerinde eğitilmiştir ve Türkçe metin üretiminde daha iyi performans göstermek için optimize edilmiştir. |
|
|
|
## Model Detayları |
|
|
|
**Model Açıklaması** |
|
Bu model, Türkçe diline özgü metin üretimi için geliştirilmiş bir transformers modelidir. Türkçe Wikipedia verileriyle eğitilmiş olup, doğal dil işleme (NLP) задачи için kullanılabilir. |
|
|
|
- **Geliştiren:** Emre Taşar |
|
- **Model Türü:** Dil Modeli (Causal Language Model) |
|
- **Dil(ler):** Türkçe |
|
- **Lisans:** Apache 2.0 (XGLM-564M temel modelinin lisansı) |
|
- **İnce Ayar Yapılan Model:** `facebook/xglm-564M` |
|
- **Model Kaynakları:** |
|
- **Depo:** [https://huggingface.co/emre/xglm-564M-turkish](https://huggingface.co/emre/xglm-564M-turkish) |
|
- **Makale:** [arXiv:1910.09700](https://arxiv.org/abs/1910.09700) (XGLM'nin orijinal makalesi) |
|
|
|
## Kullanım |
|
|
|
### Direkt Kullanım |
|
Bu model, Türkçe metin üretimi için kullanılabilir. Aşağıdaki kod ile modele başlayabilirsiniz: |
|
```python |
|
from transformers import AutoTokenizer, AutoModelForCausalLM |
|
|
|
#Modeli ve tokenizer'ı yükle |
|
tokenizer = AutoTokenizer.from_pretrained("emre/xglm-564M-turkish") |
|
model = AutoModelForCausalLM.from_pretrained("emre/xglm-564M-turkish") |
|
|
|
#Metin üretimi |
|
prompt = "Bir varmış, bir yokmuş." |
|
inputs = tokenizer(prompt, return_tensors="pt") |
|
outputs = model.generate( |
|
**inputs, |
|
max_length=100, |
|
do_sample=True, |
|
top_p=0.95, |
|
top_k=50, |
|
temperature=0.7 |
|
) |
|
print(tokenizer.decode(outputs[0], skip_special_tokens=True)) |
|
``` |
|
|
|
|
|
### Alt Kullanım (Downstream Use) |
|
Model, Türkçe doğal dil işleme görevleri (örneğin, metin tamamlama, sohbet sistemleri) için ince ayar yapılabilir. |
|
|
|
### Kapsam Dışı Kullanım |
|
Model, Wikipedia verileriyle eğitildiği için yaratıcı yazım (örneğin masallar) veya çok özel alanlar (örneğin tıbbi metinler) için sınırlı performans gösterebilir. |
|
|
|
## Bias, Riskler ve Sınırlamalar |
|
Model, Türkçe Wikipedia verileriyle eğitildiği için bu verilerdeki olası önyargıları yansıtabilir. Ayrıca, eğitim sonrası perplexity değeri (51.81) nispeten yüksektir, bu da modelin Türkçe dilini tam anlamıyla öğrenmediğini gösterir. |
|
|
|
### Öneriler |
|
Kullanıcılar, modelin sınırlamalarını ve potansiyel önyargılarını dikkate almalıdır. Daha iyi performans için ek veri veya epoch ile ince ayar önerilir. |
|
|
|
## Eğitim Detayları |
|
|
|
### Eğitim Verisi |
|
Model, Türkçe Wikipedia'dan alınan 20.000 makale üzerinde eğitilmiştir. Doğrulama için 2.000 makale kullanılmıştır. |
|
|
|
### Eğitim Süreci |
|
|
|
#### Ön İşleme |
|
Veriler, `max_length=512` ile tokenizasyon işleminden geçirilmiş ve gereksiz sütunlar ("title", "id", "paragraph") kaldırılmıştır. |
|
|
|
#### Eğitim Hiperparametreleri |
|
- **Eğitim Rejimi:** FP16 (mixed precision) |
|
- **Batch Size:** 4 (eğitim ve değerlendirme için) |
|
- **Epoch Sayısı:** 2 |
|
- **Learning Rate:** 1e-5 |
|
- **Scheduler:** Yok |
|
- **Warmup Steps:** Yok |
|
- **Optimizer:** AdamW (varsayılan) |
|
|
|
#### Hızlar, Boyutlar, Süreler |
|
- **Eğitim Süresi:** 2 saat 10 dakika |
|
- **Donanım:** Google Colab T4 GPU |
|
- **Adım Sayısı:** 10.000 |
|
|
|
## Değerlendirme |
|
|
|
### Test Verisi, Faktörler ve Metrikler |
|
|
|
#### Test Verisi |
|
Doğrulama için Türkçe Wikipedia'dan rastgele seçilen 2.000 makale kullanılmıştır. Perplexity testi için ise 100 örneklik bir alt küme alınmıştır. |
|
|
|
#### Faktörler |
|
- Modelin Türkçe diline adaptasyonu |
|
- Metin üretiminde akıcılık ve anlam bütünlüğü |
|
|
|
#### Metrikler |
|
- **Perplexity:** Modelin tahmin doğruluğunu ölçer (düşük değer daha iyidir). |
|
- **Qualitative Çıktı Analizi:** Prompt bazlı metin üretimi. |
|
|
|
### Sonuçlar |
|
- **Perplexity:** 51.81 (Eğitim sonrası) |
|
- **Eğitim Kayıpları:** |
|
- Epoch 1: Training Loss: 3.5180, Validation Loss: 3.4951 |
|
- Epoch 2: Training Loss: 3.4280, Validation Loss: 3.4797 |
|
- **Örnek Çıktılar:** |
|
- **Prompt:** "Bir varmış, bir yokmuş." |
|
- **Eğitim Öncesi:** "Bir varmış, bir yokmuş." |
|
- **Eğitim Sonrası:** "Bir varmış, bir yokmuş. Ama ne var ne yokmuş. Bu iki varış arasında çok değişkenlik vardır..." |
|
- **Not:** Eğitim sonrası çıktılar daha uzun, ancak bazen anlamsız veya tekrarlayıcı olabiliyor. |
|
|
|
#### Özet |
|
Model, Türkçe Wikipedia verileriyle temel bir adaptasyon sağlamış, ancak perplexity değeri (51.81) ve çıktılar, daha fazla eğitim veya veri gerektiğini gösteriyor. |
|
|
|
## Çevresel Etki |
|
Karbon emisyonları, Lacoste et al. (2019) tarafından sunulan Machine Learning Impact calculator kullanılarak tahmin edilebilir. |
|
|
|
- **Donanım Türü:** Google Colab T4 GPU |
|
- **Kullanılan Saat:** 2 saat 10 dakika |
|
- **Bulut Sağlayıcı:** Google Cloud |
|
- **Hesaplama Bölgesi:** Bilinmiyor |
|
- **Karbon Emisyonu:** Tahmin edilmedi (hesaplama için ek bilgi gerekli) |
|
|
|
## Teknik Özellikler |
|
|
|
### Model Mimarisi ve Amaç |
|
- **Mimari:** XGLM (Transformer tabanlı dil modeli) |
|
- **Amaç:** Türkçe metin üretimi |
|
- **Parametre Sayısı:** 564 milyon |
|
- **Tensor Türü:** F32 |
|
|
|
### Hesaplama Altyapısı |
|
- **Donanım:** Google Colab T4 GPU |
|
- **Yazılım:** Transformers (Hugging Face), PyTorch |
|
|
|
## Citation |
|
BibTeX (XGLM makalesi): @article{lin2021few, |
|
title={Few-shot Learning with Multilingual Language Models}, |
|
author={Lin, Xi Victoria and Mihalcea, Rada and others}, |
|
journal={arXiv preprint arXiv:1910.09700}, |
|
year={2019} |
|
} |
|
|
|
## Model Kartı Yazarları |
|
- Emre Taşar |
|
|
|
## Model Kartı İletişim |
|
Sorularınız için [Hugging Face profilim](https://huggingface.co/emre) üzerinden bana ulaşabilirsiniz. |
|
|
|
## Daha Fazla Bilgi |
|
Modelin performansını artırmak için daha fazla veri, epoch veya LoRA gibi yöntemler önerilir. |
|
|
|
|
|
## Eğitim için kullanılan kod örneği: |
|
```python |
|
# Gerekli kütüphaneleri yükle |
|
!pip install transformers datasets -q |
|
|
|
# Gerekli kütüphaneleri içe aktar |
|
from transformers import AutoTokenizer, AutoModelForCausalLM, TrainingArguments, Trainer, DataCollatorForLanguageModeling |
|
from datasets import load_dataset |
|
import torch |
|
|
|
# Model ve tokenizer tanımlamaları |
|
model_name = "facebook/xglm-564M" |
|
tokenizer = AutoTokenizer.from_pretrained(model_name) |
|
original_model = AutoModelForCausalLM.from_pretrained(model_name) # Eğitim öncesi model |
|
model = AutoModelForCausalLM.from_pretrained(model_name) # Eğitim için kullanılacak model |
|
|
|
# Türkçe Wikipedia veri setini yükle |
|
dataset = load_dataset("Alaeddin/wikipedia-turkish", split="train[:20000]") # İlk 20.000 makale |
|
val_dataset = load_dataset("Alaeddin/wikipedia-turkish", split="train[20000:22000]") # Doğrulama için 2.000 makale |
|
|
|
# Tokenization fonksiyonu |
|
def tokenize_function(examples): |
|
return tokenizer(examples["paragraph"], truncation=True, max_length=512, padding="max_length") |
|
|
|
# Veri setini tokenize et |
|
train_dataset = dataset.map(tokenize_function, batched=True, remove_columns=["title", "id", "paragraph"]) |
|
val_dataset = val_dataset.map(tokenize_function, batched=True, remove_columns=["title", "id", "paragraph"]) |
|
|
|
# Veri kollektörünü tanımla |
|
data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=False) |
|
|
|
# Eğitim argümanlarını ayarla |
|
training_args = TrainingArguments( |
|
output_dir="/content/model_save", |
|
per_device_train_batch_size=4, |
|
per_device_eval_batch_size=4, |
|
num_train_epochs=2, |
|
learning_rate=1e-5, |
|
fp16=True, # Bellek kullanımını optimize et |
|
eval_strategy="epoch", |
|
save_strategy="epoch", |
|
load_best_model_at_end=True, |
|
remove_unused_columns=False, |
|
logging_steps=500, # Daha sık log için (isteğe bağlı) |
|
report_to="wandb", # Wandb kullanmak istemiyorsanız bunu kaldırabilirsiniz |
|
) |
|
|
|
# Trainer ile eğitimi başlat |
|
trainer = Trainer( |
|
model=model, |
|
args=training_args, |
|
train_dataset=train_dataset, |
|
eval_dataset=val_dataset, |
|
data_collator=data_collator, |
|
) |
|
|
|
# Eğitimi gerçekleştir |
|
trainer.train() |
|
|
|
# Eğitilmiş modeli kaydet |
|
trainer.save_model("/content/final_model") |
|
tokenizer.save_pretrained("/content/final_model") |
|
|
|
# Metin üretimi fonksiyonu (iyileştirilmiş) |
|
def generate_text(prompt, model, tokenizer, max_length=100): |
|
inputs = tokenizer(prompt, return_tensors="pt").to(model.device) |
|
outputs = model.generate( |
|
**inputs, |
|
max_length=max_length, |
|
num_return_sequences=1, |
|
do_sample=True, |
|
top_p=0.95, |
|
top_k=50, # Daha iyi kelime seçimi için |
|
temperature=0.7, # Daha tutarlı metin için |
|
) |
|
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True) |
|
return generated_text |
|
|
|
# Türkçe performansını test et |
|
prompt = "Bir varmış, bir yokmuş." |
|
print("Eğitim Öncesi Model Çıktısı:", generate_text(prompt, original_model, tokenizer)) |
|
print("Eğitim Sonrası Model Çıktısı:", generate_text(prompt, model, tokenizer)) |
|
``` |
|
""" |