Yüksek Lisans Tezinde Yapay Zeka Uygulaması Geliştirmek

Kemal Toprak Uçar
Deep Learning Türkiye
7 min readSep 3, 2019

Yaklaşık 1 ay önce cuma günü yaptığım savunmadan ve akabinde INFUS’ta yaptığım konferans sunumundan sonra yaklaşık 1,5 yıl içerisinde yüksek lisans tezimde karşılaştığım, keşke yapsaydım ya da iyi ki yapmışım dediğim şeyleri paylaşmak için bir blog yazısı yazmak istedim. Bu uzun süreçte karşılaştığım birkaç problem için hızlı aksiyonlar almasaydım muhtemelen başarıyla sona eren bu maceramla ilgili bu yazıyı yazmıyor olurdum.

kaynak, La Jaconde — Musée du Louvre

Multi-Class Categorization of User-Generated Content in a Domain Specific Medium: Inferring Product Specifications from E-Commerce Marketplaces başlıklı tezimizde, Doğal Dil İşleme kullanarak herhangi bir pazar yerine eklenen ürünün ismini, açıklamasını ve diğer özelliklerini kullanarak, ürünün hangi kategoride olduğuna karar veren bir mekanizma geliştirdik. Üründeki yazıdan çıkarılacak özellikler için de word2vec ve TF-IDF teknolojilerini kullandık. Projenin detayına ve tezime ulaşmak için benimle iletişim kurabilirsiniz. Ayrıca konferans bildirime de buradan ulaşabilirsiniz.

Projenin oluşturulmasından sona ermesine kadar olan adımları kafamda kronolojik olarak sıraladım ve şu şekilde bir liste ortaya çıktı;

  • Tez konusunun ve danışmanının belirlenmesi
  • Benzer konulardaki makalelerin incelenmesi
  • İlgili veri setinin oluşturulması/elde edilmesi
  • Deney ortamının kurulması
  • Kodlama ve deneylerin yapılması
  • Konferans/dergi makaleleri için araştırma yapılması
  • Sonuçların karşılaştırılması
  • Makale ve tezin yazılması

Tez Konusunun ve Danışmanın Belirlenmesi

Yeni düzenlemelerden dolayı, okula kayıt yaptırdıktan itibaren 3 yıl içerisinde tez savunmasını yapıp mezun olmak gerekiyor. Bu sebeple dersleri aldığımız son dönemde, en geç 2. yılın sonunda, aslında tez konumuzun belirlenmiş olup gerekli evrak işlerinin halledilmesi gerekiyor (Başka üniversitelerde tez hocası ve konusu ilk zamanlarda belli olabiliyor bu arada). Ben lisans tezimde Reinforcement Learning üzerine çalıştığım için, yüksek lisans tezimde daha çok Supervised Learning üzerine çalışmak istedim. Bu sebeple iyzico’dan ekip arkadaşım olan Mustafa Kıraç ve lisans dönemimde de danışmanım olan Borahan Tümer’le beraber konu üzerine beyin fırtınası yaptık ve Türkiye’deki pazar yerleri için ürün kategorizasyonunun otomatize edilmesinin güzel bir çalışma olabileceğini düşündük. Literatürü taradığımızda Türkçenin dışındaki dillerde de bu konuyla ilgili çok fazla çalışma olmadığını gördük. Bu da tez önerisi zamanı güzel haberlerden birisiydi. İyi bir literatür taraması yapmadan konuyu seçmek pek doğru olmayabilir, çünkü sizin düşündüğünüz yöntemlerle birileri aynı problemi, geçmiş zamanda çözmüş olabilir ve bunu tezinizin ortasında öğrenmek sizi biraz üzebilir.

Benzer konulardaki makalelerin incelenmesi (Literatür taraması)

