Kitaplar / Yöntem ile Programlamaya Giriş / Bölüm 14 — Klasik yapay zekâ: arama, uzman sistemler, dil işleme
Bölüm 14 — Klasik yapay zekâ: arama, uzman sistemler, dil işleme
Yapay zekâ yalnızca sinir ağlarından ibaret değildir. Yol bulma, kurallarla akıl yürütme ve metin sınıflandırma da yapay zekânın klasik konularıdır. Bu birimlerin hepsi Yöntem dilinde yazılmıştır; kutuphane klasöründe kodlarını okuyabilirsiniz.
Arama algoritmaları
program Labirent
kullan Arama
değişken
metro: sözlük
harita, yol: liste
başla
// Çizge: her durağın komşuları
metro := ['Taksim': ['Şişhane', 'Osmanbey'],
'Şişhane': ['Haliç', 'Taksim'],
'Haliç': ['Vezneciler', 'Şişhane'],
'Osmanbey': ['Şişli', 'Taksim'],
'Şişli': ['Gayrettepe'],
'Vezneciler': ['Yenikapı']]
yaz('Taksim -> Yenikapı: ' + GenişlikÖncelikli(metro, 'Taksim', 'Yenikapı'), 2)
// A*: '#' duvar, '.' yol
harita := ['.....#....',
'.###.#.##.',
'...#...#..',
'##.#####.#',
'..........']
yol := AYıldız(harita, [0, 0], [0, 9])
yaz('A* ile ' + (Uzunluk(yol) - 1) + ' adımda:', 1)
yaz(IzgaraÇiz(harita, yol), 1)
bitir.Taksim -> Yenikapı: ['Taksim', 'Şişhane', 'Haliç', 'Vezneciler', 'Yenikapı']
A* ile 13 adımda:
*****#****
.###*#*##.
...#***#..
##.#####.#
..........Genişlik öncelikli arama başlangıçtan dışa doğru katman katman ilerler ve en az duraklı yolu bulur. A* ise her adımda hedefe kalan tahmini uzaklığı da hesaba katar; bu sayede gereksiz yerlere sapmadan en kısa yolu bulur. Yıldızlar bulunan yolu gösterir.
Uzman sistem
Uzman sistem, bir alandaki bilgiyi EĞER … İSE … kuralları olarak saklar ve bilinen olgulardan yeni sonuçlar çıkarır.
program HavaDanışmanı
kullan Uzman
değişken
bt: BilgiTabanı
adım: herhangi
başla
bt := BilgiTabanı.Oluştur
bt.KuralEkle('K1', ['bulutlu', 'nem yüksek'], 'yağmur olası', 0.8)
bt.KuralEkle('K2', ['yağmur olası'], 'şemsiye al', 0.9)
bt.KuralEkle('K3', ['güneşli', 'sıcak'], 'şapka tak', 1.0)
bt.OlguEkle('bulutlu')
bt.OlguEkle('nem yüksek', 0.9)
bt.İleriZincirle içindeki her adım için
yaz('Ateşlendi: ' + adım, 1)
yaz(Biçimle('Şemsiye önerisinin güveni: {:.2}', bt.Güven('şemsiye al')), 1)
yaz('Neden? ' + bt.Açıkla('şemsiye al'), 1)
yaz('Şapka gerekli mi? ' + bt.GeriZincirle('şapka tak'), 1)
bitir.Ateşlendi: K1 => yağmur olası
Ateşlendi: K2 => şemsiye al
Şemsiye önerisinin güveni: 0.80
Neden? şemsiye al <- K2 [yağmur olası <- K1 [bulutlu (verilen olgu); nem yüksek (verilen olgu)]]
Şapka gerekli mi? yanlış- İleri zincirleme olgulardan başlar ve yeni olgu üretilemeyene dek kuralları ateşler.
- Geri zincirleme bir hedeften başlar ve onu kanıtlayacak olguları arar.
- Her kuralın bir güven katsayısı vardır. Bir sonucun güveni, onu destekleyen zincirdeki en zayıf halkadır.
Açıklasistemin neden o sonuca vardığını gösterir. Açıklanabilirlik, uzman sistemlerin güçlü yanıdır.
Metin sınıflandırma: spam filtresi
program SpamFiltresi
kullan Dil
değişken
filtre: NaifBayes
m: herhangi
başla
filtre := NaifBayes.Oluştur
filtre.Eğit(
['Hemen tıkla, büyük ödül kazandın',
'Bedava hediye çeki seni bekliyor, tıkla',
'Son fırsat! Ücretsiz kazan',
'Yarınki toplantı saat onda',
'Raporu akşama kadar gönderebilir misin',
'Toplantı notlarını ekte bulabilirsin'],
['spam', 'spam', 'spam', 'normal', 'normal', 'normal'])
['Ücretsiz ödül için tıkla', 'Toplantı raporu ekte', 'Bedava hediye kazan'] içindeki her m için
yaz(m + ' -> ' + filtre.Tahmin(m), 1)
yaz('Belirteçler: ' + Belirteçle('Yapay zekâ, dili anlamaya çalışıyor!'), 1)
bitir.Ücretsiz ödül için tıkla -> spam
Toplantı raporu ekte -> normal
Bedava hediye kazan -> spam
Belirteçler: ['yapay', 'zekâ', 'dili', 'anlamaya', 'çalışıyor']Naif Bayes, her sözcüğün her sınıfta ne sıklıkla geçtiğini öğrenir. Yeni bir metinde, sözcüklerin hangi sınıfı daha olası kıldığını hesaplar. Yalnızca altı örnekle bile “ücretsiz”, “tıkla”, “hediye” gibi sözcüklerin spam’e işaret ettiğini öğrendi.
Alıştırmalar
OKHkaybını kullanarak y = 2x² − 1 eğrisine uyan bir sinir ağı eğitiniz. x için −1 ile 1 arasından 20 nokta alabilirsiniz.- Hava danışmanına üç yeni kural ekleyiniz ve
GeriZincirleile bir sonucu sorgulayınız. - Spam filtresini kendi örneklerinizle eğitiniz;
Olasılıklarmetoduyla her sınıfın olasılığını yazdırınız.