Artımlı bir öneri sistemi nasıl oluşturulur?

Bu öğretici için ön koşullar

Matematiksel terimlerin kullanımını en aza indirmeye çalışacak olsam da, bu makale okuyucunun matris çarpanlarına ayırma, gömme boşlukları ve temel makine öğrenimi terimleri gibi kavramlara aşina olmasını umuyor. Bu makale, öneri sistemlerine bir giriş değil, artımlı varyantlarına bir giriş niteliğindedir. Her durumda, bu makalenin ana hedef kitlesi, makine öğrenimi ve öneri sistemleri alanında yeni başlayanlardır.

Giriş

Bir makine öğrenimi projesini başlatmak için bir veri bilimcisi verileri toplar, işler, modeli eğitir ve üretime dağıtır. Modelin performansı bozulmaya başladığında, veri bilimcileri genellikle döngüyü baştan tekrarlar. Şu anda, performansını iyileştirmek için modeli iyileştirmek için yeni veri örnekleri var. Ancak, bu, özellikle mevcut verilere dayalı kararların kritik olduğu iş alanlarında, genellikle ters etki yaratır ve verimsizdir.

Şimdi, kullanıcı tercihlerinin genellikle mevsimler, bütçeler ve moda trendlerine göre değiştiği öneri sistemleri dünyasına girin. Ek olarak, müşteri sayısı ve stok, sözde soğuk başlatma sorununa neden oldu, yani sistem, tüketicileri ürün veya hizmetlerle eşleştirmek için yeterli bilgiye sahip değil. Öneri sistemi ideal olarak bu değişikliklere uyum sağlamalı, modelini mevcut duruma uyum sağlayacak şekilde geliştirmeli ve verileri bir kez iletmelidir. Bu, artımlı öğrenme kavramıdır.

Bu makalede, aşamalı öğrenme fikrinin pratikte öneri sistemlerine uygulanmasını inceleyeceğiz. João Vinagre ve diğerleri tarafından yayınlanan "Yalnızca olumlu geri bildirim ile öneri için hızlı artımlı matris çarpanlara ayırma" adlı makaledeki sonuçları yeniden üretmek için Pytorch tabanlı bir Python kitaplığı olan CF Step kullanıyoruz. Ardından, birkaç teknik uygulayarak daha yüksek hedeflere ulaşacağız.

Hızlı artımlı matris çarpanlara ayırma

Uygulayacağımız algoritma örtük, yalnızca olumlu geribildirim kullanır. Bu iki anahtar kelimenin gizemini çözmeye çalışalım.

Örtük geri bildirim, kullanıcıların puanlar gibi etkileşimde bulundukları öğeler hakkında hiçbir zaman doğrudan fikir beyan etmedikleri anlamına gelir. Örtülü geri bildirime bir örnek, bir müşterinin belirli bir ürünü kaç kez satın aldığı veya belirli bir filmi izlemenin kaç dakika sürdüğüdür. Müşteriler ne kadar çok ürün veya hizmet satın alırsa, bunun bir tercih olduğundan o kadar emin oluruz. Yalnızca olumlu geribildirim, örtük geribildirimle kullanılan bir terimdir. Bunun nedeni, örtük geri bildirim durumunda, olumsuz bir etkileşimi neyin oluşturduğunu bilmemizin zor olmasıdır. Bu, kullanıcıların ürünlerle etkileşime girmediği anlamına gelmez. Bir süpermarketteki tüketicileri hayal edin. Belirli bir ürünü satın almamışlarsa, nedenini belirleyemeyiz.

Uygulamamıza dönersek, yalnızca olumlu geribildirim, kullanıcı öğesi etkileşim matrisi R'nin yalnızca Boole değerlerini içerdiği anlamına gelir; burada pozitif değerler beğenileri gösterir ve negatif değerler belirsiz olarak kabul edilir. Bu varsayımın iki ana sonucu vardır: Eğitim sırasında yalnızca olumlu geribildirim kullanıldığı için R'nin seyrekliği korunacaktır; herhangi bir kullanıcı etkileşimi için, negatif değerler tavsiye için mükemmel adaylardır.

Algoritmalar ve yöntemler

Şimdi bu makalede önerilen artımlı stokastik gradyan iniş (ISGD) algoritmasına daha yakından bakalım.

ISGD-Artımlı SGD