Yukarıda belirttiğim gibi tez konusunu seçmek ve danışmanı belirlemek tek başına yeterli olamayabiliyor. İyi bir literatür tarama, problemin çözümünde kullanılan başka yöntemleri tanımanıza, belki de problemin başkası tarafından aynı şekilde çözülmüş olabileceğinin farkına varılmasına sebep olabilir. Ayrıca tez savunmasında, tezinizde ve makale/bildirinizde sizden detaylı olarak benzer çalışma araştırmanızı ve sonuçları da karşılaştırmanızı beklendiği için bu kısım kaçınılmaz oluyor. Anlattıklarım dışında da belki sizi 2 gün meşgul edecek bir problem, benzer makalelerin anlatıldığı çalışmalarda yaşanmış ve alınan aksiyonlar anlatılmış olabilir. (2 gün aynı problemle uğraşmanın nasıl bir duygu olduğunu eminim siz de benim kadar iyi biliyorsunuzdur)

İlgili veri setinin oluşturulması/elde edilmesi

Tez aşamamda beni en çok meşgul eden ve zorlayan kısımlardan birisi veri setinin toplanmasıydı. Diğer veri problemlerinde olduğu gibi veri seti sonucu en çok etkileyen faktörlerin başında geliyor. Veri çeşitliliğinin iyi bir şekilde sağlanamadığı durumlarda, pahalı donanımlarda çalışmak veya kompleks algoritmalar kullanmak probleme çözüm getiremiyor. Veri içerisinde çeşitliliğin olmaması, problemin ne kadar kompleks olduğuna bağlı olarak modelin öğrenememesine hatta karşılaşmaktan en çok korktuğumuz durumlardan birisi olan veri setinin ezberlenmesi diye tabir ettiğimiz overfit durumuyla bizi karşı karşıya bırakabiliyor. Bu yüzden import.io ve scale gibi veri seti sağlayan şirketler de gün geçtikçe popüler hale geliyor ve bu tür şirketlerin ileride de değerli olacağından şüphe yok.

Ben şahsen önce başka bir veri setiyle deneylerimi yapıp paralelde verileri topladıktan sonra gerçek veriyle deney yapmayı planlamıştım. Ama danışmanlarım bu konuda bana katılmayıp bütün eforumu veri seti toplamaya vermemi önermişlerdi. Yaklaşık 3–4 haftalık çalışma sonunda veri setimi toparladım. Sonradan düşündüğümde, veri setini oluşturmayı ertelemiş olsaydım, şu an bu cümleleri yazmayacağımdan emindim. Çünkü ocak-şubat civarı başka bir datayla deneylerimi bitirmiş ve şubat gibi gerçek datayla testlere başlamış olacaktım. Konferans bildirisini şubat ayının sonunda göndermem gerçeği olduğu için bu deneylerin bitmesinin imkansız olduğunu siz de az çok tahmin edersiniz.

Deney ortamının kurulması

Ben bu konuda biraz şanslıydım çünkü okulda 1 yıl boyunca çalışabileceğim 128 GB RAM ve 32 çekirdek işlemcili bir bilgisayarım vardı. Cross-Validation ve 21 etiket arasından sınıflandırma yapacak olan olan bir Gradient Boosting Machine modeli için yaklaşık olarak 70–80 gb RAM’e ihtiyaç duyuyordum. Bu sebepten ötürü, eğer kompleks bir problem üzerinde büyük bir veriyle çalışacak olan arkadaşlara proposal sürecinde donanımı da aynı şekilde düşünmelerini tavsiye ederim. Ben evdeki çalışmalarımda genel olarak Google Colab’i kullanıyorum. Colab size Jupyter Notebook üzerinden uygulama geliştirmenizi sağlıyor. 16 gb RAM’in yanında ücretsiz olarak sağladığı GPU ile performansınızın artmasını da sağlıyor.

Kodlama ve deneylerin yapılması

Tahmin edeceğiniz üzere projenin en çok beklenen ve en çok vakit harcanan kısmı burası. Bu satırları okuyan arkadaşların da bildiği üzere burada en çok dikkat ettiğim iki husus vardı. Bunlar böl ve parçala (divide and conquer) ve örnekleme (sampling) idi. 7 aylık kod geliştirme ve deney sürecimde bütün geliştirmeleri modüler olarak yaptım ve modülleri tamamladıkça ana projeye eklemeye başladım. Bir problem çıkması durumunda basit bir modül üzerinde değişiklik yapmak, daha kompleks bir modül üzerinde değişiklik yapmaktan daha basit oluyor. (Clean Code ve Refactoring’le ilgilenen arkadaşlar bu tür yaklaşımları sever). Projenin ana hatlarını Figür 1'de görebilirsiniz.

