Zephyrnet Logosu

Spark İşbirlikçi Filtreleme ile Film Önerileri

Tarih:

Spark İşbirlikçi Filtreleme ile Film Önerileri

Hangi filmi izleyeceğinizden emin değil misiniz? Tavsiye sisteminize sorun.


By Rosaria Silipo, KNIME'de Veri Bilimi Evangelizmi Başkanı

İlk yayınlandığı gibi Verinami

İşbirliğine dayalı filtreleme (CF) göre alternatif en küçük kareler (ALS) teknik, öneriler oluşturmak için kullanılan başka bir algoritmadır. Otomatik tahminler üretir (süzme) diğer birçok kullanıcının tercihlerini toplayarak bir kullanıcının ilgi alanları hakkında (işbirliği). CF yaklaşımının altında yatan varsayım, eğer A kişisi bir konuda B kişisi ile aynı görüşe sahipse, A'nın rastgele seçilmiş bir kişiden farklı bir konuda B'nin görüşüne sahip olma olasılığının daha yüksek olduğudur. Bu algoritma, yarışmayı kazanan takım tarafından kullanıldıktan sonra veri bilimi camiasında büyük ilgi gördü. Netflix Ödülü.

CF algoritması da uygulanmıştır. Kıvılcım MLlib çok büyük veri kümelerinde hızlı yürütmeyi ele almak amacıyla. KNIME Analytics Platformu onun ile Büyük Veri Uzantıları içinde sunar Spark İşbirliğine Dayalı Filtreleme Öğrenicisi (MLlib) düğüm. Yeni bir kullanıcıya film önermek için bu makalede kullanacağız. Bu kullanım örneği, orijinal olarak tarafından sağlanan CF çözümünün bir KNIME uygulamasıdır. bilgi çiftliği.

Başlamak için Neye ihtiyacınız var?

 
 

Kullanıcıların film derecelendirmelerini içeren genel bir veri seti

 
 
Bu kullanım durumu için büyük (20M) Film Lensi veri kümesi . Bu veri kümesi, tümü filmler ve film derecelendirmeleriyle ilgili bir dizi farklı dosya içerir. Burada dosyaları kullanacağız Rating.csv ve filmler.csv.

Dosyadaki veri seti Rating.csv yaklaşık 20 kullanıcı tarafından 130,000 milyon film derecelendirmesi içerir ve şu şekilde düzenlenir: Kullanıcı kimliğifilm kimliği, derecelendirme, zaman damgası.

Her satır, film kimliğiyle tanımlanan - kullanıcı kimliğiyle tanımlanan kullanıcılardan biri tarafından belirlenen her filmin derecelendirmesini içerir.

Dosyadaki veri seti filmler.csv şu şekilde organize edilmiş yaklaşık 27,000 film içerir: film kimliği, başlık, tür.


Notlar. adresinden erişilebilen iş akışı KNIME Merkezi kullanılarak inşa edilmiştir CSV OkuyucuSatır Örnekleme ve Kıvılcım Tablosu düğümlerin yalnızca %2.5'ini okuyacak Rating.csv veri kümesi. Veri kümesinin bir alt kümesini okumak, iş akışının doğrudan yürütülmesine olanak tanır ve yerel makinelerinde sınırlı RAM kapasitesine sahip kullanıcılar için bir Java Yığın Alanı Hatası oluşmasını önler. Aşağıdaki bölümlerde, örnekleme amacıyla tüm veri setini kullanıyoruz. Aynısını yapmak istiyorsanız, çok daha hızlı kullanmanız önerilir. CSV'den Spark'a düğümü ve gerekirse KNIME için Java Yığın Alanını artırmak için (SSS).


Geçerli kullanıcıya göre film tercihleri

 
 
ALS algoritmasının fikri, eğitim setindeki mevcut seçili kullanıcıya benzer tercihlerle diğer kullanıcıları bulmaktır. Mevcut kullanıcı için öneriler daha sonra bu tür benzer profillerin tercihlerine göre oluşturulur. Bu, mevcut kullanıcının eğitim setindeki diğer mevcut kullanıcıların profilleriyle eşleşmesi için bir profile ihtiyacımız olduğu anlamına gelir.

Kullanıcı kimliği=999999 atanmış mevcut kullanıcı olduğunuzu varsayalım. MovieLens veri kümesinin kendi film tercihleriniz hakkında veri içermemesi muhtemeldir. Bu nedenle, bazı film önerileri yayınlamak için önce film tercih profilinizi oluşturuyoruz. Film listesinden rastgele seçilen 20 filmi derecelendirmenizi isteyerek iş akışına başlayacağız. filmler.csv dosya. Derecelendirmeler 0 ile 5 arasında değişir (0-korkunç film; 5-harika film). Önerilen filmi izlemediyseniz -1 derecesini kullanabilirsiniz. Derecelendirmesi -1 olan filmler tercih listenizden kaldırılacak, diğer derecelendirmelere sahip filmler ise eğitim seti materyali olacak.

