Günümüzde gittikçe daha çok ivme kazanan yapay zeka uygulamaları, şirketler kadar kendi yapay zeka uygulamalarını yazmak isteyenlerin de ilgi odağı haline geliyor. Python hakkında bilgisi ve tecrübesi olup yapay zeka kodlama alanına girmek isteyenler de doğal olarak nereden başlayacağını merak ediyor. Eğer bu durumda iseniz ve yapay zeka dünyasına bir geliştirici veya geliştirici adayı olarak ilk adımı atmak istiyorsanız yapay zekanın en basit hali olan reaktif yapay zeka modeli ile başlayabilirsiniz. Bu yazıda reaktif yapay zekanın ne olduğu, nasıl çalıştığı ve akabinde nasıl yazıldığı anlatılacaktır.
Reaktif Yapay Zeka (Reactive AI) Nedir?
Yapay zekanın en ilkel hali olarak kabul edilen, kronolojik olarak ortaya çıkan ilk evrimi olan ve yabancı literatürde “reactive AI” olarak geçen reaktif yapay zeka, gerçek zamanlı veri alımı ve bu verilerin işlenmesi mantığı üzerine kurulu bir yapay zeka sistemidir. Bu tür yapay zeka sistemlerinin örneği otonom arabalar, sensörlü robotlar, chatbot/sanal asistan yapay zeka sistemleridir. Bu tür bir yapay zeka sistemi, kullanıcıdan girdiyi alır ve bu girdiyi işleyerek girdiden elde ettiği sonucu döndürür. Bu sistemler genel olarak “kendi kendine öğrenen yapay zeka” olarak geçer.
Reaktif özellik gösteren bir yapay zeka, halihazırda veri tuttuğu bir veritabanına, yani hafızaya, sahip olabilir, ancak bu hafızaya sahip olmayan, sadece kullanıcı girdisiyle çalışan yapay zeka modelleri de bulunmaktadır. Bu tür yapay zeka sistemleri “stateless” (durumsuz) alt kategorisine ayrılır. “Stateless” olan bütün yapay zekalar, bilgiyi bir yerden almak zorunda olduklarından dolayı reaktif yapay zeka kategorisine girerler.
Reaktif Yapay Zeka Yazmak
Reaktif yapay zeka yazmak için kesin olarak gerek duyacağınız ilk şey Python programlama dili olmakla beraber, bunu hangi tür bir yapay zeka yazmak istiyor iseniz ona uygun şekilde kullanacağınız bir algoritma içeren yapay zeka paketleri ve (eğer dahil etmeyi düşünüyorsanız) veritabanı ya da bir yapay zeka modeli izler.
Bu yazıda Python dilini ve scikit-learn kütüphanesini kullanarak basit bir sayı tahmin uygulaması yapacağız. Bu uygulamamızda kullanıcıdan bir sayı dizisi isteyeceğiz ve bu sayı dizisine göre programımız bu dizinin bir sonraki sayısını tahmin edecek.
Aşama 1: Gerekli Kütüphaneyi İndirme
Bu örneğimiz için gerekli olan scikit-learn kütüphanesi, Komut İstemi üzerinden aşağıdaki komut girilerek indirilir:
pip install scikit-learn
Aşama 2: Uygulamayı Yazma
Daha sonra kod editörümüzü açıp oluşturduğumuz boş .py dosyasının ilk satırına aşağıdaki ifadeyi yazıyoruz:
from sklearn.linear_model import LinearRegression
Bu satır ile örneğimiz için scikit-learn kütüphanesinin linear_model alt modülünün LinearRegression sınıfını projemize dahil ediyoruz.
Hemen ardından programımızda en çok işimize yarayacak iki değişkenimizi tanımlıyoruz. Bunlar sırasıyla kullanıcı girişi ve sonraki sayısını tahmin edeceğimiz diziyi tutan dizi değişkenimiz:
userInput = None sequence = []
Bu değişkenleri programımızın girdi alma kısmında şu şekilde kullanacağız:
def main(): global userInput global sequence print("0 sayısını girerek diziyi sonlandırın.") while userInput != '0': userInput = input("Bir sayı girin: ") try: if userInput != ‘0’: sequence.append(int(userInput)) except: pass result = round(guess(sequence)) print(f"Sonraki sayı: {result}")
Burada userInput ve sequence değişkenlerimizi main fonksiyonumuza tanıtmak için o değişkenlerin global olduğunu değişken adı önüne “global” takısı ile fonksiyonun en başında belirtiyoruz. Daha sonra kullanıcıya girdi girmesi için bir mesaj veriyoruz ve girdiği girdi 0 olmadığı sürece kullanıcı girdisini diziye ekleyip kullanıcıdan yeni bir girdi istiyoruz. Eğer girilen girdi ‘0’ değil ise girdiden sonra girdiyi tam sayı değerine çevirip diziye ekliyoruz, çünkü input fonksiyonu standart olarak String tipi bir girdi alır. Bunu bir try-except bloğuna alarak girdinin hatalı olması durumunda programın patlamadan sadece girdi almaya devam etmesini sağlıyoruz.
Girdiyi aldıktan sonraki iki satırda karşımıza guess isimli bir fonksiyon çıkıyor. Bu fonksiyon örneğimiz için yazılmış olup aşağıdaki şekilde çalışıyor ve programımızın yapay zeka kısmını oluşturuyor:
def guess(sequence): if len(sequence) < 2: return sequence[0] else: X = [[x] for x in sequence[:-1]] y = [x for x in sequence[1:]] model = LinearRegression() model.fit(X, y) return model.predict([[sequence[-1]]])[0]
Bu fonksiyonumuz kullanıcı girdileriyle oluşturduğumuz listeyi parametre olarak alıyor ve öncelikle dizinin uzunluğunu (eleman adedini) kontrol ediyor. Eğer dizi tek bir elemandan oluşuyorsa ortada bir diziden söz edilemeyeceği için fonksiyon o tek sayıyı döndürüyor. Aksi takdirde Doğrusal Regresyon modelinde kullanılacak olan iki değişkeni oluşturuyor (X ve Y). İlk değişken dizinin son elemanını görmezden gelerek yeni bir alt dizi oluştururken, ikinci değişken olan Y’de ilk eleman görmezden geliniyor. Modelde X modelin girdi değerlerini temsil ederken, Y ise çıktı değerlerini temsil ediyor.
Daha sonra LinearRegression sınıfında bir model değişkeni oluşturuluyor ve X ile Y değişkenleri “fit” ediliyor. Akabinde modelin tahmini “return” ifadesiyle döndürülüyor ve main fonksiyonunun son satırında çıktı olarak döndürülüyor. Modelin tahmini tek sayı değil de bir dizi olarak döndürüldüğü için bu dizinin sıfırıncı elemanı alınıyor.
Aşama 3: Uygulamayı Çalıştırma
Kodumuzun en alt satırına main fonksiyonunu çağırıp uygulamamızı çalıştırabilmek için “main()” kod satırı yazılarak kod kaydedilir. Komut isteminden ya da üstüne çift tıklama ile de uygulama çalıştırılır.
Yukarıdaki görsel bu programın örnek bir kullanımına aittir. Burada gördüğünüz gibi 1’den 5’e kadar sıralı bir dizi girersek uygulamanın sonunda tahmin olarak “6” cevabını alacağız.
Aşama 4: Uygulamayı Geliştirme
Bu örnek ile Python programlama dili üzerinden büyük ihtimalle ilk yapay zeka yazma deneyiminizi kazanmış oldunuz. Kodun okunabilirliği için gerekli olacak boşluklar dahil sadece 30 satır tutan bu basit uygulama, veritabanı ihtiyacı duymadan sadece kullanıcıdan aldığı girdiyle çalışıp çıktı üretir. Bu uygulama ile sıralı, toplam dizisi, Fibonacci dizisi gibi sayı dizilerini bulabilirsiniz, ancak ikinci veya üçüncü dereceden polinom içeren dizilerden girdiler aldığında alacağınız cevaplar pek de doğru veya tatmin edici olmayacaktır.
Yazdığınız yapay zeka modelinin bu sorununu çözmek için, elemanlar arasındaki farkları bir dizide tutup o dizi üzerinden işlem yapmaktan başlayıp daha gelişmiş modelleri uygulamaya dahil etmeye, hatta eğer kullanıma açacaksanız arayüz tasarlamaya kadar giden çözüm yöntemleri aracılığıyla uygulamanızı daha da geliştirebilirsiniz.