
很多人都把AutoRec看作是深度學(xué)習(xí)在推薦系統(tǒng)領(lǐng)域的開山之作,它將AutoEncoder這樣一個(gè)自監(jiān)督的簡(jiǎn)單模型引入到了推薦之中,并獲得了不錯(cuò)的效果,讓人們見識(shí)到了深度學(xué)習(xí)在推薦系統(tǒng)中能發(fā)揮的強(qiáng)大作用.而2016年時(shí)微軟提出的DeepCrossing模型才是真正將深度學(xué)習(xí)帶入推薦系統(tǒng)的完整應(yīng)用,它完整的解決了特征從特征工程、稀疏向量的稠密化、多層神經(jīng)網(wǎng)絡(luò)進(jìn)行優(yōu)化目標(biāo)擬合等一系列深度學(xué)習(xí)在推薦系統(tǒng)中的應(yīng)用問題,為后續(xù)深度學(xué)習(xí)在推薦系統(tǒng)的應(yīng)用研究打下了良好的基礎(chǔ),對(duì)以后各種深度推薦系統(tǒng)的設(shè)計(jì)有很好的借鑒意義.
AutoRec
當(dāng)然,這里使用的AutoEncoder的結(jié)構(gòu)十分的簡(jiǎn)單,說是深度學(xué)習(xí),網(wǎng)絡(luò)的層數(shù)也不過3層而已(輸出層->隱藏層->輸出層),結(jié)構(gòu)也全是全連接的形式. 現(xiàn)在看來,可以說是毫無新意可言.這里我主要從我對(duì)深度學(xué)習(xí)的理解的角度,來分析一下AutoRec為什么有效.
AutoRec的學(xué)習(xí)過程十分簡(jiǎn)單,實(shí)際本質(zhì)上就是簡(jiǎn)單的將協(xié)同過濾使用神經(jīng)網(wǎng)絡(luò)自動(dòng)學(xué)習(xí)而已.它也分為基于Item和基于User的兩種方式:
- 基于User就是把user對(duì)item的所有評(píng)分作為user向量,n個(gè)user就有了n個(gè)樣本,然后用這些樣本來訓(xùn)練一個(gè)AutoEncoder模型,這樣只要輸入U(xiǎn)ser的初始向量,就可以得到重建之后的User對(duì)所有Item的評(píng)分向量,排個(gè)序就可以直接推薦了;
- 基于Item就是把item的所有用戶打分作為Item向量,m個(gè)Item就有了m個(gè)樣本,同樣用這些樣本訓(xùn)練一個(gè)AutoEncoder模型,這樣把所有的原始Item向量輸入到模型,經(jīng)過計(jì)算就可以得到重建之后的所有Item向量,也便間接得到了所有User對(duì)所有Item的評(píng)分,接下來也是排序推薦.
顯而易見的,使用User-AuroRec的好處是一次輸入直接出打分結(jié)果,而Item-AutoRec卻要把全部Item都計(jì)算一遍才能出結(jié)果;當(dāng)然,劣勢(shì)也很明顯,User向量往往非常稀疏,很可能會(huì)影響模型最終效果.
那么,我們來思考一下,為什么可以通過這種重建函數(shù)來達(dá)到獲得新的得分從而作為推薦排序的依據(jù)呢.
這里我說一下我個(gè)人的理解.顯然,在訓(xùn)練的過程中,優(yōu)化器想要減小相應(yīng)的損失,就會(huì)最大限度的去擬合盡可能多的特征相一致的結(jié)果,于是在不斷擬合的過程中,特征相似的Item向量或User向量的重建向量將逐漸趨向于一致.而對(duì)于原始的向量,每個(gè)User所接觸過的Item畢竟是少量的,但是其他有不同空缺Item的User之間相互彌補(bǔ)了相應(yīng)的打分空缺,因此,在一定程度上相當(dāng)于找到了最可能的打分.
Deep Crossing
明眼人都能看出來,AutoRec這無腦的簡(jiǎn)單結(jié)構(gòu)表達(dá)能力肯定十分有限,真正的應(yīng)用端必然難堪大用.于是,我們來看一下,Deep Crossing這個(gè)完整的全套的深度學(xué)習(xí)用于推薦系統(tǒng)的方案,了解了Deep Crossing,想必也就對(duì)那些后來的深度學(xué)習(xí)推薦系統(tǒng)可可見一斑了.
DeepCrossing的應(yīng)用場(chǎng)景是微軟Bing中的搜索廣告推薦:用戶在使用Bing搜索,輸入搜索詞后,搜索引擎除了會(huì)返回相關(guān)的搜索結(jié)果,同時(shí)會(huì)返回搜索詞相關(guān)的廣告,這是大多數(shù)搜索引擎的主要盈利模式,因此盡可能的提高廣告的點(diǎn)擊率,也就是要準(zhǔn)確的預(yù)測(cè)廣告點(diǎn)擊率,并一次作為廣告排序的依據(jù)是重中之重,因此DeepCrossing優(yōu)化的目標(biāo)就是不斷提高廣告點(diǎn)擊率預(yù)估的準(zhǔn)確率.
針對(duì)這個(gè)使用場(chǎng)景,微軟使用了這樣一些特征:
| 特征 | 特征含義 |
|---|---|
| 搜索詞 | 用戶在搜索框中輸入搜索詞 |
| 廣告關(guān)鍵詞 | 廣告主為廣告添加的描述產(chǎn)品的關(guān)鍵詞 |
| 廣告標(biāo)題 | 字面意思.. |
| 落地頁 | 點(diǎn)擊廣告后的落地頁面 |
| 匹配類型 | 廣告主選擇的廣告-搜索詞匹配類型(包括精準(zhǔn)匹配/短語匹配/語義匹配) |
| 點(diǎn)擊率 | 廣告的歷史點(diǎn)擊率 |
| 預(yù)估點(diǎn)擊率 | 另一個(gè)CTR模型的CTR 預(yù)估值 |
| 廣告計(jì)劃 | 廣告主創(chuàng)建的廣告投放計(jì)劃,包括預(yù)算/定向條件等 |
| 曝光樣例 | 一個(gè)廣告曝光的例子,該例子記錄了廣告在實(shí)際曝光場(chǎng)景中的相關(guān)信息 |
| 點(diǎn)擊樣例 | 一個(gè)廣告點(diǎn)擊的例子,該例子記錄了廣告在實(shí)際點(diǎn)擊場(chǎng)景中的相關(guān)信息 |
這些特征可以分為三類:
- 類型特征: 可以被處理成one-hot或者multi-hot向量;
- 數(shù)值型特征: 直接拼接進(jìn)特征向量;
- 待處理特征: 進(jìn)一步處理特征,抽出類型特征或者數(shù)值特征(比如廣告計(jì)劃中有一堆特征,預(yù)算可以作為數(shù)值特征,而定向條件又可以作為類別特征)
經(jīng)過處理形成特征向量的表達(dá)后,就可以通過DeepCrossing模型進(jìn)行CTR預(yù)估了.先來看一下DeepCrossing的網(wǎng)絡(luò)結(jié)構(gòu):

