Views
No views yet
1# Gerekli kütüphaneler (sadece Python stdlib)
2# Ekstra kurulum gerekmez!1import pickle
2
3# Modeli yükle
4with open('qa_lm.pkl', 'rb') as f:
5 data = pickle.load(f)
6
7model = QALM()
8model.trigram = data['trigram']
9model.bigram = data['bigram']
10model.unigram = data['unigram']
11model.qa_pairs = data['qa_pairs']
12model.ready = True
13
14# Soru sor
15answer = model.answer(
16 "Python nedir?",
17 max_tokens=50,
18 temperature=0.7,
19 stream=False
20)
21print(answer)1import pickle
2import random
3
4class QALM:
5 def __init__(self):
6 self.trigram = {}
7 self.bigram = {}
8 self.unigram = {}
9 self.qa_pairs = []
10 self.ready = False
11
12 def load(self, path='qa_lm.pkl'):
13 with open(path, 'rb') as f:
14 data = pickle.load(f)
15 self.trigram = data['trigram']
16 self.bigram = data['bigram']
17 self.unigram = data['unigram']
18 self.qa_pairs = data['qa_pairs']
19 self.ready = True
20 print(f"✓ Model yüklendi! ({len(self.qa_pairs)} QA)")
21
22 def find_similar(self, query):
23 query_tokens = set(query.lower().split())
24 scores = []
25 for inp, out in self.qa_pairs:
26 inp_tokens = set(inp.split())
27 intersection = len(query_tokens & inp_tokens)
28 union = len(query_tokens | inp_tokens)
29 if union > 0:
30 score = intersection / union
31 if score > 0.1:
32 scores.append((inp, out, score))
33 scores.sort(key=lambda x: x[2], reverse=True)
34 return scores[:3]
35
36 def predict_next(self, tokens, generated, temperature=0.7, top_k=20):
37 candidates = {}
38
39 if len(tokens) >= 2:
40 key = (tokens[-2], tokens[-1])
41 if key in self.trigram:
42 candidates = dict(self.trigram[key])
43
44 if not candidates and tokens:
45 if tokens[-1] in self.bigram:
46 candidates = dict(self.bigram[tokens[-1]])
47
48 if not candidates:
49 return None
50
51 recent = set(generated[-10:])
52 for w in candidates:
53 if w in recent:
54 candidates[w] /= 3
55
56 items = list(candidates.items())
57 weights = [max(c, 0.01) ** (1.0/temperature) for _, c in items]
58
59 if len(items) > top_k:
60 indexed = sorted(enumerate(weights), key=lambda x: x[1], reverse=True)[:top_k]
61 items = [items[i] for i, _ in indexed]
62 weights = [weights[i] for i, _ in indexed]
63
64 total = sum(weights)
65 r = random.random() * total
66 cumsum = 0
67 for (word, _), weight in zip(items, weights):
68 cumsum += weight
69 if r <= cumsum:
70 return word
71 return items[0][0] if items else None
72
73 def answer(self, query, max_tokens=50, temperature=0.7, top_k=20):
74 similar = self.find_similar(query)
75
76 if similar and similar[0][2] > 0.3:
77 return similar[0][1]
78
79 if similar:
80 seed = similar[0][1].split()[:3]
81 else:
82 seed = query.lower().split()[-2:]
83
84 generated = list(seed)
85
86 for _ in range(max_tokens):
87 next_word = self.predict_next(
88 generated[-5:],
89 generated,
90 temperature,
91 top_k
92 )
93 if not next_word:
94 break
95 generated.append(next_word)
96 if next_word in '.!?' and len(generated) > 10:
97 break
98
99 return ' '.join(generated)
100
101# Kullanım
102model = QALM()
103model.load('qa_lm.pkl')
104
105# Soru-Cevap
106print(model.answer("Python nedir?"))
107print(model.answer("Türkiye'nin başkenti neresi?"))
108print(model.answer("Yapay zeka nedir?"))1# Yüksek benzerlikli soru (direkt retrieval)
2>>> model.answer("Python nedir?", temperature=0.7)
3"python bir programlama dilidir. kolay öğrenilebilir ve güçlüdür."
4
5# Düşük benzerlikli soru (generation)
6>>> model.answer("Bugün ne yapsam?", temperature=0.8)
7"bugün hava güzel olacak. dışarı çıkabilirsin."1# Düşük (tutarlı)
2>>> model.answer("Merhaba", temperature=0.3, top_k=5)
3"merhaba nasılsın?"
4
5# Orta (dengeli)
6>>> model.answer("Merhaba", temperature=0.7, top_k=20)
7"merhaba ben bir yapay zeka asistanıyım."
8
9# Yüksek (yaratıcı)
10>>> model.answer("Merhaba", temperature=1.2, top_k=50)
11"merhaba dostum! bugün sana nasıl yardımcı olabilirim?"| Parametre | Varsayılan | Açıklama |
|---|---|---|
max_tokens | 50 | Maksimum üretilecek kelime sayısı |
temperature | 0.7 | Yaratıcılık (0.1-1.5 arası) |
top_k | 20 | Seçilecek en iyi k aday |
stream | True | Kelime kelime yazdırma |
1temperature=0.5
2top_k=10
3max_tokens=301temperature=1.0
2top_k=40
3max_tokens=801temperature=0.3
2top_k=5
3max_tokens=201questions = [
2 "Python nedir?",
3 "Türkiye'nin başkenti?",
4 "Yapay zeka nasıl çalışır?"
5]
6
7for q in questions:
8 answer = model.answer(q, stream=False)
9 print(f"S: {q}")
10 print(f"C: {answer}\n")1def clean_query(text):
2 import re
3 text = text.lower()
4 text = re.sub(r'[^a-zçğıöşü\s]', '', text)
5 return text.strip()
6
7query = clean_query("PYTHON NEDİR???")
8answer = model.answer(query)temperature=0.7 dengeli başlangıçtop_k artır