Derin öğrenmeli filmler nasıl tavsiye edilir? Size kendi öneri sisteminiz olmayı öğretin!

Giriş

Hemen hemen herkes boş zamanlarını ailesi ve arkadaşlarıyla film izleyerek geçirmeyi sever. Herkes bu deneyimi yaşamış olabilir: Önümüzdeki iki saat içinde bir film izlemek istedim ama 20 dakika kanepede oturdum ve ne izleyeceğimi bilmiyordum. Seçim yine zordu ve ruh halim güzelleşti. Sinirli. Bu nedenle, film seçerken önerilerde bulunacak bir bilgisayar temsilcisine ihtiyacımız var.

Artık film akıllı öneri sistemi günlük hayatın bir parçası haline geldi.

Data Science Central bir keresinde şunları söyledi:

"Zor verilerin elde edilmesi zor olsa da, konuya aşina olan insanlar, Amazon ve Netflix gibi büyük e-ticaret platformları için öneri sisteminin onları% 10 ila% 25'e varan gelir artışı sağlayacağını tahmin ediyor."

Bu projede, Film önerisi için bazı temel algoritmalar üzerinde çalıştım ve derin öğrenmeyi film öneri sistemine entegre etmeye çalıştım.

Eğlenceyi görsel sanatla birleştiren film buna iyi bir örnektir. Film afişleri, film bilgilerini doğrudan ve hızlı bir şekilde izleyiciye iletebilir. Design Mantic şunları söyledi: "Film afişleri, piyasaya sürülmeden önce veya sonra, hile yaratmada ana faktördür. Çoğu kişi (hedef kitle) bilet alıp almayacağına ya da posterlere göre film seyretmemeye karar verir." Hatta sadece poster yazı tiplerini temel alabiliriz, Bu filmin havası üzerine spekülasyon yapmak için.

Kulağa biraz sihir gibi geliyor ama postere bakarak filmin türünü tahmin etmek gerçekten mümkün. Beni örnek olarak alın, bu filmi izlemek isteyip istemediğimi anlamak için postere bakın. Örneğin çizgi film hayranı değilim, çizgi film temalı bir afiş gördüğümde bunun benim yemeğim olmadığını anladım. Karar verme süreci basittir ve film incelemelerini okumayı gerektirmez (bu incelemeleri okuyacak gerçekten kimin zamanı olduğundan emin değil). Bu nedenle, standart film öneri algoritmasına ek olarak, posterleri işlemek ve kullanıcılara benzer filmler önermek için derin öğrenmeyi de kullandım. Nihai hedef, insan vizyonunu taklit etmektir ve yalnızca posterleri gözlemleyerek, sezgisel bir film öneri sistemi oluşturmak için derin öğrenmeyi kullanabiliriz. Proje, Ethan Rosenthal'ın blogundan ilham aldı. Bu projenin algoritmasına uyum sağlamak için blogundaki kodu değiştirdim.

MovieLens'ten indirilen film veri kümesini kullanıyoruz. 100.000 derecelendirmeye ve 1.300 etikete bölünmüş 9066 film ve 671 kullanıcı içerir. Bu veri seti en son 10/2016 tarihinde güncellenmiştir.

İşbirlikçi filtreleme

Kabaca konuşursak, üç tür öneri sistemi vardır (basit derecelendirme yöntemleri dahil değildir)

  • İçeriğe dayalı öneriler

  • İşbirlikçi filtreleme

  • Karışık model

"İçeriğe dayalı öneri" bir gerileme sorunudur. Film içeriğini, kullanıcıların film derecelendirmelerini tahmin etmek için bir özellik olarak kullanıyoruz.

"İşbirliğine dayalı filtreleme" öneri sisteminde, içerik özelliklerini önceden elde etmek genellikle imkansızdır. Olası özellikleri öğrenmek ve kullanıcının filmi derecelendirmesini tahmin etmek için kullanıcılar arasındaki benzerliği (kullanıcılar bir filme aynı derecelendirmeyi vermiş) ve filmler arasındaki benzerliği (benzer kullanıcı derecelendirmelerine sahip filmler) kullanır. Ayrıca filmlerin özelliklerini öğrendikten sonra, filmler arasındaki benzerliği ölçebilir ve kullanıcının geçmiş izleme bilgilerine göre kullanıcıya en benzer filmleri önerebiliriz.

