Sayfalar

Salı, Aralık 13, 2022

Innovasyon Yumurtlayan Hindi

Zeka Hakkında Kıssalı Yazılar - 8 *


 

Nasrettin hoca malum pekçok yerler yurtlar gezmiş, ilim tahsil etmiş. Memleketler yerler görmüş yanından ayırmadığıda bir hindisi varmış. Hani şu meşhur konuşmasada düşünen hindi.
Hoca, Hindinin yumurtası ile karnını doyurup gezmeye, talebeliğe devam edermiş.

O kadar ilim meclisinden bulunmasından mi bilinmez hindiye bir haller olmuş. Hindinin yumurtalarının içlerinden türlü işler için innovatif fikirler yazan nameler çıkmaya başlamış. Hoca Nasrettin pek de anlamıyormuş bu namelerin maddi karşılığından. Sırtını sıvazlayıp bir öğün karınını doyurana veriyormuş nameleri. Zaman geçtikçe hindinin ünüde yayılmış kulaktan kulağa.

Gel zaman git zaman, ortalıklar karışmış, bir taraftan Timur, bir taraftan eşkiyalar, ortalığı kasıp kavurmuşlar. Kimseler çıkamamış evlerinden dışarı, Herkes can derdine düşmüş. Böyle karanlık zamanlarda Hocaya gelen gidende olmamış normal olarak.

Ama zaman bu dururmu yerinde. Kış biter bahar gelir ! Karanlık biter gün doğar !  Çalkantı kesilir sular durulur. Ortalık düzelince Ağalar beyler hocanın kapısına gelmişler. Innovasyonlu Namelerden talep etmişler. 

Hoca :

- Ağalarım Beylerim malesef ben hindiyi kesip yedim.

demiş. 

Ağalar Beyler :

- Ya hoca sen delirdinmi ? Hiç Innovasyon Yumurtlayan hindi kesilirmi ?

demişler.

Hoca:

- Zaten çokda maddi bir getirisi olmuyordu. Gelip, destek çıkan  olmayınca,  aç kaldım. Ya Çekip gidecektim diyar-ı küffara doğru. Onun içinde ihtiyardım gidemedim. Sonunda da dayanamayıp kesip yedim, Fikirler Yenmiyor malum.

demiş. İlave etmiş

Ey ağalar beyler bu innovatif işler niçin bizim memlekette çıkmıyor deyu hayıflanmayın beyhude, sebebi sizsiniz...

Not: Üstteki resim "Stable Diffusion 2.1 Demo" ile üretilmiştir.

 

* Zeka Hakkında Kıssalı Yazılar Serisi - 1 2 3 4 5 6 7

Pazartesi, Mart 28, 2022

Parayı Veren Innovatif Düdüğü Çalar

Zeka Hakkında Kıssalı Yazılar - 7 *

Zamanlardan bir zaman Bizim Nasrettin Hoca ArGe ye merak salmış.  Bir startup kurup Akşehir Tekno Han da bir yer açmış.  Çalışma alanı olarak da Innovatif Düdük imalatını seçmiş. Haber tez yayılmış hocamızın marifetleri zaten malum. Kelli felli nice beyler ağalar ziyarete gelmişler.

Hepsi birer düdük ısmarlamış, ama para veren olmamış.
Hoca tümüne olumlu cevap vermiş:
– Peki, olur demiş…
Beylerden yalnız biri,  Hoca’ya şunları söylemiş:
– Hocam banda bir düdük yapın alın şu para da peşinatı olsun demiş

Hoca demiş kelli felli ağalar beyler geldiler istekde bulundular. Her halde beni kandıracak değiller diye düşünmüş 

Sabah - akşam aylarca çalışıp bütün talepler için düdük prototiplerini imal etmiş.  

Bitirdikçede  sahiplerine haber salmış. 

Salmış salmasınada Pek çoğu için gelen giden olmamış.

Gelenleri çoğuda bahaneler bulup savuşturmuşlar.

Sadece parayı veren bey düdüğünü teslim alıp parasının kalanını ödemiş.

 Hocada bütün bunlardan sonra malum sözünü söylemiş

 Parayı veren düdüğü çalar.

 

* Zeka Hakkında Kıssalı Yazılar Serisi - 1 2 3 4 5 6

Salı, Ağustos 31, 2021

Ne Yapmalı II


 

Yine bir Kıssayla başlayalım. 5 Maymun deneyi kıssası*

Bilim Adamları bir kafese 5 maymun ve bir merdive ve kafesin tepesinde Muz kuymuşlar. Dışarıyada bir görevli bırakılmış. Ne zaman maymunlardan biri ICAT çıkarıp merdivene tırmanıp muza ulaşmaya çalışsa, görevli soğuk ve tazyikli suyla başta merdivene çıkan olmak üzere bütün maymunları ıslatıp engellemiş. Doğal olarak maymunlar bir süre sonra muza ulaşmaya çalışmaz olmuşlar. Neyse Efendim  maymunlardan birini çıkarıp yerine yeni bir maymun koymuşlar. Yeni maymun hemen muzun farkına varıp ICAT çıkarmak için  merdivene hamle yapınca. Diğer maymunlar ICAT ÇIKARMA BAŞIMIZA deyu yeni maymunu bir güzel pataklamışlar.  Yeni maymunun durumu öğrendiğini gören bilim adamları diğer maymunlarıda birer birer çıkarıp yerlerine yeni maymunlar koymuşlar ve aynı sonuçlar. görülmüş

Sonuçda Ortada görevli olmasada Maymunlardan hiç biri ICAT çıkarmaya kalkmıyormuş, Icat çıkarmaya kalkanlarıda maymunlar kendileri pataklıyormuş.

 Geçenki yazımızda ulaştığımız sonuçlardan devam edersek. Toplum olarak Yetenekli ve Zeki bireylerimizi harıcıyoruz.** Hasbel kader yetişenide ICAT çıkarmasın diye dövüyoruz. Ne yapmamız lazım peki. 

Icat çıkarılıyor diye fertleri cezalandırmayı bırakmalıyız. Toplumun cezalandıracağız diye yüzyılllardır öğrendiği negatifi öğrenmeyi tersine çevirecek çalışmalar yapmalıyız.

Tavuk mu yumurtadan çıkar, Yumurta mı tavukdan çıkar ikilemi gibi bir durum var elbette. Yönetimmi kendini düzeltmeli , Insanlarmı kendini düzeltmeli. İçinden çıkılmaz bir durum. 

Örnek den yola çıkarsak
Yönetim olarak Islatmayı bırakıp merdivene çıkılmasını teşvik etmeye kalkıyorsunuz. Merdivene çıkılsın diye verdiğinizi yiyip çıkıyormuş gibi yapan maymunlar olabiliyor.  Birey olarak maymunun zaten hiç şansı yok, ya çevresinden ya çevresiyle beraber görevlilerden ceza alabiliyor.

Sonuç olarak ne tek başına Yönetim Ne tek başına ferdin çözebileceği bir problem değil.  Problemin politikaya evrilip çözümsüzlüğe yuvarlanmasıda ayrı bir problem.  Duydunuzmu bilmem Koçi Bey risalesi diye bir makale vardır. Osmanlı devletinin kötü gidişatıının raporlandığı bir çalışma, hemde taa Dördüncü murat devrinde.  

Padişah'ların etrafında dalkavuk devlet adamları vardır ve bu yüzden padişah, halkın sorunlarından uzaktır.
Tımar ve Zeamet sistemi bozulmuş, topraklar verimsiz, halk rahatsızdır.
Rüşvet artmış, memuriyet alım satımı yapılmaya başlanmıştır.
Kuruluş felsefesi, disiplin ve devletin beka'sı olan Yeniçeri ocağı artık silahını, padişah, devlet ve millete çevirmiştir.
Devlet adamalarının basiretsizliği, eğitimsizliği ve liyakatsizliği sorunları derinleştirmektedir.
Giderek her işe hatır karıştı, her şeye göz yumuldu ve hak etmeyenlere bir çok mevkiler verildi,
...
İyi-kötü belirsiz oldu. İyilerin iyi işlerinin değeri bilinmediği ve kötülerin kötülükleri cezasız kaldığından, âlim ve cahil birbirinden ayrılmadığından, ulemânın kıymeti bilinmediğinden, bilginlerin halk gözünde saygınlığı kalmadı.
...
âlim ve cahil eşit görülmezse ilim yolu kısa zamanda düzelir. Ancak, aldırış etmemekle âlem elden gider. 
   
Küfr ile dünya durur, zulm ile durmaz.

Evet Nerdeyse 400 yıl geçmiş ama aynı problemlere sahibiz.  O zamandan günümüze pek çok değişik siyasi görüşte insanlar, ülkemizin başına gelmiş ve gitmişleridir. Bu demektir ki Şu zevat zamanı iyiydi , yok aslında öteki zevatı muhterem çok iyiydi demenin hiç bir anlamı yok.  Toplumsal bir probleme parmak basıldığında iş hemen siyasete evrilip dipsiz bir kuyuya atılıyor.  Lütfen yazımızı böyle değerlendirmeyin. 

