AlienTurk commited on
Commit
948b7ae
·
verified ·
1 Parent(s): b8d2cdf

Upload README.md with huggingface_hub

Browse files
Files changed (1) hide show
  1. README.md +58 -42
README.md CHANGED
@@ -13,42 +13,49 @@ tags:
13
  base_model: Qwen/Qwen2.5-3B-Instruct
14
  ---
15
 
16
- # Mira Turkish Assistant v4 (Qwen2.5-3B-IT-TR)
17
 
18
- Türkçe kişisel asistan görevleri için fine-tune edilmiş Qwen2.5-3B-Instruct modeli — **v4**.
19
 
20
- **v4 farkı:** v3 retrain (1.5B, 411 dialog) üzerine 1.5B→3B model yükseltmesi + dataset genişletmesi (411→1584 dialog, KISIM 12-17 eklenmesi). Hedef: JSON güvenilirliği, negation (iptal/vazgeçme) tespiti, çok turlu bağlam koruması, STT/typo direnci, runtime override kurallarının sadeleştirilmesi.
 
 
 
 
 
 
21
 
22
  ## Model Detayları
23
 
24
  - **Base model:** [Qwen/Qwen2.5-3B-Instruct](https://huggingface.co/Qwen/Qwen2.5-3B-Instruct)
25
  - **Fine-tune yöntemi:** QLoRA (r=16, alpha=32, target_modules: q,k,v,o,gate,up,down)
26
- - **Veri seti:** 1584 diyalog serisi (Türkçe, SFT, ChatML format, dengeli intent dağılımı)
27
- - **Eğitim:** 1 epoch, validation split %5, early stopping (patience=2), max_steps=160 cap, weight_decay=0.05, LR=1.5e-4
28
  - **Framework:** Unsloth + Transformers + TRL (Google Colab L4 GPU)
29
  - **Quantization:** Q4_K_M (~1.8 GB)
30
  - **Context window:** 2048 token (eğitim) / Android 768, iOS 2048 (runtime)
31
 
32
- ### Intent Dağılımı (1584 dialog)
33
  | Intent | Adet | Yüzde |
34
  |--------|------|-------|
35
- | CHAT | 1015 | %42 |
36
- | SET_REMINDER | 944 | %39 |
37
- | NAVIGATE | 179 | %7 |
38
- | ADD_TASK | 153 | %6 |
39
- | LIST_TASKS | 74 | %3 |
40
- | Multi-turn (3+ mesaj) | 473 | %30 |
 
41
 
42
  ## Kullanım
43
 
44
  ### llama.cpp ile (komut satırı)
45
 
46
  ```bash
47
- llama.cpp/main -m qwen2.5-3b-it-tr-asistant-v4.Q4_K_M.gguf \
48
  -c 2048 \
49
  -n 512 \
50
  --threads 3 \
51
- -p "<|im_start|>system\nSen Mira'sın, kişisel asistanımsın.<|im_end|>\n<|im_start|>user\nDişçiye gitmem lazım.<|im_end|>\n<|im_start|>assistant\n"
52
  ```
53
 
54
  ### llama-cpp-python ile
@@ -57,18 +64,19 @@ llama.cpp/main -m qwen2.5-3b-it-tr-asistant-v4.Q4_K_M.gguf \
57
  from llama_cpp import Llama
58
 
59
  llm = Llama(
60
- model_path="qwen2.5-3b-it-tr-asistant-v4.Q4_K_M.gguf",
61
  n_threads=3,
62
  n_ctx=2048,
63
  )
64
 
65
- SYSTEM_PROMPT = """Sen Mira'sın, kişisel asistanımsın. Türkçe konuş, "Ersin Bey" diye hitap et, kibar ol.
66
- İntent'ler: ADD_TASK, SET_REMINDER, LIST_TASKS, NAVIGATE, CHAT. Çıktıyı JSON ver."""
 
67
 
68
  output = llm.create_chat_completion(
69
  messages=[
70
  {"role": "system", "content": SYSTEM_PROMPT},
71
- {"role": "user", "content": "Dişçiye gitmem lazım."},
72
  ],
73
  max_tokens=256,
74
  stop=["<|im_end|>"],
@@ -83,10 +91,10 @@ Model şu intent'lere sınıflandırma yapar ve JSON çıktısı üretir:
83
  ```json
84
  {
85
  "intent": "SET_REMINDER",
86
- "task_title": "Dişçiye gitmek",
87
- "datetime": "2026-06-05T10:00:00.000Z",
88
  "navigate_to": null,
89
- "reply": "Tabii Ersin Bey, dişçiye gitmenizi 5 Haziran 2026 saat 10:00 için hatırlatıcı olarak ayarladım."
90
  }
91
  ```
92
 
@@ -103,31 +111,28 @@ Model şu intent'lere sınıflandırma yapar ve JSON çıktısı üretir:
103
  **Kapsam dışı istekler** (model bunlara `CHAT` yanıtı verir):
104
  yemek siparişi, web arama, hava durumu, müzik, e-posta, çeviri, taksi, telefon, SMS, haber, alışveriş (kendi market listesi hariç), banka, sosyal medya, video, borsa, kripto, matematik, tarif, kamera, şarkı sözü, bilet, döviz, şaka, akıllı ev, hikaye yazma.
105
 
106
- **STT gürbüzlüğü:** Eğitim verisinde SMS kısaltmaları (`yrn`, `sbh`, `aksm`), Türkçe karakter düşmeleri (`hastane`→`hastne`, `yarın`→`yrn`), sesli harf kayıpları (`dişçi`→`diş`), devrik cümle, birleşik kelime (`kanka`, `hocm`), aşırı kısaltma (`slm`, `tmm`) için 600 örnek vardır (KISIM 15).
107
 
108
- **Negation tespiti:** "Vazgeçtim", "istemiyorum", "yapma", "iptal", "gerek yok", "bırak" gibi 300+ diyalogla (KISIM 12 + 16) eğitildi; model bunları kalıcı olarak CHAT'e yönlendirir ve yeni SET_REMINDER üretmez.
109
 
110
- **Context:** 2048 token (eğitim). Multi-turn diyalogda 8+ tur geçince eski bağlam düşebilir — KISIM 13 (8-10 turlu diyaloglar) bu duruma karşı eğitildi. Runtime tarafında RAG injection ile aktif görev listesi prompt'a enjekte edilir.
111
 
112
- ## Eğitim Veri Seti (1584 dialog)
113
 
114
  | Kısım | Açıklama | Adet |
115
  |-------|----------|------|
116
- | 1 | Kimlik & Persona (Multi-turn 6-8 tur) | 7 |
117
- | 2 | Zamir Çözümleme (Multi-turn, 55 template × 2 senaryo) | 110 |
118
- | 3 | Tek-Tur Permütasyonlar | 99 |
119
- | 4 | Netleştirme Diyalogları (saat-eksik + konu-eksik) | 18 |
120
- | 5 | Out-of-Scope / Uygulama Dışı Reddetme | 28 |
121
- | 6 | Typo/Slang (STT Köşe Taşı) | 25 |
122
- | 9 | BUGÜN Context'inde Eksik Bilgi → CHAT Clarification | 30 |
123
- | 10 | Net Input → Direkt SET_REMINDER (50 normal + 25 typo) | 75 |
124
- | 11 | Veda / Bare Greeting (CHAT, never SET_REMINDER) | 19 |
125
- | 12 | Negation / Reddetme (sağlık parrot kırma, vazgeçtim, iptal) | 58 |
126
- | 13 | Uzun Konuşma Sürekliliği (8-10 tur) | 4 |
127
- | 14 | Hata Kurtarma / Düzeltme (saat/gün/işim düzeltme) | 15 |
128
- | 15 | Ağır STT / Typo / Kısaltma → SET_REMINDER | 600 |
129
- | 16 | Çok Turlu Negasyon + Empati (300 diyalog, 6 path × 50) | 300 |
130
- | 17 | Intent Güçlendirme (ADD_TASK, NAVIGATE, LIST_TASKS) | 200 |
131
 
132
  ## Donanım Doğrulamaları (Mobile)
133
 
@@ -138,6 +143,17 @@ yemek siparişi, web arama, hava durumu, müzik, e-posta, çeviri, taksi, telefo
138
 
139
  Vulkan backend Dimensity 8100 Android 14'te `ggml_backend_alloc_ctx_tensors_from_buft` SIGSEGV hatası veriyor (driver coopmat bug). OpenCL llama-cpp-dart 0.6.15'te implemente edilmiyor. NPU (APU 580) için llama.cpp backend'i yok.
140
 
 
 
 
 
 
 
 
 
 
 
 
141
  ## Lisans
142
 
143
  Apache 2.0 (Qwen2.5 base modeliyle uyumlu).
@@ -145,9 +161,9 @@ Apache 2.0 (Qwen2.5 base modeliyle uyumlu).
145
  ## Atıf
146
 
147
  ```
148
- @misc{mira-turkish-assistant-2026,
149
  author = {Algoritma Turk},
150
- title = {Mira Turkish Assistant: Qwen2.5-3B Fine-tuned for Turkish Personal Assistant Tasks},
151
  year = {2026},
152
  publisher = {Hugging Face},
153
  url = {https://huggingface.co/AlienTurk/Turkish-Asistant-gguf}
 
13
  base_model: Qwen/Qwen2.5-3B-Instruct
14
  ---
15
 
16
+ # Mira Turkish Assistant v5_hybrid (Qwen2.5-3B-IT-TR)
17
 
18
+ Türkçe kişisel asistan görevleri için fine-tune edilmiş Qwen2.5-3B-Instruct modeli — **v5_hybrid**.
19
 
20
+ **v5_hybrid farkı (v4 üzerine):**
21
+ - **Dataset:** 1584 → 662 unique dialog (-%58 boyut, ama +7 domain kapsamı, jenerik system prompt, balanced intent dağılımı)
22
+ - **Domain kapsamı:** 1 (sağlık) → 7 (sağlık, iş, finans, eğitim, seyahat, sosyal, ev)
23
+ - **System prompt:** 800+ char → 470 char, 6 özel şablon kaldırıldı, jenerik
24
+ - **Persona:** "Ersin Bey" hardcoded kaldırıldı (runtime'dan inject v6'ya kaldı)
25
+ - **Eğitim:** 1 epoch → 2 epoch, max_steps cap kaldırıldı, EarlyStopping (patience=2, threshold=0.005), LR=1.5e-4 → 5e-5 (Merlin önerisi), cosine_with_restarts scheduler
26
+ - **Hedef:** v3/v4'teki "saçmalama" sorunlarını gidermek, doğal sohbet + asistan görevleri dengesini sağlamak, 7 domain'de native doğru sonuç
27
 
28
  ## Model Detayları
29
 
30
  - **Base model:** [Qwen/Qwen2.5-3B-Instruct](https://huggingface.co/Qwen/Qwen2.5-3B-Instruct)
31
  - **Fine-tune yöntemi:** QLoRA (r=16, alpha=32, target_modules: q,k,v,o,gate,up,down)
32
+ - **Veri seti:** 662 unique diyalog serisi (Türkçe, SFT, ChatML format, 7 domain, dengeli intent dağılımı)
33
+ - **Eğitim:** 2 epoch, validation split %8, early stopping (patience=2, threshold=0.005), max_steps=-1, weight_decay=0.01, LR=5e-5, cosine_with_restarts scheduler
34
  - **Framework:** Unsloth + Transformers + TRL (Google Colab L4 GPU)
35
  - **Quantization:** Q4_K_M (~1.8 GB)
36
  - **Context window:** 2048 token (eğitim) / Android 768, iOS 2048 (runtime)
37
 
38
+ ### Intent Dağılımı (662 dialog)
39
  | Intent | Adet | Yüzde |
40
  |--------|------|-------|
41
+ | CHAT | ~120 | %18 |
42
+ | SET_REMINDER (tek-tur + çok-turlu) | ~360 | %54 |
43
+ | ADD_TASK | 41 | %6 |
44
+ | LIST_TASKS + NAVIGATE | 31 | %5 |
45
+ | Negasyon / Düzeltme | 42 | %6 |
46
+ | Genel sohbet + Karma | 78 | %12 |
47
+ | Typo / STT dayanıklılık | 40 | %6 |
48
 
49
  ## Kullanım
50
 
51
  ### llama.cpp ile (komut satırı)
52
 
53
  ```bash
54
+ llama.cpp/main -m qwen2.5-3b-it-tr-asistant-v5.Q4_K_M.gguf \
55
  -c 2048 \
56
  -n 512 \
57
  --threads 3 \
58
+ -p "<|im_start|>system\nSen Türkçe kişisel asistansın.<|im_end|>\n<|im_start|>user\nYarın saat 14'te fatura ödemeyi unutma.<|im_end|>\n<|im_start|>assistant\n"
59
  ```
60
 
61
  ### llama-cpp-python ile
 
64
  from llama_cpp import Llama
65
 
66
  llm = Llama(
67
+ model_path="qwen2.5-3b-it-tr-asistant-v5.Q4_K_M.gguf",
68
  n_threads=3,
69
  n_ctx=2048,
70
  )
71
 
72
+ SYSTEM_PROMPT = """Sen Türkçe kişisel asistansın. BUGÜN: {today}.
73
+ Sadece JSON: {"intent":"CHAT|ADD_TASK|LIST_TASKS|SET_REMINDER|NAVIGATE","task_title":"…|null","datetime":"ISO8601|null","navigate_to":"…|null","reply":"Türkçe yanıt"}.
74
+ Normal sohbette doğal cevap ver. Görev/hatırlatıcı istendiğinde action alanını doldur. JSON dışında bir şey yazma."""
75
 
76
  output = llm.create_chat_completion(
77
  messages=[
78
  {"role": "system", "content": SYSTEM_PROMPT},
79
+ {"role": "user", "content": "Yarın saat 14'te fatura ödemeyi unutma."},
80
  ],
81
  max_tokens=256,
82
  stop=["<|im_end|>"],
 
91
  ```json
92
  {
93
  "intent": "SET_REMINDER",
94
+ "task_title": "Fatura ödemek",
95
+ "datetime": "2026-06-07T11:00:00.000Z",
96
  "navigate_to": null,
97
+ "reply": "Tabii, yarın saat 14:00 için fatura ödeme hatırlatıcısı oluşturdum."
98
  }
99
  ```
100
 
 
111
  **Kapsam dışı istekler** (model bunlara `CHAT` yanıtı verir):
112
  yemek siparişi, web arama, hava durumu, müzik, e-posta, çeviri, taksi, telefon, SMS, haber, alışveriş (kendi market listesi hariç), banka, sosyal medya, video, borsa, kripto, matematik, tarif, kamera, şarkı sözü, bilet, döviz, şaka, akıllı ev, hikaye yazma.
113
 
114
+ **STT gürbüzlüğü:** Eğitim verisinde SMS kısaltmaları (`yrn`, `sbh`, `aksm`), Türkçe karakter düşmeleri (`hastane`→`hastne`, `yarın`→`yrn`), sesli harf kayıpları (`dişçi`→`diş`), devrik cümle, birleşik kelime (`kanka`, `hocm`), aşırı kısaltma (`slm`, `tmm`) için 40 örnek vardır (KISIM 10).
115
 
116
+ **Negation tespiti:** "Vazgeçtim", "istemiyorum", "yapma", "iptal", "gerek yok", "bırak" gibi 30+ diyalogla (KISIM 6) eğitildi; model bunları kalıcı olarak CHAT'e yönlendirir ve yeni SET_REMINDER üretmez.
117
 
118
+ **Context:** 2048 token (eğitim). Multi-turn diyalogda 5+ tur geçince eski bağlam düşebilir — KISIM 9 (karma 5-8 turlu diyaloglar) bu duruma karşı eğitildi. Runtime tarafında RAG injection ile aktif görev listesi prompt'a enjekte edilir.
119
 
120
+ ## Eğitim Veri Seti (662 dialog)
121
 
122
  | Kısım | Açıklama | Adet |
123
  |-------|----------|------|
124
+ | 1 | Persona & Selam (jenerik) | 70 |
125
+ | 2 | Tek-tur SET_REMINDER (7 domain × time × title) | 220 |
126
+ | 3 | Çok-turlu SET_REMINDER ("ne zaman?" → yanıt → kur) | 140 |
127
+ | 4 | ADD_TASK | 41 |
128
+ | 5 | LIST_TASKS + NAVIGATE | 31 |
129
+ | 6 | Negasyon / İptal (domain'ler arası) | 30 |
130
+ | 7 | Düzeltme / Güncelleme (saat veya başlık değişikliği) | 12 |
131
+ | 8 | Genel sohbet (hava, motivasyon, günlük, teknoloji, kitap, film, yemek) | 54 |
132
+ | 9 | Karma uzun diyaloglar (5-8 turlu, domain'ler arası) | 24 |
133
+ | 10 | Typo / STT dayanıklılık (tüm domain'lerde ağır bozulma) | 40 |
134
+
135
+ **Domain dağılımı (7 domain):** sağlık, iş/kariyer, finans/fatura, eğitim, seyahat/ulaşım, sosyal/kişisel, ev/günlük yaşam. Her domain'den 60-120 örnek cross-product kombinasyonuyla (template × time × title) unique olarak üretildi.
 
 
 
136
 
137
  ## Donanım Doğrulamaları (Mobile)
138
 
 
143
 
144
  Vulkan backend Dimensity 8100 Android 14'te `ggml_backend_alloc_ctx_tensors_from_buft` SIGSEGV hatası veriyor (driver coopmat bug). OpenCL llama-cpp-dart 0.6.15'te implemente edilmiyor. NPU (APU 580) için llama.cpp backend'i yok.
145
 
146
+ ## v5_hybrid Tasarım Kararları
147
+
148
+ 1. **Jenerik system prompt:** "Ersin Bey" hardcoded persona kaldırıldı. Kullanıcı adı runtime'dan inject edilecek (v6 feature).
149
+ 2. **7 domain kapsamı:** Sağlık + İş + Finans + Eğitim + Seyahat + Sosyal + Ev — `itertools.product(template, time, title)` ile true cross-product unique örnekler.
150
+ 3. **3B model + küçük dataset trade-off:** 662 örnek × 2 epoch, early stopping patience=2, LR=5e-5 (Merlin önerisi — 1.5e-4 yerine).
151
+ 4. **No MAX_STEPS cap:** claude_v5 başarısı, dataset küçük ama yeterli (170 step bekleniyor, erken durma ile 80-120 step).
152
+ 5. **cosine_with_restarts scheduler:** Düz iniş + restart, lokal minimum'a düşmemek için.
153
+ 6. **Eval steps=25:** 170 step / 25 = 6-7 eval noktası, yeterli validasyon sinyali.
154
+ 7. **System prompt 470 char:** "asla 'bana' demeyin" kuralı korundu, "size yardımcı olabilirim" tonu sabit.
155
+ 8. **No hardcoded "Merhaba" sabit:** chat() helper'ı 4 farklı jenerik selam verir (kullanıcı çeşitliliği için).
156
+
157
  ## Lisans
158
 
159
  Apache 2.0 (Qwen2.5 base modeliyle uyumlu).
 
161
  ## Atıf
162
 
163
  ```
164
+ @misc{mira-turkish-assistant-v5-hybrid-2026,
165
  author = {Algoritma Turk},
166
+ title = {Mira Turkish Assistant v5_hybrid: Qwen2.5-3B Fine-tuned for 7-Domain Turkish Personal Assistant Tasks},
167
  year = {2026},
168
  publisher = {Hugging Face},
169
  url = {https://huggingface.co/AlienTurk/Turkish-Asistant-gguf}