"İçerik tabanlı öneri" ve "işbirliğine dayalı filtreleme", 10 yıldan daha uzun bir süre önce en gelişmiş teknolojilerdi. Açıkçası, tahmin etkisini geliştirebilecek birçok model ve algoritma var. Örneğin, kullanıcı film derecelendirme bilgilerinin önceden olmaması durumunda, örtük matris ayrıştırma, kullanıcı film derecelendirmelerini tercihler ve güven düzeyleriyle değiştirmek için kullanılabilir - örneğin, ortak filtreleme gerçekleştirmek için kullanıcının film önerilerine kaç kez tıkladığı. Ayrıca, tahmin doğruluğunu artırmak için içeriği yan bilgi olarak kullanarak "içerik önerisi" ve "işbirliğine dayalı filtreleme" yöntemlerini de birleştirebiliriz. Bu hibrit yöntem, "Sıralamayı Öğrenme" algoritması kullanılarak uygulanabilir.

Bu projede, "işbirlikçi filtreleme" yaklaşımına odaklanacağım. İlk önce nasıl olduğunu tartışacağım Regresyon kullanmayın, Fakat Derecelendirmeyi tahmin etmek için film (kullanıcı) benzerliği , Ve benzerliğe göre film önerileri yapın. O zaman nasıl olduğunu tartışacağım Eşzamanlı olarak potansiyel özellikleri öğrenmek ve film önerileri yapmak için regresyonu kullanın . Son konuşma Öneri sistemlerinde derin öğrenme nasıl kullanılır .

Film benzerliği

İşbirliğine dayalı filtrelemeye dayalı bir öneri sistemi için önce bir puanlama matrisi oluşturulmalıdır. Bunların arasında, her satır bir kullanıcıyı temsil eder ve her sütun, belirli bir filmin derecelendirmesine karşılık gelir. Oluşturulan puanlama matrisi aşağıdaki gibidir:

df = pd.read_csv ('rating.csv', sep = ',')

df_id = pd.read_csv ('links.csv', sep = ',')

df = pd.merge (df, df_id, on =)

rating_matrix = np.zeros ((df.userId.unique.shape, max (df.movieId)))

df.itertuples'daki satır için:

rating_matrix = satır

rating_matrix = rating_matrix

Burada "rating.csv" kullanıcı kimliği, film kimliği, derecelendirme ve zaman bilgilerini içerir; "link.csv" ise film kimliği, IMDB kimliği ve TMDB kimliğini içerir. Film Veritabanı web sitesinden poster almak için API kullanan her film bir IMDB kimliği gerektirir - bu nedenle iki tabloyu bir araya getiriyoruz. Puanlama matrisinin seyrekliğini aşağıdaki gibi test ettik:

seyreklik = kayan nokta (len (rating.nonzero))

seyreklik / = (rating.shape * rating.shape)

seyreklik * = 100

Sıfır olmayan giriş yalnızca% 1.40 olduğunda, derecelendirme matrisi seyrektir. Şimdi, eğitim ve test için, puanlama matrisini iki küçük matrise ayırıyoruz. Derecelendirme matrisinden 10 derecelendirmeyi çıkardık ve test setine koyduk.

train_matrix = rating_matrix.copy

test_matrix = np.zeros (rating_matrix.shape)

xrange'deki i için (rating_matrix.shape):

rating_idx = np.random.choice (

rating_matrix.nonzero,

size = 10,

replace = True)

train_matrix = 0.0

test_matrix = rating_matrix

Kullanıcılar / filmlerdeki (Kosinüs) benzerliğini aşağıdaki formüle göre hesaplayın

Burada s (u, v), kullanıcılar u ve v arasındaki kosinüs benzerliğidir.

benzerlik_kullanıcısı = tren_matrix.dot (tren_matrix.T) + 1e-9

normlar = np.array ()

benzerlik_kullanıcısı = (benzerlik_kullanıcısı / (normlar * normlarT))

benzerlik_filmi = tren_matrix.T.dot (tren_matrix) + 1e-9

