Tek Model, Çift Tahmin: biDeepFM
Reciprocal öneri sistemlerinde çok amaçlı öğrenme nasıl çalışıyor?biDeepFM’in 7 adımlı veri akışı: Girdi → Embedding → FM/DNN → Merge → Çift Çıktı → BackpropagationÖneri…

Reciprocal öneri sistemlerinde çok amaçlı öğrenme nasıl çalışıyor?

Öneri sistemleri, e-ticaretten içerik platformlarına kadar geniş bir uygulama alanına sahip. Netflix film önerir, Spotify şarkı önerir, Amazon ürün önerir. Bu sistemlerin ortak noktası tek yönlü olmalarıdır: Kullanıcıya içerik önerilir ve kullanıcının beğenip beğenmediği ölçülür.
Ancak bazı alanlar karşılıklı (reciprocal) öneri gerektirir. İş platformları bunun en belirgin örneğidir: Bir adaya iş önermek yetmez — o adayın başvuracağı ve aynı zamanda şirketin de ilgileneceği işleri önermek gerekir. Benzer durum flört uygulamaları, freelance marketler ve akademik işbirliği platformlarında da geçerlidir.
Karşılıklı öneri sistemlerinin temel zorluğu veri dengesizliğidir. Tipik bir iş platformunda:
Veri Türü Kayıt Sayısı
Aday başvuruları 383,434
Şirket geri bildirimleri 9,081
Bu 42:1 oranındaki dengesizlik, geleneksel “iki ayrı model” yaklaşımını sorunlu hale getiriyor. Aday modeli zengin veriyle eğitilirken, şirket modeli yetersiz veriyle düşük performans sergiliyor.
biDeepFM (Guo ve ark., 2017'deki DeepFM’in karşılıklı öneri için uyarlanmış versiyonu), bu soruna çok amaçlı öğrenme (multi-task learning) ile çözüm sunuyor. Tek bir model, paylaşılan embedding’ler aracılığıyla hem aday hem de şirket tahminini aynı anda öğreniyor. Bu yapı sayesinde, zengin aday verisinden öğrenilen bilgi, seyrek şirket verisine backpropagation aracılığıyla transfer ediliyor.
Bu yazıda, biDeepFM’in mimarisini ve özellikle bu bilgi transferinin teknik olarak nasıl gerçekleştiğini inceleyeceğiz.
Backpropagation Nedir?
Derin öğrenmenin temel taşı olan backpropagation (geri yayılım), modelin hatalarından öğrenmesini sağlayan mekanizmadır.
Basitçe:
- İleri geçiş: Veri modelden geçer, tahmin üretilir
- Kayıp hesaplama: Tahmin ile gerçek değer karşılaştırılır
- Geri geçiş: Hata, zincir kuralıyla geriye doğru yayılır
- Güncelleme: Her parametre, hatayı azaltacak yönde güncellenir
Matematiksel olarak, bir parametre θ için güncelleme:
θ_yeni = θ_eski - öğrenme_oranı × (∂Kayıp/∂θ)
biDeepFM’de Veri Akışı
biDeepFM’in mimarisi şöyle çalışıyor:
┌─────────────────────────────────────────────────┐
│ GİRDİ │
│ Aday özellikleri + İş özellikleri │
└─────────────────────┬───────────────────────────┘
↓
┌─────────────────────────────────────────────────┐
│ PAYLAŞILAN GÖMMELER │
│ Sparse → Dense dönüşüm (k=8 boyut) │
│ │
│ "Python" → [0.8, 0.6, 0.3, 0.9, ...] │
│ "Fintech" → [0.75, 0.5, 0.4, 0.85, ...] │
└───────────────────┬─────────────────────────────┘
│
┌─────────┴─────────┐
↓ ↓
┌─────────────────┐ ┌─────────────────┐
│ FM │ │ DNN │
│ İkili etkileşim │ │ Yüksek derece │
│ ⟨vᵢ, vⱼ⟩ │ │ kalıplar │
└────────┬────────┘ └────────┬────────┘
└──────────┬──────────┘
↓
┌─────────────────────────────────────────────────┐
│ BİRLEŞTİRME │
│ y = σ(y_FM + y_DNN) │
└───────────────────┬─────────────────────────────┘
│
┌─────────┴─────────┐
↓ ↓
┌─────────────────┐ ┌─────────────────┐
│ y_candidate │ │ y_company │
│ 0.85 │ │ 0.78 │
│ "Başvurur mu?" │ │ "İlgilenir mi?" │
└─────────────────┘ └─────────────────┘
Kritik nokta: Aynı embedding’ler hem aday hem şirket tahmini için kullanılıyor.
Sihir: Çift Kayıptan Gelen Gradyanlar
İşte biDeepFM’in asıl yeniliği burada ortaya çıkıyor. İki ayrı kayıp hesaplanıyor:
python
L_candidate = CrossEntropy(y_candidate, y_true_candidate)
L_company = CrossEntropy(y_company, y_true_company)
L_total = α × L_candidate + (1-α) × L_company
Backpropagation sırasında her iki kayıp da paylaşılan embedding’lere gradyan gönderiyor:
L_total
↓
┌──────────────┴──────────────┐
↓ ↓
L_candidate L_company
↓ ↓
∂L/∂y_cand ∂L/∂y_comp
↓ ↓
└──────────────┬──────────────┘
↓
Paylaşılan Gömmeler
↓
∂L/∂v = α × ∂L_cand/∂v + (1-α) × ∂L_comp/∂v
──────────────────── ─────────────────────
383K kayıttan gelen 9K kayıttan gelen
gradyan gradyan
Somut Örnek: “Python” Embedding’i
Diyelim ki “Python” bir özellik ve embedding’ini güncelliyoruz.
Aday Verisinden Öğrenilenler (383K kayıt):
- Python bilen adaylar hangi sektörlere başvuruyor?
- Python ile hangi diğer beceriler birlikte görülüyor?
- Python bilenlerin deneyim dağılımı nasıl?
Şirket Verisinden Öğrenilenler (9K kayıt):
- Şirketler Python’a ne kadar değer veriyor?
- Python gerektiren pozisyonlar hangi sektörlerde?
- Python + hangi özellikler şirketleri etkiliyor?
Tek Başına Olsaydı:
Python embedding kalitesi:
- Sadece aday verisi: ████████████████ (383K) → Zengin
- Sadece şirket verisi: ██ (9K) → Zayıf
biDeepFM’de:
Python embedding kalitesi:
- Birleşik: ██████████████████ (383K + 9K) → Çok Zengin
Aday verisinden öğrenilen “Python” bilgisi, şirket tahminine transfer ediliyor!
Sonuçlar Kendini Gösteriyor
Bu bilgi transferi mekanizması somut sonuçlar veriyor:
Metrik DeepFM biDeepFM İyileşme
Şirket AUC 0.8788 0.9348 +%6.37
Şirket Log Loss 0.3156 0.2772 -%12.15
Eğitim Süresi 2× 1× 2× hızlı
En büyük iyileşme şirket modelinde — çünkü seyrek veri problemi tam olarak orada çözülüyor.
Neden Çalışıyor?
Üç temel neden:
1. Paylaşılan Gömmeler = Ortak Dil
Aynı “Python” vektörü hem aday hem şirket için kullanıldığında, iki tarafın “Python”dan anladığı şey aynı uzayda temsil ediliyor.
2. Gradyan Birleşimi = Zenginleştirme
v_python_yeni = v_python_eski - lr × (α × grad_aday + (1-α) × grad_şirket)
İki kaynaktan gelen gradyan, embedding’i her iki görev için de optimize ediyor.
3. Multi-Task Regularization
İki görev birlikte öğrenildiğinde, model daha genellenebilir oluyor. Tek göreve aşırı uyum (overfitting) riski azalıyor.
Pratik Çıkarımlar
Bu yaklaşım sadece iş platformlarıyla sınırlı değil. Herhangi bir karşılıklı eşleşme problemine uygulanabilir:
- 💑 Flört uygulamaları (kullanıcı ↔ kullanıcı)
- 🏠 Emlak platformları (kiracı ↔ ev sahibi)
- 💼 Freelance marketler (işveren ↔ freelancer)
- 🎓 Akademik işbirlikleri (araştırmacı ↔ araştırmacı)
Ortak özellik: İki tarafın da memnuniyeti gerekiyor ve genellikle bir tarafın verisi daha seyrek.
Özet
biDeepFM’in backpropagation mekanizması şunu başarıyor:
Seyrek Şirket Verisi (9K)
+
Zengin Aday Verisi (383K)
↓
Paylaşılan Gömmeler
↓
Bilgi Transferi
↓
Güçlü Şirket Modeli
Tek cümleyle: Aday verisinden öğrenilenler, paylaşılan embedding’ler aracılığıyla şirket modeline aktarılıyor — ve bu transfer, %6.37 AUC iyileşmesi olarak geri dönüyor.
Bu yazı, “biDeepFM: A Multi-Objective Deep Factorization Machine for Reciprocal Recommendation” makalesine dayanmaktadır. Deneysel sonuçlar Kariyer.net veri seti üzerinde elde edilmiştir.
Kaynaklar
- biDeepFM Paper (JESTECH, 2021)
- Rendle, S. (2010). Factorization Machines
- Guo et al. (2017). DeepFM: A Factorization-Machine based Neural Network
Tek Model, Çift Tahmin: biDeepFM was originally published in Kariyer.net Tech on Medium, where people are continuing the conversation by highlighting and responding to this story.
Bu yazı ilk olarak Medium'da yayımlandı.
- reciprocal-recommendation
- factorization-machine
- recommendation-system
Devamı