丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗(yàn),強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給AI研習(xí)社-譯站
發(fā)送

0

使用深度學(xué)習(xí)建立電影推薦系統(tǒng),不到10分鐘即可進(jìn)行DIY!

本文作者: AI研習(xí)社-譯站 2020-11-02 15:35
導(dǎo)語:學(xué)習(xí)本文需要滿足以下條件:對新概念的好奇心,渴望部署自己的Web應(yīng)用程序。

譯者:AI研習(xí)社(季一帆

雙語原文鏈接:https://www.yanxishe.com/TextTranslation/2968


使用深度學(xué)習(xí)建立電影推薦系統(tǒng),不到10分鐘即可進(jìn)行DIY!

一個基于深度學(xué)習(xí)的電影推薦系統(tǒng)

你看過《盜夢空間》嗎?是否被影片中的夢中夢燒腦,或是想象現(xiàn)實(shí)世界中物品能否像電影中那樣漂浮在空中?至少目前我們沒有辦法使物體懸浮在空中,但是,數(shù)據(jù)科學(xué)家可以將python向量映射到多維空間。

本文將為介紹一個電影推薦系統(tǒng),在推薦系統(tǒng)中,有許多電影向量懸浮于多維空間。同時,本文介紹的推薦系統(tǒng)無需租用服務(wù)器、編寫代碼、抓取數(shù)據(jù)或網(wǎng)頁維護(hù)等繁雜的工作,非常容易上手。此外,你還可以將其擴(kuò)展到社交網(wǎng)絡(luò)、股票、運(yùn)動員、電視節(jié)目、書籍等領(lǐng)域。想象一下,眾多實(shí)例都會被映射到多維矢量空間,一覽無余,那時多么直觀啊。

你可以點(diǎn)擊該鏈接預(yù)覽我們的電影推薦系統(tǒng)。

學(xué)習(xí)本文需要滿足以下條件:對新概念的好奇心,渴望部署自己的Web應(yīng)用程序。

同時,你最好對這些知識有所了解:word2vec嵌入,神經(jīng)網(wǎng)絡(luò),Tensorflow,Github和推薦系統(tǒng)。

工具/概念:

1.Embedding:將高維向量投射到低維稠密向量空間。由于表示圖像/單詞的像素或標(biāo)記特征可能需要數(shù)百萬個參數(shù),因此我們需要定義一種受限統(tǒng)一結(jié)構(gòu),以此作為ML模型的輸入。在對高維或大量特征進(jìn)行建模以導(dǎo)出受限數(shù)據(jù)大小模式時,通常會遇到維數(shù)災(zāi)難,即模型無法從輸入數(shù)據(jù)中提取相關(guān)模式。通常我們會使用主成分分析(PCA),TSNE或L1正則化等方法進(jìn)行降維,但是對于極高維度和稀疏數(shù)據(jù)集(如Wikipedia語料庫中的數(shù)百萬個標(biāo)記),基于神經(jīng)網(wǎng)絡(luò)的嵌入可以很好的提取相關(guān)屬性。

嵌入能夠捕獲標(biāo)記或像素之間的語義相似性,并將其投影到向量空間中。例如,我們知道“費(fèi)德勒”和“網(wǎng)球”之間存在密切關(guān)聯(lián),那么在100維嵌入空間中,“費(fèi)德勒”比“特朗普”更接近“網(wǎng)球”。

圖示如下:

使用深度學(xué)習(xí)建立電影推薦系統(tǒng),不到10分鐘即可進(jìn)行DIY!

word2vec向量相似性

2. Tensorboard Projector:Tensorflow開源的Web應(yīng)用,可以接收模型嵌入并在低維空間進(jìn)行渲染,實(shí)現(xiàn)可視化交互。在tensorboard主頁上可以查看Wikipedia和MNIST語料庫的示例投影。建議讀者花時間具體了解下映射、濾波、嵌入空間以及各種降維算法。

使用深度學(xué)習(xí)建立電影推薦系統(tǒng),不到10分鐘即可進(jìn)行DIY!

Wikipedia的Tensorboard項(xiàng)目示例

3.降維算法盡管模型嵌入維度為100,但人眼只能看到3維物品,為此,我們需要將矢量壓縮為2維或3維形式。

方法a:主成分分析PCA。一種常用的降維算法,可提高模型的可解釋性,同時最大程度地減少信息丟失。其主要思想是,構(gòu)建新的互不相關(guān)的主成分,最大程度地提高方差,即將包含最大信息的特征轉(zhuǎn)化為低維主成分。根據(jù)主成分增量方差(如90%的方差)確定截止值。

方法bt分布隨機(jī)鄰域嵌入TSNE。一種用于探索高維數(shù)據(jù)的非線性降維算法,將多維數(shù)據(jù)映射到適合于人類觀察的兩個或多個維度。該算法的關(guān)鍵在于最小化兩個分布之間的差異,即測量輸入對象的成對相似性的分布以及相應(yīng)低維嵌入點(diǎn)的成對相似性的分布。

PCA和TSNE之間的主要區(qū)別為:一是PCA為線性降維,而TSNE是非線性度降維;二是目標(biāo)函數(shù)不同,PCA試圖保留全局?jǐn)?shù)據(jù)結(jié)構(gòu),而TSNE保留局部結(jié)構(gòu)。