normlar = np.array ()

benzerlik_movie = (benzerlik_filmi / (normlar * normlar T))

Kullanıcılar arasındaki benzerliği kullanarak, her kullanıcının filmle ilgili derecelendirmesini tahmin edebilir ve karşılık gelen MSE'yi hesaplayabiliriz. Tahmin, benzer kullanıcıların derecelendirmelerine dayanmaktadır. Özellikle puan tahmini aşağıdaki formüle göre yapılabilir:

Kullanıcı u'nun i filmi için tahmini, v kullanıcısının film derecelendirmelerinin (normalleştirilmiş) ağırlıklı toplamıdır. Ağırlık, kullanıcılar u ve v arasındaki benzerliktir.

sklearn.metrics'ten import mean_squared_error

tahmin = benzerlik_kullanıcı.dot (tren_matrix) / np.array (). T

tahmin = tahmin.flatten

test_vector = test_matrix.flatten

mse = mean_squared_error (tahmin, test_vector)

print'MSE = '+ str (mse)

Öngörülen MSE 9.8252'dir. Bu sayı ne anlama geliyor? Bu öneri sistemi iyi mi yoksa kötü mü? Tahmin etkisini değerlendirmek için sadece MSE sonuçlarına bakmak pek sezgisel değildir. Bu nedenle, değerlendirmek için doğrudan film önerilerini kontrol ediyoruz. İlgilendiğimiz bir filmi arayacağız ve bir bilgisayar temsilcisine birkaç film önereceğiz. Öncelikle, hangi filmlerin önerildiğini görebilmek için ilgili film posterlerini alın. Film Veritabanı web sitesinden poster almak için IMDB kimliğini kullanıyoruz ve API'sini kullanıyoruz.

ithalat istekleri

json içe aktar

IPython.display import görüntüsünden

IPython.display içe aktarma ekranından

IPython.display HTML içeriğinden

idx_to_movie = {}

df_id.itertuples'daki satır için:

idx_to_movie = satır

idx_to_movie

k = 6

idx = 0

movies =

filmler = filtre (lambda imdb: len (str (imdb)) == 6, filmler)

n_display = 5

URL = * n_display

IMDB = * n_display

i = 0

filmlerdeki filmler için:

(URL , IMDB ) = get_poster (film, temel_url)

i + = 1

resimler = ''

aralıktaki i için (n_display):

resimler + = "

float: sol; sınır: 1px düz siyah; 'src ='% s '/ > "\

% URL

display (HTML (resimler))

İşte eğlence geliyor! Bir film arayalım ve en benzer dört öneriye bakalım. Sol tarafta birincisi olan "Ateş Korsanları" nı ve ardından önerilen dört filmi aramaya çalışalım.

"The Wire", Robert De Niro ve Al Pacino'nun oynadığı, 1995 yılında gösterime giren bir Amerikan polisiye filmi. Arama sonuçları iyi görünüyor. Ancak "Las Vegas'tan ayrılmak" iyi bir öneri olmayabilir. Sanırım sebebi Nicholas Cage, "The Rock" ve "The Wire" ı seven seyircilerin olması. Bu bakımdan iyi bir tavsiye. Bu, benzerlik matrisinin ve işbirliğine dayalı filtrelemenin dezavantajlarından biri olabilir. Daha fazla örnek deneyelim.

Bu iyi görünüyor. "Oyuncak Hikayesi" ni seven izleyicilere kesinlikle "Oyuncak Hikayesi 2" önerilmelidir. Ama "Forrest Gump" bana göre uygunsuz. Açıkçası, Tom Hanks'ın sesi "Toy Story" de göründüğü için, "Forrest Gump" da tavsiye edilmişti. "Oyuncak Hikayesi" ile "Forrest Gump" arasındaki farkı, film türü, ruh hali vb. Gibi postere bakarak anlayabileceğimizi belirtmekte fayda var. Her çocuğun "Oyuncak Hikayesi" nden hoşlandığını varsayarsak, "Forrest Gump" ı görmezden gelebilir.

Alternatif stokastik gradyan inişi

