Yapay zeka ile ilgili ortaya karışık notlar ve sorular

Prof. Dr. Deniz Kılınç
7 min readJan 4, 2019

--

Problemler, notlar ve öğrenme süreci…

Bu yazıda yapay zeka ile ilgili aklımdaki “ortaya karışık” notları ve soruları ele almak istedim. Siz de katkıda bulunmak isterseniz yorum atabilirsiniz. Amaç faydalı olmaksa buyrun buradan devam edelim…

1. Yapay zeka alanı ile ilgili problemler neler?

Aslında birçok farklı problem olsa da temelde üzerinde durmamız gereken problemleri aşağıdaki gibi sıralamaya çalıştım.

Problem 1: Bilimsel alt yapıdan, matematikten ve istatistikten uzaklaşarak, script scientist (betik bilimci) kıvamında çalışmaların yapılması. Evet bu durumun motive edici olduğunu düşünenlerdenim ancak sürdürülebilir değil. Dolayısı ile ortaya çıkan projeler, ufak değişiklikler hariç birbirinin kopyası olabiliyor. Bu durumu normal karşılayabilir ve yeterki bir şeyler üretelim diyebiliriz.

Çünkü sonuca hızlı ulaşmak, insanı motive eder ve bir sonraki adım için ona enerji verir.

Kişisel olarak buna da varım. Ancak kendimize mutlaka her projede bir tane hedef belirlemeliyiz. Örneğin; bu projede mutlaka olasılık, koşullu olasılık, Bayes teoremi ve Naive Bayes sınıflandırma algoritmasının nasıl çalışacağını öğreneceğim. Ya da önümdeki 2 projede çok fazla öznitelik seçimi olacak bir problem belirleyeceğim ve bu problemde Temel Bileşen Analizi (PCA, Principle Component Analysis) mantığını, öz değer vektörlerini ve bunların sonucunda gerçekleştirilen boyut indirgeme yaklaşımını öğreneceğim. Ya da bu sefer bu projede kafaya koydum, Bilgi Kazancı hesaplamasının arkasındaki entropi mantığını yalayıp yutacağım…

Bu arada verinin yapısı, dağılımı ve algoritmaya uygunluğu ile ilgili de mutlaka teorik ve pratik altyapı birlikte irdelenmelidir. Veri dağılımınıza uygun olmayan algoritmaları denemek, istatistiğin bazı temellerini bilmiyorsanız muhtemelen yapacağınız en kolay hata olacaktır.

Problem 2: Gerçek hayat senaryoları ile eğitim alınan konuların istenilen düzeyde ötüştürülememesi ve yapılan çalışmalar ya da yapılamayan çalışmalar nedeniyle yapay zekanın bir balon olması problemi ile karşılaşılması.

Peki ne yapmamız lazım?

Düşünce biçimimizi ve olaylara bakış açımızı değiştirmemiz gerekiyor.

Olayları senaryo süreçleri ve alt süreçler halinde ele almalıyız.

Örneğin aşağıda benim de yazarı olduğum Uygulamalarla Veri Bilimi kitabının “İnsan Kaynakları” bölümünden alınmış bir senaryo mevcut. Bu senaryoyu 7 alt senaryoya ve onları da daha küçük parçalara bölebiliriz. Daha sonra her parça üzerinde detaylı çalışabiliriz.

Senaryo

Not: Dikkat ederseniz buradaki bakış açısı, çevik proje yönetimi sürecindeki, büyük bir projenin modüllerinden görevlere parçalanma şeklinin ele alınışı ile benzer kurguda… (Ya da klasik divide and conquer yaklaşımı da diyebiliriz)

Theme → Epic → Story →Task

Senaryoda ele aldığımız bir alt sürecin herhangi bir fonksiyonunun yanına + YZ koyabiliyorsanız orada mutlaka bir fayda / verimlilik yaratacağınızı iddia ediyorsunuz demektir. Bu durum göstermelik olmamalı ve sonuçlar raporlanabilmelidir. Zaten göstermelik olursa hızlı şekilde ortaya çıkar, siz de bulduğunuz ACC/FMeasure/ErrorRate ölçüt değeriyle ortada kalırsınız.

Örneğin [A1] alt senaryosunu ele alalım. Orta ve büyük ölçekli firmaların neredeyse tamamı iş başvuru süreçlerini İK siteleri üzerinden yürütmektedirler. Adaylar tüm özgeçmiş bilgilerini (eğitim, önceki iş deneyimleri, proje, teknik yetenek, yabancı dil vb.) portal üzerinden girip, kendilerine uygun olduğunu düşündükleri firma pozisyonlarına başvururlar. Her pozisyona binlerce başvurunun yapıldığını düşündüğümüzde, her başvurunun İK işe alım uzmanı tarafından tek tek açılıp detaylı olarak incelenmesi mümkün değildir.

(Aday özgeçmişi ← → Pozisyon).Eşleştir + YZ