主要就是看一下網(wǎng)絡(luò)這三個(gè)隱藏層和輸出層到底干了些什么.
- Embedding層
one-hot形式的特征編碼過于稀疏,于是增加一個(gè)Embedding層來使特征稠密化...
這個(gè)用法在NLP領(lǐng)域里用的實(shí)在太多了, 很普遍的一個(gè)做法.
2.Stacking層
主要用于解決特征交叉的問題;也是很常規(guī)的一個(gè)做法,將前面的獨(dú)立特征拼接到一起,得到一個(gè)組合的全新特征.
3.Multi Residual Units層
起始就是加神網(wǎng)絡(luò),相當(dāng)于加了幾層沒激活的殘差網(wǎng)絡(luò),讓模型可以更加充分的捕捉到各個(gè)特征之間的關(guān)聯(lián),也就是讓特征之間得到充分的組合,大概這就是所謂的Crossing吧.
- Scoring層
就是輸出相應(yīng)的得分,可以用來和訓(xùn)練數(shù)據(jù)的目標(biāo)計(jì)算損失來優(yōu)化網(wǎng)絡(luò)參數(shù).對(duì)于CTR這樣的二分類問題一般就是用一個(gè)sigmoid激活函數(shù),而對(duì)于多分類問題的話就用softmax比較好.
吐槽
就這樣,看完這個(gè)網(wǎng)絡(luò)結(jié)構(gòu),真的會(huì)有: 就這???這種感覺吧...現(xiàn)在看來,這種模型太平平無奇了....甚至,實(shí)際上我在2017年做相關(guān)的搜索推薦的時(shí)候,并沒有看過微軟這篇論文,也早就用上深度模型/預(yù)先訓(xùn)練/embedding之類的東西了.感覺這些都是是個(gè)人都能想到的東西..知識(shí)別人沒把它總結(jié)成論文罷了...
感慨一句,說以前的人機(jī)會(huì)更多并不是沒有道理的,特別是對(duì)于普通人來說,以前有些成就是普通人憑借一己之力可以達(dá)到的,而后來所需要達(dá)成的成就,也許就遠(yuǎn)遠(yuǎn)超過一個(gè)人的能力,而需要依賴集體或是資本的積累了.馬云所謂的年輕人機(jī)會(huì)更多就是瞎扯淡的....
參考資料
- 王喆的《深度學(xué)習(xí)推薦系統(tǒng)》