Telegram Bot Nasıl Geliştirilir ?

telegram

Yapay zeka ve Derin Öğrenme konularında çok fazla haber ve yıkıcı gelişmeler olduğuna dair rivayetler var. Biraz araştırdığınızda neredeyse tüm büyükler (Google, Microsoft, Facebook ve yıllardır zaten IBM) bu konuya milyon dolarlar doküyorlar. Bunlardan en ilginci Elon Mask’ın Tesla’sı. Kendi kendine giden arabalar için görüntü ve sensorlerden gelen bilgilerin fizyonu konularında çok yoğun olarak yapay zekadan yararlanıyorlar. ABD’de iken Tesla ile bir test sürüşü yapma imkanım olmuştu. Size şöyle söyleyim adamlar arabanın iphone versiyonunu yapmışlar. Araba üzerinde dört yıl LTE ücretsiz internet bağlantısı ile geliyor. O zaman anlayamamıştım ama şimdi bunun nedeninin araba kullanıldıkça kaydedilen görüntü ve verilerin Tesla merkezine transfer edilerek merkezdeki yapay zeka algoritmalarını eğitmek için kullanıldığını anlıyorum. Dikkat ederseniz tüm büyükler yapay zeka yazılımlarını ve servislerini ücretsiz kullandırıyorlar. Bunun nedeni de aynı mümkün olduğunca çok kullanıcı bilgisi ile sistemi eğitebilmek. Yapay Zeka çok fazla veri ile eğitilen sistemler olduğu için firmalar buna muhtaçlar. Gerçi geçenlerde MIT’de internette gezinerek kendini eğitebilen bir yapay zeka yazılımı yapıldığı haberi çıktı.

Bu eğitilmiş zekalar tabiki servis olarak bizlerin hizmetine sunulacak. Şimdilik bedava ilerde daha yeteneklileri para ile en yeteneklileri ise ülkelerin savunma ve güvenlik sistemlerinde kullanılacak. Ülke olarak bizde milli yapay zeka yazılımımızı şimdiden eğitmek zorundayız.

Anlatacak çok şey var ama biraz uygulama yapmaya nedersiniz? Biz Türkler hemen çalışan birşeyler görmek isteriz. Hadi başlayalım.

İlk olarak yapay zeka sistemi ile iletişim kuracağımız bir arayüz gerekli bizim için. Bunun için herzaman yanımızda taşıdığımız akıllı telefondan daha iyi bir araç aklıma gelmiyor. Zaten Apple Siri Microsof Cortana vs yazılımlar telefonlarımızda yerini aldı. Benim anlatacağım sistem biraz daha size ait olacak. Size ait olan bir sistemi geliştirmek ve değiştirmek çok daha kolay oluyor.

Yazılım olarak Telegram denilen bir mesajlaşma yazılımını seçtim. Bu yazılım Whatsapp, Facebook messanger benzeri bir chat programı. Ama bazı güzel yanları var. Hızlı olmasının yanında API arayüzleri sayesinde geliştiriciler için çok güzel imkanlar sunuyor. Ayrıca yazı yazmak yerine ses ile de mesaj gönderebiliyorsunuz. Şuanda sesli Türkçe koutları işleyerek yapay zekalı bir sistemi evde çalıştırıyorum. Nekadarını burda anlatıcam bilmiyorum ama bana çok fazla gelecek kokan bir uygulama oldu gibi geliyor.

Telegram bot sizin bir asistanınız. Ona yazı yada sesle verdiğiniz komutları yerine getiriyor. Tabi hangi komuta nasıl bir tepki vereceğini sisiz programlamanız gerekli. Bunlardan bahsedeceğim. Sizlerde ihtiyaç duyduğunuz yada fikir olarak şöyle bir bot olsa faydalı olurdu dediğiniz konuları aşağıda comment olarak yazın tartışalım.

Telegramı çep telefonunuza kurup gerekli adımları geçiyoruz. Bundan sonra yeni bir bot oluşturmak için tüm botların babası BotFather’ı arayıp (search) chat yapmak için sistemimize ekliyoruz. BotFather’in resmi şu şekilde benzer isimde sahte hesaplar da var onlara kanmayın 🙂

telegram

Bu arkadaşı ekledikten sonra onunla chatleşerek yeni Botumuzu oluşturacağız. Mevcut kullanabileceğimiz komutları görmek için /help yazabiliriz.

sc-1

Yeni Botunuzu oluşturmak için  /newbot yazıp BotFather’a gönderin. Bundan sonra size Botunuza ne isim vereceğinizi (name) daha sonrada sonu Bot ile bitecek olan username’ı seçmenizi isteyecek.

Bu adımları tamamlarsanız Tebrikler ilk Botunuzu oluşturdunuz. Burada en önemlisi size gönderilen API token. Bunu sağlam bir yere kopyalayın bundan sonra lazım olacak. API Token aşağıdakine benzeyen harf ve rakamlar topluluğu