Eğer fert olarak yönetimde bir vazife almışsanız, bu problemleri elinizden geldiğince çözmeye çalışın. Yok yanlızca fert iseniz, yönetimlerin düzelebilmesi için ferdin yapabileceği bence yegane şey ; Hiç kimseye ama hiç kimseye yönetim anlamında gözleri tamamen kapalı güvenmeyin. Futbol takımı gibi taraftarlıkdan vaz geçin.  Bütün insanlar gibi siyasetçiler de ödül ve ceza sistemiyle hizaya girer.

Konumuza devam edersek.

Bir ideal belkide bir anlamda hayal peşinde yürümek lazım.  Kendimize güçlü olduğumuz yönleri gözetleyerek  bir görev tanımı yapmalıyız.  Görev dışı konulara fazlaca takılmamalıyız.  Çünkü bu takıntılar, başarısızlıklarımızın bahanesi hali geliyor. Nice çok yetenekli ve bilgili insanımızın acizlik batağına düştüğünü görüyoruz. Yönetim şöyle, akademi böyle, halk öyle, vs vs ... . Problemlerin kaynağının değiştiremeyeceğimiz sebeplere bağlanması, Acizlik sızlanması döngülerinde yitip gitmeye sebep oluyor. 


Yine darmadağın bir yazı oldu kusurumuza bakmayın.


 *  kıssası diyorum aslında böyle bir deney yapılmamış. bakınız

** Pek çok zamanda kendi kendilerini harcadıkları vaki. Mevcut düzeni anlayıp oradan çıkış yolu bulmak yerine, Agresif bir tavrıla ben her zaman haklıyım, her şey tam benim istediğim gibi olmalı. Deyip  olmadığında küskünlüklerden bataklığında debelenip kalırlar. Oysa ki Çok yetenekli ve zeki de olsanız, başarılı olabilmeniz için çevrenizden destek almanız gereklidir. Bakınız Dr Sheldon nın Nobel konuşmasında . " I have been encouraged, sustained, inspired and tolarated"  diyerek çok güzel vurguluyor. 




Cumartesi, Ağustos 08, 2020

Böyle gelmiş böyle gidecek korkarım Vallah !

 

Kadının biri çoçuğunun durumuyla ilgili görüşmek üzere öğretmenini ziyaret etmiş 

Kargaya yavrusu şahan görünürmüş misullu evlanına güzellemeler yaptıktan sonra

hocam demiş olur ya bazen bizimki şımarıklık yapar, gürültü yapar, yaramazlık yapar, 

Hiç çekinmeyin Bütün gücünüzle bir tokat vurun yanında oturan çocuğa, hemen susacaktır.

Başkalarının 

Şımarıklığı ,

 Üç kağıtçılığı,

Hesap bilmezliği

Hovardalığı,

İş bilmezliği,

Beceriksizliği

Yolsuzluğu,

Hırsızlığı,

Arsızlığı,

...

yüzünden tokat yemekten BUNALDIM...

Perşembe, Temmuz 30, 2020

Ne Yapmalı I / Aptal yada Tembelmiyiz ?

Kim Ne sorduda Ne yapmalı diye bir başlık açma ihtiyacı duyduk önce oradan başlayalım

"Bilim, Teknoloji ve Yenilik Politikaları Kurulu" tarafından çifter çifter anket linkleri geldi.

Sayın BİROL KUYUMCU,
....

T.C. Cumhurbaşkanlığı Bilim, Teknoloji ve Yenilik Politikaları Kurulu (BTYPK) bünyesinde ve TÜBİTAK’ın teknik desteği ile bir “Yapay Zeka Teknoloji Yol Haritası” hazırlanması çalışması yürütülmektedir. Teknoloji Yol Haritasının; ilgili alt teknolojiler özelinde belirlenecek stratejik hedefler, ülkemizin bu hedeflere ulaşması için geliştirilmesi kritik olan ürün/teknolojiler, bunların geliştirilmesine yönelik Ar-Ge projeleri ve son olarak da geliştirilen kritik ürün/teknolojilerin öncelikli sektörel uygulamaları şeklinde çok katmanlı bir yapıda oluşturulması öngörülmektedir. Teknoloji Yol Haritası,  belirlenen konularda somut Ar-Ge ve yenilik hedefleri ile bu hedeflerin gerçekleşmesi için gerekli kilometre taşlarını içerecektir. Bu sayede, bu alanda hedef ve ihtiyaç odaklı, izlenebilir sonuçları olan projelerin desteklenmesi sürecine katkı sağlanacaktır.

Teknoloji Yol Haritası oluşturulması sürecinin bu aşamasında ülkemizde yapay zeka algortimalarının geliştirilmesi konusunda çalışmalar yapan ve yapay zeka uygulamalarını kendi faaliyet alanlarında kullanan yetkin uzmanlardan, ülkemizin odaklanması gereken stratejik hedefler konusunda katkılar alınacaktır.

“Yapay Zeka” konusundaki uzmanlığınıza dayanarak, hedef önerilerinizi ve katkılarınızı, .... günü mesai bitimine kadar, aşağıdaki bağlantıdan ulaşabileceğiniz "... formu" aracılığıyla iletmenizden mutluluk duyacağız.

Ilkinde daha kısa ve öneri isteyen bir anket, sonra daha detaylı seçilmiş bazı başlıklar hakkındaki  "teknoloji temelli stratejik hedef önerilerinin ve sektörel ihtiyaçların, ülkemizdeki “yapılabilirlik” ve “etki” açısından, yine ekosistemin tüm paydaşlarının değerlendirmeleri" istenmiştir.

Anketleri doldurdum ama bence anketle ne derece sonuca ulaşılabilecek bilemiyorum. Hazır blogumuz var kim tutar bizi deyip  sadece Yapay Zeka değil geniş anlamda Ne yapmalı diyerek bir yazı dizisi yazmak istedim. Başlıyoruz...

Bir Şey Yapmalı da  Toplum olarak buna uygun bir yapıya sahip miyiz ?

Aptalmıyız ?

Zeka konusundaki popüler ölçüt IQ değeridir.  Irklar üzerinden karşılaştırmalı  çalışmalarda yapılmıştır.

https://vignette.wikia.nocookie.net/psychology/images/8/88/Sketch-4race-transparent.png/revision/latest?cb=20060222182408


ırklar  arasındaki bu değişimin aldatıcı olduğunu düşünüyoruz Nitekim




















burada : Irkların değişik yerlerde değişik ortalama IQ değerlerine sahip çıkması bu iddiamızı destekliyor.

Keza bir gerçeklik payı olsada Bütün Irkların bir gaussian bir dağılımla çok zeki fertlerinin olacağı sonucu çıkıyor.  Sonuç olarak bizim yada herhangi bir milletin zeka problemi yok, Zeki insanlarını değerlendirme problemi var diyebiliriz sanırım...

Tembelmiyiz ?

Bir Anekdotla başlayalım

"Birinci Dünya savaşının sonlarına doğru Konya ovasının sulanması işlerinde  çalışan bir Alman mühendis, Tuz gölü civarında bir köyün arazisini ölçerken duvarın gölgesinde uyuklayan bir Türk köylüsünü görür. Sabahtan beri yakınında çalıştığı halde köylünün bu ölçme işleriyle hiç meşgul olmadığı dikkatini çeker, bu alakasızlıktan dolayı hayret eder ve merakını gidermek maksadıyla onunla konuşmak için yanına yaklaşır. Merhaba der, köylü hiç kımıldamadan uyuklar vaziyette, yarı açık gözleri ile selamını iade eder. Büsbütün hayrete düşen mühendis sorar:
Sabahtan beri burada niçin çalışıyorum biliyormusun ?
Köylü,  yine kayıtsız şekilde omuzlarını silker. Mühendis devamla, ben bu arazinin sulanması için çalışıyorum, der; 
eğer bu kanallar açılırsa sen bu gün aldığın ürünün  iki katını alacaksın diye ilave eder.
O vakite kadar uyuklamasına devam eden köylü, bu son sözleri işitir işitmez, gözlerini açar, içlerinde parlayan şeytani bir pırıltı ve dudaklarında beliren bir gülümsemeyle,
öyle ise ben o vakit bugün çalıştığımın yarısı kadar çalışacağım diye haykırır."*

Bu anekdot Sosyolojide meşhur coğrafi okulun çağdaş temslcilerinden biri olan Huntington 'ırkların karekteri' adlı eserinde Türk Karekterinden bahsederken geçiyor.  Sonuç olarak da  "Türklerin tembel ve iktisadi zihniyetten yoksun oldukları " neticesine ulaşıyorlar.