Önceki tartışmada, kullanıcı ile film arasındaki kosinüs benzerliğini hesapladık ve bunu kullanıcının filmi değerlendirmesini tahmin etmek ve belirli bir filme dayalı başka filmler önermek için kullandık. Şimdi, sorunu bir regresyon problemi olarak ele alabiliriz; gizli y özelliklerini tüm filmlere ekleyebiliriz ve tüm kullanıcılara x ağırlık vektörü ekleyebiliriz. Amaç, skor tarafından tahmin edilen MSE'yi en aza indirmektir (2-norm düzenleme koşulu altında).

Leifeng.com hatırlatıyor: Ağırlık vektörü ve özellik vektörü karar değişkenleridir. Açıkçası, bu bir dışbükey işlev sorunu değildir ve şimdi bu dışbükey olmayan işlevin yakınsaması hakkında çok fazla endişelenmeye gerek yoktur. Konveks olmayan fonksiyonların optimizasyon problemini çözmenin birçok yolu vardır. Bir yöntem, ağırlık vektörünü (kullanıcı için) ve özellik vektörünü (film için) alternatif bir şekilde çözmektir. Ağırlık vektörü işlenirken, özellik vektörünün sabit bir vektör olduğu varsayılır; özellik vektörü işlenirken ağırlık vektörünün sabit bir vektör olduğu varsayılır. Bu regresyon problemini çözmenin bir başka yolu, ağırlık vektörünün güncellemesini özellik vektörü ile birleştirmek ve bunları aynı yinelemede güncellemektir. Ek olarak, hesaplamayı hızlandırmak için stokastik gradyan inişi de kullanılabilir. Burada, bu regresyon problemini çözmek için stokastik gradyan inişini kullanıyorum.MSE tahminimiz aşağıdaki gibidir:

Bu MSE, benzerlik matrisi ile elde edilenden çok daha küçüktür. Elbette, model ve algoritma parametrelerini ayarlamak için ızgara arama ve çapraz doğrulama da kullanabiliriz. Film aramanın önerilerine bakın:

Harika görünmüyor. Sanırım bu dört film bana "Tel Çalmak" aranarak tavsiye edilmemeli, "Tel Çalmak" ile tamamen alakasız görünüyorlar Bu dört film romantik ve dramatik. Büyük yıldızlara sahip bir Amerikan suç filmi arıyorsanız, neden bir drama filmi izlemek isteyeyim? Bu beni şaşırtıyor - iyi bir MSE sonucu bize alakasız bir şeyler verebilir önermek.

Bu nedenle, işbirliğine dayalı filtrelemeye dayalı öneri sisteminin zayıf yönlerini tartışıyoruz.

  • İşbirliğine dayalı filtreleme yöntemleri, benzer kullanıcıları ve filmleri bulmak için verileri kullanır ve bu da popüler filmlerin tavsiye edilmesini niş filmlerden daha kolay hale getirir.

  • Yeni çıkan filmler çok fazla kullanım verisine sahip olmadığından, işbirliğine dayalı filtrelemenin kullanıcılara herhangi bir yeni film önermesini beklemek gerçekçi değildir.

Daha sonra, derin öğrenmeli filmleri öneren işbirliğine dayalı filtreleme ile uğraşmak için başka bir yöntemi ele alacağız.

Derin öğrenme

Keras'taki sinir ağını eğitmek için VGG16'yı kullanacağız. Veri setimizde hedef yoktur, özellik vektörü olarak sadece dördüncü alt katman. Bu özellik vektörünü, veri kümesindeki her filmi açıklamak için kullanıyoruz. Lei Feng.com, sinir ağını eğitmeden önce bazı ön işlemlerin gerekli olduğunu hatırlatır.Eğitim süreci aşağıdaki gibidir.

df_id = pd.read_csv ('links.csv', sep = ',')

idx_to_movie = {}

df_id.itertuples'daki satır için:

idx_to_movie = satır

total_movies = 9000

filmler = * total_movies

aralıktaki i için (len (filmler)):

idx_to_movie.keys ve len (str (idx_to_movie )) == 6:

filmler = (idx_to_movie )

filmler = filtre (lambda imdb: imdb! = 0, filmler)

total_movies = len (filmler)

