日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于PaddleRec的用户点击率预测

發布時間:2024/7/5 编程问答 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于PaddleRec的用户点击率预测 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于PaddleRec的用戶點擊率預測

  • 一、前言
    • 推薦系統的痛點
  • 二、推薦系統的數據獲取
    • 獲取數據的三種方法
      • 1.使用現成的數據集
      • 2.網絡爬蟲
      • 3.調查問卷
  • 三、數據處理
    • PaddleRec推薦數據集格式
      • 1.slot:value的格式說明
      • 2.只有value的輸入數據格式
  • 四、完成點擊率預測的具體實現
    • 1.首先安裝PaddleRec及相關依賴
    • 2.參數配置
      • data——存放數據集
      • config.yaml——配置訓練參數
        • sparse_slots——稀疏參數
        • dense_slots——稠密參數
      • model.py——網絡結構
    • 3.模型訓練
    • 4.測試模型效果
  • 五、總結與展望
  • 六、個人介紹

不會吧,不會吧,都0202年了,不會有AI連用戶喜歡什么都不知道吧!AI比你更懂自己!

一、前言

推薦系統在我們的日常生活中,可謂是無處不在,比如我們平常逛的淘寶、刷的抖音,這些應用的背后都離不開推薦系統。

說起推薦,大家應該都不陌生:

  • “哪家的月餅好吃?推薦一下!”
  • “今年國慶放8天假,去哪玩比較好呢?”
  • … …

今年是特殊的一年,因為疫情,也許會有一部分人會選擇留在家中過中秋,中秋節自然少不了月餅,月餅這么多,哪一家的月餅符合你的心意,這就需要推薦系統了(總不能每一家月餅都嘗一邊吧);慶國慶,去哪玩也許是一個令你頭疼的問題,每個人的喜好不同,選擇的地方也會不同,這也需要推薦系統的幫助。總之,我們的生活離不開推薦。

CTR(Click Through Rate),即點擊率,是“推薦系統/計算廣告”等領域的重要指標,對其進行預估是商品推送/廣告投放等決策的基礎。簡單來說,CTR預估對每次廣告的點擊情況做出預測,預測用戶是點擊還是不點擊。CTR預估模型綜合考慮各種因素、特征,在大量歷史數據上訓練,最終對商業決策提供幫助。

推薦系統的痛點

但是,話說回來,搭建一個推薦系統,真的有這么簡單嗎?

我們都知道,在深度學習里,數據對模型的效果在一定程度上起到了不可小覷的作用。推薦系統更是如此,它主要解決的是信息過載的問題,目標是從海量物品篩選出不同用戶各自喜歡的物品,從而為每個用戶提供個性化的推薦。因此,如果數據量很少,或數據質量不高,那么做出來的效果可能就不會很理想。

盡管如此,現在也有很多推薦系統的數據集:

  • MovieLens——數據地址:https://grouplens.org/datasets/movielens/

    MovieLens數據集中,用戶對自己看過的電影進行評分,分值為1~5。
  • Book-Crossings——數據地址:http://www2.informatik.uni-freiburg.de/~cziegler/BX/

    該包含90000個用戶的270000本書的110萬個評分。評分范圍從1到10,包括顯式和隱式的評分。
  • Last.fm——數據地址:https://grouplens.org/datasets/hetrec-2011/

    Last.fm提供音樂推薦的數據集。 對于數據集中的每個用戶,包含他們最受歡迎的藝術家的列表以及播放次數。它還包括可用于構建內容向量的用戶應用標簽。

我們可以先使用這些現成的數據集,學習如何處理數據,并搭建一個推薦系統。

二、推薦系統的數據獲取

當今時代,是大數據時代,誰擁有數據,誰就有籌碼。在搭建推薦系統的全流程中,獲取數據是第一步,也是最關鍵的一步。

在做這個項目之前,我想做中秋節賞月地點個性化推薦的,但是苦于沒有數據,所以我暫時放棄了這個想法。

獲取數據的三種方法

我目前能想到的比較可行的數據獲取方案有三種:

  • 最簡單的當然是找現成的數據集,這類數據集往往是一些研究機構公開的,一般也比較好;
  • 退而求其次就是自己去一些公開網站上用自動化的方法采集數據,但這些數據往往缺少一些特征,更何況爬蟲有風險;
  • 最后一種是最實在的方法,但這種方法收集到的數據量往往很少,對個人來說真的很困難。

1.使用現成的數據集

前面已經給大家提供了一些現成數據集,除了電影、圖書、音樂數據集之外,還有一些可用于推薦系統的數據集:

  • MovieLens——數據地址:https://grouplens.org/datasets/movielens/

    MovieLens數據集中,用戶對自己看過的電影進行評分,分值為1~5。
  • Book-Crossings——數據地址:http://www2.informatik.uni-freiburg.de/~cziegler/BX/

    該包含90000個用戶的270000本書的110萬個評分。評分范圍從1到10,包括顯式和隱式的評分。
  • Last.fm——數據地址:https://grouplens.org/datasets/hetrec-2011/

    Last.fm提供音樂推薦的數據集。 對于數據集中的每個用戶,包含他們最受歡迎的藝術家的列表以及播放次數。它還包括可用于構建內容向量的用戶應用標簽。
  • Wikipedia——數據地址:https://en.wikipedia.org/wiki/Wikipedia:Database_download#English-language_Wikipedia

    該數據集已廣泛用于社交網絡分析,圖形和數據庫實現測試,以及維基百科用戶行為研究
  • OpenStreetMap——數據地址:http://planet.openstreetmap.org/planet/full-history/

    OpenStreetMap是一個協作的地圖項目,類似于維基百科。它的數據由用戶提供,數據集中的對象包括道路,建筑物,興趣點,以及您可能在地圖上找到的任何其他內容。