Aşağıdaki web sayfası, bir Metin Çıkışı Widget'ı düğüm ve bir Tablo Düzenleyici üzerinde yürütülen bir bileşenin içindeki düğüm KNIME Web Portalı . Derecelendirmeniz, sağdaki son sütuna manuel olarak eklenebilir.



Şekil 1: Mevcut kullanıcıyla (kullanıcı kimliği =999999) kendi film derecelendirmeleri hakkında görüşme. Mevcut kullanıcının profilini, eğitim setinde bulunan diğer kullanıcıların profilleriyle eşleştirmek için bu bilgilere ihtiyacımız var. Benzer kullanıcıların tercihleri, mevcut kullanıcımız için film önerileri sağlayabilir.

Bir Kıvılcım Bağlamı

 
 
CF-ALS algoritması, KNIME Analitik Platformunda şu şekilde mevcuttur: Spark İşbirlikçi Filtreleme Öğrencisi düğüm. Bu düğüme ait Apache Spark için KNIME Uzantısı, bu kullanım senaryosunu çalıştırmak için KNIME Analytics Platformunuza yüklenmesi gereken (bkz. KNIME uzantısının nasıl kurulacağına ilişkin talimatlar).

Spark Collaborative Filtering Learner düğümü, Spark bağlamında yürütülür; bu, bu kullanım senaryosunu çalıştırmak için ayrıca bir büyük veri ortamına ve bir Spark bağlamına ihtiyacınız olduğu anlamına gelir. Bu gereksinim, özellikle proje yalnızca bir kavram kanıtı ise, şirket içinde veya bulutta büyük bir veri ortamı kurmanın karmaşıklığı ve potansiyel maliyeti nedeniyle bazen bir gösteri durdurucu olabilir. Buluta kurulum ayrıca öngörülemeyen ek maliyetler de getirebilir.


Notlar. Sürüm 3.6 or daha yüksek (şu anda 4.4) KNIME Analytics Platformunun ve Yerel Büyük Veri Ortamları için KNIME Uzantısı değerli bir düğüm içerir: Yerel Büyük Veri Ortamı Oluşturun düğüm. Bu düğüm, Apache Spark, Apache Hive ve Apache HDFS ile basit ama eksiksiz bir yerel büyük veri ortamı oluşturur ve başka bir yazılım kurulumu gerektirmez.




Şekil 2: Bu düğüm, Spark, Hive ve HDFS'nin yerel basit bir örneğini oluşturur. İstenilen ölçeklenebilirliği ve performansı sağlamasa da prototip oluşturma ve çevrimdışı geliştirme için kullanışlıdır.

 

Yerel Büyük Veri Ortamı Oluşturma düğümü, giriş verisine ihtiyaç duymadığından giriş bağlantı noktasına sahip değildir ve üç çıktı nesnesi üretir:

  • Yerel bir Hive örneğine bağlanmak için kırmızı bir veritabanı bağlantı noktası
  • HDFS temel sistemine bağlanmak için mavi bir HDFS bağlantı noktası
  • Yerel bir Spark bağlamına bağlanmak için gri bir Spark bağlantı noktası

Varsayılan olarak, yerel Spark, Hive ve HDFS örnekleri, Spark bağlamı yok edildiğinde veya KNIME Analytics Platform kapatıldığında atılacaktır. Bu durumda iş akışı "yürütüldü" durumu ile kaydedilmiş olsa bile Spark düğümlerinin ara sonuçları kaybolacaktır.



Şekil 3: Yerel Büyük Veri Ortamı Oluştur düğümünün yapılandırma penceresi. "Ayarlar" sekmesi şunları içerir: "Atıldığında" gerçekleştirme eylemleri; SQL desteği; ve Dosya Sistemi ayarları. "Gelişmiş" sekmesinde: Özel Spark ayarları; Mevcut Spark bağlamı; Kovan ayarları.

 

