
Silikon vadisi merkezli Udemy adındaki şirketimizin amacı internet üzerinden öğrenmeyi ve öğretmeyi herkes icin çok kolay hale getirmek. Bunun için belirli konularda bilgi birikimi olan herhangi bir insanın kolaylıkla dersler açabilmesini sağlayan bir platform yaptık. Kendisini geliştirmek isteyen kullanıcılar da udemy.com üzerinden ilgili oldukları alanlarda dersler alabiliyorlar.
Udemy'de karşılaştğımız en önemli zorluklardan birisi insanları ilgi duydukları alanlarda derslerle buluşturmak. Bunun için kullanıcılardan ilgi alanlarını birden fazla etiketler halinde belirtmelerini istiyoruz. Örnek olarak benim ilgi alanlarım (etiketlerim): startups, web2.0 , technology , education , entrepreneurship , mathematics, chess.
İlgi alanları toplanırken ne kadar benzer kelimeler için önerilerde bulunsak da yazabilecekleri kelimelerin önü açık. Dolayısıyla kullanıcılar istedikleri kelimeyi yazabiliyorlar. Örnek olarak: http://www.udemy.com/join/email.html sayfasına bakabilirsiniz.
Benzer bir şekilde kullanıcılarda açtıkları her dersin hitap ettiği ilgi alanlarını girmelerini istiyoruz. Buna ek olarak kullanıcılardan dersi 2 seviyelik bir yapıda (Akademik > Matematik gibi) kategorilemelerini istiyoruz. Kategoriler, ilgi alanarının aksine, önceden belirlenmiş toplam 11 ana kategori ve 232 alt kategoriden oluşan bir listeden seciliyor. Örnek olarak http://www.udemy.com/course/create.html sayfasına bakabilirsiniz.
İlgi alanları verisi kullanıcılara dersler önermek için oldukça iyi bir veri olmasına rağmen şoyle bir probleme sahip. İlgi alanlarını kullanıcılar istedikleri gibi girebildikleri için birbirine anlam olarak benzeyen birçok ayrı kelimeler görebiliyorlar. Örneğin entrepreneur, entrepreneurs, entrepreneurship gibi gelimeler ayni ilgi alanını belirtseler de teknik olarak farklı girdiler. Ayrica startup, web 2.0, silicon valley gibi kelimeler de kabaca ayni ilgi alanını temsil ediyorlar. Bu durum kullanıcılardan doğrudan alınan ilgi alanlarının semantik olarak kullanılmasını oldukça güçleştiriyor.
Bu problemi çözmek için bu ilgi alanlarını dersler icin açılan kategorilerle eşleştirmek istiyoruz. Bu eşleştirmede her etiket en az 1 en fazla 3 adet kategoriye farklı ağırlıklarla eşleştirilebilir. Bu ağırlıkların herbirinin [0.0-1.0] aralığında olması ve her etiket icin toplamlarının 1.00'ı aşmaması gerekiyor.
Örneğin 'Social Marketing' etieti aşağıdaki kategorilere eşleştirilebilir.
'Business and Professional:Marketing and Advertising',0.6
'Technology and Internet:Social Media',0.4
Yarışmacılardan istenen yaklasik 900.000 adet etiket icin en iyi kategori eşleştirmesini yapmaları.
Bu eşleştirmeyi yapmak için yarışmacılar ilişkisel bir veritabanında duran aşağıdaki tablolardan yararlanabilirler:
Hangi etiketin (tag) hangi kategorilere hangi ağırlıkta eşleştirildiklerini tutan tablo (sql olarak)
{tagId,courseCategoryId,weight}
Ek olarak bu eşleştirmeyi nasıl yaptığınıza dair en fazla 1000 karakterlik bir açıklama ve kullandığınız kod parçalarını istiyoruz.
Eşleştirmeler değerlendirilirken aşağıdaki üc ayrı puanlama sistemi kullanılıp, bu puanlarin toplamı alınacaktır.
A) 100 adet rastgele seçilmiş etiketi Udemy çalışanları olarak birer
kategoriye sokacağız. O etiket icin sizin koyduğunuz kategorilerden biri
bizim koyduğumuz kategoriyle eşleşirse, eşleşen katogriye verilen
ağırlığın yarısı kadar puan alacaksınız.
Bu kategoriden etiket başına en fazla 0.5, toplamda da en fazla 50
puan alınabilir.
B) 30 adet rastgele seçilmiş dersin kategorilerini, o dersin
etiketleri için yarışmacının eşleştirdiği kategorilerle
karşılaştıracağız. Dersin kategorisiyle tutan her etiket
eşleştirmesindeki kategori için, o eşleştirmenin ağırlığı kadar puan
alacaksiniz. Daha sonra bu puan o dersin etiket sayısına bölünecek.
Bu kategoriden ders başına en fazla 1.0, toplamda da en fazla 30 puan
alınabilir.
C) Eşleştirme yönteminizi inceleyip 0-20 arasında bir puan vereceğiz. Bu puanlandırmada esas olan kullanılan algoritmaların karmaşıklığı değil, ne kadar kolay tekrar edilebilir ve otomatikleştirilebilir olduklarıdır. Örneğin top bu eşlestirmeyi tek bir program parçasını çalıştırıp otomatik olarak yapan bir kod gönderirseniz, bu kısımdan 20 tam puan alacaksınız.
A, B, C kısımlarından toplamda en fazla puanı alan yarışmacı ödülün sahibi olacak.
Eren BaliUdemy'de staj yapmak ister misiniz? http://www.udemy.com/careers