Node İle Robot Yazılımı: Robot Hazır!

Node.js ve Php ile yapay zekaya sahip Beybut Robot’u geliştirmeye devam ediyorum. Bundan önceki yazılarımda Node.js kurulumu, hoş geldin iletisi gibi bilindik işlemleri anlatmıştım. Bu yazımda yapay zekaya adımımı atacak; Beybut Robot’u konuşabilir hale getireceğim. Başka bir deyişle, işin asıl bölümüne tanıklık edeceksiniz.

Beybut Robot’u geliştirme aşamasındaki yapay zeka işlemlerinde PHP ağırlıklı çalışmaya karar verdim.  Node.js’yi yalnızca iletişim amacıyla kullanacağım. Yorumlayıcı ve güvenlik dosyamız “suzgec.php” bu açıdan bizim İngiliz anahtarımız olacak. Özetle, Ön yüzden suzgec.php’ye ileti gönderen kullanıcının iletisini bu Php dosyası yorumlayacak; sonuç elde edip sonucu Node’ye gönderecek. Node.js sunucumuz gönderilen iletiyi tekrar ön yüze -kullanıcıya- aktaracak. Yalnızca Ajax ve Php ile bu işi halledebilecek olmamıza rağmen sonraki projelerde de deneyim olması için Node.js’ye hafifçe dürtüyoruz.

Yapay zekanın temelini levenshtein fonksiyonu (hani şu Google’daki “Bunu mu demek istediniz?” benzerlik algoritmasının benzeri) oluşturacak. Mysql veritabanında ön tanımlı sözcüklerin metaphone olarak saklanan biçimini iletiyle karşılaştırıp uygun yanıtları rastgele (random) olarak yansıtacak. Böylece insan zekasına birazcık yaklaşabileceğiz. Ancak robotun yalnızca yapay zekasının temellerini attığımızı; tekrardan kaçınma, ayrıntılı çözümleme gibi işlevlerinin henüz eklenmediğini unutmayalım.

İlk Sohbet, İlk Heyecan

Açıklamalarıyla ekleyeceğim kodları işletip Beybut Robot ile biraz sohbet ettim. Veritabanındaki 20-30 sözcükle gayet insani bir sohbetimiz oldu.

Beybut Robot İlk Sohbet

Bu konuşmayı, veritabanında yalnızca 19 kayıt varken yapabiliyoruz.

Beybut Robot İlk Sohbet 2

Bu kadar eğlence yeter! Tekniğe dönelim…

Firewall işlevi gören, mesajları sunucuya ileten suzgec.php ile devam ediyoruz. suzgec.php’deki kodları sırayla açıklayacağım.

En tepede yer alan bu kodlar hata mesajlarının gösterilmemesini, içsel ve işlevsel kodlamanın UTF-8 ile yapılacağını belirtiyor.

Bu kod bloğu, Session yardımıyla, 1 saniyeden hızlı mesaj gönderen kullanıcıları 1 saniyeliğine durduruyor.

Ajax formdan gelen (post edilen) mesajı Mysql ile içli dışlı olmadan önce uygunlaştırıyor. Sql Injection’dan bir nebze korunuyoruz.

Mysql Yapısı ve Levenshtein Yordamı

… Gelelim asıl meseleye. Bizim açımızdan, yapay zeka dediğimiz şey, elimizdeki verileri en olası ve rastgele biçimde yansıtabilecek robotik bir yaklaşım. Bunu yaparken en az veriyle en çok olasılığı en rastgele halde aktarabilmemiz, bizi amacımıza bir adım daha yaklaştırır. Buradaki temel işlevimiz Mysql için levenshtein yordamı. Bu yordamı kullanmak için önce aşağıdaki tabloyu oluşturun (Sql sorgusu olarak Phpmyadmin’den çalıştırabilirsiniz).