Figür 1: Projenin Basit Diyagramı

Yukarıdaki akışta gösterilen ilk 4 adımı tamamladıktan sonra modülleri birleştirip bütün akışı test etmeye başladım. Burada vermek istediğim en büyük tavsiye, bütün akışı test etmek için verinin tamamını kullanmayın. Bütün veriyi kullanmak yerine örnekleme yapın ve hızlı bir şekilde hata almadığınızı görün. Projemin ilk zamanlarında bütün akışı çalıştırıp bitmesini bekliyordum ve sonrasında bu yönetim verimli olmadığını fark ettim. Örneğin özellik çıkarma (feature extraction) adımları içerisinde 10 adet yöntemim var ve tanesi 2–3 dakika sürüyor. En sondaki yöntemde hata olduğunu görmek için bile en az 27–28 dakika beklemeniz gerekebilir. Bu sebeple veri setinizdeki etiket sayısını değiştirmeden verinizi küçültüp akışı test etmek, size oldukça zaman kazandıracaktır.

Deney kısmında ise iyisiyle kötüsüyle elde ettiğimiz bütün sonuçları kaydetmenin yararını tez yazma sürecinde anlıyoruz. O yüzden ister veritabanında, ister Excel’de, deney parametreleriyle birlikte sonuçlarınızı bir yere kaydedin. Çünkü deney sonuçlarının zenginliği tezde, bildiride veya makalede karşılaştırma yaparken çok işe yarıyor.

Konferans/dergi makaleleri için araştırma yapılması

Kodlamanın başladığı ve deneylerin hafiften yapıldığı dönemlerde konferans ve dergi seçimi için çalışmalara başlanması, süreç açısından faydalı oluyor. Yüksek lisans mezuniyet şartlarından birisi de makaleniz yayınlanması veya uluslararası bir konferanstan kabul almak oluyor. Bu durum zorunlu olmasa bile bu tür organizasyonların çok yararlı olduğunu düşünüyorum. Çünkü yaptığınız bir işi sınırlı sayfa sayısıyla, herkesin anlayacağı bir şekilde bir düzen içerisinde anlatmak gerçekten değişik bir tecrübe oluyor, ayrıca sunumunu yapmak da cabası.

Konferanslarda özetin (abstract) son gönderme tarihi çok önceden belirleniyor. Bu sebeple mezuniyet tarihinden yaklaşık olarak 9–10 ay önceden konferansı seçmek sizin için rahat olur. Çünkü zaman ilerledikçe konferans sayısı azalıyor ve konferansların adaylarla ilgili sonuçlarını açıkladığı tarih, mezuniyet tarihinden sonra olabiliyor. Bu durum da mezuniyetimize engel olabiliyor. Aynı şekilde makalenin yayınlanacağı dergilerin dönüş süreleri de uzun olabiliyor. Bu yüzden oraya uzun bir zaman aralığı vermek mezuniyet açısından sağlıklı olabilir.

Sonuçların karşılaştırılması

Yaptığım çalışmanın gelişimine en çok katkı sağlayan bölüm, sonuçların karşılaştırıldığını bölüm oluyor. Yukarıda bahsettiğim gibi yapılan bütün sonuçların deneyin özellikleriyle (kullanılan yöntemler, parametreler vb.) beraber kaydedilip karşılaştırmayı veriden yapmak çok sağlıklı oluyor. Örneğin çok özellik çıkarma için yazdığınız A-B-C yöntemlerinin etkilerini ölçmek için bütün kombinasyonlarla yeni özellikler oluşturup model performansını ölçebilirsiniz. Böylece benim de yaşadığım “A yöntemi çok etkili olacağa benziyor” düşüncesinin ne kadar yanlış olduğunu görebilirsiniz. Modelin gelişimi dışında tez ve makale sürecinde, bu veri altın değerinde oluyor. Karşılaştırmaları yapmamanız durumunda, danışmanınızın sizden bunu isteyeceğinden adınız gibi emin olabilirsiniz.

Makale ve tezin yazılması