Bizce ortada bir gerçek var ama ulaşılan netice yanlış. Dünyanın dört bir yanında burada yetişip gitmiş ama pek çok değişik alanda çok başarılı olmuş Insanımızın varlığı bize göstermektedir ki tembel de  değiliz. Bizce böyle davranılmasının arkasında, toplum olarak negatif öğrenmeye maruz kalmış olmamız vardır.

Devamı kısmet olursa devam yazılarımızda...

Her türlü görüş ve önerilerinizi bekleriz.

Notlar :
* Bilimsel Değerlendirme ve Araştırma Metodolojisi / Orhan Türkdoğan  S- 212,213

Pazar, Mayıs 17, 2020

Python ile Derin Öğrenme


Bazen söylemek istediklerimi çok karmaşık söyleyebiliyorum.  Bir önceki yazımızda anlatmak istediğimiz özetle şudur.  Tek başına Keras kullanmak artık mümkün değil. Tesorflow'a geçmek zorundayız.  Ama bunu yaparken Kerasdanda vazgeçmiş olmuyoruz çünkü Tensordlow 2.x den sonra Kerası merkeze almış bir yapısı var.

Bu konuda Türkçe basılı kaynak isytenlere önerebileceğimiz yegane kaynak kitap "Python ile Derin Öğrenme" kitabıdır. Bu kitap bir tercüme çalışması. Orijinal Halini "Francois Chollet" yazmış. 

Orjinal Kitap Linki  :  Deep Learning with Python

Tercümesini Bilgin Aksoy  kardeş yaptı. Karınca kararınca bizde düzenlemesine yardımcı olduk. Buzdağı yayınevi de basımını yaptı.

Türkçe Kitap Linki :  Python ile Derin Öğrenme


Kitap tanıtımından alıntı yapalım

Bu kitap, derin öğrenmeyi sıfırdan öğrenecek ya da bilgilerini artıracak herkes için yazılmıştır. Makine öğrenmesi mühendisi, yazılım geliştirici veya üniversite öğrencisi de olsanız bu kitapta değerli sayfalar bulacaksınız.Bu kitap, uygulamalarla ve kod yazarak derin öğrenmeyi öğretmeye çalışmaktadır. Matematiksel notasyon yerine sayısal kavramları kod örnekleriyle açıklayarak makine öğrenmesi, derin öğrenmenin temel fikirleri hakkında uygulamalı bilinç oluşturmaya çalışmaktadır. Ayrıntılı olarak açıklamaların eklendiği 30’dan fazla kod örneğinden, pratik tavsiyelerden ve derin öğrenmeyi somut problemlerin çözümünde kullanmayabaşlamak için gerekli her şeyin detaylı açıklamalarından öğreneceksiniz. Kod örnekleri Python derin öğrenme kütüphanesi Keras’ı arka planda TensorFlow’la kullanmaktadır. Keras en popüler ve hızlı gelişen derin öğrenme kütüphanelerinden biridir ve genelde yeni başlayanlara yaygın olarak tavsiyeedilmektedir. Bu kitabı okuduktan sonra derin öğrenmenin ne olduğu ne zaman uygulanabilir olduğu ve kısıtları hakkında sağlam bir temele sahip olacaksınız. Makineöğrenmesi problemlerine yaklaşmada standart bir yol haritasını ve sıkça karşılaşılan sorunlara nasıl çözüm getireceğinizi öğreneceksiniz. Görüntü sınıflandırma, zaman serisi tahmini, duygu analizi, resim ve metin üretme gibi bilgisayarlı görüden doğal dil işlemeye kadar birçok gerçek hayat probleminde Keras’ı kullanabileceksiniz.
Kitabın içeriğiyle ilgili daha detaylı bilgi için bakınız

 Aslında kitap çıkalı epey zaman oldu. Şimdi niçin duyuru yapıyoruz konusuna geçersek.  Bu kitaptaki örnek kodların Tensorflow .2x için adaptasyonunu yapalım diye bir çalışma içine girdik.

https://github.com/birolkuyumcu/deep-learning-with-python-notebooks-tf2.x

Tensorflow adaptasyonu deyince gözünüz korkmasın. Kodun çoğunda değişiklik olmuyor. Kitap yazılalı epey zaman geçmiş bu yüzden Tensorflow adaptasyou olmasada versiyon uyumsuzluğundan düzeltilmesi gereken  yerler olabiliyor. Peyder pey kodları düzenleyip paylaşacağız orjinal kodlara bakmak isterseniz burada


Her türlü görüş ve önerilerinizi bekleriz.

Pazar, Mayıs 10, 2020

Keras 'ın akibeti ile Tensorflow 2.x durumu




Bizi takip edenler bilir. Derin öğrenme kütüphaneleri hakkında yazılar yazmıştık.


Bizde bu kütüphanleri içinde "Keras" ı tercih etmiştik. Kullanımı kolay, ağ yapısını tasarlamak kolay, lego vari katman eklemeleri ile çalışıyordu. Genel eğitim fonksiyonları ile hafızdan yada dizinden , yada Python Generator kaynaklı şekilde eğitim tasarlamak mümkündü.  Üst düzey bir yapısı vardı alta Theano, Tensorflow, CNTK, mxnet gibi diğer kütüphaleri kullanabiliyordu.

Yukardaki yazılarda bahsettiğim gibi büyük şirketlerin savaş cephesi haline gelmiş bir ortamda, Googleın TF deki tekelci anlayışı. Kerasın yazarının google işe girmiş olması vs durumlar kerasın geleceği hakkında endişelendiriyordu.

Beklediğimiz gibi Büyük şirketlerin savaşı neticesinde geriye 3 şirket ve 3 Kütüphane kaldı
  • Tensorflow  /  Google
  • PyTorch     / Facebook
  • MxNet       / Amazon 

Theano gelişimi desteksizlikten  durduruldu.  CNTK ne yapıyor bilen yok.  Caffe2 yi PyTorch un içine gömdüler. Keras da müstakil versiyon yani değişik ktüphaneler üzerinde çalışabilen halini DURDURDU. Her tür backend ile çalışan en son versiyon Keras 2.2.5 oldu.  Duruma üzülsemde bir anlamda da hak vermek zorundaydım Theano zaten duruduruldu, CNTK ve MxNet cepheside Kerasa yeterli desteği çıkmayınca. Geliştiriciler mecburen böyle bir yola girmek zorunda kaldılar. Madem Tensorflow dışındakilerden destek gelmiyor. Tensorflowun içinde ki keras üzerinde yürümeye devam ederiz dediler.

Yazının başındaki Resmi
"If you’re asking “Keras vs. TensorFlow”, you’re asking the wrong question" 
yazısından aldım özetle dediği ; Kerasmı Tensorflow mu diye soruyorsanız yanlış soru soruyorsunuz diyor. Artık zaten böyle bir sorunun hiç bir anlamıda kalmadı
 Ama beklenmeyen şey Tensorflow 2.0 ile oldu. Tensorflow'un merkezine süpriz bir şekilde Keras geçti. Pek çok kaynakda sizde araştırın göreceksinizki eski NN kısmının kullanımının anlatıldığı felan yok. Tensorflow 2.x ile temel kısımlar keras üzerinden anlatılmaya başladı ve şimdilik öyle de devam edecek gibi görünüyor.


Elbette herşey güllük gülüstanlık değil. Tensorflow 2.x geçmekle öğrenmemiz gereken yeni şeylerde var. Mesela verilerle ilgili kısımlar için "tf.data" kullanmayı öğrenmek veya Ön eğitimli model kullanımı için TensorFlow Hub kullanmayı öğrenmek  gibi. 


Udacity de yayınlanan bu ücretsiz kurs ile Keras'dan TF 2.x geçişinizi hızlandırabilirisiniz.

Bu durumun pek çok avantajları var elbette. Çoklu GPU kullanımı , ve  elbette TPU kullanımı artık mümkün. Keza yazdığınız kodu pek çok ortamda çalıştırma imkanına kavuşmuş oluyoruz. En büyük çekincem Kerasın logo vari yapısının bozulup "subclassing"  yapısının mecburi hale getirilmesi. Yeni tip katman tanımlamaları için bu tür "subclassing" sistemi mecburi olabilir ama bu katmanların yine eski metodlarla bir araya getirilebilmesi şartıyla. Bütün yapıyı bu tip bir sisteme dönüştürdüğünüzde Keras kullanmanın zannımca hiç bir anlamı kalmıyor malesef


Son olarak Kerasın ana geliştiricsinin fikirleri ve  "Francois Chollet" in tf.keras'ın detaylarını anlattığı 2 video ile yazımızı tamamlıyoruz.



Her türlü görüş ve önerilerinizi bekleriz.

Perşembe, Eylül 19, 2019

FastText ile Kelime Vektörü Oluşturma