URL = * toplam_filmler

IMDB = * toplam_filmler

URL_IMDB = {"url":, "imdb":}

i = 0

filmlerdeki filmler için:

(URL , IMDB ) = get_poster (film, temel_url)

eğer URL ! = base_url + "":

URL_IMDB.append (URL )

URL_IMDB.append (IMDB )

i + = 1

# URL = filtre (lambda url: url! = Base_url + "", URL)

df = pd.DataFrame (veri = URL_IMDB)

total_movies = len (df)

urllib'i içe aktar

poster_path = "/ Kullanıcılar / wannjiun / Masaüstü / nycdsa / project_5_recommender / posters /"

aralıktaki i için (total_movies):

urllib.urlretrieve (df.url , poster_path + str (i) + ".jpg")

keras.applications'tan VGG16'yı içe aktarın

keras.applications.vgg16'dan preprocess_input dosyasını içe aktarın

keras'tan. önişleme görüntüyü kimage olarak içe aktar

image = * total_filmler

x = * toplam_filmler

aralıktaki i için (total_movies):

görüntü = kimage.load_img (poster_path + str (i) + ".jpg", target_size = (224, 224))

x = kimage.img_to_array (resim )

x = np.expand_dims (x , eksen = 0)

x = preprocess_input (x )

model = VGG16 (include_top = False, ağırlıklar = 'imagenet')

tahmin = * total_movies

matrix_res = np.zeros ()

aralıktaki i için (total_movies):

tahmin = model.predict (x ) .ravel

matrix_res = tahmin

benzerlik_deep = matrix_res.dot (matrix_res.T)

normlar = np.array ()

benzerlik_deep = benzerlik_deep / normlar / norms.T

Kodda, film afişini TMDB web sitesinden almak için önce API ve IMDB kimliğini kullanıyoruz. Ardından, sinir ağını eğitmek için VGG16'ya posterler sağlayın. Son olarak, VGG16 tarafından öğrenilen özellikler, kosinüs benzerliğini hesaplamak için kullanılır. Film benzerliğini elde ettikten sonra en yüksek benzerliğe sahip filmi önerebiliriz. VGG16'nın toplam 25088 öğrenilen özelliği vardır ve bu özellikleri veri kümesindeki her filmi tanımlamak için kullanırız.

Derin öğrenmeyi kullanan bir film öneri sistemine bir göz atalım.

"The Fuse" artık aşk dramasında görünmüyor! Bu film afişleri aynı özelliklerden bazılarına sahiptir: koyu mavi, üzerlerindeki karakterler vb. "Oyuncak Hikayesi" ni tekrar deneyelim.

"Forrest Gump" artık tavsiye edilmeyecek! Sonuç güzel görünüyor, çok rahatladım, hadi başka bir şey deneyelim!

Bu posterlerde bir veya iki kişi olduğunu ve harika bir teması olduğunu unutmayın.

Bu posterler, izleyiciye, ilgili filmin atmosferinin neşeli ve gergin olduğunu ve çok sayıda aksiyon çekimi olduğunu, dolayısıyla posterin renginin de çok güçlü olduğunu bildirmek istiyor.

Bir önceki grubun aksine, bu afişler izleyiciye şunu söylemek istiyor: Bu filmler bir bekarlığa dair.

"Kung Fu Panda" ya benzer filmler bulduk.

Bu grup çok ilginç. Bir grup benzer canavar ve Tom Cruise!

Tüm bu afişlerde benzer pozlara sahip kadınlar var. Bekle, bu O'Neill! ?

Örümcek Adam başarıyla bulundu!

Bu posterlerin tipografik tasarımı çok yakındır.

sonuç olarak

Öneri sistemlerinde derin öğrenmeyi kullanmanın birkaç yöntemi vardır:

  • Denetimsiz öğrenme

  • İşbirliğine dayalı filtrelemeden potansiyel özellikleri tahmin edin

  • Derin öğrenmenin ürettiği özellikleri yardımcı bilgi olarak kullanın