2.網絡爬蟲

使用網絡爬蟲的話,首先需要一定的Python基礎,并且對前后端的知識有一定的了解。

AI Studio上也有一些關于爬蟲的教程,可以去學習學習:

  • Python入門-豆瓣電影TOP250爬取——https://aistudio.baidu.com/aistudio/projectdetail/70149
  • 《青春有你2》數據爬取與分析——https://aistudio.baidu.com/aistudio/projectdetail/396959

我以前也做過一些爬蟲程序,可以參考參考:

  • 抓取王者榮耀英雄列表以及對應圖片——https://blog.csdn.net/zbp_12138/article/details/101595246
  • 抓取中國天氣網當前時段所有城市的天氣數據——https://blog.csdn.net/zbp_12138/article/details/101617083

3.調查問卷

調查問卷就簡單多了,不需要代碼基礎,像問卷星就能幫你制作采集表單。

當然,如果想要自己做采集表單的話,也可以自己嘗試搭一個服務器用于存放數據,這也需要一定的前后端基礎,有興趣的同學可以學一下Django。

三、數據處理

一般來說,直接采集到的數據是不能直接拿來訓練的,因此,我們還需要一定的數據處理功底。對于數據處理,我首先推薦Excel,如果有能力的同學,可以嘗試Python代碼。

PaddleRec推薦數據集格式

GitHub文檔:https://github.com/PaddlePaddle/PaddleRec/blob/master/doc/slot_reader.md

PaddleRec對于數據輸入有兩種方式。一種是數據已經處理成slot:value的格式可以直接輸入模型,我們就用這種方式輸入;另一種方式是配置一個reader,在reader中對數據進行處理,再用yield的方式輸入。

1.slot:value的格式說明

當你的數據集格式為slot:feasign這種格式,或者可以預處理為這種格式時,可以直接使用PaddleRec內置的Reader。

  • Slot直譯是槽位,在推薦工程中,是指某一個寬泛的特征類別,比如用戶ID、性別、年齡就是Slot.
  • Feasign則是具體值,比如:12345,男,20歲。

在實踐過程中,很多特征槽位不是單一屬性,或無法量化并且離散稀疏的,比如某用戶興趣愛好有三個:游戲/足球/數碼,且每個具體興趣又有多個特征維度,則在興趣愛好這個Slot興趣槽位中,就會有多個Feasign值。

PaddleRec在讀取數據時,每個Slot ID對應的特征,支持稀疏,且支持變長,可以非常靈活的支持各種場景的推薦模型訓練。

在一條數據中,每個特征用slot:feasign表示,相鄰兩個特征用\t分隔,如下所示:

logid:100009 age:49 bookid:60392452 label:8

logid:100009 age:49 bookid:60502258 label:6

logid:100009 age:49 bookid:60977337 label:9

logid:100009 age:49 bookid:312289871 label:0

logid:100009 age:49 bookid:312981589 label:6

logid:100009 age:49 bookid:312982518 label:8

logid:100009 age:49 bookid:312983654 label:9

… …

電影推薦數據集部分訓練數據:

logid:100000548 time:976672993 userid:53793338 gender:54713968 age:23292885 occupation:32989794 movieid:26774464 title:57847355 title:44022005 title:36622433 title:3467516 genres:58455809 label:5

logid:100001212 time:974716889 userid:52427656 gender:40715500 age:38930457 occupation:113722 movieid:51981119 title:48706141 title:41846042 title:33234546 genres:28043405 genres:51532872 label:2

logid:100002309 time:971972222 userid:28238127 gender:54713968 age:50367871 occupation:113722 movieid:31124213 title:41573393 title:37130060 title:33234546 genres:17697846 genres:16423920 label:2

logid:100005308 time:975112166 userid:4949303 gender:54713968 age:50367871 occupation:113722 movieid:26896829 title:48110462 title:57345835 title:24278372 title:2549750 genres:7891961 genres:51532872 label:2

2.只有value的輸入數據格式

slot:value這種格式的數據是PaddleRec推薦的數據集格式,當然,這種格式不是唯一的。

假設數據A、B、C在文本數據中,每行以這樣的形式存儲:

0.1,0.2,0.3…3.0,3.1,3.2 \t 99999,99998,99997 \t 1 \n

則示例代碼如下:

from paddlerec.core.utils import envs class Reader(ReaderBase):def init(self):self.avg = envs.get_global_env("avg", None, "hyper_parameters.reader") def generator_sample(self, line):def reader(self, line):# 先分割 '\n', 再以 '\t'為標志分割為listvariables = (line.strip('\n')).split('\t')# A是第一個元素,并且每個數據之間使用','分割var_a = variables[0].split(',') # listvar_a = [float(i) / self.avg for i in var_a] # 將str數據轉換為float# B是第二個元素,同樣以 ',' 分割var_b = variables[1].split(',') # listvar_b = [int(i) for i in var_b] # 將str數據轉換為int# C是第三個元素, 只有一個元素,沒有分割符var_c = variables[2]var_c = int(var_c) # 將str數據轉換為intvar_c = [var_c] # 將單獨的數據元素置入list中# 將數據與數據名結合,組織為dict的形式# 如下,output形式為{ A: var_a, B: var_b, C: var_c}variable_name = ['A', 'B', 'C']output = zip(variable_name, [var_a] + [var_b] + [var_c])# 將數據輸出,使用yield方法,將該函數變為了一個可迭代的對象yield output

總結

以上是生活随笔為你收集整理的基于PaddleRec的用户点击率预测的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。