Bu yazımızda FastText kullanarak nasıl kelime vektörü oluşturabileceğimizi nasıl göreselleştire bileceğimizi göreceğiz.

İlk yazımızda bahsetmiştik

"Sonra Kelime vektörü - word2vec - denen bir kavram çıkmış ortaya.  Her kelime için sabit uzunlukta bir vektör kullanmak. "Birlikte geçen kelimeler anlamca yakındır" var sayımından yola çıkılıyor.  Başlangıçda aynı yapay sinir ağlarındaki gibi kelimeler için rastgele seçilmiş vektör değerleri atanıyor. Devasa derlem - corpus - kullanarak danışmansız şekilde - unsupervised - her kelime için birlikte geçtiği kelimelere göre bu vektörler güncelleniyor. "
Kelimelerin anlamca yakınlıklarına göre orantılı birer vektöre dönüştürülebilmesinin önemi büyük. Doğal dil işleme ile yapılacak hemen her işte işimize yarar bir başlangıç noktası verir. Mesela bir arama algoritmasında sadece yazdığınız kelimeyi ararsınız. Aynı yada yakın anlama gelen kelimelerin geçtiği yerlere ulaşamazsınız. Anlamca yakın kelimeler ile arama yapabilmek için kelime vektörleri çok işinize yarayacktır. Bir başka aklıma gelen örnek; iki metnin anlamca yakınlığının hesaplanmasında kullanılabilir.

FastText 'in sitesinde değişik dillerde Common Crawl ve  Wikipedia dan toplanmış derlemler le eğitilmiş hazır kelime vektör modelleri var. Elbette Türkçe içinde var.
fasttext.cc/docs/en/crawl-vectors.html
 Buradan yayınlanan hazır eğitilmiş kelime vekörleri iki formatta sunuluyor.  Uzatnısı .bin  olan FastText modeli doğrudan yüklüyebiliyorsunuz. Yada uzantısı  .txt olan da her satırda başta kelime devamında vektör olacak şekilde hazırlanmış bir metin dosyası olarak.
Hemen baştan uyarayım dosyalar çok büyük ve devasa kelime sayısına sahip. Bu tip bir modeli her bilgisayarda yüklüyebilmeniz pek mümkün olmaz.

Bu tip genel vektörlerin bir başka handikapıda şudur. Kelimeler çeşitli alanlarda çok farklı anlamlara gelebilmektedir.  Sadece eş anlamlı kelimeler için olan bir durum değil bu.  Mesela bir başkent ismi turizm ile ilgili metinlerde doğal güzellikleri mesire yerleri felanla geçerken. Uluslar arası politika yazılarında o ülkeyi ifade eden özne olarak kullanılabilir.  Böyle durumlarda o kelimenin anlamını yeterince gösterebilen vekötre ulaşamayabiliriz. Bu tip problemlemin kısmen çözümü uygulamanıza has derlem oluşturmak ve eğitimi o derlem üzerinde yapmaktır.

Türkçe için deneme yapmamıza uygun bir derlem buluyoruz. Derlem konusunda eskiden beri çalışmalarıyla bilinen  Ahmet Aksoy 'un  çalışmasını kullanacağız. Bu derlemi Kaggle  da veri kümelerinin yayınlandığı kısımda yayınlamışlar.

www.kaggle.com/ahmetax/hury-dataset

Bizde ordan indirip FastText GUI ile eğitim  yapacağız. Bu derlemde Hürriyet gazetesinden çekilmiş haberler cümlelerine ayrılmış, noktalama işaretleri sayılar ve etkisiz kelimeler - stop words - çıkarılmış. Devam etmeden "stop words" kavramından bahsedelim. Kavram olarak anlamı cümle içlerinde kaldırıldığında anlamı değiştirmeyen kelimeler diyebiliriz.  Değişik tercümelerine denk gelmek mümkün ; gereksiz kelimeler, dolgu kelimeler, etkisiz kelimeler vs ...

Evet elimizde temizlenmiş hazır dermlem var biz bu derlem ile FastText GUI ile gözetimsiz eğitimler yapıp kelime vektörleri oluşturacağız. Elbette  fasttext i komut satırında kullanarak yada python paketindeki fonksiyonlarlada eğitimler yapabilirsiniz. GUI için çalıştıralbilir paket oluşturduk onu da kullanabilirsiniz.

İki ana eğitim metodu var skipgram ve cbow bir her ikisi içinde 100 lük vektörler üretecek şekilde eğitimler yaptık.  Ek olarak fasttext 'in klasik wor2vect in gelişmişi olduğunu söylemiştik.  Başlıca üstünleklerinden biriside kelimeyi harf ngramlar olarakda tutabiliyor olmasıdır. Bu konuyla ilgili eğitimde seçeneklerimiz var. harf ngram kullansın / kullanmasın diye de 2 seçenekli ilave eğitim yaptık. Toplam da 4  eğitim oldu.

GUI kullanımından bahsedelim biraz



Sol en üstte "Command"  kısmındaki açılır listede  4 seçenek var
"skipgram" ve "cbow" gözetimsiz eğitim için kullaınacak seçenekler dir. 
"supervised" seçeneği gözetim li eğitim için
"test" de gözetimli eğitimi yapılmış modeli bir veri seti üzerinde çalıştırıp sonuçları görmek için.

Üstte Ortada "Run Mode" var. burda 2 seçeneğimiz var
"slient" da fasttext arkaplanda  ekrana çıktı vermeyecek şekilde çalıştırılır ve sonuçlar işlem bittiğinde GUI de ekranda gösterilir.
"std output" seçeneğini seçtiğinizde fasttext çalışıtırılır ve komut satırı penceresinde çalışmasını ve yazdıklarını görebilirsiniz. fakat işlem bittiğinde yaptıkları GUI ekranına gelmez.

Harf ngram seçeneğini belirleyen kısım ise altta ortadaki "min char ngram" ve "max char n gram " seçenekleri her ikisinide 0 yaptığınızda harf ngram kullanmayarak eğitimi yapacakdır.
"learning rate" seçeneği başlangıç öğrenme hızıdır. Yapay öğrenme metodlarının çoğundaki anlamda kullanılır en büyük değer 1.0 dır fakat çok büyük olursa  hata  - loss - değeri küçülmek yerine büyümeye başlıyor ve sonra program çakılıyor. ona dikkat edin
"epoch" ise yine eğitim iterasyonunun ne kadar fazla yapılacağına dair bir parametre, Ne kadar büyük verirseniz o kadar uzun süre çalışır.
"word ngram"  için seçenek var. Bir dışında bir seçenekle kelime ngram yapısını kullanmış olursunuz.
"word vector Dimension"  seçeneği kelime için üretilecek vektör büyüklüğünü belirler.


Eğer eğitimi "slient" yaptıysanız eğitim süresince loss değerinin değişimini gösteren bir grafikde çizdiriyoruz gui altta



FastText kendi içinde multi thread bir yapıda olduğundan çalışırken mesaj almakda epey problem yaşadım. Halada tam çözümü olmayan bir sürü kısmı vardır. Ama yinede komut satırı açıp uzun uzun parametereleri yazmayla uğraşmak zorunda kalmıyorsunuz.

 Gelelim sonuçlara. Yukarda belirttiğim gibi 4 eğitim yapıtık.  hepsinde 100 lük vektör oluşturduk.
  1. skipgram + subwords ( char ngram ( 3 - 6) )
  2. skipgram  sadece kelime bazlı
  3. cbow + subwords ( char ngram ( 3 - 6) )
  4. cbow  sadece kelime bazlı



sonuçları nasıl görselleştirebiliriz derseniz kelime vektörlerini  iki boyuta PCA  indirip grafik olarak gösterebiliyoruz. Mesela İlk eğitim sonucu elde edilen vektörlerden rast gele seçilmiş 250 kelime için şöyle bir grafik çıkıyor.



 Bazen ilginç bağlantılar görülsede bu şekilde çoğu yerinde karman karışık bir yapı çıkıyor.  Bizim anlamca ilgisini bildiğimiz kelimelerden oluşturduğumuz bir listeyi aynı şekilde görselleştirerek bakıyoruz.



Burda gayet  şık bir anlamca uygun bir dağılım görüyoruz. altın, gümüş, elmas, zümrüt, platin gibi değerli maden ve metaller sağ üstte toplanmış. Sol üst tarafa doğru ise toplanan kelimeler ise ; Terör, terörist, cinayet, tecavüz, katil, katiller, pkk, deaş,  gibi kelimeler. Hatta "terörizst " diye bir kelime bile var. Biz bu kelimeyi mahsus koyduk aslında böyle bir kelime yok. Ama bu eğitimde harf bazlı ngram kullanıldığından bu kelimenin vektörünü doğru konumlandırabilmiş. Diğer kelimeleride inceleyin benzeri yakınlıklarda konumlandıklarını görebilirsiniz.