Film afişleri, hile ve ilgi uyandıran görsel unsurlara sahiptir. Bu projede, filmlerin benzerliğini posterler aracılığıyla öğrenmek için denetimsiz derin öğrenmeyi kullandık. Açıkçası, bu tavsiye sistemlerinde derin öğrenmeyi kullanmanın sadece ilk adımı ve deneyebileceğimiz pek çok şey var. Örneğin, işbirliğine dayalı filtreleme tarafından oluşturulan potansiyel özellikleri tahmin etmek için derin öğrenmeyi kullanabiliriz. Spotify'ın müzik önerisi de benzer bir yöntem kullanır, bu da görüntü işlemeden farklıdır.Şarkının sesini işleyerek işbirliğine dayalı filtrelemedeki potansiyel özellikleri tahmin etmek için derin öğrenmeyi kullanırlar. Başka bir olası yön var. Tahmin doğruluğunu artırmak için derin öğrenmede öğrenilen özellikleri yardımcı bilgi olarak kullanır.

Lei Feng.com tarafından derlenen nycdatascience aracılığıyla

"TensorFlow ve Sinir Ağı Algoritması Gelişmiş Uygulama Sınıfı" başladı!

Temelden ileri düzeye, teori + gerçek savaş, TensorFlow'un tek noktadan derinlemesine anlaşılması!

Bu kurs, derin öğrenme geliştiricilerine yöneliktir ve TensorFlow'un görüntü tanıma ve metin analizi gibi belirli sorunları çözmek için nasıl kullanılacağını öğretir. Kurs 10 haftayı kapsıyor.TensorFlow'un ilkeleri ve temel pratik becerileriyle başlayacak ve öğrencilere TensorFlow'da adım adım CNN, kendi kendine kodlama, RNN, GAN ve diğer modellerin nasıl oluşturulacağını öğretecek ve son olarak TensorFlow'a dayalı eksiksiz bir derin öğrenme geliştirme setinde ustalaşacak. beceri.

İki öğretim görevlisi Tong Da ve Bai Fachuan, ThoughtWorks'ün kıdemli teknik uzmanlarıdır ve büyük veri platformları ve derin öğrenme sistemi geliştirme projeleri oluşturma konusunda zengin deneyime sahiptir.

Saat: Her Salı ve Perşembe gecesi 20: 00-21: 00

Kurs süresi: Toplam 20 saat, 10 haftaya bölünmüş, haftada 2 kez, her seferinde 1 saat

Çevrimiçi öğretim adresi:

"Dedektif Pikachu" nun canlı çekim sahnesine göz atmak için herkes çok çalışıyor.
önceki
"Tanıdıkların anonim olarak sosyalleşmesi" yolu uygulanabilir mi?
Sonraki
Sega, "P3D" ve "P5D" giyim bağlama niyetlerini araştırıyor, oyuncular şöyle cevapladı
Çinli izleyiciyi ağlatsa bile hoşuma gittiğini söyleyemem
Feng Xiaogang, "Yeni Feng Kızı" ile "Fang Hua" yı "net bir akış" olarak adlandırdı.
Tarihte yüzyılın en ilgi çekici dramasının dönüşünü karşılamak için size bir popüler bilim makalesi gönderin
Geek food: elektrikli fırında net ünlü çıtır çıtır ananas ekmeği yapmak kolay
Derinlemesine Sır: Çin'in X86 CPU teknolojisi nereden geldi?
3 kasa bir gecede arandı ve 60.000 yuan'den fazla kaybedildi ve 21 kameranın videoları maskeli hırsızlar tarafından kilitlendi
Bu tarayıcı eklentisini hiç duymadınız, kendinize geek demekten utanıyorsunuz
Sosyal ağa dayalı bakım ofisi arka uç yazılımı araştırması
Öğlen Yıldızı Haberleri | Uyuşturucu bağımlılığından 15 ünlü tutuklandı, Adam Wenjun'un saçları bembeyaz, Yin Xiangjie iş performansından geçimini sağlıyor; AFC yıllık ödülü: Wang Shuang Asya Futbol
Ekran Süresi | Yetenek güzellikten daha güzel, Sofia Coppola
Xiaomi MIX3 ile başlayın! Kayar tam ekran "teknolojinin bir tarafını, sanatın diğer tarafını" nasıl yorumluyor?
To Top