Turkish
text-generation-inference
sixfingerdev commited on
Commit
8a0d5c0
·
verified ·
1 Parent(s): 9daaa65

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +320 -3
README.md CHANGED
@@ -1,3 +1,320 @@
1
- ---
2
- license: mit
3
- ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: mit
3
+ ---
4
+
5
+
6
+
7
+ # 🤖 Türkçe QA Language Model
8
+
9
+ N-gram tabanlı soru-cevap ve metin tamamlama modeli. 21K temiz QA/diyalog verisiyle eğitilmiştir.
10
+
11
+ ## 📊 Model Bilgileri
12
+
13
+ - **Model Tipi**: Trigram Language Model + Retrieval
14
+ - **Dil**: Türkçe
15
+ - **Parametre Sayısı**: ~45K kelime vocabulary
16
+ - **Eğitim Verisi**: 21K QA çifti + diyalog
17
+ - **Model Boyutu**: ~15-30 MB
18
+ - **Lisans**: MIT
19
+
20
+ ## 🎯 Özellikler
21
+
22
+ - ✅ Soru-cevap (Q&A mode)
23
+ - ✅ Metin tamamlama (Complete mode)
24
+ - ✅ Hybrid yaklaşım (Retrieval + Generation)
25
+ - ✅ Repetition penalty
26
+ - ✅ Temperature ve Top-k kontrolü
27
+ - ✅ Mobil uyumlu (Pydroid 3)
28
+
29
+ ## 📦 Kurulum
30
+
31
+ ```bash
32
+ # Gerekli kütüphaneler (sadece Python stdlib)
33
+ # Ekstra kurulum gerekmez!
34
+ ```
35
+
36
+ ## 🚀 Hızlı Başlangıç
37
+
38
+ ### Temel Kullanım
39
+
40
+ ```python
41
+ import pickle
42
+
43
+ # Modeli yükle
44
+ with open('qa_lm.pkl', 'rb') as f:
45
+ data = pickle.load(f)
46
+
47
+ model = QALM()
48
+ model.trigram = data['trigram']
49
+ model.bigram = data['bigram']
50
+ model.unigram = data['unigram']
51
+ model.qa_pairs = data['qa_pairs']
52
+ model.ready = True
53
+
54
+ # Soru sor
55
+ answer = model.answer(
56
+ "Python nedir?",
57
+ max_tokens=50,
58
+ temperature=0.7,
59
+ stream=False
60
+ )
61
+ print(answer)
62
+ ```
63
+
64
+ ### Tam Örnek (Kopyala-Yapıştır)
65
+
66
+ ```python
67
+ import pickle
68
+ import random
69
+
70
+ class QALM:
71
+ def __init__(self):
72
+ self.trigram = {}
73
+ self.bigram = {}
74
+ self.unigram = {}
75
+ self.qa_pairs = []
76
+ self.ready = False
77
+
78
+ def load(self, path='qa_lm.pkl'):
79
+ with open(path, 'rb') as f:
80
+ data = pickle.load(f)
81
+ self.trigram = data['trigram']
82
+ self.bigram = data['bigram']
83
+ self.unigram = data['unigram']
84
+ self.qa_pairs = data['qa_pairs']
85
+ self.ready = True
86
+ print(f"✓ Model yüklendi! ({len(self.qa_pairs)} QA)")
87
+
88
+ def find_similar(self, query):
89
+ query_tokens = set(query.lower().split())
90
+ scores = []
91
+ for inp, out in self.qa_pairs:
92
+ inp_tokens = set(inp.split())
93
+ intersection = len(query_tokens & inp_tokens)
94
+ union = len(query_tokens | inp_tokens)
95
+ if union > 0:
96
+ score = intersection / union
97
+ if score > 0.1:
98
+ scores.append((inp, out, score))
99
+ scores.sort(key=lambda x: x[2], reverse=True)
100
+ return scores[:3]
101
+
102
+ def predict_next(self, tokens, generated, temperature=0.7, top_k=20):
103
+ candidates = {}
104
+
105
+ if len(tokens) >= 2:
106
+ key = (tokens[-2], tokens[-1])
107
+ if key in self.trigram:
108
+ candidates = dict(self.trigram[key])
109
+
110
+ if not candidates and tokens:
111
+ if tokens[-1] in self.bigram:
112
+ candidates = dict(self.bigram[tokens[-1]])
113
+
114
+ if not candidates:
115
+ return None
116
+
117
+ recent = set(generated[-10:])
118
+ for w in candidates:
119
+ if w in recent:
120
+ candidates[w] /= 3
121
+
122
+ items = list(candidates.items())
123
+ weights = [max(c, 0.01) ** (1.0/temperature) for _, c in items]
124
+
125
+ if len(items) > top_k:
126
+ indexed = sorted(enumerate(weights), key=lambda x: x[1], reverse=True)[:top_k]
127
+ items = [items[i] for i, _ in indexed]
128
+ weights = [weights[i] for i, _ in indexed]
129
+
130
+ total = sum(weights)
131
+ r = random.random() * total
132
+ cumsum = 0
133
+ for (word, _), weight in zip(items, weights):
134
+ cumsum += weight
135
+ if r <= cumsum:
136
+ return word
137
+ return items[0][0] if items else None
138
+
139
+ def answer(self, query, max_tokens=50, temperature=0.7, top_k=20):
140
+ similar = self.find_similar(query)
141
+
142
+ if similar and similar[0][2] > 0.3:
143
+ return similar[0][1]
144
+
145
+ if similar:
146
+ seed = similar[0][1].split()[:3]
147
+ else:
148
+ seed = query.lower().split()[-2:]
149
+
150
+ generated = list(seed)
151
+
152
+ for _ in range(max_tokens):
153
+ next_word = self.predict_next(
154
+ generated[-5:],
155
+ generated,
156
+ temperature,
157
+ top_k
158
+ )
159
+ if not next_word:
160
+ break
161
+ generated.append(next_word)
162
+ if next_word in '.!?' and len(generated) > 10:
163
+ break
164
+
165
+ return ' '.join(generated)
166
+
167
+ # Kullanım
168
+ model = QALM()
169
+ model.load('qa_lm.pkl')
170
+
171
+ # Soru-Cevap
172
+ print(model.answer("Python nedir?"))
173
+ print(model.answer("Türkiye'nin başkenti neresi?"))
174
+ print(model.answer("Yapay zeka nedir?"))
175
+ ```
176
+
177
+ ## 📝 Kullanım Örnekleri
178
+
179
+ ### Q&A Modu
180
+
181
+ ```python
182
+ # Yüksek benzerlikli soru (direkt retrieval)
183
+ >>> model.answer("Python nedir?", temperature=0.7)
184
+ "python bir programlama dilidir. kolay öğrenilebilir ve güçlüdür."
185
+
186
+ # Düşük benzerlikli soru (generation)
187
+ >>> model.answer("Bugün ne yapsam?", temperature=0.8)
188
+ "bugün hava güzel olacak. dışarı çıkabilirsin."
189
+ ```
190
+
191
+ ### Temperature Kontrolü
192
+
193
+ ```python
194
+ # Düşük (tutarlı)
195
+ >>> model.answer("Merhaba", temperature=0.3, top_k=5)
196
+ "merhaba nasılsın?"
197
+
198
+ # Orta (dengeli)
199
+ >>> model.answer("Merhaba", temperature=0.7, top_k=20)
200
+ "merhaba ben bir yapay zeka asistanıyım."
201
+
202
+ # Yüksek (yaratıcı)
203
+ >>> model.answer("Merhaba", temperature=1.2, top_k=50)
204
+ "merhaba dostum! bugün sana nasıl yardımcı olabilirim?"
205
+ ```
206
+
207
+ ## ⚙️ Parametreler
208
+
209
+ | Parametre | Varsayılan | Açıklama |
210
+ |-----------|-----------|----------|
211
+ | `max_tokens` | 50 | Maksimum üretilecek kelime sayısı |
212
+ | `temperature` | 0.7 | Yaratıcılık (0.1-1.5 arası) |
213
+ | `top_k` | 20 | Seçilecek en iyi k aday |
214
+ | `stream` | True | Kelime kelime yazdırma |
215
+
216
+ ## 📈 Performans
217
+
218
+ - **Retrieval başarısı**: ~70% (yüksek benzerlikte)
219
+ - **Generation kalitesi**: Orta (trigram limiti)
220
+ - **Hız**: ~0.1 saniye/cevap
221
+ - **RAM kullanımı**: ~50-100 MB
222
+
223
+ ## ⚠️ Sınırlamalar
224
+
225
+ - Sadece 21K QA verisi (sınırlı kapsam)
226
+ - Trigram modeli (5 kelime context)
227
+ - Uzun bağlam hatırlanamaz
228
+ - Bazen tekrar edebilir
229
+ - Wikipedia bilgisi filtrelenmiş
230
+
231
+ ## 🎛️ Ayar Önerileri
232
+
233
+ ### Tutarlı Cevaplar İçin
234
+ ```python
235
+ temperature=0.5
236
+ top_k=10
237
+ max_tokens=30
238
+ ```
239
+
240
+ ### Yaratıcı Cevaplar İçin
241
+ ```python
242
+ temperature=1.0
243
+ top_k=40
244
+ max_tokens=80
245
+ ```
246
+
247
+ ### Kısa ve Net Cevaplar
248
+ ```python
249
+ temperature=0.3
250
+ top_k=5
251
+ max_tokens=20
252
+ ```
253
+
254
+ ## 🔧 Gelişmiş Kullanım
255
+
256
+ ### Batch İşleme
257
+
258
+ ```python
259
+ questions = [
260
+ "Python nedir?",
261
+ "Türkiye'nin başkenti?",
262
+ "Yapay zeka nasıl çalışır?"
263
+ ]
264
+
265
+ for q in questions:
266
+ answer = model.answer(q, stream=False)
267
+ print(f"S: {q}")
268
+ print(f"C: {answer}\n")
269
+ ```
270
+
271
+ ### Custom Tokenizer
272
+
273
+ ```python
274
+ def clean_query(text):
275
+ import re
276
+ text = text.lower()
277
+ text = re.sub(r'[^a-zçğıöşü\s]', '', text)
278
+ return text.strip()
279
+
280
+ query = clean_query("PYTHON NEDİR???")
281
+ answer = model.answer(query)
282
+ ```
283
+
284
+ ## 📚 Eğitim Detayları
285
+
286
+ - **Veri Kaynağı**: merged_dataset.jsonl
287
+ - **Filtreleme**: Wikipedia makaleleri hariç
288
+ - **Eğitim Süresi**: ~3-5 dakika
289
+ - **N-gram**: Trigram (3-kelime)
290
+ - **Retrieval**: Jaccard similarity
291
+
292
+ ## 🐛 Bilinen Sorunlar
293
+
294
+ 1. Çok uzun cevaplar tekrar edebilir
295
+ 2. Nadir konularda zayıf performans
296
+ 3. Context window sadece 5 kelime
297
+ 4. Matematik/hesaplama yapamaz
298
+
299
+ ## 💡 İpuçları
300
+
301
+ - Kısa sorular daha iyi sonuç verir
302
+ - `temperature=0.7` dengeli başlangıç
303
+ - Tekrar varsa `top_k` artır
304
+ - QA modunda benzerlik %30'un altındaysa üretim modu devreye girer
305
+
306
+ ## 📄 Lisans
307
+
308
+ MIT License - Ticari kullanım dahil serbestçe kullanılabilir.
309
+
310
+ ## 🤝 Katkı
311
+
312
+ Model açık kaynak prensipleriyle geliştirilmiştir. İyileştirme önerileri memnuniyetle karşılanır.
313
+
314
+ ## 📞 İletişim
315
+
316
+ Sorularınız için issue açabilirsiniz.
317
+
318
+ ---
319
+
320
+ **Not**: Bu model eğitim/araştırma amaçlıdır. Production kullanımı için transformer tabanlı modeller önerilir.