Hemen 2. eğitim sonucuna bakıyoruz



burda diğer kelimelerde yine mantıklı ve benzeri sonuçlar görürken  "terörizst " kelimesinin nisbeten olması gereken yerde uzukta ortaya çıktığını görüyoruz. Buda harf bazlı ngramın faydası diyelim.

3. eğitim cbow + subwords sonuç grafiği




4. eğitim cbow kelime bazlı sonuç grafiği


Eğitim sonrası ulaşılan hata değerleride yazalım
  1. skipgram + subwords ( char ngram ( 3 - 6) )  --  Loss : 0.990
  2. skipgram  sadece kelime bazlı --  Loss : 0.961
  3. cbow + subwords ( char ngram ( 3 - 6) ) --  Loss : 1.480
  4. cbow  sadece kelime bazlı --  Loss : 1.352
Evet epey uzun da ols bir yazının daha sonuna geldik. Her türlü görüş ve önerilerinizi bekleriz.

Pazar, Eylül 15, 2019

Python dan EXE ye çevirmek...


C/C++ ile programlamaya başlayan biri olarak Python ile program yazmak oldukça zahmetsiz geliyor. Bir kütüphane kurmak çoğu zaman komut satırında bir "pip"  yazmayla halloluyor. Keza kodun içerisinde de bir "import" ile kurulmuş kütüphaneyi kullanmaya başlıyabiliyorsunuz.

C/C++ da olsa bir kütüphaneyi kurmak için ya o kütüphaneyi derlemeniz gerekiyor ya da kullandığınız derleyiciyle derlenmiş kütüphaneyi bulmanız gerekiyor. Keza yazdığınız kodda kütüphaneyi çağırabilmek içinde bir sürü formaliteyi halletmiş olmanız lazım. Bu konu çok sorulduğundan hakkında  Kütüphane kullanımı diye yazı bile yazmıştık. Bütün bunların üstüne programınızı derleyip çalıştırmışsanız. Çalıştırılabilir halini kolayca başkalarıyla paylaşabiliyordunuz. Yanına eğer gerekiyorsa kullanılan dinamik kütüphaneleri -DLL- koyarak elbette.

Pythonda bu imkan kolay değil. Kodu verebilirsiniz elbette ama insanlar sadece kullanmak istiyorsa bile mecburen python ve gereken paketleri kurmaları bekleniyor. Helede kullanıcının programlamayla ilgisi yoksa bu seçenek tümden zor oluyor. Yada python dosyalarından çalıştırılabilir dosya çevrimi yapan bir uygulama kullanacaksınız. Bundan önceki 3 yazımızda FastText ve onun için yazdığımız GUI programından bahsettik. GUI programının kullanımını kolaylaştırmak adına bizde exe formatına çevirelim dedik. Ve kolları sıvadık

Python kodlarını çalıştırılabilir hale getirmek için değişik projeler oluşturulmuş benim görebildiklerimi listeleyim 
Uzun boylu bir inceleme yapmadık. Kabaca bir araştırma sonrası biz PyInstaller kullanmaya karar verdik.  Birileri oturup incleyip karşılaştırma yaparsa bizde seviniriz. Çalışmaların çoğunun yaptığı aslında çevrilmesi için belirlenen python dosyasından o dosyada kullanılan paketleri tespit edip sonra ilgili dönüşümleri yapmasıyla oluyor. Elebette zor bir işlem helede kurulmuş paket sayınız çoksa. Burda önerim yeni bir ortam - virtual environment - kurmanız.  Benim bilgisayarımda Anaconda verisyonu var.  conda komutuyla hemde python versiyonu seçerek oratm kurabiliyorsunuz

conda create -n pvinst python=2.7

komutuyla pvinst isimli bir ortam kurduk. Bu ortamı activate komutuyla aktif edip içine sadece fasttextgui için lazım olan paketleri kuruyoruz.
artık pyinstaller komutunu kullanabiliriz. genel hali şöyle
usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME]
                   [--add-data ]
                   [--add-binary ] [-p DIR]
                   [--hidden-import MODULENAME]
                   [--additional-hooks-dir HOOKSPATH]
                   [--runtime-hook RUNTIME_HOOKS] [--exclude-module EXCLUDES]
                   [--key KEY] [-d {all,imports,bootloader,noarchive}] [-s]
                   [--noupx] [--upx-exclude FILE] [-c] [-w]
                   [-i ]
                   [--version-file FILE] [-m ] [-r RESOURCE]
                   [--uac-admin] [--uac-uiaccess] [--win-private-assemblies]
                   [--win-no-prefer-redirects]
                   [--osx-bundle-identifier BUNDLE_IDENTIFIER]
                   [--runtime-tmpdir PATH] [--bootloader-ignore-signals]
                   [--distpath DIR] [--workpath WORKPATH] [-y]
                   [--upx-dir UPX_DIR] [-a] [--clean] [--log-level LEVEL]
                   scriptname [scriptname ...]
                  
biz öyle teferruata felan girmeden

pyinstaller fasttext_gui_main.py --clean


diye yazıyoruz ve gereken dosyalar oluşturuluyor. Elbette sonucu denemeniz ve gereken ilave dosyalarıda toplamanız gerekiyor.

GUI içinde düğmelerde kullanılan görüntü dosayalarını diziniyle birlikte ilgili dizine atıyoruz
GUI programı aslında arkaplanda alt işlem olarak fasttext.exe yi çalışıtırıyor. fasttext.exe de bazı DLL dosyalarına ihtiyaç uduryor onlarıda ekliyoruz.
Her nedence pygal ın css ile kısmında bütün  herşey ilgili dizine aktarılmamış. O dosyalarıda ekliyoruz.
artık elimizde çalıştırılabilir FastText GUI var  hayırlı olsun

Indirmek için github hesabının release sayfasına buyrunuz

bu sayfadaki daki fasttext_gui_main.7z isimli  sıkıştırılmış dosyayı indirip açın "fasttext_gui_main.exe" dosyasını çalıştırın

Her türlü görüş ve öneriliriniz bekleriz. Eğer kısmet olursa FastText yazılarımıza kelime vektörleri ile ilgili  konularda devam edeceğiz

Cumartesi, Ağustos 31, 2019

FastText ile hızlı metin sınıflandırma - 3

Bir önceki yazımızda veri kümemimiz ile FastTextGUI kullanarak eğitim işlemini yapmıştık. Eğitim sonucunda uzantısı .bin  olan bir models dosyası oluşturuldu. Bu yazımızda eğittiğmiz modeli nasıl kullanacağımızı göreceğiz.

Eğtilmiş modeli kullanmanın iki yolu var. Birincisi FastText in komut satırı çalıştırılabilir programını kullanarak. İkinci yolu FastText i python kütüphanesi olarak yükleyerek.

İlkinden başlıyalım. FastText programının kullanım parametrelerine bakalım


Bu seçeneklerden  tahmin için "predict" yada "predict-prob" sçeneğini kullanabiliriz. aralarındaki fark ikincisinde tahmin ile birlikte tahin kesinlik ihtimalinide veriyor.  Tahmin yapılmasını istediğiniz metinleri her biri bir satır olacak şekilde bir metin dosyasına kaydetmemiz gerekmekdedir. Her tahmin için geçici bir metin dosyası yazdırıp FastText programıyla çalıştırmamız gerekiyor. Bu işlem için bir fonksiyon yazdık


Kullanım için test için hazırladığımız dosyayı yüklüyoruz. Burdaki gerçek sonuçları da ayırıp sorgumuz yapıyoruz sonuçlarıda gerçek sonuçlarla karşılaştırmak için sckit-learn kütüphanesinin , confusion_matrix, classification_report  fonksiyonlarını kullanıyoruz.
confusion_matrix : Karşılaştırma matrisi  tahmin edilen ile gerçek değerelri karşılaştırmanıza yarar matrisin bir ekseni gerçek değerler diğer ekseni tahmin edilen değerleri gösterir.

 her satır gerçek değerleri gösterir her sutunda tahminleri gösteriyor. Eğer modelimiz %100 başarılı olsaydı satır ve sutun indeksi aynı olan yerlerde her sını için örnek sayısı olan 5 bin dğerini göremiz gerekirdi.  Örnek vermek gerekirse ilk sınıfımız olan Şirket sınıfındaki  5 bin örnekden 4767 tanesi Doğru tahmin edilmiş. 39 tanesi  2. sınıf olan Eğitim kurumu olarak Yanlış tahmin edilmiş.
Bir güzelliğide bir birine karıştırılan sınıfların kolaylıkla görülebilmesidir.

classification_report : fonksiyonu ise  sınıf bazında recall: duyarlılık , precision: kesinlik ve bu ikisinin karışımı bir ölçüt olan f1 skorlarını hesaplayıp listler. Adıyla müsemma Sınıflandırıcı raporu düzenler



 İkinci metodumuz FastText python pakedini yüklemek. Tahmin edebilecğiniz gibi