270485614:AAHfiqksKZ8WmR2zSjiQ7_v4TMAKdiHm9T0

Yeni botunuzu arayıp konuşmak için listenize ekleyin. Birkaç mesaj yazın. Ne oldu hiç cevap gelmedi mi? Çünkü botunuzun henüz bir zekası yok 🙁

Bir sonraki yazıda botumuza zeka katıp bazı işleri yapmasını sağlayacağız. Fikir ve önerilerinizi bekliyorum.

Yapay Zeka ve Öğrenen Makinalar

Hızla dünyada en çok konuşulan konulardan biri haline gelen yapay zeka benim de yıllardır ilgimi çeken konuların başında gelmektedir. Daha önceden de bu alanda yapılan yazılımları incelemiş ve önemli bir konu olduğuna kanaat getirmiştim. Ama hep kendi kendine düşünebilen makinalar yapmak için bu düşünce sisteminin dışından probleme bakmak gerektiğini savunmuşumdur. Bunu da insan oğlu nasıl yapabilir ki demişimdir. Bu düşünce sisteminin dışından bir bilgisayar peki hala bunu yapabilir. Yapay zeka konuşmaları mutlaka felsefi bir yöne doğru gitmeye meğillidir ama ben bunu yapmayacağım. 2017 yılında kendimi bu konuda geliştirmek yönünde bir karar aldım ve öğrendiklerimi buradan sizlerle paylaşacağım. Gnexlab’da çoğunlukla laf üretmek yerine çalışan örnekler vermeye çalışıyorum. ML (Machine Learning) konusunda da durum böyle olacak. Bu konuya ilgi duyan bu konuda çalışan sizlerle iletişim kurmak beni mutlu eder. Ama ödev sorularınızı cevap veremiyeceğimi belirtmek isterim. Bu yazıda sadece 6 satır kod ile çalışan bir ML uygulaması yapacağız.

Şimdi hızlıca ML nedir ve neden bu kadar önemli biraz bundan bahsedelim. Aslında ML yapay zekanın bir alt dalı. Bir çok problemi yeniden kodlama yapma gereği olmadan çözmek amacı ile geliştiriliyor.

Yalçın Yenigün burada şu şekilde türkçeleştirmiş

ML : Bilgisayarların dışarıdan programlanmaya ihtiyaç duymadan kendi kendine öğrenme yeteneğine “machine learning” denir.

Aslında ML kod içine gömülmüş kural setleri yerine örneklerden ve tecrubelerden öğrenen bilgisayar yazılımlarına verilen genel bir isim bir kavram.

Bu tanım bile ne kadar önemli olduğunu anlatıyor ama basit olmasına rağmen ML dışında çözümü pek de mümkün olmayan bir örnek üzerinden devam edelim.

Elma ile Portakal arasındaki farkı anlatan bir kod yazmanızı istesem. İlk aklımıza gelen turuncu ve yeşil pikselleri saymak bir çözüm olarak gelebilir.

Inline image 1

Turuncunun fazla yeşilin az olduğu resimleri portakal olarak ayırabilirsiniz. Fakat gerçek dünya bu kadar basit değil malesef. Kod içine yazdığınız sabit kural setleri çok kolay kırılacaktır. Mesela size siyah beyaz bir resim versem.

Inline image 2

Emin olun yukarıda yazdığınız kural setlerini kıracak bir çok resim bulabilirim. Siz de tonlarca kod ekleyerek tüm bu kural setlerini benim bulduğum uygunsuz resimleri de kapsayacak şekilde düzeltmeye çalışırsınız. Peki ya problemi değiştirirsem? Yeni problem için sil baştan tekrar tonlarca yeni kural seti mi yazacaksınız?

O zaman bizim için tüm bu kural setlerini yazacak bir algoritmaya ihtiyacımız var.

Şimdi işte işin zevkli kısmına geliyoruz. Bizim bir sınıflandırıcıya (Classifier ) ihtiyacımız var. Nedir bu sınıflandırıcı? Aslında sınıflandırıcıyı bir fonksiyon olarak düşünmek gerek. Bu fonksiyon dataları input olarak alıyor ve sonuç olarak bir etiket döndürüyor. Örnek olarak sınıflandırıcınız bir e-postayı alıp bunun spam mi yoksa değilmi diye ayrıştırıyor olabilir.

Örnekler içerisindeki belirli patternleri (kalıpları) bulmak için sınıflandırıcı geliştirmeye Supervised Learning deniliyor. (Türkçe terimlerde yardımlarınızı bekliyorum.)

Sınıflandırıcımıza girdi olarak verdiğimiz datalardan birisi eğitim datalarıdır. Mesela yukarıdaki örnek için meyvaların ağırlık ve yüzeyleri tablosu eğitim datamız olsun.

