日本在线看黄a美女久草|日本动漫亚洲在线一区|日韩人妻无码免费视频|A√有码中文字幕|日韩一级片视频热久久久|一区二区三区四区精品无码在线|亚洲AV成人无码一二三app|亚洲综合图片绯色|91极品人妻在线网站|国产成人精品一区二三区四区五区

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

0

如何搭建增量推薦系統(tǒng)?

本文作者: skura 2020-02-21 10:32
導(dǎo)語(yǔ):理想情況下,推薦系統(tǒng)應(yīng)該能夠適應(yīng)變化

如何搭建增量推薦系統(tǒng)?

學(xué)習(xí)本教程的先決條件              

盡管我會(huì)盡量減少數(shù)學(xué)術(shù)語(yǔ)的使用,但本文希望讀者熟悉一些概念,如矩陣分解、嵌入空間以及基本的機(jī)器學(xué)習(xí)術(shù)語(yǔ)。這篇文章并不是推薦系統(tǒng)的介紹,而是對(duì)它們的增量變體的介紹。在任何情況下,本文的主要受眾是機(jī)器學(xué)習(xí)和推薦系統(tǒng)領(lǐng)域的初學(xué)者。              

簡(jiǎn)介           

開(kāi)始一個(gè)機(jī)器學(xué)習(xí)項(xiàng)目,數(shù)據(jù)科學(xué)家收集數(shù)據(jù),對(duì)其進(jìn)行處理,訓(xùn)練模型并將其部署到生產(chǎn)中。當(dāng)模型的性能開(kāi)始惡化時(shí),數(shù)據(jù)科學(xué)家通常會(huì)從頭開(kāi)始重復(fù)這個(gè)循環(huán)。在這個(gè)時(shí)候,他們才有新的數(shù)據(jù)示例來(lái)對(duì)模型進(jìn)行改進(jìn)以提高其性能。然而,這通常是一種適得其反的做法,其效率也很低下,特別在那些根據(jù)當(dāng)前數(shù)據(jù)做出的決策至關(guān)重要的業(yè)務(wù)領(lǐng)域來(lái)說(shuō)尤其如此。              

現(xiàn)在,進(jìn)入推薦系統(tǒng)的世界吧,在這里,用戶的偏好經(jīng)常會(huì)隨著季節(jié)、預(yù)算、時(shí)尚趨勢(shì)等發(fā)生變化。此外,客戶數(shù)量和庫(kù)存造成了所謂的冷啟動(dòng)問(wèn)題,即系統(tǒng)沒(méi)有足夠的信息使消費(fèi)者與產(chǎn)品或服務(wù)相匹配。推薦系統(tǒng)在理想情況下應(yīng)該適應(yīng)這些變化,改進(jìn)其模型以適應(yīng)當(dāng)前的狀態(tài),同時(shí)要對(duì)數(shù)據(jù)進(jìn)行一次傳遞。這就是漸進(jìn)式學(xué)習(xí)的理念。              

在本文中,我們將探索在實(shí)踐中將增量學(xué)習(xí)的思想應(yīng)用到推薦系統(tǒng)中。我們使用一個(gè)基于 Pytorch 的 Python 庫(kù) CF Step,重現(xiàn)了 Jo?o Vinagre 等人發(fā)表的論文「Fast incremental matrix factorization for recommendation with positive-only feedback」中的結(jié)果。接下來(lái),我們將通過(guò)應(yīng)用幾個(gè)技巧來(lái)實(shí)現(xiàn)更高的目標(biāo)。              

快速增量矩陣分解              

我們將要實(shí)現(xiàn)的算法使用隱式的、僅為正的反饋。讓我們?cè)囍忾_(kāi)這兩個(gè)關(guān)鍵字的神秘面紗。

隱式反饋意味著用戶從來(lái)沒(méi)有對(duì)他們交互的項(xiàng)目表達(dá)過(guò)直接的意見(jiàn),比如評(píng)級(jí)。隱式反饋的一個(gè)例子是,一個(gè)顧客買了多少次某個(gè)產(chǎn)品,或者花了多少分鐘看了某個(gè)電影。顧客購(gòu)買的產(chǎn)品或使用的服務(wù)越多,我們就越有信心認(rèn)為,這是一種偏好。僅為正的反饋是一個(gè)與隱式反饋一起使用的術(shù)語(yǔ)。這是因?yàn)?,在隱式反饋的情況下,我們很難知道是什么構(gòu)成了消極互動(dòng)。用戶不與項(xiàng)目交互并不意味著什么,想象一下超市里的消費(fèi)者,如果他們尚未購(gòu)買特定產(chǎn)品,我們無(wú)法確定原因。              