pip install fasttext


şeklinde yapıyorsunuz. 

import fasttext
 model = fasttext.load_model('models/dbpedia_1.bin')

ile yüklüyoruz
tahmin için sorgu listemizi bir yere kaydetmemize gerek yok artık direk çağırıyoruz
model.predict(qlist)
sonuçları yine ilk örneğimizdeki gibi hesaplattırıyoruz. Aşağı yukarı aynı sonuçlara ulaşıyoruz. Toplamda  98.3 lük başarı değerine ulaşıyor modelimiz. Eğitim aşamasına geri dönüp değişik parametre ayarlarıyla daha iyi sonuçlara ulaşmaya çalışabilirsiniz. Yada ilk aşamaya dönüp Veri kümesi üzerinde değişik ön işlemeler yapıp sonuçlar üzerindeki etkisini gözlemleyebilirisiz . gerisi size kalmış

 FastText hakındaki bu seri yazımızı bitiriyoruz.  Üç yazı boyunca yaptıklarımızı github hesabımızdan paylaşıyoruz.  Kimbilir belki taş üstüne taş koyan çıkar.

Bu yazımızdaki kullanım ile ilgili kodlar,  "example"  dizininde "evaluation_with_executable" ve  "evaluation_with_python_binding" isimli ipython dosyalar olarak bulunuyor.
Veri kümesini FastText 'in kullandığı şekle çeviren kod  yine "example" dizininde "prepare_data" isminde

FastTextGUI nin kodlarına ise gui dizinin içinde ulaşabilirsiniz

Projenin github adressi ;

  https://github.com/birolkuyumcu/fasttext_gui
 Her türlü görüş ve önerilerinizi bekleriz.

Cuma, Ağustos 30, 2019

FastText ile hızlı metin sınıflandırma - 2

Metin sınıflandırma için öncelikle bir veri seti bulmamız gerekiyor biz bu yazımız için dbpedia veri kümesini kullanacağız. Sizde uygulama istiyorsanız aşağıdaki linkden indirebilirsiniz


Veri Kümesinin açıklamasını okuyoruz.
...
The DBpedia ontology classification dataset is constructed by picking 14 non-overlapping classes from DBpedia 2014. They are listed in classes.txt. From each of thse 14 ontology classes, we randomly choose 40,000 training samples and 5,000 testing samples. Therefore, the total size of the training dataset is 560,000 and testing dataset 70,000.
...
Yani DBpedia 2014 den çekilmiş  14 değişik sınıfa ait yazılar başlık + içerik olarak toplanmış.  Her sınıf için eğitimde 40 bin  test veri seti için 5 bin örnek kaydedilmiş. DBpedia  wikipedia da üretilmiş içeriklerin yapısal bir şekilde derlenip torpalanmış halidir diyelim. DBpedia hakkında daha fazla bilgi için sitesine gidebilirsiniz. Belkide size lazım olan veri kümesini bu şekilde temin edebilirsiniz...


Açıklamanın tamamını veri kümesini indirip açtığınızda "readme" belgesinden okuyabilirsiniz

veri kümemiz sıkıştırılmış dosya olarak geliyor bulunduğumuz dizine açınca  "dbpedia_csv" isimli bir dizine açılıyor

Sınıf isimlerimizi okuyoruz



Şirket , eğitim kurumu, vs diye başlayan 14 başlık var. Başlıkları ayrı yazmışlar çünkü veri kümelerinde  yani "dbpedia_csv/train.csv" ve "dbpedia_csv/test.csv" de sınıf isimleri 1 den başlayan sayı olarak yazılmış



FastText eğitim için veri kümesinin bir metin dosyası halinde verilmesini istiyor. İstediği Format ise  her satırda bir veri birimi  başta  "__label__" a hangi sınıf sa onu yazıyoruz sonrasında boşluk ve  virgül  ile ayrıp satırın devamında  o sınıfa ait bir metin yazıyoruz.  Bizim metin kısmı başlık ve açıklamda olarak iki parçalı geldiğinden birleştiriyoruz.  Etiket olarak yukarıda okuduğumuz sınıf isimlerini kullanıyoruz. Metin verisinde yaptığımız tek işlem ise küçük harfe çevirmek. Veriler sıralı şekilde verilmiş, bizde karışmadan aynı şekilde FastTextin istediği formata çevirip yazıyoruz



aynı işlemi test verisi içinde yapıyoruz.


Evet artık 'dbpedia.train' ve 'dbpedia.test' diye 2 dosyamız oldu içine bakıyoruz



Bu aşamadan sonra sıra geliyor FastText'e.  İki şekilde kullanmak mümkün FastText'i derleyip komut satırından çağırmak , yada Python paketi olarak kurup onu kullanmak. FastText ilk çıktığında python paketi yoktu ve bizde bu eğitim işinde parametere ayarlarını kolay yapabilmek için bir GUI yazdık. Ve halende kullanıyoruz. Fakat malesef kod python2 de kaldı python3 e taşımaya fırsat ve gerek bulamadık daha kullanmak için python2 , pyside , pygal, paketleri gerekiyor. 
Görünümü şu şekilde ;



FastText i kullandığından kelime vektörü  hesabı içinde kullanılabilir elbette ama bizim şu anki önreğimiz metin sınıflandırma olduğundan command kısmında "supervised" seçeneğine ayarlıyoruz. TextFile kısmına eğitim veri kümemiz için hazırladığımız dosyayı seçiyoruz.   
Model File kısmında Eğitim sonrası eğitilen modelin ismini belirliyorsunuz. 
Sağ üstteki Play tuşu ile eğitimi başlatabiliyorsunuz. En sağdaki Dur işaretide durdurmak için
Altta Learning Rate  ile başlangıç öğrenme hızını belirliyorsunuz
Epoch Diğer makina öğrenme metodlarından bildiğiniz gibi eğitim kaç adım yapılacağı
En az kaç defa geçen kelimenin alınacağı, karekter ngramlarında hangi aralığın kullanılacağı, kelime ngramı kaçlık kullanılacağı vs gibi pek çok seçenek var. Ayarlı seçenekler ile başlayıp denemeler yapmak gerekiyor.

Eğitim bitince eğitim veri kümesinin ismi aynı uzantısı .test olan bir dosya varsa eğitilmiş model ile bu test dosyası çalıştırılıp sonuçda veriyor







Resimden de göreceğiniz üzere
  • precision: kesinlik    0.983
  • recall: duyarlılık   0.983
değerlerine ulaşttık ki gayet güzel sonuçlar

Eğitim sonunda  Loss  değerinin düşüşünüde grafik olarak alabiliyorsunuz.




Eğitim sonucunda uzantısı bizim belirlediğimiz isimde
uzantısı .bin  olarak model dosyası
uzantısı .vec  olarak kelime vektörelrinin tutulduğu dosya oluşturulur
FastTextGUI de bunlara ilaveten
uzantısı .log olan eğitim serencamını tutan dosya
uzantısı .svg olan  loss düşüş grafiğinin dosyasını oluşturur.


Eğittiğimiz modeli kullanmak için sadce uzantısı .bin olan dosya yeterli olmaktadır.

Eğittiğimiz modelin kullanımını bir sonraki yazımıza bırakıyoruz.  Yazı dizimiz bittiğinde bütün kodlar yayınlanacaktır.

Her türlü görüş ve önerilerinizi bekleriz.

Perşembe, Ağustos 29, 2019

FastText ile hızlı metin sınıflandırma - 1

 

 

 Girizgah :

Önce bu konuya nerden girdik ondan bahsetmek istiyorum. Blogda duyuru şeklinde yazmamış olsamda Linkedin hesabımdan beni takip edenler biliyor ki artık bir dökümcü değilim. 2016 yılı Temmuz ayın dan beri Sefamerve.com un ArGe kısmında çalışmaktayız. Bu yılın başından beride bölümümüz ArGe merkezi statüsüne kavuştu. "Bir dökümcü ve bir simitçiyle"  başlayan macera bizi nerelere götürecek ? Kısmetimizde ne tür vavlar çizmek var göreceğiz bakalım...

2017 yılında metin sınıflandırma ile ilgili bir ihtiyacımız oldu. Bu konu daha öncesinda tecrübemizin olmadığı bir alandı.  Hızlıca bu problemi nası çözeriz diye araştırır ken FastText'e ulaştık. Çokda beğendik. O zamanlar sadece komut satırından program olarak çalışan hali yayınlanmıştı. Kullanımını kolaylaştırmak için üzerine çala kalem bir GUI yazdık ve kendi işlerimizde kullandık.