Bu kısım artık deneylerin büyük çoğunluğunun sona erdiği, akşamları evde bakılan kısım oluyor (ya da benim öyle oldu). Zamanın kısıtlı olması sebebiyle bence önce 10 sayfalık konferans bildirimi yazdım, sonrasında ise tezimi tamamladım. Eğer sırayı seçme şansınız olursa öncelikle makaleyi veya bildiriyi yazmanızı tavsiye ederim. Çünkü aslında tez makalenin genişletilmiş hali oluyor. Bu yüzden üstüne düşündüğünüz her şeyi tekrar düşünüp yazmak biraz daha rahat olabiliyor. Bu süreçte tezi parça parça yazıp, yazdığınız kısımları danışmanınızla paylaşmak oldukça verimli oluyor. Çünkü bütün tezi tamamlayıp, 60–70 sayfayı bir anda danışmanın önüne yığmak nasıl bir şey oluyor sizler de hayal edebilirsiniz. Buradaki şahsi tavsiyelerimden birisi de üniversitenin zorunlu kıldığı formatı en baştan beri korumak ve onun üzerinden tezinizi yazmak. Bu tür konuları en sona bırakmak stres olabiliyor. Eğer okulun sağladığı LaTeX formatı varsa onun üzerinde yazmanızı tavsiye ederim, çünkü standartları isteseniz de bozamıyorsunuz. İlk başta biraz karışık gibi gelse de zaman geçtikçe efsaneleşiyorsunuz. Ayrıca paylaşım kolaylığı ve ulaşılabilirlilik anlamında Overleaf’i kullanabilirsiniz. Ücretsiz bir uygulama ve danışmanınıza veya istediğiniz insanlara erişim hakkı verebiliyorsunuz ve yapılan değişiklikler belli bir tarihe kadar saklanıyor.

Bu yazımda size elimden geldiğince bir şeyler anlattım. Yukarıda da bahsettiğim gibi eğer bazı işleri erteleseydim ya da onların üzerine fazlaca eğilmeseydim muhtemelen şu anda bunları yazamıyor olurdum. Yukarıdakilerin yanında son güne kadar uğraşmayı da size öneririm hayatta her şeyde olduğu gibi. Ben bu projeye başladığımda ilk F-score’um 0.6 bandındaydı ve hedefim 0.9'du. İlk o sonucu aldığım gün direkt bilgisayarımı kapatıp eve gelmiştim. Mayıs ayında son deneyimi yaptığımda 0.87'lik F-score’u elde ettim ve mücadelemin karşılığını aldım. Ama şunu da gönül rahatlığıyla söyleyebilirim, daha düşük bir performansla da tezimi bitirmiş olsaydım yine de tatmin olacaktım. Çünkü benim gibi günün birinde tez çalışması yapacaksanız eğer, Google’a yazdığınızda net bir çözümünü bulamadığınız bir problem üzerine kafa yorup bir şeyler oluşturmak sonrasında da yaptığınız deneyler doğrultusunda yorumlar yapıp herhangi bir sonuca varmak güzel bir his, bunu gönül rahatlığıyla söyleyebilirim. Bu yüzden eğer araştırma yapmayı seviyorsanız ve sosyal hayatımdan fedakarlık yaparım diyorsanız yüksek lisansı size kesinlikle öneririm.

Proje süresince yardımlarını hiçbir zaman esirgemeyen ve bana yol göstermekten hiçbir zaman bıkmayan Borahan Tümer’e ve Mustafa Kıraç’a sonsuz teşekkürlerimi iletirim. Günün birinde umuyorum tekrardan beraber bir araştırma şansım olur kendileriyle.

Proje ile ilgili ya da benzer alanlar ilgili herhangi bir sorunuz olması durumunda benimle toprakucar@gmail.com, LinkedIn veya Twitter üzerinden hiç çekinmeden iletişim kurabilirsiniz. Ayrıca tez esnasında geliştirdiğim ve projenizde kullanabileceğiniz bazı Python modüllerine de buradan ulaşabilirsiniz.

--

--

Kemal Toprak Uçar
Deep Learning Türkiye

Loves research and programming. Besides the technology, analog photography, books, alternative rock, and the architecture are indispensable by his side.