Tam da bu noktada bir yapay zeka uygulamasının/fonksiyonunun kullanımının yaratacağı fayda apaçık ortadadır. Doğruya yakın eşleşmeyi yaparak, uygun aday listesini daraltmak ya da “gerçekten?” alakasız aday listesini elemek insan kaynakları çalışanlarına ciddi zaman kazandıracaktır. Ayrıca, firmanın benzer pozisyonlar için geçmişte aldığı personeller ve bu personellerin şu andaki durumları (ayrıldı, devam ediyor, verimli, verimsiz vb.) bilinirse ve bir yapay zeka sistemine öğretilirse, daha gerçekçi sonuçlar elde edilebilir.

Diğer bir örneği de Facebook uygulaması üzerinden verelim. Facebook arkadaşlarımızın yüzlerini otomatik etiketliyor değil mi? İlk çıktığında “wowwww” etkisi yaratan bu görüntü işleme (bilgisayarlı görü) ve yüz tanıma işini neden yaptı? Tabiki bir fayda yaratmak için… Kullanıcı açısından baktığımızdaki amaç/fayda; kullanıcı memnuniyetini arttırmaktı. Firma açısından baktığımızda ise Facebook kendisi için veri toplama ve analiz platformuna bir fonksiyon eklemiş oldu.

2. Yapay zeka öğrenmek zor mu?

Bu soruyu tek başına ve bu haliyle cevaplamak çok zor. Çünkü yapay zeka öğrenmek diye bir durum/kavram tek başına mümkün değil. Öncelikle yapay zekanın tanımına bakalım. Nedir bu yapay zeka?

Yapay zeka; insan zekasına özgü olan, algılama, öğrenme, çoğul kavramları bağlama, düşünme, fikir yürütme, sorun çözme, iletişim kurma, çıkarım yapma ve karar verme gibi yüksek bilişsel fonksiyonları veya otonom davranışları sergilemesi beklenen zeki etmenler/programlar yaratmak üzere yapılan tüm çalışmalarının toplandığı geniş bir alandır.

Yani YZ dediğimiz kavram birçok alt alandan oluşuyor…

  • Bilgisayarlı görü tanıma (görüntü işleme, tanıma)
  • Konuşma ve anlama (metinden-konuşmaya konuşmadan-metne dönüşüm)
  • Doğal dil işleme (sesbilimi, biçim bilimi, sözdizimi vs.)
  • Makine öğrenmesi
  • Robotik

Öncelikle bu alanlarla ilgili temel fikir edinilmesi gerekiyor. Daha sonra en çok merak duyduğunuz veya hali hazırda çalıştığınız ilgili alan üzerinde daha detaylı ve planlı çalışmaya başlayabilirsiniz. Başlangıç için nelere ihtiyaç var diye bakarsak:

  • Programlama bilgisi
  • Matematik ve istatistik bilgisi (en azından temelleri)
  • İş alan bilgisi (Örn: Finans, hizmet, tıp, enerji vb.)

Şu andaki yanlış yaklaşımlardan birisi, sadece programlama bilgisini belirli bir düzeye getirip (if-else biraz for değişken ne?) işe koyulmak oluyor.

Tabiki sürece sadece iş ve alan bilgisi ile başlamak da mümkün değil onu da anlıyorum. Ancak yaptığımız işin arka planındaki matematik ve istatistik de olmazsa olmazımız. Kademeli de olsa bu taraftaki eksiklerimizi gidermemiz gerekiyor.

3. Yapay zeka alanında hangi programlama dilini tercih edersiniz?

Yapay zeka alanlarında R, Python, Scala, Java gibi birçok programlama dili kullanılmaktadır. Bu dillerden Python’da biraz daha görece iyi olduğumu söyleyebilirim. R dilini ise 2 projede kullandım (metin madenciliği projeleriydi). Yorumlarım ve tecrübelerim şöyle:

Bir dili öğrenirken, ilk olarak dilin yorumlanabilir mi yoksa derlenebilir mi olduğunu bilmemiz gerekiyor.

Çünkü buna göre sağladığı esneklikler de ister istemez değişiyor. Daha sonra dilin hangi programlama paradigmalarını desteklediğini bilmek de proje geliştiren kişi için kritik bir konu (yapısal, fonksiyonel, nesneye yönelik). Bu yüzen Python’u biraz daha seviyorum. Değişkenler, ifadeler, döngüler, koşullar, operatörler, fonksiyonlar işin temelini oluşturuyor.

Daha sonra işimiz paketlerde dönmeye başlıyor.

Özellikle ortalama, standart sapma, varyans, kovaryans, korelasyon, regresyon ve veri dağılımı gibi bilgileri en doğru /basit şekilde görebileceğimiz kütüphanelere odaklanmamız gerekiyor. Eksik değerleri bulup doldurabilmeli, uç değerleri hızlıca tespit edebilmeli ve veriyi kesikli hale getirmemiz gerekiyorsa bunu da yapacak fonksiyonları basitçe kullanabilmeliyiz.

Ayrıca bu kütüphaneleri kullanarak mutlaka SQL (Structured Query Language) yazar gibi kod da yazabilmeliyiz; projection, aggregation, condition, group by, cross tab yapabilmemiz çok çok önemli. Örneğin pandas data frame buna güzel bir örnek.