Geeks For Geeks更詳細(xì)的指出了TSNE和PCA之間的八項(xiàng)區(qū)別,為人們提供了很好的參考。

4.MovieLens數(shù)據(jù)集:作為電影推薦系統(tǒng)的標(biāo)準(zhǔn)數(shù)據(jù)集,該數(shù)據(jù)集提供[userid-movieid]數(shù)據(jù),包含58,000電影和2,600萬評分。自1997年以來,該數(shù)據(jù)對于推動推薦系統(tǒng)的發(fā)展起著重要作用。在Google books搜索“ movielens”得到2,750個結(jié)果,在Google Scholar搜索得到7,580個結(jié)果,MovieLens數(shù)據(jù)集的影響可見一斑。應(yīng)用該數(shù)據(jù)集可基于SVD矩陣或神經(jīng)網(wǎng)絡(luò)構(gòu)建面向電影條目或是用戶的推薦系統(tǒng),并根據(jù)過去的偏好預(yù)測新用戶評分。

根據(jù)上述這些概念,我們可以創(chuàng)建一個電影推薦的Web應(yīng)用,使用的電影數(shù)據(jù)包括3700Netflix電影和上述數(shù)據(jù)集中的58k電影。(數(shù)據(jù)源見此)

就像word2vec嵌入將相近單詞映射到向量空間后距離較小,我們在100維向量空間中對電影進(jìn)行嵌入,這樣就將數(shù)據(jù)維度從58k(類似one-hot表示)減少到100k(嵌入表示)。

輸入MovieLens數(shù)據(jù)集,該數(shù)據(jù)集包含用戶對電影的評分,分值從0到5。為避免噪聲,MovieLens剔除了評分次數(shù)低于20且統(tǒng)計不準(zhǔn)確的用戶。同時,該數(shù)據(jù)集有諸多版本,范圍從[1k用戶* 1.7k電影]到[280k用戶* 58k電影],使用時請注意查看。對基于用戶的協(xié)同過濾,可以忽略分級質(zhì)量,以0/1表示用戶是否對電影進(jìn)行評分。 

根據(jù)之前的介紹,電影推薦可分為以下三種類型:

1.基于流行度:標(biāo)識過去X時段內(nèi)最受歡迎(觀看最多)的電影,將這些電影推薦給所有用戶。

2.基于電影屬性:根據(jù)電影的元標(biāo)記(如演員,導(dǎo)演,語言,發(fā)行年份等)進(jìn)行推薦。但這樣的缺點(diǎn)是,電影的屬性不會隨時間改變,無法考慮用戶行為進(jìn)行實(shí)時推薦。