Mysql için levenshtein yordamı oluşturalım. Phpmyadmin’de tablonuzu seçip Sql sorgusu olarak aşağıdaki kod bloğunu çalıştırın. Delimiter hatası verirse görmezden gelebilirsiniz.

Tekrar suzgec.php’ye dönelim. Artık veritabanı işlerini halletmenin ve yordamı kullanmanın zamanı geldi.

Yapay Zekanın Php Yüzü: Mysql Levenshtein, Metaphone, Like

Mysql bağlantısını yaptıktan sonra gelen iletiyi metaphone olarak kodluyoruz. Böylece veritabanında kayıtlı metafon alanımızda like ve levenshtein kullanarak eşleştirme yapabileceğiz.

Sorgusu aynı ve metaphone harf sayısının %50’sini alıp; benzeyen kayıtlardan rastgele birini getirmesini söylüyor. Bu oranı artırırsanız daha fazla kayıt; azaltırsanız daha az kayıt elde edersiniz. Ortalama olması için %50 belirledim.

Geliştireceğimiz yapay zeka bölümü bu kadar. Temel olması açısından, yukarıdaki sohbetleri edebilen Beybut Robot’a şimdilik bu kadar akıl yeter.

Php’den Node.js’ye: Elephant.io

Elephant.io Php içerisinden Node.js sunucusuna mesaj göndermek için hazırlanmış bir kütüphane. Github’da Elephant.io’ya erişebilirsiniz. Src klasörünü projenizin olduğu dizine gönderip aşağıdaki kodları kullanarak Php’den Node.js’ye kolayca mesaj gönderebilirsiniz.

 

Node.js sunucumuza pek bir iş bırakmadık. Mesajı alıp iletsin yeterli. Mysql’u Php içerisinde kullandığımız için Node.js sunucusuna iki satırlık kod kaldı.

Bu son kodlamayla birlikte yapay zeka projemizin temellerini atmış olduk. Artık Mysql’daki sözcük sayısını artırarak; levenshtein’ı geliştirerek… insan zekasına çok yakın bir robot üretmemiz içten bile değil. Temelini attığım bu projeyi dallandırıp budaklandırarak hayal gücümüzün sınırılarını zorlayabiliriz.

Sorularınızı yorum bölümünden iletebilirsiniz. Bu makale şimdilik yeterince uzun oldu. Bana eşlik ettiğiniz için teşekkür ederim. Görüşmek üzere…

Node İle Robot Yazılımı: Kurulum ve Temel Ayarlar

Node.js ve Php kullanarak yapay zekaya sahip bir robot yazalım. Robotumuz gönderilen mesajları, değerlendirerek kullanıcıyla sohbet etsin. Bunun yanında belirli komutları giren ziyaretçiye veya ziyaretçinin Internet’e açık bilgilerini (public) kullanarak (Ip adresi vb.) ona yararlı dönütler verebilsin. IOS’un Siri’sine yakın, milyon dolarlık yatırım yapmadan biraz bilgi ve hayal gücüyle neler yapabileceğimize bakalım. Ancak bu projenin 0 TL. maliyetle gerçekleşmesini istediğimden sesli yanıt sistemini es geçeceğim. Tabi Google Translate projeyi görüp sponsor olursa sesli yanıt bölümünü de kolayca halledebilirim.

Başlarken

Robot projemi Ubuntu kurulu bir sunucuda geliştireceğim. Siz dilerseniz Windows’ta Node.js ve Wamp, Lamp vb. bir programla bu işlemleri gerçekleştirebilirsiniz. Projemin her adımını, kurulumundan yayınına kadar, kaynak kodlarıyla birlikte yazılım geliştiricilere armağan ediyorum. GNU lisanslı yazılımların ticari amaçlarla kullanılamayacağını (Kosgeb’den hibe almak amaçlı da olsa) lütfen unutmayalım.

  • Proje Adı: Beybut Robot
  • Proje Başlangıç Tarihi: 05.03.2015
  • Temel Gereçler: Ubuntu, Node.js, Php, Mysql, azıcık akıl, bol çay ve hayal gücü…
  • Sürüm: 1.0.0
  • Öngörülen Maliyet: 0 TL. (Sunucu, Bw masrafı gibi temel harcamalar hariç tutulmuştur.)
  • Geliştirici: Barış YEŞİLÇİMEN