返回到我們的實(shí)現(xiàn),僅為正的反饋意味著用戶項(xiàng)交互矩陣 R 只包含布爾值,其中正值表示喜歡,負(fù)值被視為不確定。這個(gè)假設(shè)有兩個(gè)主要的含義:R 的稀疏性是會(huì)保持的,因?yàn)樵谟?xùn)練過(guò)程中只使用了正反饋;對(duì)于任何用戶項(xiàng)交互,負(fù)值都是完美的推薦候選者。              

算法與方法              

現(xiàn)在讓我們更仔細(xì)地看一下本文中提出的增量隨機(jī)梯度下降(ISGD)算法。

如何搭建增量推薦系統(tǒng)?

ISGD——增量 SGD              

我們擁有的數(shù)據(jù)是元組或用戶項(xiàng)交互數(shù)據(jù)。記住,這些都是積極的交互。算法的輸入是三個(gè)數(shù)字:feat (用戶或項(xiàng)目嵌入空間的維數(shù))、λ(正則化系數(shù))和 η(學(xué)習(xí)速率)。算法的輸出是兩個(gè)嵌入矩陣:A 表示用戶,B 表示項(xiàng)目。這些矩陣的維數(shù)是 A 的 number_of_users x feat 和 B 的 number_of_items x feat。然后我們有幾個(gè)不同的步驟:      

  • 檢查活躍用戶是否是已知的。如果不是,則創(chuàng)建一個(gè)具有隨機(jī)潛在特征的新用戶,該用戶從均值為 0、標(biāo)準(zhǔn)差為 1 的正態(tài)分布中提取。對(duì)活動(dòng)項(xiàng)執(zhí)行相同的操作。              

  • 計(jì)算損失。因?yàn)槲覀冎恍枰幚矸e極的反饋,所以目標(biāo)總為 1。因此,我們只需要從 1 中減去我們的預(yù)測(cè)值。   

  • 使用通用規(guī)則更新活躍用戶的潛在特征(用戶嵌入矩陣中的參數(shù))。對(duì)活動(dòng)項(xiàng)執(zhí)行相同的操作。    

  • 轉(zhuǎn)到下一個(gè)數(shù)據(jù)點(diǎn)。這樣,我們可以處理任意長(zhǎng)度的數(shù)據(jù)流。              

實(shí)現(xiàn)與評(píng)估              

