Project 4B - Collaborative Filtering



Daha önce de bir çok kez belirttiğimiz üzere Kariyer.net ARGE olarak birincil önceliğimiz adaylara ve firmalara, uygun iş ilanı ve adayı gösterebilmek. Bu problemlerimizi çözüp, sağlıklı çalışan ürünlere dönüştürebilmek için, çalışmalarımızı aşağıda belirtilen üç farklı açıdan inceliyoruz. Daha önce makine öğrenmesi alanında işverenlere uygun adayları bulabilmek için çalışmalar yaptığımızdan bahsetmiştik. Bugün de bir süredir yoğun bir şekilde üzerinde çalıştığımız, başarılı test sonuçları elde ettiğimiz ve yakın bir zamanda milyonlarca adayın kullanımına açacağımız "4B" isimli İşbirlikçi Filtreleme altyapılı öneri motorumuzu anlatmak istiyoruz.

  • Doğal Dil İşleme
  • Makine Öğrenmesi
  • İşbirlikçi Filtreleme (Collabrative Filtering)


Buna Bakan Buna da Baktı

Kariyer.net'te bir gün içerisinde yaklaşık 200.000 adet farklı kullanıcı 40.000 farklı iş ilanını 2 milyon kez görüntülüyor. Bu sayı sadece bir haftada 12 milyon gösterime ulaşıyor. Verinin bu kadar zengin ve büyük olması, bize topluluğun bıraktığı bu bilgiyi işlememiz için harika bir fırsat yaratıyor. Daha önceki çalışmalarımızda adaylara uygun ilanları gösterebilmek için "içerik bazlı" yöntemler üzerine eğilirken, bu çalışmada yüzbinlerce kullanıcının hareketlerini yani iş ilanı gösterimlerini işleyip, onlara ilgilenebilecekleri diğer ilanları güçlü bir tahminleme ile göstermek üzerine çalışıyoruz. Yandaki şekilde görüldüğü üzere topluluğun hareketleri bize ilanlar arasındaki benzerliği bulmamıza yardımcı oluyor. Aday 1 ve Aday 2 hem Ürün Yöneticisi hem de Kullanıcı Deneyimi Uzmanı ilanına bakmışlar. Böylece biz sadece Kullanıcı Deneyimi ilanına bakmış olan Aday 3'e Ürün Yöneticisi ilanını da önerebiliyoruz. Aynı mantıkla Reklam Ürün Yöneticisi ilanını da önerebiliriz ama sadece Aday 1 den kaynaklanan bir benzerlik olduğundan bu ilk önerimizden daha az öncelikli bir öneri olacaktır. Ama öte yandan bu durum bizi popüler ilanların daha sık olarak önerildiği bir öneri sistemine götürebilir. O yüzden çok görüntülenen ilanlara benzerlik ilişkisini kaybettirmeden bir penaltı vererek, onların öneri listelerinde hep en üstte kalmalarını engellememiz gerektiğine karar verdik. Yaptığımız çalışmalarda, çalışma alanımız olan iş ilanlarının yakınlıklarının tesbiti alanına özel nitelik ve problemleri de düşünerek, farklı bir çok matematiksel yöntem denedik.

Bahsettiğimiz üzere iki ilanın birbirlerine benzerliğini matematiksel bir orana dönüştürebilmek için, iş ilanlarını, adayların iş ilanı görüntüleme verilerinden oluşan vektörlere dönüştürdük. İki vektörün birbirine yakınlığını hesaplamak için farklı algoritmalar kullandık ve bunları denerken, modelin oluşma süresi, öneri kalitesi ve yukarıda bahsedilen popüler ilan problemi gibi sorunlara nasıl fayda sağladığını ölçtük.


İlk Sonuçlar

Hazırladığımız öneri motorunu gözle test etmek için internal bir web sayfası hazırladık ve şirket içerisinde denemeye sunduk. İlk yanıtlar oldukça mutluluk verici, bunun yanında elimizde sayısal test sonuçları tutmak için bir evaluation sistemi hazırladık. Başarımızı ölçmek için kullandığımız bu sistemin mantığı, tüm kullanıcıların ilan gösterimlerinin bir kısmını (%30) ayırmak ve kalan kısmını (%70) ile modeli eğitmek ve ilan benzerliklerini kullanarak kullanıcılara 10 ar tane öneri yapıp, kullanıcıların bilmediğimiz %30 luk kesimde kalan daha önceki hareketlerini tahmin edebilmek. Buna göre yaklaşık %35 oranında kişilerin tarihçesini tahmin edebiliyoruz. Bu kadar büyük ölçekli bir sistem için bu başarının ilk adım olarak oldukça iyi olduğunu düşünüyoruz. Literatür araştırmalarımızda da aynı domainler içerisinde benzer oranlar elde edildiğini gördük.