Inline image 3

 

ML de bu ağırlık ve yüzey pürüzlülüğüne features denilmekte. Bu özellikleri ne kadar doğru ve çeşitli verirseniz sınıflandırıcınız o denli doğru çalışacaktır. Bu örnekde Karar ağacı (decision tree) sınıflandırıcısını kullanacağız. Bunun gibi bir çok sınıflandırıcı algoritması geliştirilmiştir. Şimdilik karar ağıcı yada diğer sınıflandırıcı çeşitlerinin iç yapısına girmeden onları bir kurallar kutusu olarak düşünmekte yarar var. Buradaki en önemli konu içeriğini şimdilik bilmesek de tüm sınıflandırıcıların girdi ve çıktıları aynıdır. Data girer tahmin çıkar.

Sınıflandırıcıyı oluştururken örnekler içerisindeki kalıpların kullanılacağından bahsetmiştik.

Inline image 4

Mesela portakal genellikle elmadan daha ağırdır. O zaman ağır olan meyva daha büyük olasılıkla portakaldır diye bir kural seti olabilir. Demin de dediğimiz gibi bu kural setini biz elimizle yazmıyoruz. Verdiğimiz ağırlık datalarına bakarak bu kural setini sınıflandırıcı otomatik olarak oluşturuyor. Bu kural seti gibi yüzlerce binlercesini kendisi oluşturabilir. Mesela verdiğiniz yüzlerce hastalık belirtilerinden, tahlil sonuclarından o hastalığın büyük olasılıkla ne olduğuna bir makina insandan daha doğru karar verebilir. Ya da insansız bir hava aracı işlediği görüntü verilerden hareket kalindeki insan topluluğunun terorist mi yoksa yöre halkı mı olduğunun kararını doğru bir şekilde verebilir.

Konuyu dağıtma eğilimimi bastırıp ilgimi çeken ve bundan sonra derinlemesine inceleyeceğim iki açık kaynak ML kütüphanesinden bahsederek devam edeyim. Bunlardan ilki scikit-learn diğeri de çıkalı bir yıl olmasına rağmen Linux dan daha fazla yıldız alan Google’ın TensorFlow kütüphanesi. Bundan sonra çalışmalarımda bu iki kütüphaneden yararlanacağım.

Yukarıdaki örneği scikit’de kodlarsak aşağıdaki 6 satır kodu elde ediyoruz. (Python kodu)

Inline image 5

 

Burada etiketleri ifade etmesi için sayıları kullanmamız gerekiyor. Zira aslında ML kütüphaneleri dediğimiz kodlar büyük matris işlemlerini çok hızlı yapabildikleri için günümüzde ML bir ivme kazandı. (ML kodlarının çalıştırıldığı donanımlardan ilerde bahsedeceğim)

0  bumpy yani pürüzlü yüzeyi 1 ise smooth yani düzgün yüzeyi
1 portakalı 0 ise elmayı temsil etsin.
Kodu yukarıdaki tablolarla birlikte incelerseniz özellikler tablosundan features dizinini oluşturuyoruz. Labels da bunlara karşılık gelen meyvenin ismini tutuyor.
clf olarak Karar ağacı sınıflandırıcımızı tanımlıyoruz. Bu sınıflandırıcıya features ve labels dizinlerini fit foksiyonu yardımıyla input olarak veriyoruz. Bu sınıflandırıcımızın eğitim işlemi. Daha sonra yine clf objesinin bir fonksiyonu olan predict ile ağırlığı 150 gram ve yüzeyi pürüzlü meyva nedir diye tahmin etmesini istiyoruz. Cevap 1 yani Portakal oluyor.

Tebrikler

Buraya kadar geldiyseniz 6 satırlık ilk ML kodunu anladınız demektir. Asıl güzel kısmı bu kodu hiç değiştirmeden yeni örneklerle eğitip başka problemleri çözmesini isteyebiliriz.

Inline image 6

 

Konu, anlaşılması için ne kadar sadeleştirilmiş olsa da eğer buraya kadar anlatılanlardan hoşlandıysanız ML sizin için de öğrenmeye değer olabilir. Zira Önümüzdeki 10 sene bunu çok konuşuyor olacağız.

Bir sonraki bölümlerde kod geliştirme ortamı kurulumu ve basit örneklerle devam edeceğiz. Takipte kalın.

Kaynaklar :

1- Açık kaynak ML kütüphanesi Scikit-Learn:  http://scikit-learn.org/stable/index.html

2- Açık kaynak ML kütüphanesi TensorFlow: https://www.tensorflow.org/

3- Google Developers:  https://www.youtube.com/channel/UC_x5XG1OV2P6uZZ5FSM9Ttw

4- ML Recepies by Josh Gordon : https://www.youtube.com/playlist?list=PLOU2XLYxmsIIuiBfYad6rFYQU_jL2ryal