FastText i kullanarak makale çalışmasıda yaptık. Deniz Kılınç hocamızın yayınladığı TTC-3600 veri seti üzerinde bir uygulama yaptık. Bu konuda Deniz hocamızın zaten öncesinde yaptığı çalışmalarda vardı. Makalede ismi geçmiyor olsada emekleri büyüktür, teşekkür ederiz. Bu makaleyi biz Japonyada Tokushima üniversitesinde düzenlenen NLPIR 2019 konferansına yolladık ve kabul aldık. Yakın zamanda da makalemiz  ACM (Association for Computing Machinery) Digital Library altında  yayınlandı.

"An automated new approach in fast text classification (fastText): A case study for Turkish text classification without pre-processing"

FastText:

Uzunca girizgahdan sonra esas konumuza dönüyoruz.  Elimizde pek çok Yapay Öğrenme  - Makine Öğrenmesi - algoritması var. Fakat Bu metodların hepsi sayılar üzerinde çalışıyor. Doğal Dil İşleme üzerinde ki ana problem de burda başlıyor. Metin verisini nasıl sayısallaştırabiliriz ?  Kelime bazlı, harf bazlı yada bunların gurupları -ngram-  şeklinde yaklaşımlar olmuştur.  Kategorik dönüşüm şeklinde ilk akla sistemdir. Kelime sayısının çok büyük olmasıyla devasa vektör uzunluklarıyla sonuçlanabilir.

Sonra Kelime vektörü - word2vec - denen bir kavram çıkmış ortaya.  Her kelime için sabit uzunlukta bir vektör kullanmak. "Birlikte geçen kelimeler anlamca yakındır" var sayımından yola çıkılıyor.  Başlangıçda aynı yapay sinir ağlarındaki gibi kelimeler için rastgele seçilmiş vektör değerleri atanıyor. Devasa derlem - corpus - kullanarak danışmansız şekilde - unsupervised - her kelime için birlikte geçtiği kelimelere göre bu vektörler güncelleniyor. Bu öğrenme sürecinin iki ana şekli var. CBOW ve skipgram 

bu iki yapının şematik gösterimi şöyle




cbow da  hedef kelime vektörüne  o kelimenin etrafında geçen kelimelerin vektörlerinin toplamıyla ulaşılmaya çalışıyor ve bu hedef doğrultusunda vektörler güncelleniyor
skipgramda ise tersine hedef kelimeyle birlikte geçebilecek kelime yada kelime ngramlarına ulaşılmaya çalışıyor ve bu hedef doğrultusunda vektörler güncelleniyor


Bir rivayete göre cbow daha hızlı eğitilir ve  sık geçen kelimeleri daha iyi temsil eden vektörlere ulaşabilir. Skipgram  eğitim veriniz az da olsa iyi çalışır, nadir geçen kelimeleri bile yeterince iyi temsil edebilecek vektörlere ulaşabilir.

Eğitim sonucunda vektör uzayında benzer anlamlara gelen kelimeler yakın yerlerde kümelendiği gibi
kelime vektörleri uzayında yapılan işlemler de anlammı sonuçlar verebilmektedir. Meşhur örnekler


Erkek kelimesinin vektöründen Kral keliimesinin vektörünü çıkarıp Kadın kelimesini ilave edine ulaştığımız vektörel değer Kraliçe kelimesinin vektörel kaşılığına ulaşıyor



yada ülkeler ve başkentleri arasında  böyle bir vektörel ilişki görülebiliyor. 

Kelimelerin bu tür anlamsal bağ  içeren vektörel dönüşümleri elbette doğal dil işleme için elbette çok önemlidir.

Word2vect metodu  2013 yılında googleda  Mikolov un liderlik ettiği bir gurup tarafından yapılmıştır. Sonrasında Mikolov  Facebook a geçmiş ve FastText bir anlamda bu metodun daha gelişkin halidir.
Temel üstünlüğü kelimeleri  harf engramları olarakda görebilmesinden gelmektedir. Halen geliştirilmeye devam edilmektedir. FastText in detayları için aşağıdaki makaleleri incelemenizi tavsiye ederiz.


Epeyde teoriden bahsetmişiz gelelim pratiğe.  FastText in "supervised" kısmıyla çok başarılı Metin sınıflandırma işleri yapabiliyorsunuz.  Hemde küçük harfe dönüştürmek dışında hiç bir ön işlem yapmadan mümkün oluyor. GPU istemiyor. GPU nuz olsa bile RNN bazlı sistemlere göre çok çok çok daha hızlı eğitiliyor.

Bu yazıy burada noktalayalım bir sonraki yazımızda örnek  uygulama yapacağız. Her türlü görüş ve önerilerinizi bekleriz.

Salı, Temmuz 02, 2019

Sahibinden Üçkağıtçı Proje




- Abi biz sizi takip ediyoruz, bizim bir projemiz var ortaklaşa yapalım diye rahatsız ediyoruz

- Yapalım tabi kardeş, Nedir projeniz

- Abi projemiz "Görüntü işleme bazlı Yapay Zekalı !  Bahçe rekolte tahmini"

- Yani ne bekliyorsunuz kafanızda ne var ?

- Abi Şimdi malum artık her cepte telefon var. Cep telefonundan Ağaçların fotoğraflarını çekecekler. Bu fotoğraflara göre bizim uygulama bu bahçeden şu kadar ürün çıkar diye tahmin yapacak. Nasıl süper fikir ama değilmi abi ?

- Dabi Dabi süper fikirmiş. Peki kardeş bu fotoğrafların çekimlerini nasıl standartlaştıracaksınız.

- Ne  standardı abi öyle şey mi olur. Alacak vatandaşın biri çekecek. Sistem artık kendisi eline ne gelirse oradan karar verecek.

- Peki proje esas sahibi kim  ?

- Abi büyük şirketler varmış bahçeleri toptan alıyorlarmış, Bizim bir arkadaşın "pek bir yakın tandığı !"  böyle bir şirketlerde çalışıyormuş.  O diyor "yapın projeyi paraya para demezsiniz."

- Anladım baştan size para verecek kişi de yok yani

- Evet abi de ne olacak sanki sen yazarsın görüntü işlemeli ve YZ lı kısımları bizde üzerine bir GUI patlatırız. Oldu bitti işte.

- Peki kardeş verileri nereden alacaksınız. ?

- Yine bizim bir arkadaşın  "pek bir yakın tandığı !" nın tanıdığı bahçe sahipleri varmış. Oralardan çekeriz abi

- Kardeş benim anladığım aslında elinizde para yok , veri de yok, verinin düzgünce çekilebileceği imkanda yok ve  hazır müşteride yok.

- Proje var ya işte abi, sen varsın, biz varız

- Dabi canım, ama unuttun sen  ben yazmış olayım  arkadaşın "pek bir yakın tandığı !" da var

- Sen işleri niye böyle yokuşa sürüyorsun abi, biraz olumlu baksana

- Senin bakdığın gibi kolay bir problem değil bu. Şak diye çözüm bekleyemezsin. Helde giriş verisinin standart bir yapısı olmadığında. Aynı ağacı çok değişik şekillerde çekebilirsin mesela bundan düzgün bir sonuç çıkarabilmek pek mümkün olmaz.

- Ya abi ya okuyoruz hep;
Doktordan daha iyi  teşhis koyan,
İnsandan daha iyi resim tanıyan
İnsandan daha iyi ses tanıyan,
...
çalışmalar var yalan mı bunlar

- Yalan değilde sana aktarıldığı gibi abartılı da değil

- Bir orta yol bulalım abi

- Bak güzel kardeşim tamam anladım ki anlatamayacağım vaz geçiyorum. Sana çok kestirme  bir çözüm sunacağım

- Dinliyorum abi

- Geçmiş yılların hasılatlarını alabilirmisin ?

- Alırız tabi abi

- Şimdi sen bir Cep telefonu uygulaması yapıyorsun

- Evet

- Bu uygulamada ağaç fotoğraflarını çekecekler

- Geçmiş yılların hasılatlarından ve ağaç sayısından  ağaç başına yıllık hasılat miktarlarını gösteren bir zaman serisi oluşturacaksın

- Evet abi

- Sonra bu bu serinin ortalamasını ve standart sapmasını bulacaksın

- Eee abi

- Formülü yazıyorum bak yaz bir kenara
Hasılat  =  Ortalama_Hasılat  +  Random()  * Hasılat_Standart_Sapması

Uygulamada her ağaç fotoğraf geldikçe  bu formülle bir hasılat miktarı hesaplar ve sonuda da hepsini toplarsın bi zahmet.

- Eee abi Görüntü işleme ve yapay zeka neresinde bunun

- Elbette reklamında kardeş

- Süpermiş abi ben hemen çalışmalara ! başlayayım.  Peki sen ne isteyeceksin proje için abi

- Ben bir şey istemiyorum  al sana SAHİBİNDEN ÜÇ KAĞITÇI PROJE hayrını gör.

- Abi peki ucundan kıyısından  Yapay Zeka felan da sokuştursak iyi olurdu