Ek olarak; generic fonksiyonların desteklenmesi de oldukça kritik; örneğin lambda fonksiyonları her dil için çok önemli ayrıca apply fonksiyonu gibi bu generic altyapıyı destekleyen fonksiyonlar da oldukça kritik. Konu biraz daha uzun ama elimden geldiğince buraya sıkıştırmaya çalıştım.

4. Veri bilimi yapmak ile yazılım geliştirmek aynı mı?

Bu konuyu farklı bir boyutta (yazılım yaşam döngüsü işleyişi ve pratikleri açısından), ayrı bir yazıda da ele alacağım ancak bu yazının kapsamında da paylaşım yapmanın faydalı olacağını düşünüyorum. Öncelikle veri bilimi yapmak söylemi biraz kaba mı oldu bilemedim, pardon, isterseniz deney yapmak diyelim. Hadi bir experiment yapalım :)

Veri bilimi yapmak ve yazılım geliştirmek aynı değil…

Ortak yönleri çok olsa da her ikisinin de kendine ait farklı iş akışları ve uzmanlıkları bulunuyor. En temel kesiştikleri noktanın “program yazmak” olduğunu rahatlıkla söyleyebilirim. Unutmayalım ki program yazmadan yazmaya da fark var. Programlama dili izin vermiyorsa, en azından yapısal programlama paradigmalarındaki kavramları iyi bilmek gerekiyor.

Python gibi bir dil kullanabiliyorsanız zaten şanslısınız çünkü Nesne Yönelimli Programlama (OOP-Object Oriented Programming) paradigmasının sağladığı birçok avantajı (tekrar kullanılabilirlik, kalıtım, çok biçimlilik, kapsülleme) kullanma şansınız var. Ayrıca SOLID (Single Responsibility, Open-Close, Liskov Substitution, Interface Segregation, Dependency Inversion) tasarım prensiplerini de uygularsanız hem sizi daha çok severler hem de daha havalı görünürsünüz.

En temel fark…

Klasik yazılım geliştirme süreçlerinde bir işi yaparken hazır bir çatı üzerinde (Örneğin: .Net Core) işin altyapısını çok da bilmeden (işletim sistemi tasarımı, çok görevli çalışma, veri yapıları, TCP-IP üzerinden haberleşme, derleme-çalışma zamanı, programlama dili yapısı vb.) piyasada “maalesef” iş yapabiliyorsunuz. Ancak veri bilimi ve yapay zeka projelerinde bir kaçış yok, sektörde bir “veri bilimci” olarak çalışıyorsanız, mutlaka kullandığınız altyapının/algoritmanın teorik detayını bilmeniz gerekiyor.

5. Yapay zeka/veri bilimi projelerinde İş/Alan bilgisi ne kadar bilmeliyim?

Hem yazılım hem de veri bilimi projelerinde “Ne kadar?” sorularının sanırım en kolay ama bir yandan da o kadar doğru cevabı “Duruma bağlı (It depends)” oluyor. Tabi ilgili durumun standart ölçütleri varsa o zaman işimiz biraz daha kolay.

Deneyimlerime göre hiç kimse diğerinin ana alanı kadar uzman olamıyor çünkü arkada senelere dayanan bir emek ve bilgi birikimi var. Ayrıca iş yaşamında ve günlük koşuşturmada buna zaman ayırmak da çok mümkün değil. Veri bilimi projelerinde problemin tanımlandığı, amaçların ve hedeflerin tartışıldığı/belirlendiği toplantılarda mutlaka alandaki uzman kişinin(domain expert, subject matter expert, iş analisti vb.) sürecin içerisinde yer alması ve belirlenen amacın ve hedeflerin altına imza atması gerekiyor. Bu noktada siz de veri bilimci olarak alan/iş bilgisini edinmeye başlıyorsunuz, tabi bu arada kafanız hep veride oluyor :)

Probleminizi çözecek kadar “iş/alan bilgisi” edindiğiniz yani tatmin olduğunuz anın derecesini problemden probleme değişmekle birlikte hem sizin ekibinize/donanımınıza hem de karşı ekibin yapısına, bakış açısına ve size sunduğu verinin kalitesine bağlı.

Not: Yazıya eklemeler yapmaya devam edeceğim. Tamamlayıcı olarak Ayyüce’nin yazısını (Ayyüce Kızrak) okumanızı öneririm.

Sevgiyle kalın…

Güncelleme #1 06.01.2019

  • Soru 4 eklendi (4. Veri bilimi yapmak ile yazılım geliştirmek aynı mı?)

Güncelleme #2 06.01.2019

  • Soru 5 eklendi (5. Yapay zeka/veri bilimi projelerinde İş/Alan bilgisi ne kadar bilmeliyim?)

--

--

Prof. Dr. Deniz Kılınç

Professor at Bakırçay University, Industry experience in software engineering and data science for 23 years. Founder of https://kalybeai.com