Python ve yapay zeka kavramları, özellikle son dönemlerin yazılım dünyasında yan yana anılır oldu. Python için özel olarak yazılmış PyCharm, Tensorflow ve Keras gibi yapay zeka kütüphaneleri, bunlarla uyumlu çalışan MatPlotLib ve Seaborn gibi veri görselleştirme kütüphaneleri ile bunlarla geliştirilen farklı çözümler Python dilini yapay zeka uygulamaları oluşturma konusundaki bir numaralı seçenek yapıyor.
Haliyle bu alanlara ilgi duyan kullanıcılar yapay zeka nasıl yapılır sorusunu soruyor ve İnternet üzerindeki çeşitli kaynaklardan, her bir kaynaktan topladığı üç beş şeyi bir araya getirerek kendi yapay zeka uygulamalarını yazıyor. Bu yazı, kütüphane bağımsız olarak genel geçer bir yapay zeka uygulaması yazma rehberi işlevi görecek ve kullanıcıya/programcıya sadece kullanmak istediği kütüphaneleri seçip o kütüphanelerle kendi uygulamasını yazmak kalacak.
Python ve Yapay Zeka Tanımları
Bu güçlü rehbere başlamadan önce Python ve yapay zeka konularında biraz genel kültür bilgisi vermek yerinde olacaktır.
Python programlama dili, 1989 yılında geliştirilmiş ve günümüze kadar geçirdiği 35 yıllık serüvende genel programlamada en çok kullanılan dillerden birisi haline gelmiştir. Terminal uygulamalarından görsel uygulamalara, Web arka plan uygulamalarından yapay zeka uygulamalarına kadar pek çok alanda kullanılan Python, kurulum ve kodlama kolaylığı ile öne çıkan bir programlama dilidir. Öğrenmesi çok kolay olan Python, bir programlamaya giriş dili olarak kullanılabilir.
Yapay zeka ise, 1950’li yıllardan beri geliştirilmekte olan bir kavramdır. Alan Turing’in “Makineler düşünebilir mi?” sorusu ile temelleri atılan yapay zeka, insan gibi davranış sergileyen makineler geliştirme amacını gütmektedir. Günümüzde geliştirilen yapay zeka modelleri; matematiksel hesaplama, iletişim botları (chatbot), görsel/metin üretici ve/veya bunların bir arada kullanıldığı uygulama alanları başta olmak üzere pek çok farklı alanda kullanılmaktadır.
Yapay Zeka Türleri
Günümüzde kullanılan ve/veya bahsi geçen iki ana yapay zeka uygulama türü, şu anda kullanımda ve geliştirme aşamasında olan tüm yapay zeka modellerini kapsayan dar/kısıtlı yapay zeka (Narrow Artificial Intelligence) ve bir konsept olarak var olan, ancak kullanıma geçmemiş olan genel/gelişmiş yapay zeka (General Artificial Intelligence) olmak üzere ikiye ayrılır. Bu modeller genel olarak edindiği bilgileri bir veya birkaç alanda mı, yoksa genel olarak mı kullanabildiğine göre ayrılmaktadır.
Genel yapay zeka modelleri henüz kullanıma geçmediği için de, doğal olarak bu yazıda bizi ilgilendiren kısım dar yapay zeka modelleri olacaktır. Bu dar yapay zeka modelleri genel olarak dörde ayrılır.
Reaktif Yapay Zeka
Reaktif Yapay Zeka, yapay zekanın en basit formu olarak nitelendirilebilir. Bu yapay zekalar sadece o an ellerinde olan bilgilere göre hesaplama yapıp çıktı verirler ve hafızaları yoktur. Doğal olarak da diğer yapay zeka modellerine kıyasla çok daha az yer tutarlar. Bir sayı dizisinin elemanlarını alan ve bir sonraki sayıyı tahmin eden program Reaktif Yapay Zeka örneğidir.
Kısıtlı Hafıza Yapay Zeka
Günümüzde en çok kullanılan yapay zeka türü kısıtlı hafıza yapay zekadır. Bu yapay zekalar Reaktif Yapay Zekalardan farklı olarak bir veritabanına sahiptirler ve bu veritabanında tuttukları veriler üzerinden eğitilir ve aldıkları eğitimin sonucunda işlem yaparlar. Kısıtlı Hafıza modelleri hafıza büyüklüğü, hafızanın teorik tutulma süresi ve girdilerden daimi öğrenme durumu gibi kıstaslarda farklı kategorilere ayrılır, o yüzden oldukça geniş bir sınıftır.
Empatik Yapay Zeka
Empatik yapay zeka denilen kavram, özellikle insanların inanışlarını, isteklerini ve duygularını anlama kapasitesine sahip olan yapay zeka modellerine denir. Bu seviyedeki yapay zekalar daha karmaşık ve detaylı işlemler yapar ve buna bağlı olarak da daha detaylı kararlar verirler. Yazının yazıldığı an itibariyle ancak bu yapay zeka konseptinin özelliklerini gösterebilen Kısıtlı Hafıza Yapay Zeka modelleri denenmiştir.
Kendinin Farkında Olan Yapay Zeka
Bu yapay zeka konsepti, kendi varlığının farkında olan ve bilinç sahibi olan yapay zeka modellerini tabir eder. Günümüzde hala bir konsept olan ve bilinç konusunda bazı zorlayıcı sorulara önayak olan bu konseptin nasıl uygulamaya geçeceği henüz kesinleşmemiştir.
Gereksinimler
Eğer kendi yapay zeka uygulamanızı yazmaya karar verdiyseniz artık yavaştan bu iş için hazırlanmaya başlayabiliriz. Öncelikle kendi yapay zeka uygulamanızı yazmak için gerek duyacağınız yazılımlardan başlayalım.
Python
Python dili, yapay zeka uygulamaları için tek çözüm olmasa da günümüze olmazsa olmaz denilebilecek kadar önemli bir yere sahiptir, ki bu yazıda anlatacağımız şeyler tamamı ile bu dilde yapabileceğiniz şeyleri kapsamaktadır. Bu dili edinmeniz için yapmanız gereken tek şey Python’un resmi websitesinden bilgisayarınıza uygun olan sürümünü indirip kurulumunu yapmaktır.
SQLite
Eğer sıfırdan kendi modelinizi oluşturacaksanız ve bu model için eğitim veri seti tutacaksanız bunun için bir veritabanı sistemine ihtiyacınız olacaktır. Python uygulamalarında sıklıkla tercih edilen veritabanı sistemi, tabii ki sunucusuz bir mimariye sahip olan ve dünyada en çok kullanılan veritabanı sistemi olma özelliğini taşıyan SQLite’tır. Python dilinde yerleşik bir kütüphanesi bulunan SQLite, bilgisayarınıza indirip sistem değişkenleri arasında tanıtıldıktan sonra hiçbir yeni paket indirmeye gerek kalmadan kullanılabilir. Tabii ki SQLite veritabanını kullanmak için SQL bilgisine sahip olmanız gerekir.
Kod Editörü
Herhangi bir programlama dili üzerinde bir program yazacaksak bu işi bizim için mümkün olduğunca kolaylaştıracak bir kod editörü bulmak bizim için önemli bir noktadır. Günümüzde en çok kullanılan kod editörü olan Visual Studio Code veya Python’a özel yazılmış olan Spyder ve Jupiter Notebook gibi kod editörleri işimizi görecektir.
Bu iki temel gereksinimimizi karşıladıktan sonra temel hatlarıyla bir yapay zeka nasıl yazılır ona bakacağız.
Python’da Basit Bir Yapay Zeka Uygulaması Mimarisi
Python’da bir yapay zeka uygulaması oluşturacaksanız bu uygulamanızı üç ana parçaya ayırabilirsiniz, bu bölmeler sırayla;
- Arayüz: Kullanıcının veri girişinde bulunacağı, istendiği takdirde veritabanı üzerinde değişiklik yapabileceği parça. Arayüzünüz terminal (CLI), görsel (GUI) veya Web olabilir.
- Yapay Zeka: Eğitim, test ve kullanım fonksiyonlarını bu parçada yazabilirsiniz. İsterseniz aynı dosyaya, isterseniz farklı dosyalara bölebilirsiniz.
- Veri: Veritabanı, toplu veritabanı oluşturmak için özel modüller, İnternetten indirdiğiniz hazır yapay zeka modelleri vb. uygulamanın bu parçasında yer alır. Eğer veritabanına manuel veri eklemesi yapabilmek istiyorsanız bunun için yazacağınız uygulama(lar) da bu bölüme girer. Eğer Reaktif Yapay Zeka yapacaksanız bu parçaya ihtiyacınız olmayacak.
Eğer son derece küçük ve basit bir yapay zeka uygulaması üstünde çalışıyorsanız (özellikle yapay zekayı öğrenme aşamasında iseniz) bu aşamaları tek bir dosyanın içinde birleştirmeniz mümkün. Ancak çok küçük olmayan projelerden itibaren; yazma, okuma ve düzeltme konularında kolaylık sağlanması için uygulamanızı veritabanı hariç en az üç (Reaktif Yapay Zeka ise iki) dosyaya bölmenizi tavsiye ediyoruz.
Yapay Zeka Uygulamasını Geliştirme
Gereksinimlerinizi karşıladıktan ve bir yapay zeka uygulamasının sahip olması gereken mimariyi öğrendikten sonra sıra geldi bu uygulamaları yazmaya.
Gerekli Paketleri İndirip Uygulamaya Dahil Etme
Yapmak istediğiniz yapay zeka uygulamasının hangi işlemleri yapmasını istediğinize farklı olarak ihtiyaç duyacağınız Python yapay zeka kütüphanesi de farklılık gösterecektir. Kullanmak istediğiniz yapay zeka kütüphanesini seçtikten sonra Komut İstemi’ni açıp “pip install kütüphaneAdı” kodunu yazıp Enter’a basarak istediğiniz paketi ve o paketin ihtiyaç duyduğu tüm paketleri kolayca kurabilirsiniz.
Paketleri indirip kurduktan sonra oluşturduğumuz Python dosyasının en başına “import kütüphaneAdı” veya “from kütüphaneAdı import fonksiyon/classAdı” satırlarıyla kullanmak istediğimiz fonksiyonları ve kütüphaneleri dosyamıza dahil edebiliriz.
Verilerin Oluşturulması
Yapacağınız uygulamanın Reaktif olup olmamasına göre verileri oluşturma şekliniz değişkenlik gösterecektir.
- Eğer Reaktif bir yapay zeka uygulaması yazıyorsanız verilerinizin tamamı kullanıcıdan alınacaktır. O yüzden bir veritabanı oluşturup veri saklamanıza gerek olmayacaktır (eğer Reaktif olarak çalışıp hafıza oluşturan ve bu hafızayı da hesaplarında kullanan bir uygulama yapmak isterseniz orası ayrı).
- Eğer Kısıtlı Hafıza Yapay Zekası yazacaksanız veritabanınızı farklı yollarla oluşturabilirsiniz. Az sayıda veri için manuel giriş yeterli olurken, çok sayıda veri için toplu veri seti gerekecektir. Bu veri setini direk hafıza olarak kullanabileceğiniz gibi, bu dosyadaki verileri bir SQLite (.db) dosyasına atarak kendinize düzenli bir veritabanı oluşturmanız da mümkün. Her iki senaryoda da verilere erişimin ve veriler üstünde düzenleme yapmanın kolay olması açısından SQLite veritabanının kullanılması önerilir.
- Bir yapay zeka uygulaması geliştirilirken veritabanına eklenen veriler girdi (input) ve çıktı (output) olmak üzere ikiye ayrılır, ancak girdi ve çıktı aynı sütun içerisinde yer alır ve çıktı o satırın en son sütunu olur. Örneğin 3 ve 5 girdilerinden elde edilen sonuç 2 ise girdiler ve çıktı veritabanına (3, 5, 2) satırı olarak kaydedilir.
Yapay Zekanın Oluşturulması
İş geldi en eğlenceli (ve en zorlu) kısma. Kullandığınız paketlere ve fonksiyonlara uyumlu, onlaın işleyebileceği veriler üzerinde çalışan bir yapay zeka sistemi oluşturmak önemli ölçüde deneme-yanılma gerektirebilir. Kullanacağınız fonksiyonların işini kolaylaştırmak için veride ön işleme yapmanız, yeni diziler/listeler oluşturmanız vs. gerekebilir.
Eğer Kısıtlı Hafıza Yapay Zekası kullanıyorsanız oluşturduğunuz veritabanından verileri çekip eğitimi (ve testi) gerçekleştirmeniz gerekecektir. Eğer basit bir Reaktif Yapay Zeka yapıyorsanız kullanıcı girdilerini geçici olarak depolayıp onlar üstünde işlem yapacak bir algoritma yazabilirsiniz.
Girdi Arayüzünün Yazılması
Yapay zekanızın arka yüzünü oluşturduktan sonra sıra geldi ön yüze. Bunun için terminal, görsel veya Web arayüzü seçebilirsiniz. Bu arayüzde uygulamayı doğru çalıştıracak girdi sistemini oluşturup bu girdiler verildikten sonra çıktısını (veya çıktılarını) kullanıcıya döndürecek bir sistem oluşturmalısınız. Bu arayüzü nasıl oluşturacağınız, kurduğunuz veri sistemine ve yaratıcılığınıza bağlı 🙂
Uygulamanın Geliştirilmesi
Eğer yaptığınız yapay zeka uygulaması size göre biraz yetersiz kalıyorsa veya onu geliştirmeye değer görüyorsanız temel olarak yapabileceğiniz iki şey var.
- Veri sayısını arttırma: Veritabanınızda bulunan veri sayısını ve detayını (veritabanında bir kayıttaki sütun sayısı) arttırarak yapay zekanızın doğruluk payını arttırabilir, birbirinden farklı kulvarlarda veriler ekleyerek nispeten uçuk diyebileceğiniz (parametreleri çok büyük ya da çok küçük) veriler üzerindeki performansını arttırabilirsiniz.
- Kullanıcı girdisinden öğrenme: “Self-learning” olarak geçen sistemi kendi uygulamanıza kurabilirsiniz. Bunun için yapmanız gereken şey girdileri ve çıkan sonucu mevcut veritabanınıza eklemek ve uygulamanızı tekrar eğitmektir. Bunun için sıfırdan yeni bir model değişkeni oluşturup eğitim yapabilir veya direk mevcut eğitimin üzerine koyabilirsiniz.
- Algoritma Değiştirme: Veri ön işleme, kısıtlar ve uygulamanızda kullandığınız kütüphaneler gibi pek çok detay gelişime ve değişime açıktır. O yüzden eğer mevcut sisteminizin yeterince iyi çalışmadığını düşünüyorsanız farklı algoritmaları, farklı ön işlemeleri deneyerek işinize daha çok yarayacak olan sistemi oluşturmaya çalışabilirsiniz.
Python dilinde yapay zeka uygulaması geliştirme süreci genel hatlarıyla bu şekilde işlemektedir. Sizin Python dilinde ve yapay zeka alanındaki ilginiz, deneyiminiz ve fikirleriniz size gittikçe daha sağlam ve kullanışlı yapay zeka uygulamaları yazma fırsatı sunacaktır. Burada öğrendiklerinizin üstüne uygulama ile katacağınız bilgiler ile oldukça güzel yapay zeka uygulamaları yazmanız işten bile değil.