- Şimdi böyle başlayında İlla soran olursa, sonra resimleri az meyveli çok meyveli diye etiketlersen rastgele sayıyı ona göre ayarlarız.

- Süper olur abi biz bununla hemide Innovasyon ödülü  bilem alırız

- Alırsınız elbette neyiniz eksik...

Pazartesi, Ekim 08, 2018

DeepCon'18 payment anomaly workshop

DeepCon'18 geçtiğimiz cuma ve cumartesi günü yapıldı. Yoğun bir katılım vardı. Emeği geçen herkese burdan teşekkür etmek isteriz. Pek çok konu konuşuldu. Bence çok daha önemlisi ilgili insanlar bir araya geldi. İletişim pek çok zaman gelişmedeki temel motor işlevini görür. İnsanların bir şeyler yapma ve öğrenme gayretini görmek, Yada yaptıklarınızın takip edildiğini öğrenmek gayretinizin artmasına vesile oluyor.

SefaMerve.com ArGe Merkezinin çalışmalarından bahsettiğimiz, "Eticarette yapay Zeka Uygulamaları" başlıklı  bir sunumumuz oldu. Sunumu Cüneyt bey yaptı. Sunumun ilk kısmında "Payment Anomaly" başlıklı bir kısım sonrasında genel yapılanlar anlatıldı. Ben burada İlk kısım için biraz daha teferruatlı bir açıklma yazmak istiyorum. İnşallah birilerine Faydalı olur.

Bir E-Ticaret firmasının helede Uluslararası satışı varsa pek çok kaynakdan ve çeşitli kurlarda tahsilat yapması gerekmektedir. Pek çok banka, değişik ödeme türleri ( paypal, paybyme vs... ) gibi Değişik ülkelerde çalışmaktadır. Yani sistemin sağlıklı yürüyebilmesi için pek çok tahsilat sisteminide sağlıklı yürüyor olması lazımdır.

Biz tahsilat sistemindeki olası anormalliklerin tespiti için, her türdeki alt sistem için yapılan saatlik tahsilatların toplamlarını bir zaman serisine dönüştürdük. Sonra 24 saatlik veri ile 25. saat deki değeri tahmin edecek bir model kurduk.  Tahmin ve gerçek değer arasındaki belli eşik edeğerinden fazla farklılık ve bu farklılığın belli saat boyunca devam etmesinin bir anomaly olacağını varsaydık.




Çalışmamız bu anlamda klasik bir zaman serisi tahmini modeline benzetilebilir. Bir kaç özelliği var ; çok girişli, çembersel normalizsayon, gurup normalizasyonu.

Circular Normalization:

Genelde İnsan davranışları için elebtte burda bizim ana ilgimiz olan satın alma için  zamanın önemi büyük. Zamanın dönügüleri var.  Gün içinde bazı saatlerde satışlar artarken bazı saatlerde çok düşe biliyor. Haftanın günlerine görede bu değişimi gözlemleye biliriz, hafta içi ile hafta sonu davranış farkları olması gibi. Normalde bu döngüsel zaman değerlerinin girişi klasik kategorik veri gibi yapılmaktadır. yani mesela haftanın günleri için.
Pazartesi : 0 0 0 0 0 0 1
Salı         : 0 0 0 0 0 1 0
 ...
Pazar      : 1 0 0 0 0 0 0
 gibi Bu durumda her bir günün bir birine uzaklığı eşit olmaktadır.  Oysa Cumartesi gününün Pazar gününe uzaklığı ile Çarşamba gününe uzaklığı farklıdır.


Biz bu tip döngüsel kategorik değişkenler için Birim çember üzerinde eşit aralıklı  noktalar olarak Normalize etmeyi kullandık. Üstteki grafikde olduğu gibi.  Pazar Günü pazartesi ve Cumartesi gününe yakındır.  Bu şekilde bir dönüşümün bir faydasıda girdi büyüklüğünün küçülmesidir. Kasik metodla kodladığımızda 7 lik vektör olarak kodlayabilirken. Çembersel  Normalizasyonla 2 lik vektöre dönüştürmüş oluyoruz. Bu sayede günün hangi saati olduğunuda 24 yerine 2 lik vektör olarak kodluyoruz. Yada Ayın hangi günü olduğunuda 31 lik vektör yerine 2 lik vektör olarak kodlamış oluyoruz. Bu tip bi kodlamanın daha önce uygulandığına dair bir bilgimiz yok. İşin akademik yönünüde klasik metodlarla karşılaştırıp teferruatlı test etme imkanımız olmadı malesef.  Tecrübi bir yöntem olarak bahsetmiş oluyoruz.

Grup Normalization :

Zaman serisinde tedrici genel - belki mevsimsel - bir değişim olabilmektedir. Zaman serisinin normalizasyonunda komple bütün serinin maksimum değerine göre yapılması bizce kısmen problem olabilir. Hele bu genel değeşim çok büyükse. Genel maksimuma göre normalizasyon yerine biz bu çalışmamızda giriş olarak aldığımız 24 saatlik gurubun maksimum değerine göre bir normalizasyon yapmayı tercih ettik.

Multiple Input Model :


Çok girişli bir ağ yapısını kullandık.  Çünkü ; Zaman serisi dışında tahmin etmememiz gereken saatin zaman döngüsünde nerede olduğunun da tahmin ile ilgili olduğunu düşündük ve onuda kattık.
İlk girdimiz zaman serisi ve 24 saatlik bir birini takip eden tahsilat değerleri  LSTM ile işleniyor.
İkinci girdimiz  Zaman ile ilgili verimiz 8 lik bir vektör . ( haftanın günü, saat, ayın günü, ay )  kalsik YSA katmanı - Dense layer -  ile işleniyor. Sonrasında bu iki kısım birleştiriliyor.



Sonuç olarak sıradışı bir anormallik tespiti yaklaşımı üzerine bir çalışma yapmış olduk. Koda ve verilere ve sunuma şağıdaki github sayfamızdan ulaşabilirsiniz

github.com/birolkuyumcu/deep_con18_payment_anomaly_workshop

Her türlü görüş ve önerilerinizi bekleriz.


Pazartesi, Eylül 10, 2018

Ses ile Kalp Atışı Sınıflandırma

Evet başlığından da anlaşılacağı üzere yine sağlık alanında bir yazımız var. Bu seferek verimizi ses olarak alıyoruz.



Verimizin kaynağı yine Kaggle 
https://www.kaggle.com/kinguistics/heartbeat-sounds

Biz kaggle dan ulaşmış olsakda asıl verinin kaynağı 2011 tarihli bir yarışmadan geliyorumuş
http://www.peterjbentley.com/heartchallenge/index.html 
İki ayrı şekilde kaydedilmiş ses dosyaları var
ilki "iStethoscope Pro" isimli bir iphone uygulaması kullanılarak kaydedilmiş sesler


Kalanlar  "DigiScope" marka bir dijital steteskop ile alınmış



Ses dosyalarının uzunlukları farklı tahmin edeceğiniz gibi ses dosyalarının çoğuda Normal seslerden oluşuyor.
Önce ses dosyalarımızı test ve eğitim olarak iki guruba ayırıyoruz.
Eğitim %80
Test %20

 Bu ayrımdan sonra ses dosyalarımızı 0.5 saniyelik kaydırmayla 2 saniyelik kısımlara bölüyoruz. ve giriş verisi olarak bunu kullanıyoruz.Yani giriş verimiz 2 saniyelik ses sinyali. Elimizdeki ses dosyalarına göre konuşursak  ( sample rate 22050 )  44100 lük vektörü giriş olarak kullanıyoruz.


Veri dosyalarımızı oluşturduktan sonra tek boyutlu evrişim katmanları kullanan bir ağ tasarladık ve bir sınıflandırıcı eğittik.

  • Opimizasyon metodu : Adam
  • Toplam parametre sayısı :  1,366,865
  • Eğitim Epoch sayısı : 29 - earlystop ile -
 Eğitim grafiği


Modelin başarısı  eğitim için kullandığımız datalarla %95 in üzerinde

Eğitim için kullanmadığımız datalarla yaptığımız  test ve sonuçlarıda şöyle gösterelim


ortalama %73 -75 arası bir başarı görünüyor.

Başarının düşük olması ve  artımamız gerektiği bir gerçek elbette. Ama sadece ham ses sinyali vererek. Bir dönüşüm -fft mel vs gibi - yapmadan bir sınıflandırıcı eğitilebilmeside zannımca çok önemli bir özellik.

Fırsat bulabilirde bu çalışmaya tekrar dönebilirmiyiz bilemiyorum ama. Bu çalışmaya devam isteyenlere ilk önce ses sinyalinde kalp atış kısımlarının ayrıştırılması sonrasında bu çalışmanın yapılmasının başarıyı oldukça yükselteceğini düşünüyoruz.

Her türlü görüş ve önerilerinizi bekleriz.