Yerel Büyük Veri Ortamı Oluştur düğümünün yapılandırma penceresi, iş akışı kapatıldığında tetiklenen "Atıldığında" eylemiyle ilgili seçenekler içeren bir çerçeve içerir:

  1. "Spark Context'i Yok Et", Spark bağlamını ve tahsis edilen tüm kaynakları yok eder; bu en yıkıcı ama en temiz seçenektir.
  2. "Delete Spark DataFrames", iş akışındaki Spark düğümlerinin ara sonuçlarını siler ancak Spark bağlamını yeniden kullanıma açık tutar.
  3. "Hiçbir şey yapma", hem Spark DataFrame'lerini hem de bağlamı canlı tutar. Halihazırda yürütülen iş akışını kaydeder ve daha sonra yeniden açarsanız, Spark düğümlerinin ara sonuçlarına erişmeye devam edebilirsiniz. Bu en muhafazakar seçenektir, ancak aynı zamanda yürütme makinesinde yer ve belleği meşgul eder.

Seçenek numarası 2, kaynak tüketimi ve yeniden kullanım arasında bir uzlaşma olarak varsayılan olarak ayarlanmıştır.

İşbirlikçi Filtreleme ile Öneri Motorunu Oluşturmak için İş Akışı

 
 
Bu iş akışında, Kıvılcım MLlib Kullanıcıların ve ürünlerin küçük bir dizi gizli faktör tarafından tanımlandığı CF algoritmasının uygulanması. Bu gizli faktörler daha sonra veri kümesindeki eksik girişleri tahmin etmek için kullanılabilir. Spark MLlib, gizli faktörleri öğrenmek için matris çarpanlarına ayırma için ALS algoritmasını kullanır.


Notlar. Mevcut kullanıcının film tercihlerinin eğitim setinin bir parçası olması gerekmektedir. Bu nedenle, mevcut kullanıcıdan tercihlerinin bir örneğini almak için 20 rastgele filmi derecelendirmesini istiyoruz.


CF tekniği, bir Spark kümesinde çalışan Spark Collaborative Filtering Learner (MLlib) düğümünde uygulanır ve eğitilir. Düğüm, giriş portunda ürün, kullanıcı ve ilgili derecelendirme ile bir dizi kayıt alır. Çıkış bağlantı noktasında, kullanıcı ve nesne dahil olmak üzere tüm girdi veri satırları için öneri modelini ve tahmin edilen derecelendirmeleri üretir.


Notlar. Düğüm tarafından çıktı verilen matris çarpanlara ayırma modeli, yürütmede kullanılan Spark DataFrames/RDD'lere referanslar içerir ve bu nedenle bağımsız değildir. Başvurulan Spark DataFrames/RDD'ler, diğer Spark düğümlerinde olduğu gibi, düğüm sıfırlandığında veya iş akışı kapatıldığında silinir. Bu nedenle, model başka bir iş akışında başka bir bağlamda yeniden kullanılamaz.


Orijinal film derecelendirme veri seti, bir eğitim seti ve bir test setine bölünmüştür. Eğitim seti, bir Spark Collaborative Filtering Learner (MLlib) düğümü ile tavsiyeleri oluşturmak için kullanıldı ve test seti, kalitelerini bir jenerik ile değerlendirmek için kullanıldı. Kıvılcım Tahmincisi (MLlib) düğüm ve ardından bir Spark Sayısal Puanlayıcı düğümü.

KNIME yerlisi gibi Sayısal Puanlayıcı Kıvılcım Sayısal Puanlayıcı düğümü, orijinal değerler - bu durumda derecelendirmeler - ve tahmin edilen değerler arasında bir dizi sayısal hata ölçümü hesaplar. Derecelendirmeler, bir kullanıcı tarafından bir filme atanan yıldız sayısı olarak 0 ile 5 arasında değişir. Tahmini derecelendirmeler, orijinal derecelendirmeleri 0 ile 5 arasında tahmin etmeye çalışır.

Test setindeki hata metrikleri, 0.6'lık bir ortalama mutlak hata ve 0.8'lik bir ortalama karesel hata gösterir. Temel olarak, tahmin edilen derecelendirmeler, öneri amacımız için yeterince yakın olan orijinal derecelendirmelerden +/- 0.6 sapabilir.


Spark Numeric Scorer düğümü ile orijinal film derecelendirmeleri ve tahmin edilen film derecelendirmeleri üzerinde hesaplanan sayısal hata metrikleri
Şekil 4: Orijinal film derecelendirmeleri ve Spark Numeric Scorer düğümü ile tahmin edilen film derecelendirmeleri üzerinde hesaplanan sayısal hata metrikleri.

açılma

 
 