3.基于用戶:根據(jù)用戶的觀看模式和喜好,對用戶進(jìn)行分組,為用戶推薦同組內(nèi)其他用戶觀看的電影。例如,如果我觀看了Inception和Dark Knight,其他看過這兩部電影的人也喜歡看Prestige,那么推薦給我Prestige是較好的選擇。

關(guān)于基于電影的協(xié)同過濾創(chuàng)建推薦系統(tǒng),我之前寫過一篇詳細(xì)的博客。感興趣的讀者可以點(diǎn)此查看,并將推薦結(jié)果與基于用戶的推薦結(jié)果進(jìn)行比較。

對于新興的OTT平臺,由于沒有資源生成元標(biāo)簽和標(biāo)注電影,同時希望用戶與平臺進(jìn)行隱式交互,因此基于用戶的協(xié)同過濾(CF)方法是最適合的。至于像Netflix,Youtube這樣的大公司,實(shí)際上使用Prime-Video混合推薦方法。在本文中,我們僅討論基于用戶的協(xié)同過濾,即通過用戶矢量表征電影。數(shù)據(jù)集結(jié)構(gòu)如下:

使用深度學(xué)習(xí)建立電影推薦系統(tǒng),不到10分鐘即可進(jìn)行DIY!

MovieLens輸入數(shù)據(jù)格式

與word2vec嵌入類似,我們通過用戶ID訓(xùn)練淺層神經(jīng)網(wǎng)絡(luò)。經(jīng)過訓(xùn)練,我們在用戶ID嵌入中實(shí)現(xiàn)類似“網(wǎng)球-費(fèi)德勒”的關(guān)系。至此,我們可以找到相似的用戶,并可以將用戶分為幾類,通過推送或電子郵件發(fā)送有針對性的訊息。除了基于相似用戶的推薦方法,我們還可以根據(jù)電影進(jìn)行推薦,這就需要對電影信息進(jìn)行類似操作了。

接下來是句子嵌入,即將用戶視為句子,捕獲句子的語義相似性。通過BERT,Elmo,Doc2Vec和Universal Sentence Encoder等方式均可方便的實(shí)現(xiàn)句子嵌入,具體選擇哪種方式主要取決于模型的速度,根據(jù)我的測試,Fast_Sentence_Embeddings(FSE)是我比較推薦的方法,該方法直接根據(jù)各詞的word2vec生成復(fù)合向量。對于BERT這樣的SOTA系統(tǒng)而言,用戶ID很難表現(xiàn)出語義相似性,因此,即使使用經(jīng)過Wikipedia或GoogleNews預(yù)訓(xùn)練的模型,也不會有太大差異,這樣,模型的速度就成為唯一的衡量標(biāo)準(zhǔn)。FSE每秒可處理約500K句子,而預(yù)訓(xùn)練編碼模型低于每秒100句。

之后,將句子向量投影到多維空間中。例如,"Obama speaks to the media in Illinois" 和"The President greets the press in Chicago"表達(dá)的意思相近,在多維空間中距離就比較近。

使用深度學(xué)習(xí)建立電影推薦系統(tǒng),不到10分鐘即可進(jìn)行DIY!

基于上下文的句子相似性

Movielens數(shù)據(jù)的電影嵌入代碼:

