简单复读机LR如何成为推荐系统精排之锋?
文 | 水哥
源 | 知乎
saying
1. 眾所周知, 人類(劃掉)推薦的本質是復讀機
2. 精排之鋒,粗排之柔,召回之厚
3. 在推薦里談“過擬合”很容易給我們造成心理上的松懈,導致我們忽略環境,氛圍等多種因素的作用。我們可以說一萬遍有過擬合,但是不采取行動,就沒有任何作用
這一講開始,我們將介紹具體的模型。前面我們說過模型有三種:精排,粗排和召回。我們也大致提過,精排的作用是完成給定的擬合任務,沒有任何其他雜念,就像一把鋒利的刃,純粹探究模型的上界。粗排是召回和精排之間的承接環節,它更需要的是平衡。而召回需要體現生態的方方面面,它包含了一個研究者對整個業務體系的厚重的思考。
我們分三個部分講解模型,首當其沖的就是精排模型。在多種多樣的模型中,最簡單的是邏輯回歸。在其他領域邏輯回歸可能是一個大家課上都學,但是沒什么人用的模型。但是在推薦領域,它做主流的時間可能比很多人想象的要長很多。我知道的一些現在很知名的公司,擺脫LR可能都沒幾年。從這一講中我們能看出,邏輯回歸雖然簡單,但是它已經能貼合推薦這件事情的本質了。
下面進入正題。我們所能想到最簡單的,最常見的建模是一個線性模型,其實就是 。在很多問題中直接使 接近ground truth 就可以完成一個最簡單的擬合。但是推薦模型預估的問題,一般是點擊率之類的,具體操作上是每次展示是否發生點擊。點擊與否是0/1的。這就要求我們模型的輸出應該也是0/1的,或者至少是在 之間(這個時候就表明一個概率)。因此在外面會加上一個激活函數sigmoid(這個函數的輸出是限定在0-1之間的),最終得到
這就是邏輯回歸最終的形式。
但是上面這個過程,存不存在疑問呢?
為什么是sigmoid?
上面的激活函數使用了sigmoid,我們說是因為他的值域在0-1之間。但是如果仔細想想這個理由還有點牽強:是不是只要輸出在0-1之間,什么激活函數都可以?比如說我可不可以先用Tanh把輸出范圍約束到 之間,再線性變換到0-1之間呢?為什么沒有人這樣做?可能有別的原因。
這個問題其實我翻找了很多的資料,大多數的回答都不是很令人信服,下面這個解釋算是我覺得最讓我接受的一個,是我在Quora上面找到一個很好的回答[1],這里轉述一下:
這個形式,本身是無界的。我們不能讓它去擬合一個 之間的目標。假如說原來點擊的概率是 ,我們就要構造一個相關形式,讓它的值域是 的,才能進行學習。可以首先做一個輔助函數 ,這樣會把輸出的范圍放大到 之間。接下來再對這個式子取對數,就可以把輸出范圍變成的,符合我們的要求。即令:
把這個式子解開,就可以得到上面的邏輯回歸形式了。
工業界的應用方式
LR在工業界應用時,是有點特殊的。這個特殊的點在特征上。這時候要注意一個時代背景,即特征的處理是比較原始的,怎么簡單怎么來。推薦這個階段的特征,不像其他領域如CV,NLP是一段連續的浮點數向量或者張量,也不是后來的embedding look-up table,而是無數的“one-hot”,怎么理解呢?比如我有1w個item,分別編號1-10000,那么在item id這里,就有1w個特征,只是每一個item只能是其中的一個取值為1,其他的取值都為0(這個就是one-hot). 相應地,也就有1w個不同的 。每一種特征,我們稱之為一個slot,僅在這一種slot內是one-hot的。在我們計算的時候, 是binary的,而是浮點數,這個結果其實操作的時候,就是把用戶所有不為0的對應的加起來即可。我們用下圖來表示:
在這個例子中,有三種特征,性別,年齡段,和user ID。注意到這里的表格需要存儲所有可能的特征取值。對于當前的用戶我們就分析,他的性別,年齡段,ID分別是什么。由于 是0/1的,直接取出對應的,并且和相加。這里只畫了用戶側的部分,item側也是同樣的道理。
但是要注意的是,特征在概念上是one-hot的,實際上不需要真正做出來一段向量然后用一個矩陣映射什么的。因為很多時候這個one-hot里面是會有“洞”。即有一些ID可能不出現,這時候再做一個滿的矩陣太浪費了。實際中都是稀疏保存的,就是哪個有值存哪個。后面的embedding look-up table也是這么做的。
推薦的本質是復讀機
按照上面這個例子,我們設想一個極限情形:如果只有user ID和item ID兩種特征,會出現什么情況?
在一開始沒有樣本來的時候,他們的都沒有值(簡單起見,假設是初始化為0),如果user 1和item1這個組合發生了點擊,那么回傳梯度的時候,這兩個對應的會以相同的幅度變大一些。接下來,當user2面對item1,由于item1的是有值的,輸出的排序就比user2面對一個沒見過的item2要大。
所以這個過程其實不是很合理:我們對user2完全沒有知識,為什么就輸出了一個明顯傾向于item1的結果呢?原因是因為user1給出了一個正反饋。我們的模型只能從前面的結果里面去學習,它好像沒有什么自己的主見,只會人云亦云罷了。這個例子推到更極限的情況呢?如果只有item ID特征,那這個模型就完全變成了一個簡單的計數統計,誰被點的次數多,誰的排序就永遠靠前。在這里面沒有任何“靈性”,我不用模型也能做到這一點。這就是我們這一講要強調的一個觀點:
推薦的本質是復讀機
第一個馬上就能想到的問題是,為什么推薦是復讀機,而CV,NLP不是?
因為推薦存在不確定性,必須要試錯才能拿到label,而且很難歸因。當我們面對一組樣本,某個用戶和某個item,我們是否能說的上這個點擊會不會發生?我感覺是很難的。所以只有試了試才知道。這個試錯的機制還造就了之前提到過的探索與利用以及冷啟動的問題。另一方面,當點擊發生的時候,我們也很難說,是因為這個用戶就是容易點擊,還是說這個item就是好,還是某種巧合。這就造成了上面例子中的問題,也許user1點擊item1只是隨手一點,模型也會給item1一部分權重(認為它好)。
但是CV,NLP不一樣的是,它們的label是一個固定的東西,一幅圖片里面是貓就是貓,是狗就是狗,擬合的目標很清晰,且不存在偶然性。
那我們接著往下想,為什么推薦必須要試錯才能拿到label?我們可以做到像CV那樣,給出一個確定性的判斷嗎?我的結論是,現階段不可行,未來說不定可以。在推薦這件事中,有很多的信息我們是拿不到的,比如你在刷視頻的時候,你是在公交上還是在教室里?你這次拿起手機之前是和同學聊完天,還是剛剛睡了一覺醒來?你是一個怎樣的人?給你推送教育知識會不會讓你想起被考試支配的恐懼?這些都是變量,都會影響對當前這個item的判斷。然而這些特征暫時都是不可獲取的。在著名的《影響力》[2]里面就提到一個例子:當商家在網站上賣沙發的時候,如果背景是云朵,顧客就會更關注舒適度,如果背景是硬幣,顧客就會更關注性價比。假如有一天,用戶的一切信息,item的一切信息我們都拿到了,那個時候足夠好的泛化可能會出現。
所以我個人不太喜歡同學們經常在做推薦的時候頻繁提“過擬合”,這個概念沒錯,但是如果我們把全部注意力都轉移到這里,很容易忽視很多值得關注的細節。在我看來,上面這些信息都沒有,模型完全還處于遠遠欠擬合的狀態。如果我們對各種特征,對于用戶的刻畫都全知全能了,那么也許就不需要面臨復讀機引發的問題了(這里扯得有點遠,我們到了產品篇或者運營篇再詳細講講吧)。
第二個問題是,真實情況真的這么糟嗎?
其實也沒那么糟,在LR這個模型里面,增加泛化的要點是增加一些能泛化的特征。還是像上面圖中的例子,當我們有年齡性別這樣的輸入之后,一部分歸因可以歸到年齡性別上,那么下次一個新的用戶來的時候,我們就可以根據他的年齡性別給出一些先驗判斷。這本身也是一種復讀,但是更科學了。以此類推我們實際中會加很多能描述用戶或者item泛化屬性的特征來緩解這個問題。
“推薦本質是復讀機”這個理論不是完全正確的,之所以這么說,是希望同學能夠以一個更加自如的姿態來看待這個領域。一開始我們往往敬畏之心會過度旺盛,加上圈子里面天天《重磅》《大突破》,渲染的好像有多么高深一樣,我們會覺得這個領域不知道從何下手。不如換一個角度,你首先要相信,現代科學的發展沒有那么突飛猛進,很多情況都是增量式的改進,你先從簡單的視角來看待,慢慢再深入也許上手更快。再說了,復讀也不是壞事,只要復讀的足夠高級,你也看不出我在復讀嘛。
強解釋性
LR這個模型解釋性是非常強的。我們還是舉上面圖中的那個例子,我們有四種特征,user ID,item ID,年齡,性別。假如在分布均勻的茫茫負樣本中,只有三個正樣本,分別是:
通過這些樣本,模型會有怎樣的趨勢,我們能看出怎樣的結論?通過對模型的分析,我們可以判斷,itemID=10這里,對應的w收到三次正向的梯度,gender=male兩次,其他都是一次。那么從模型的角度看,itemID=10就是一個更重要的因素,也就是說,模型認為10號item就是好。如果是我們人為分析的話,我也會這么覺得。模型給出的判斷符合人的認知。我們完全可以拿出一個模型,看看里面的分布是怎樣的,然后說,幅度明顯大的特征,就比小權重的特征更重要。這一點在大多數實踐中是成立的。因此事實上,LR也可以作為特征重要性分析的一種工具。
我們本講中的LR特征種類少,特征的取值也少。但在實際應用中,特征的數量是非常非常多的。比如我又上億用戶的時候,單單user ID這一個特征就有上億的取值。由于特征的每一種取值都要獨占一個,那么也就存在一個對應的。即使我的機器很多,要做完一次預估都需要窮舉所有非0的 也是非常非常費勁的。尤其是我可能會得到很多取值是0.0001,0.000001這樣的,你說不加吧,結果可能又不對,加上吧,零零碎碎的也太煩人了。怎么樣既能做到結果是準確的,又能很省力的完成呢?這就是LR主要面臨的問題,請看下期——
下期預告
精排之鋒(2):工業LR的稀疏要求
往期回顧
1.召回 粗排 精排,如何各司其職?
2.拍不完的腦袋:推薦系統打壓保送重排策略
后臺回復關鍵詞【入群】
加入賣萌屋NLP/IR/Rec與求職討論群
后臺回復關鍵詞【頂會】
獲取ACL、CIKM等各大頂會論文集!
?
[1]. https://www.quora.com/Logistic-Regression-Why-sigmoid-function
[2]. 《影響力》這是社會心理學的一本很著名的書,推薦大家讀一讀
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的简单复读机LR如何成为推荐系统精排之锋?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 百度NLP、视频搜索团队招聘算法实习生!
- 下一篇: 还在用Tensorboard?机器学习实