對(duì)于這個(gè)實(shí)現(xiàn),我們將使用 Python 庫(kù) CF Step 和眾所周知的 Movielens 數(shù)據(jù)集(https://grouplens.org/datasets/movielens/ )。CF Step 是一個(gè)開(kāi)源庫(kù),用 Python 編寫并在 Pytorch 上構(gòu)建,它支持增量學(xué)習(xí)推薦系統(tǒng)的快速實(shí)現(xiàn)。該庫(kù)是歐洲研究項(xiàng)目 CloudDBAppliance 的副產(chǎn)品。你可以通過(guò)運(yùn)行以下命令輕松安裝庫(kù):              

pip install cf-step              

接下來(lái),下載 movielens 數(shù)據(jù)集,并將 ratings.dat 文件提取在一個(gè)方便的目錄下,例如 Linux 中的 tmp 文件夾。對(duì)于這個(gè)實(shí)現(xiàn),我們只需要這個(gè)文件。其余文件(users.dat 和 movies.dat)包含用戶和電影的元數(shù)據(jù)。我們將使用 pandas 加載內(nèi)存中的文件:

如何搭建增量推薦系統(tǒng)?

如你所見(jiàn),我們將用戶和電影 ID 轉(zhuǎn)換為類別,以便提取類別代碼?,F(xiàn)在,我們不必為嵌入矩陣的生成創(chuàng)建單獨(dú)的詞匯表。我們只需要使用用戶和電影編碼,而不是 ID。最后,我們總是通過(guò)這個(gè)數(shù)據(jù)幀在代碼和 ID 之間建立連接,以找到原始用戶和電影?,F(xiàn)在,讓我們看看我們正在處理的數(shù)據(jù)中的不重復(fù)的用戶和電影的數(shù)量。 

如果我們打印這些數(shù)字,我們將看到有 6040 個(gè)用戶和 3706 部電影。接下來(lái),我們將按時(shí)間戳對(duì)數(shù)據(jù)進(jìn)行排序,以模擬事件流。              

正如我們所討論的,該算法只支持正反饋。因此,我們將把 5 分作為正反饋,并放棄其他任何評(píng)分。我們希望用 1 表示喜歡,用 0 表示不喜歡,并創(chuàng)建一個(gè)名為 preference 的新列來(lái)保留它們。然后,我們篩選出 preference == 1 的數(shù)據(jù)項(xiàng)。

如何搭建增量推薦系統(tǒng)?

接下來(lái),讓我們初始化我們的模型。為此,我們需要一個(gè)模型架構(gòu)、一個(gè)目標(biāo)函數(shù)(即損失函數(shù))和一個(gè)優(yōu)化器。我們將使用 SimpleCF 網(wǎng)絡(luò)作為模型架構(gòu),這是 CF Step 提供的內(nèi)置神經(jīng)網(wǎng)絡(luò)架構(gòu)。對(duì)于目標(biāo)函數(shù),我們將使用一個(gè)簡(jiǎn)單的 lambda 函數(shù),它接受一個(gè)預(yù)測(cè)和一個(gè)目標(biāo),并從目標(biāo)減去預(yù)測(cè)。在我們的例子中,目標(biāo)總是 1。對(duì)于優(yōu)化器,我們將使用 Pytorch 的 SGD 來(lái)實(shí)現(xiàn)。我們選擇的因子有 128 個(gè),學(xué)習(xí)速率是 0.06?,F(xiàn)在我們準(zhǔn)備初始化 Step 模型。              

評(píng)估方法如下:             

  • 通過(guò)在前 20% 的數(shù)據(jù)上對(duì)模型進(jìn)行訓(xùn)練來(lái)引導(dǎo)它。              

  • 模擬數(shù)據(jù)流,并使用 recall@k 作為度量來(lái)評(píng)估模型的性能。              

  • 如果用戶是已知的,則進(jìn)行預(yù)測(cè)并計(jì)算此預(yù)測(cè)的 recall@kf。然后,使用這個(gè)用戶項(xiàng)交互,遞增地訓(xùn)練算法。

  • 如果用戶是未知的,只需使用此用戶項(xiàng)交互以增量方式訓(xùn)練算法。              

為此,讓我們獲取前 20% 的數(shù)據(jù),創(chuàng)建數(shù)據(jù)加載器并批量擬合模型。              

然后,我們得到剩余的數(shù)據(jù)并創(chuàng)建一個(gè)不同的數(shù)據(jù)集。              

最后,模擬流并使用 recall@10 評(píng)估模型。這一步在 GPU 上需要 5 到 6 分鐘。              

我們可以使用下面的代碼可視化我們的訓(xùn)練結(jié)果。為此,我們將使用一個(gè) 5K 滑窗的移動(dòng)平均值,這和他們?cè)谡撐闹械淖龇ㄊ且粯拥?。我們可以看到,這個(gè)圖和 movielens 數(shù)據(jù)集的呈現(xiàn)結(jié)果類似。要保存模型,請(qǐng)使用 model.save() 內(nèi)置方法并傳遞有效路徑。

如何搭建增量推薦系統(tǒng)?

結(jié)論              

在這篇文章中,我們提出了增量學(xué)習(xí)在推薦系統(tǒng)中的重要性,并重現(xiàn)了 Jo?o Vinagre 等人發(fā)表的論文「Fast incremental matrix factorization for recommendation with positive-only feedback」中的結(jié)果。我們介紹了 Python 的 CF Step 庫(kù),這是一個(gè)開(kāi)源庫(kù),它支持增量學(xué)習(xí)推薦系統(tǒng)的快速實(shí)現(xiàn)。接下來(lái),我們將進(jìn)一步討論這個(gè)問(wèn)題,并嘗試提高算法的準(zhǔn)確性。

via:https://towardsdatascience.com/building-an-incremental-recommender-system-8836e30afaef

雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)                   

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

如何搭建增量推薦系統(tǒng)?

分享:
相關(guān)文章
當(dāng)月熱門文章
最新文章
請(qǐng)?zhí)顚懮暾?qǐng)人資料
姓名
電話
郵箱
微信號(hào)
作品鏈接
個(gè)人簡(jiǎn)介
為了您的賬戶安全,請(qǐng)驗(yàn)證郵箱
您的郵箱還未驗(yàn)證,完成可獲20積分喲!
請(qǐng)驗(yàn)證您的郵箱
立即驗(yàn)證
完善賬號(hào)信息
您的賬號(hào)已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說(shuō)