Elimizdeki veriler, demetler veya kullanıcı öğesi etkileşim verileridir. Unutmayın, bunların hepsi olumlu etkileşimlerdir. Algoritmanın girdisi üç sayıdır: feat (kullanıcının veya öğe yerleştirme alanının boyutu), (düzenlileştirme katsayısı) ve (öğrenme oranı). Algoritmanın çıktısı iki gömülü matristir: A kullanıcıları ve B öğeleri temsil eder. Bu matrislerin boyutları number_of_users x feat of A ve number_of_items x feat of B şeklindedir. O zaman birkaç farklı adımımız var:

  • Aktif kullanıcıların bilinip tanınmadığını kontrol edin. Değilse, ortalama 0 ve standart sapma 1 olan normal bir dağılımdan çıkarılan rastgele potansiyel özelliklere sahip yeni bir kullanıcı oluşturun. Etkin öğe için de aynısını yapın.

  • Kaybı hesaplayın. Sadece olumlu geri bildirimlerle uğraşmamız gerektiğinden, hedef her zaman 1'dir. Bu nedenle, tahmin edilen değerimizi yalnızca 1'den çıkarmamız gerekir.

  • Etkin kullanıcıların potansiyel özelliklerini güncellemek için genel kuralları kullanın (kullanıcı yerleştirme matrisindeki parametreler). Etkin öğe için de aynısını yapın.

  • Sonraki veri noktasına gidin. Bu şekilde, herhangi bir uzunluktaki veri akışlarını idare edebiliriz.

Gerçekleştirme ve değerlendirme

Bu uygulama için Python kütüphanesi CF Step'i ve tanınmış Movielens veri setini (https://grouplens.org/datasets/movielens/) kullanacağız. CF Step, Python'da yazılmış ve artımlı öğrenme öneri sistemlerinin hızlı uygulanmasını destekleyen Pytorch üzerine inşa edilmiş açık kaynaklı bir kitaplıktır. Bu kitaplık, Avrupa araştırma projesi CloudDBAppliance'ın bir yan ürünüdür. Aşağıdaki komutu çalıştırarak kitaplığı kolayca kurabilirsiniz:

pip cf-step kurulumu

Ardından, movielens veri kümesini indirin ve rating.dat dosyasını Linux'taki tmp klasörü gibi uygun bir dizine çıkartın. Bu uygulama için sadece bu dosyaya ihtiyacımız var. Kalan dosyalar (users.dat ve movies.dat) kullanıcılar ve filmler hakkında meta veriler içerir. Dosyaları belleğe yüklemek için pandaları kullanacağız:

Gördüğünüz gibi, kategori kodlarını çıkarmak için kullanıcı ve film kimliklerini kategorilere dönüştürüyoruz. Şimdi, gömme matrisinin oluşturulması için ayrı bir kelime dağarcığı oluşturmamıza gerek yok. Kimliği değil, yalnızca kullanıcı ve film kodlamasını kullanmamız gerekiyor. Son olarak, orijinal kullanıcıyı ve filmi bulmak için kod ve kimlik arasında bir bağlantı kurmak için her zaman bu veri çerçevesini kullanırız. Şimdi, işlediğimiz verilerdeki benzersiz kullanıcı ve film sayısına bakalım.

Bu sayıları basarsak 6.040 kullanıcı ve 3706 film olduğunu görürüz. Ardından, olayların akışını simüle etmek için verileri zaman damgasına göre sıralayacağız.

Tartıştığımız gibi, algoritma yalnızca olumlu geri bildirimi desteklemektedir. Bu nedenle, 5 puanı olumlu geribildirim olarak değerlendirip diğer noktaları göz ardı edeceğiz. Beğenileri belirtmek için 1'i, hoşlanmayanları belirtmek için 0'ı kullanmak ve bunları korumak için tercih adında yeni bir sütun oluşturmak istiyoruz. Ardından, veri öğelerini tercih == 1 ile filtreliyoruz.

Sonra, modelimizi başlatalım. Bunun için bir model mimarisine, bir amaç fonksiyonuna (yani kayıp fonksiyonu) ve bir optimize ediciye ihtiyacımız var. Model mimari olarak, CF Step tarafından sağlanan yerleşik sinir ağı mimarisi olan SimpleCF ağını kullanacağız. Amaç işlevi için, bir tahmini ve hedefi kabul eden ve tahmini hedeften çıkaran basit bir lambda işlevi kullanacağız. Örneğimizde hedef her zaman 1'dir. İyileştirici için Pytorch'un SGD uygulamasını kullanacağız. 128 faktör seçtik ve öğrenme oranı 0.06. Şimdi Step modelini başlatmaya hazırız.