Kurduğumuz modelin başarısının yanı sıra bunu ne kadar hızlı kurabildiğimiz de bir öneri sistemi için oldukça önemli. 50.000 ilanın herbirini tek tek bir diğerleri ile benzerliklerini hesaplamak milyarlarca hesapma yapmak demek. Bizimse Kariyer.net te çıkan her ilanı olabildiğince hızlı bir şekilde modele dahil edip önermeye başlamamız gerekiyor. Bu yüzden algoritmayı en sade ve yalın bir şekilde, paralel programlama ve unsafe coding gibi methodlarla max 7 dakika içerisinde milyonlarca öneriyi canlı sistemin kullanabileceği hale getirmeyi başardık (ilk hali 1 günden fazla sürüyordu (: ).
Sonuç olarak şimdiye kadar elde ettiğimiz test sonuçları aşağıdaki gibidir (Literatür karşılaştırmalarınız için: ilan->item, aday->user):

Model Eğitim Verimiz Model Hesaplanma Süresi Hit Rate
5.000 ilan - 11.0381 aday - 378.766 click 2,5 saniye %32
38.353 ilan - 185.569 aday - 1.514.613 click 45 saniye %30
49.663 ilan - 499.294 aday - 7.935.458 click 388 saniye %35


Gelecek Çalışmalar

Şu anda verinin düzenli güncellenmesi, modelin kısa aralıklarla yeniden build edilmesi, çıktı önerilerin uygun bir ortama yazılması ve Kariyer.net canlı sistemlerinin hızlıca bu önerilere ulaşabilmesi için gereken mimariyi oluşturuyoruz. Tüm kullanıcıların hareketlerini kayıt altına alacağımız ve bulut ortamlarında saklayacağımız log verileri ile önerilerimizin kalitesi ölçmek için gerekli sistemleri yazıyoruz. Tahminimize göre mayıs ayı içerisinde kademeli olarak ilan detay sayfalarında öneri motorumuzun çıktılarını görebilirsiniz.

Öneri hazırlamak işimizin bir parçasıydı. Diğer hedefimiz ise, kariyer.net teki iş ilanı gösterimlerinin çeşitliliğini ve dağılımını düzgün bir şekilde sağlamak. Her ne kadar yukarıda algoritmamızın popüler ilanlar problemini çözmede yarar sağladığı söylesek de ister istemez bazı ilanları daha fazla önereceğimizi öngörüyoruz. Toplayacağımız verileri sürekli takip ederek bu problemin ne ölçüde oluştuğunu ölçüp "diversity" i sağlamaya çalışacağız. Bu dikkat edebileceğiniz üzere bizim ilk hedefimiz olan iyi öneri yapmak ile çelişen bir hedef olabilir. Çünkü her ilana aynı önerileri yapmayıp çeşitliliğe de sağlamayı sağlamamız lazım. Kaliteden en az ölçüde ödün vererek, kullanıcıların tüm ilanlara erişmesi sağlamak için de algoritmamızı geliştirmeye devam edeceğiz.

Sistemi canlıya aldıktan sonra aldığımız geri bildirimler ve "diversity" probleminde ne aşamada olduğumuzu paylaşmak için ikinci bir yazı daha yazacağız. O zamana kadar merak ettiğiniz, sormak ya da paylaşmak istediğiniz bir şeyler varsa duymak isteriz. Görüşmek üzere..


4B Projesi Ekibi

Projeyi yapan ekibimiz, proje danışmanımız Bahçeşehir Üniversitesinden Yrd. Doç. Dr.Tevfik AYTEKİN le birlikte bir toplantı sonrasında..
Arka taraf soldan sağa : Neşe Kahyalar, Kemal Can Kara, Tevfik Aytekin
Ön taraf soldan sağa : Samet Esen, Semih Tok