NodeJs ve NPM Kurulumu (Ubuntu)

Ssh’mize girip root olarak kütüphaneleri güncelleyip Node.js’yi kuralım.

Kurulumun tamamlandığından emin olmak için aşağıdaki komutu verelim. Gelen yanıt sayısal bir sürüm çıktısıysa her şey yolunda demektir.

Nodejs sürümünü görmek için;

Npm’nin (Node Package Manager) sürekli (forever) çalışmasını sağlayalım.

Temel kurulum işlemleri bitti. Şimdi bir test scriptiyle her şeyin yolunda olup olmadığına bakma zamanı. Bir JS dosyası oluşturalım. Sunucu başladığında, ekrana aşağıdaki çıktıları basacak kodu girelim.

Bu dosyayı beybutrobot.js olarak kaydedip sunucumuza FTP’den gönderelim (sunucu üzerinde “pico” gibi bir komutla da bu dosyayı oluşturup düzenleyebilirsiniz.).

Ssh’de “cd” yardımıyla beybutrobot.js dosyasını gönderdiğimiz yere gelerek aşağıdaki komutu çalıştıralım.

Yanlış hatırlamıyorsam Windows kullanıcıları ms-dos cmd üzerinden nodejs yerine node olarak çalıştırıyorlardı.

Aşağıdaki çıktı başlangıç için her şeyin harika gittiğini gösteriyor.

Beybut Robot Başladı

Socket.io ve Nodejs için Mysql Kurulumu

Yazılımımızda veri alışverişi için socket.io’ya, Mysql işlemleri içinse Mysql tanımlamasına ihtiyaç duyuyoruz. O halde hemen kuralım.

Socket.io için;

ile kurulumu tamamlıyoruz. Ardından;

komutu Node için Mysql kullanımını aktif hale getiriyor.

Artık beybutrobot.js dosyamıza bu iki işlevi kullanacağımıza dair kodları ekleyelim.

Burada, Socket.io’nun “io” olarak tanımlandığını ve 1919 numaralı portu dinlemesi gerektiğini belirttik. Hemen altında “mysql” kullanacağız dedik. “nodejs beybutrobot.js”  komutunu işlettiğinizde karşınıza console.log içerisindeki mesaj gelmeli. Eğer bu adımda bir hata alıyorsanız socket.io ve mysql kurulumunuzu doğru yapmamış olabilirsiniz.

beybutrobot.js dosyası sunucumuz; arka planda çalışan pek zeki (şimdilik değil) robotumuzdur. Kullanıcılarımızın, sonraki adımlarda oluşturacağım, istemciye (client’e) girdiklerini beybutrobot.js yorumlayacak; onlara yanıt gönderecek.

Node İçin Mysql Bağlantısını Yapalım

Bir Mysql ve bu Mysql için kullanıcı oluşturuyorum. Kullanıcımı yetkilendirip; beybutrobot.js dosyama ilgili bilgileri giriyorum. Sunucumuzun son hali Mysql bağlantısıyla birlikte şöyle:

Böylece Mysql bağlantısını tamamladık. Js içinde Mysql sorgularını, ilerleyen adımlarda kullanacağım.

Eğer “//” ile başlayan açıklamalar girerseniz kod karmaşasından kurtulmuş olursunuz.

Başlangıç işlemlerimizi bitirdik. Sonraki adımda ön yüzü kodlamaya başlayacak; sunucu ve client yazılımı işlerini aynı anda yürüteceğiz.

İpucu: Sunucunuzda 1919 numaralı portu açmak için;