Değerlendirme yöntemi aşağıdaki gibidir:

  • Modeli, verilerin en üst% 20'si üzerinde eğiterek yönlendirin.

  • Veri akışını simüle edin ve modelin performansını değerlendirmek için bir ölçü olarak recall @ k kullanın.

  • Kullanıcı biliniyorsa, bir tahminde bulunun ve bu tahminin geri çağırma @ kf değerini hesaplayın. Ardından, algoritmayı aşamalı olarak eğitmek için bu kullanıcı öğesi etkileşimini kullanın.

  • Kullanıcı bilinmiyorsa, algoritmayı aşamalı olarak eğitmek için bu kullanıcı öğesi etkileşimini kullanın.

Bunu yapmak için, verinin ilk% 20'sini alalım, bir veri yükleyici ve toplu sığdırma modelleri oluşturalım.

Ardından kalan verileri alıp farklı bir veri seti oluşturuyoruz.

Son olarak, akışı simüle edin ve modeli değerlendirmek için geri çağırma @ 10'u kullanın. Bu adım, GPU'da 5 ila 6 dakika sürer.

Eğitim sonuçlarımızı görselleştirmek için aşağıdaki kodu kullanabiliriz. Bunun için, kağıtta yaptıklarıyla aynı olan 5K kayar pencerenin hareketli ortalamasını kullanacağız. Bu resmin movielens veri kümesinin işleme sonucuna benzer olduğunu görebiliriz. Modeli kaydetmek için model.save yerleşik yöntemini kullanın ve geçerli bir yol iletin.

sonuç olarak

Bu makalede, öneri sistemlerinde artımlı öğrenmenin önemini önerdik ve sonuçları, João Vinagre ve diğerleri tarafından yayınlanan "Yalnızca olumlu geri bildirim ile öneri için hızlı artımlı matris çarpanlara ayırma" adlı makalede yeniden oluşturduk. Artımlı öğrenme öneri sistemlerinin hızlı uygulanmasını destekleyen açık kaynaklı bir kütüphane olan Python'un CF Step kütüphanesini tanıttık. Ardından, bu konuyu daha ayrıntılı tartışacağız ve algoritmanın doğruluğunu geliştirmeye çalışacağız.

aracılığıyla: https://towardsdatascience.com/building-an-incremental-recommender-system-8836e30afaef

Lei Feng Ağı Lei Feng Ağı Lei Feng Ağı

Az önce, melek gerçekten gökten düştü
önceki
En eksiksiz kahraman yelpazesi! Guangdong, Jingzhou, Wuhan'dan 2.431 sağlık personeli
Sonraki
Kızarmış tavuk ve kruvasanlar yarın kesilecek! Shanghai Costco'nun şu anda 1.000 kişilik bir sınırı var, lütfen seyahatinizi rasyonel olarak seçin
24 saat, 11 disiplin ... Salgınla mücadelede bu 6 üniversitenin anahtar kelimelerine bakın
İş ve üretimin yeniden başlamasını teşvik edin! Chongqing'deki bu şirketlerin temel önleme ve kontrol "taktiklerine" bakın
Kod ayrıca önceden eğitilebilir.Microsoft Harbin Teknoloji Enstitüsü yakın zamanda doğal programlama iki dilli işlemeyi destekleyen CodeBERT modelini önerdi
Guangdong Aid Wuhan Medical Team'in genel lideri: Aiding Han aynı zamanda Guangdong için bir testtir.
Aşkı ayırmadan virüsü izole edin! Nanshan Sağlık Denetleme Cephesinin Misyon ve Sorumlulukları
iyi haberler! Hunan ve Fujian'daki birçok hasta tedavi edildi ve taburcu edildi
Shenzhou Jingdong, kavun yığınları yiyerek bir "peri savaşı" düzenledi: kazanmayı veya kaybetmeyi çevrimiçi beklemek
Salgın durumda, Henanın "Hava İpek Yolu" kargosu yelken açmaya devam ediyor
Today Paper | TRANSFORMER yapısı; görüntüden görüntüye çeviri; eksik açıklamalı hedef algılama çözümü; GAN su altı görüntü rengi düzeltme, vb.
Çip endüstrisinin bugünü ve geleceği olan ISSCC2020'de yonga ve kuantum hesaplama
Öncülere saygı! Kopyala ve yapıştır kullanıcı arayüzünün babası, Java'nın ve İnternetin yaratıcısı vefat etti
To Top