基于深度学习模型WideDeep的推荐
本實驗選用數據為UCI開源數據集,僅用于學習,請勿商用)
Wide&Deep推薦算法出自一篇論文《Wide&Deep Learning for RecommenderSystems》,Wide&Deep由兩部分組成,分別是Wide和Deep。先來說wide,表示的是generalized的推薦系統,傳統的推薦系統都是通過線性算法基于離散特征來做推薦的。Wide推薦通常是這樣的:系統通過獲得用戶的購物日志數據,包括用戶點擊哪些商品,購買過哪些商品,然后通過one-hot編碼的方式構成離散特征或者通過對業務的理解衍生出一些特征,并進行計算,類似于本系列文章第二篇。這種wide推薦方式有非常多的好處,比如對于大規模的稀疏數據有很好的效果,而且模型的解釋性很強。什么叫模型的解釋性呢?以邏輯回歸為例,每個特征都對應模型中的一個權重值,每個特征的權重值的大小跟這個特征對結果的影響是有關的。那么wide方式同樣有很多缺點,比如我們一直強調的,特征衍生需要很多人為操作,需要專家經驗,另外這種推薦只對用戶操作過的商品有效。
接著講下deep,這里的deep表示的是通過深度學習學習出來的一些向量,這些向量是隱性特征,往往是沒有明確可解釋性的。這些向量也可以作為特征的一部分參與到訓練中。通過deep方式產生的特征會有以下好處,其一可以擬補人為提取特征造成的人力思考維度的限制,試想下一個人可以輕易的思考出二階乘法的結果,如果是五階呢?其二這部分特征是深度學習框架自動生成的,無需人力干預。
既然Wide和Deep算法各有千秋,那如果可以將兩種算法作為組合,那么一定可以生成更有效的推薦場景的模型,本文就介紹如何在PAI-DSW上實現基于Wide&Deep的預測。
一、業務場景描述
本節使用的是PAI-DSW云端深度學習訓練平臺和PAI-EAS模型服務平臺,使用的是一份開源的基于人的各種背景的統計數據,解決的問題是基于人的各種基礎數據預測每個人收入是否會超過50K。
本實驗的全部代碼和數據已經內置于PAI-DSW,只要打開DSW就可以安裝下方的教程運行實驗。
二、數據集介紹
數據源:引用UCI開源數據源,https://archive.ics.uci.edu/ml/datasets/Census+Income
具體特征字段如下:
| age | 對象年齡 | double | 對象的年齡大小 |
| workclass | 工作性質 | string | 自由職業者、私企、企業人員、政府工作者、無業游民等 |
| fnlwgt | 連續數據 | double | - |
| education | 學歷 | string | 學士、說是、博士、11th、10th、1s-4th等等 |
| education-num | 教育年限 | double | 教育年限 |
| marital-status | 婚姻狀況 | string | 單身、未婚、離異等等 |
| occupation | 職業 | string | 工程師、農民、銷售等等 |
| relatonship | 家庭角色 | string | 妻子、父親、沒家庭等等 |
| race | 人種 | string | 亞裔、白人、黑人等等 |
| sex | 性別 | string | 女性、男性 |
| capital-gain | 連續數據 | double | - |
| capital-loss | 連續數據 | double | - |
| hours-per-week | 連續數據 | double | - |
| native-country | 祖籍國家 | string | 美國、哥倫比亞、英格蘭、加拿大等等 |
目標字段:income是否超過50k
三、數據探索流程
首先進入PAI-DSW,找到左側的Demo文件夾,下載Wide&Deep數據集及代碼包。
(1)工程描述
首先看下整個工程,
- 包含一個census_data文件夾,里面包含一個訓練數據和一個測試數據
- official文件夾是一個工具包
- census_main.py為訓練腳本
(2)訓練模型
打開一個terminal環境,執行
python census_main.py --export_dir wide_deep_saved_modelwide_deep_saved_model為輸出模型所在的文件夾,訓練完在文件目錄下會找到相應文件,打開后可以看到checkpoint:
把這個checkpoint的號記住。
(3)模型預測
現在已經生成了模型的checkpoint輸出,接下來進入terminal,運行以下腳本:
saved_model_cli run --dir wide_deep_saved_model/${模型checkpoint號碼}/ --tag_set serve --signature_def="predict" --input_examples='${預測數據}'根據本文的案例可以執行以下腳本拿到預測結果:
saved_model_cli run --dir wide_deep_saved_model/1542168326/ --tag_set serve --signature_def="predict" --input_examples='examples=[{"age":[46.], "education_num":[10.], "capital_gain":[7688.], "capital_loss":[0.], "hours_per_week":[38.]}, {"age":[24.], "education_num":[13.], "capital_gain":[0.], "capital_loss":[0.], "hours_per_week":[50.]}]'輸入了兩條預測數據,最終拿到預測結果:
輸入了兩條預測數據,可以得到預測輸出,第一條預測結果為1,第二條結果為0,可以通過output key probabilities判斷(注:矩陣第一行對應第一個預測結果,第二列0.9599956>第一列0.04000434,所以第一個預測結果是1。同理第二個預測結果是0)。
可以通過代碼official/wide_deep/census_dataset.py來看具體的特征工程的特征和目標值的構建,目標列>50k時目標值為1,目標列<50k時目標值為0。
于是預測結果第一條的人的預測收入為>50k,預測結果第二條的人的預測收入<50k。
(4)模型在線部署
生成的模型是Tensorflow的標準模型格式,可以通過PAI-EAS將模型部署成Http服務供調用。
后續流程可以參考在線預測文檔:https://help.aliyun.com/document_detail/92917.html
部署成在線服務之后,這樣就可以做到模型跟用戶自身的業務結合,完成PAI模型訓練和業務應用的打通。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
總結
以上是生活随笔為你收集整理的基于深度学习模型WideDeep的推荐的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里巴巴研究员刘国华:阿里巴巴智能运维体
- 下一篇: 利用Packer自定义镜像创建容器集群