Daha önce mevcut kullanıcıdan rastgele seçilmiş 20 filmi derecelendirmesini istemiştik. Bu derecelendirmeler eğitim setine eklendi. Genel bir Kıvılcım Tahmini düğümü kullanarak, şimdi mevcut kullanıcımızın (ID=999999) kalan tüm derecelendirilmemiş filmlerdeki derecelendirmelerini tahmin ediyoruz. Filmler daha sonra tahmin edilen derecelendirmelere göre sıralanır ve ilk 10, KNIME WebPortal aracılığıyla bir web sayfasında mevcut kullanıcıya önerilir.

Rastgele seçilen 20 filmdeki derecelendirmelerime dayanarak, bu deney için mevcut kullanıcı olmak için gönüllü olduğumdan, aşağıda gösterilen 10 önerilen film listesini geri aldım. Çoğunu görmedim; ancak, bazılarını tanıyorum ve takdir ediyorum. Önümüzdeki ay yapılacaklar listeme artık “önerilen filmleri izleme”yi de ekleyeceğim.



Şekil 5: Rastgele seçilmiş 10 filmden oluşan daha önceki derecelendirmelerime göre önerilen en iyi 20 filmin son listesi.


Notlar. Lütfen bunun eğitim ve dağıtımın aynı iş akışına dahil edildiği nadir durumlardan biri olduğuna dikkat edin.


Aslında, Spark Collaborative Filtering Learner (MLlib) düğümü tarafından üretilen CF modeli bağımsız değildir ancak eğitim yürütmesi sırasında kullanılan Spark DataFrame/RDD'lere bağlıdır ve bu nedenle daha sonra ayrı bir dağıtım iş akışında yeniden kullanılamaz.

CF algoritması hesaplama açısından ağır değildir ve yürütülmesi uzun sürmez. Bu nedenle, eğitim aşamasını dağıtım iş akışına dahil etmek, öneri performansını önemli ölçüde engellemez.

Ancak, öneri performansı gerçekten bir sorunsa, iş akışı CF modeli oluşturulana kadar KNIME Analitik Platformu veya KNIME Sunucusunda kısmen yürütülebilir ve ardından iş akışının geri kalanı eğitim setindeki mevcut her kullanıcı için talep üzerine yürütülür.

Son iş akışı KNIME Hub'da mevcuttur okuyun.



Şekil 6: Film Önerileri iş akışı. Bu iş akışı önce mevcut kullanıcıdan web tarayıcısı aracılığıyla rastgele seçilen 20 filmi derecelendirmesini ister ve bu verilerle bir CF modeli eğitir, bir dizi sayısal hata metriği aracılığıyla model performansını değerlendirir ve son olarak önerilen en iyi 10 filmin listesini önerir. daha önce toplanan derecelendirmelere göre.

Referanslar

 
 
"İşbirlikçi Filtreleme", Wikipedia https://en.wikipedia.org/wiki/Collaborative_filtering

Y. Koren, R. Bell, C. Volinsky, “Tavsiye Edici Sistemler için Matrix Factorization Techniques”, Computer Journal, Cilt 42 Sayı 8, Ağustos 2009, Sayfa 30–37 https://dl.acm.org/citation.cfm?id=1608614

“İşbirlikçi Filtreleme. RDD tabanlı API” Spark MLlib uygulaması http://spark.apache.org/docs/latest/mllib-collaborative-filtering.html

 
Bio: Rosaria Silipo yalnızca veri madenciliği, makine öğrenimi, raporlama ve veri ambarı konusunda uzman olmakla kalmayıp, KNIME veri madenciliği motorunda tanınmış bir uzman haline geldi ve hakkında üç kitap yayınladı: KNIME Acemi Şansı, KNIME Yemek Kitabı ve KNIME SAS Kullanıcıları için Kitapçık. Daha önce Rosaria, Avrupa çapında birçok şirket için serbest veri analisti olarak çalıştı. Ayrıca Viseca'da (Zürih) SAS geliştirme grubuna liderlik etti, Spoken Translation'da (Berkeley, California) C# dilinde konuşmadan metne ve metinden konuşmaya arayüzlerini uyguladı ve farklı dillerde bir dizi konuşma tanıma motoru geliştirdi. Nuance Communications'da (Menlo Park, California). Rosaria, doktorasını 1996 yılında İtalya'daki Floransa Üniversitesi'nden biyomedikal mühendisliği alanında aldı.

İlk yayınlandığı gibi Gelişmiş Veri Bilimi için Düşük Kod.

orijinal. İzinle yeniden yayınlandı.

İlgili:

Plato Ai. Web3 Yeniden Düşünüldü. Güçlendirilmiş Veri Zekası.
Erişmek için buraya tıklayın.

Kaynak: https://www.kdnuggets.com/2021/12/movie-recommendations-spark-collaborative-filtering.html

spot_img

En Son İstihbarat

spot_img