base=[]        
for i in range(0,size):            
#print(kw[0][i].split(" "))            
string=kw[i].split(",")            
#print(string)            
base=base+string                
if(len(base)>2):            
base = ','.join(base)        
return base
s_test=links
s_test=s_test[['userId','movieId']].drop_duplicates()
s_test['keywords_comb']=s_test.groupby(['movieId'])['userId'].transform(combine)
print("Start of Word2Vec",datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
data=s_test[['movieId','keywords_comb']].drop_duplicates()
data['word_count'] = data.keywords_comb.str.count(',')+1
data=data[data['word_count']>5]
data['tokenise'] = data['keywords_comb'].astype('str').apply(lambda x: [x for x in x.split(',')])
a1=data['tokenise'].tolist()
model_items = Word2Vec(a1, size=100)
#data=data.dropna()
print("Start of Sentence To vec",datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
sent=data['keywords_comb'].astype('str').apply(lambda x: [x for x in x.split(',')]).tolist()
s = IndexedList(sent)
from fse.models import uSIF
model = uSIF(model_items, lang_freq="en")


完成影片嵌入后,我們將結(jié)合tensorboard和Github完成電影推薦系統(tǒng)的部署。特別感謝Google對tensorboard開源的工作。

使用嵌入結(jié)構(gòu)構(gòu)建web步驟如下:

1.將嵌入數(shù)據(jù)上傳到GitHub gist,并在config JSON中進(jìn)行更新。對于初學(xué)者,可以直接使用我在此托管的嵌入數(shù)據(jù)。

2.將元數(shù)據(jù)上傳到Github gist上,以便圖示節(jié)點(diǎn)帶有標(biāo)簽。

3.創(chuàng)建一個JSON文件并將URI提供給TensorflowL,見JSON配置示例

使用深度學(xué)習(xí)建立電影推薦系統(tǒng),不到10分鐘即可進(jìn)行DIY!

Github輸入配置文件

4.部署Web應(yīng)用程序!

web應(yīng)用包括以下兩種:a. Floating recommender without images and b. Floating recommender with images

使用深度學(xué)習(xí)建立電影推薦系統(tǒng),不到10分鐘即可進(jìn)行DIY!

Ratatouille示例

5.使用tensorboard可視化交互,單擊某一電影即可查找類似的電影,還提供TSNE或PCA降維操作。

總結(jié):本文介紹了如何處理Movielens數(shù)據(jù)集,矢量嵌入(文中指用戶ID),基于FSE的句子相似度矩陣以及使用Google的TensorFlow部署web電影推薦應(yīng)用。

使用深度學(xué)習(xí)建立電影推薦系統(tǒng),不到10分鐘即可進(jìn)行DIY!

帶有電影海報的推薦頁面

希望讀者自行在電影或其他相關(guān)數(shù)據(jù)集上DIY自己的Web應(yīng)用程序。如果您遇到任何問題或有其他有趣的想法,歡迎交流。

其他可用于推薦的數(shù)據(jù)集:

1. 圖書 https://www.kaggle.com/zygmunt/goodbooks-10k

2. 電子商務(wù)產(chǎn)品 https://www.kaggle.com/c/instacart-market-basket-analysis

3. 餐廳 https://towardsdatascience.com/how-to-build-a-restaurant-recommendation-system-using-latent-factor-collaborative-filtering-ffe08dd57dca

4. 美食 https://github.com/hasan-kamal/Cuisine-Prediction


AI研習(xí)社是AI學(xué)術(shù)青年和AI開發(fā)者技術(shù)交流的在線社區(qū)。我們與高校、學(xué)術(shù)機(jī)構(gòu)和產(chǎn)業(yè)界合作,通過提供學(xué)習(xí)、實(shí)戰(zhàn)和求職服務(wù),為AI學(xué)術(shù)青年和開發(fā)者的交流互助和職業(yè)發(fā)展打造一站式平臺,致力成為中國最大的科技創(chuàng)新人才聚集地。

如果,你也是位熱愛分享的AI愛好者。歡迎與譯站一起,學(xué)習(xí)新知,分享成長。

使用深度學(xué)習(xí)建立電影推薦系統(tǒng),不到10分鐘即可進(jìn)行DIY!

雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。

使用深度學(xué)習(xí)建立電影推薦系統(tǒng),不到10分鐘即可進(jìn)行DIY!

分享:
相關(guān)文章

知情人士

AI研習(xí)社(yanxishe.com)譯站頻道,傳播前沿人工智能知識,讓語言不再成為學(xué)習(xí)知識的門檻。(原雷鋒字幕組)
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說