Koku Motorunu Yeniden Eğitmek
İlk koku ailesi algoritmamız elle ayarlanmış ağırlıklarla çalışıyordu. İkincisi, elimizdeki veriden kendi kendine öğrendi. Neden ve nasıl yeniden yazdık?
Bir önceki yazıda koku ailesi algoritmamızı anlatmıştık: her notanın bir "kişiliği" var, notalar akorlara, akorlar ailelere bağlanıyor, en güçlü aile kazanıyor. Çalışıyordu — 254.000 parfümü sınıflandırmıştı. Ama bir tavanı vardı.
Sorun şuydu: o sistemdeki tüm ağırlıklar elle ayarlanmıştı. "Lavanta aromatik akora şu kadar, taze akora bu kadar katkı yapar" gibi binlerce karar, insan sezgisiyle konmuştu. Bu yaklaşımın iki zayıflığı var.
Elle Ayarlanan Sistem Öğrenemez
İlki: elle ayarlanan bir sistem verisinden öğrenemez. Bir ağırlığın yanlış olduğunu fark etseniz bile, onu düzeltmek bir başkasını bozabilir — ve 10.000 notayla 98 akor arasındaki binlerce bağı elle dengelemek imkânsız.
İkincisi daha sinsi: aile, akorlarla çelişebiliyordu. Sistem bir parfüme "Yumuşak Çiçeksi" ailesini atayıp, aynı parfümün baskın akorları arasında hiç çiçek göstermeyebiliyordu. İki ayrı hesap, iki ayrı sonuç, kimi zaman birbirini tutmuyordu.
Bunu düzeltmenin yolu daha fazla elle kural eklemek değildi. Sistemin kendisini değiştirmekti.
Gözümüzün Önündeki Cevap Anahtarı
Yeni yaklaşımın kilit fikri şuydu: aslında elimizde bir "cevap anahtarı" vardı, sadece kullanmıyorduk.
Parfümlerimizin yaklaşık yarısı — 146.000 tanesi — kaynaklarından gelen, insan oylarıyla oluşmuş akor bilgisine sahip. Bunlar tahmin değil, gerçek veri. Yani elimizde "şu notalara sahip bu parfümün akorları gerçekte şunlar" diyen yüz binlerce örnek vardı.
Bu, bir modele öğretmek için ideal malzeme. Notaları girdi, bilinen akorları hedef olarak verirsiniz; model, notalardan akorları en iyi tahmin eden ağırlıkları kendisi bulur. Artık ağırlıkları biz koymuyoruz — veri koyuyor.
İstatistikte buna regresyon deniyor: bir sürü girdiden bir çıktıyı, hatayı en aza indirecek şekilde tahmin eden ağırlıkları çözmek. Süslü bir şey değil — klasik, şeffaf, tekrar-üretilebilir matematik. Ama elle ayarlamanın aksine, kendi hatasından öğreniyor.
Bir Parfümör Gibi Düşünmeyi Öğretmek
Akorları çözdükten sonra sıra aileye geldi. Burada farklı bir araç kullandık.
Büyük bir dil modelinden, bir parfümörün yapacağı gibi düşünmesini istedik: "Şu notalara ve akorlara sahip bir parfüm hangi koku ailesine ait?" Bu model iyi cevaplar veriyordu ama yavaş ve pahalıydı — 281.000 parfüm için tek tek çalıştırmak pratik değildi.
Çözüm "damıtma" denen bir teknik: büyük, yavaş, akıllı modeli bir "öğretmen" gibi kullanıp ondan binlerce örnek cevap toplarsınız. Sonra küçük, hızlı bir "öğrenci" model, öğretmenin kararlarını taklit etmeyi öğrenir. Sonunda öğretmenin bilgeliğini, öğrencinin hızında elde edersiniz — tüm veritabanına uygulanabilir.
Aile Akorla Barışmalı
Eski sistemin "aile akorla çelişiyor" sorununu da burada çözdük. Yeni aile kararını, parfümün tahmin edilen akorlarıyla harmanladık: bir parfüme aile atanırken, o ailenin akorlarının gerçekten o parfümde bulunup bulunmadığı da hesaba katılıyor. Böylece "çiçeksi" denen bir parfümde gerçekten çiçek oluyor.
Bu, biraz doğruluktan feragat etmek pahasına tutarlılık kazandırdı — ve renk temelli bir arayüzde tutarlılık, doğruluktan daha önemli. Çünkü kullanıcı sayfanın rengini görüyor; o renk akorlarla çelişirse, sistem kırık hissettiriyor.
Kendi Ödevini Kendin Notlandıramazsın
Burada kritik bir disiplin var. Koku ailesinin "doğru" cevabı yok — uzmanlar bile anlaşamaz. Peki yeni motorun eskisinden iyi olduğunu nasıl kanıtlarsınız?
Kendi kendinizi notlandıramazsınız. Bunun yerine o "cevap anahtarını" — bilinen akorları — ikiye böldük. Bir kısmıyla modeli eğittik, diğer kısmını sakladık. Sonra modele sadece notaları verip, sakladığımız akorları yeniden bulup bulamadığına baktık.
Bu dürüst bir sınav: model daha önce görmediği parfümlerin akorlarını, sadece notalarından ne kadar doğru çıkarıyor? Yeni motor bu sınavda eski sistemi geçti. Çarpıcı bir fark değil — koku zaten öznel bir alan — ama tutarlı ve ölçülebilir bir iyileşme.
Sınırlar
Yeni motor mükemmel değil, olamaz da.
Notası olmayan bir parfümü hâlâ sınıflandıramıyoruz — öğrenecek girdisi yok. Yaklaşık 48.000 parfüm bu yüzden kapsam dışı; onlara yanlış bir aile uydurmaktansa boş bırakmayı tercih ediyoruz. (Dürüstlük, eski motordan miras kalan bir ilke.)
Ve koku öznel. Bizim "amberi" dediğimize siz "odunsu" diyebilirsiniz. Motor bir gerçeği değil, tutarlı ve savunulabilir bir görüşü üretiyor.
Sonuç
233.557 parfüm yeni motorla yeniden sınıflandırıldı. Aileler artık akorlarla barışık, renkler daha tutarlı, ve sistem elle ayarlanan ağırlıklar yerine kendi verisinden öğrenmiş bir modelle çalışıyor.
İlk motor sezgiyle çalışıyordu. İkincisi sezgiyi veriyle değiştirdi. Aradaki fark, bir uzmanın tahmini ile binlerce örnekten öğrenmiş bir sistemin yargısı arasındaki fark.
Diğer Yazılar
281.000 Parfüm, Tek Platform
Türkçe parfüm keşfi neden bu kadar zor ve 281.000 ürünü tek bir yerde organize etmek ne anlama geliyor?
6 dk okumaBir Parfümün Ailesi Nasıl Belirlenir?
Çoğu parfüm bir koku ailesi etiketiyle gelmiyor. Bir algoritmaya koklamayı nasıl öğretirsiniz?
8 dk okumaPuan Nasıl Hesaplanır?
Bir puan gerçekliği yansıtmalı, sadece hacmi değil. 5 düşünceli kullanıcı oyu, 10.000 referans puanın yanında nasıl görünür olur?
7 dk okumaEstetik Veritabanı
Çoğu ürün veritabanı resimli bir elektronik tablo gibi görünür. Biz tasarım müzesi gibi hissettirmesini istedik.
7 dk okuma281.000 Sayfa Nasıl Hızlı Kalır?
281.000 ürün sayfasına sahip olmak, her biri 3 saniye sürüyorsa bir anlam ifade etmez. Hız bir özellik değil, saygıdır.
7 dk okumaAynı Parfümün İki Sayfası
İki kaynaktan veri toplarsanız, aynı parfüm iki kez belirir. 7.080 kopyayı, hiçbirini silmeden nasıl tek sayfada birleştirdik?
7 dk okuma