你的老婆是怎么算出來(lái)的?揭秘佳緣用戶推薦系統(tǒng)

本文轉(zhuǎn)自BreezeDeus

總結(jié)、溫習(xí),這兩點(diǎn)讓人成長(zhǎng)。而不是你走得有多快!

這句話我寫(xiě)了半年了,這篇文章算是此話付諸實(shí)踐的開(kāi)端吧。

本文是我對(duì)自己這幾年所接觸的技術(shù)的總結(jié),有些技術(shù)與工作直接相關(guān),有些則純屬個(gè)人興趣。具體說(shuō),本文分為兩部分,第一部分介紹佳緣用戶推薦系統(tǒng)的發(fā)展歷史。這部分的介紹很好地反映我們對(duì)這個(gè)問(wèn)題的思考和理解過(guò)程。這期間我們走了很多彎路,但也正是這些彎路讓我們積累了很多婚戀交友推薦里獨(dú)特的實(shí)戰(zhàn)經(jīng)驗(yàn)。第二部分主要是羅列了一些我個(gè)人這幾年接觸的比較有代表性的技術(shù),這些技術(shù)很多偏學(xué)術(shù),只對(duì)實(shí)戰(zhàn)感興趣的同學(xué)可以忽略。

佳緣用戶推薦系統(tǒng)

天真的算法年:2011-2013

2011年8月我加入世紀(jì)佳緣,開(kāi)始時(shí)主要負(fù)責(zé)佳緣的交友推薦系統(tǒng)優(yōu)化,后來(lái)我這個(gè)團(tuán)隊(duì)也負(fù)責(zé)其他的機(jī)器學(xué)習(xí)事情,比如佳緣的網(wǎng)警系統(tǒng)(抓惡意用戶)。剛來(lái)時(shí)團(tuán)隊(duì)加上我只有3個(gè)人,做的事基本集中在推薦系統(tǒng),以及對(duì)業(yè)務(wù)部門(mén)新產(chǎn)品的接口支持。當(dāng)時(shí)我自己并沒(méi)有推薦系統(tǒng)應(yīng)用于工業(yè)界的實(shí)際經(jīng)驗(yàn),所以很想當(dāng)然地就從自己了解的推薦算法開(kāi)始工作了。

2011年到2013年中這段時(shí)間,我們?cè)谒惴ǚ矫嬷饕隽藘蓚€(gè)方向的嘗試。第一個(gè)是嘗試item-based kNN算法。對(duì)這個(gè)算法的優(yōu)化嘗試體現(xiàn)在以下幾個(gè)方面:

離線計(jì)算效率的優(yōu)化:從開(kāi)始的單機(jī)計(jì)算,到后來(lái)的Hadoop分布式計(jì)算。

離線計(jì)算效果的優(yōu)化:嘗試了不同的相似度計(jì)算方法,以及不同的預(yù)測(cè)產(chǎn)生方式,但效果并不明顯。

離線計(jì)算改為線上實(shí)時(shí)計(jì)算:離線的工作方式是先在線下計(jì)算好推薦結(jié)果,然后把結(jié)果存入緩存;線上需要推薦結(jié)果時(shí)直接從緩存中取即可。顯然這種方式對(duì)于緩存中沒(méi)有推薦結(jié)果的用戶無(wú)法產(chǎn)生推薦,而活躍的用戶又很容易把緩存中的所有結(jié)果都消費(fèi)完。為了解決這些問(wèn)題,后來(lái)我們?cè)贒ubbo上構(gòu)建了實(shí)時(shí)的Java推薦服務(wù)。

Item-based kNN算法的嘗試最開(kāi)始是基于最大化佳緣用戶發(fā)信量的業(yè)務(wù)理解,但后來(lái)我們發(fā)現(xiàn)這個(gè)理解跟業(yè)務(wù)部門(mén)的需求偏差很大。比如給男性展示美女,男性的發(fā)信就會(huì)暴漲,但這樣就會(huì)導(dǎo)致少量的女性收到大部分信,而大部分女性則沒(méi)信可收。這是業(yè)務(wù)部門(mén)不愿意看到的。雖然我們嘗試在item-based kNN基礎(chǔ)上做調(diào)整來(lái)平衡其他的業(yè)務(wù)指標(biāo)(如收信人數(shù),看信人數(shù)等),但效果不理想。

第二個(gè)嘗試是學(xué)術(shù)界的可逆(Reciprocal)推薦算法1,即在考慮用戶體驗(yàn)的同時(shí)也兼顧item(對(duì)佳緣來(lái)說(shuō)也是人)的體驗(yàn)。這個(gè)嘗試基本是失敗的,學(xué)術(shù)界發(fā)明的那些算法基本都有各種前提假設(shè),真用起來(lái)都不太靠譜。

雖然到2013年我們團(tuán)隊(duì)人數(shù)上升到了六七人,但基本在推薦算法上做事的人還是只有兩個(gè)左右。

工程年:2014

從2013年底開(kāi)始我逐漸意識(shí)自己對(duì)算法的理解過(guò)于學(xué)術(shù)而無(wú)法滿足業(yè)務(wù)部門(mén)的實(shí)際需求。所以從2013年底我開(kāi)始從業(yè)務(wù)出發(fā)重新梳理推薦算法團(tuán)隊(duì)的工作方向。相對(duì)于給用戶推薦物品的場(chǎng)景,佳緣的在線交友推薦有以下幾個(gè)特點(diǎn):

可逆性:佳緣的物品是異性的人,他們也會(huì)有感受。所以在推薦時(shí)要考慮到雙方的感受。

資源獨(dú)占性:通常一個(gè)人在一段時(shí)間內(nèi)也就和一個(gè)人談戀愛(ài)。這與電商賣(mài)東西是差別很大的,一本相同的書(shū)可以賣(mài)幾十萬(wàn)冊(cè)都可以,在佳緣這么干就不行。電商可以搞個(gè)暢銷榜讓用戶購(gòu)買(mǎi)最暢銷的書(shū),這其實(shí)也是很好的推薦。但對(duì)于佳緣這一招就很糟糕。

轉(zhuǎn)化鏈很長(zhǎng),反饋延遲:從展示到發(fā)信,再到看信和回信,過(guò)程很長(zhǎng),而且看信和回信又會(huì)有很長(zhǎng)的時(shí)間延遲。另外,收益在轉(zhuǎn)化鏈的末端才能體現(xiàn)。公司的收益在看信后才能體現(xiàn)(佳緣的業(yè)務(wù)模式是收取用戶的看信費(fèi)用),而用戶的收益在回信后才能真正體現(xiàn)。

佳緣業(yè)務(wù)的高復(fù)雜性,加上團(tuán)隊(duì)在使用算法上經(jīng)驗(yàn)不夠,讓我決定把接下來(lái)的算法優(yōu)化方向放在特征工程上,而算法就限制在最簡(jiǎn)單的邏輯回歸(Logistic Regression)。團(tuán)隊(duì)在處理特征的過(guò)程中可以積累對(duì)數(shù)據(jù)的處理經(jīng)驗(yàn),以及對(duì)業(yè)務(wù)的理解。邏輯回歸足夠簡(jiǎn)單,解釋性好,也有很好的開(kāi)源實(shí)現(xiàn)。從它開(kāi)始也可以讓團(tuán)隊(duì)在算法使用上積累心得。這是“戰(zhàn)術(shù)”上的第一個(gè)選擇。我們把上圖中每一步轉(zhuǎn)化作為單獨(dú)的問(wèn)題分別進(jìn)行優(yōu)化,這樣邏輯回歸就適用于每一步。這是“戰(zhàn)術(shù)”上的第二個(gè)選擇。

上面說(shuō)的“戰(zhàn)術(shù)”,其實(shí)針對(duì)的只是推薦系統(tǒng)里的排序系統(tǒng)。當(dāng)時(shí)我對(duì)推薦系統(tǒng)整體的想法是把運(yùn)營(yíng)需求和用戶需求分開(kāi),然后分別對(duì)他們進(jìn)行獨(dú)立優(yōu)化。具體說(shuō)就是第一步以滿足運(yùn)營(yíng)需求為目標(biāo)獲得候選集,而第二步是根據(jù)用戶(雙方)的喜好對(duì)候選集進(jìn)行排序,系統(tǒng)流程圖見(jiàn)下圖。這樣,在優(yōu)化用戶需求時(shí)就不需要考慮佳緣復(fù)雜的業(yè)務(wù)邏輯,可以極大地簡(jiǎn)化問(wèn)題。同樣,我們也可以比較獨(dú)立地優(yōu)化滿足運(yùn)營(yíng)需求的候選系統(tǒng)。這可以認(rèn)為是推薦系統(tǒng)的“戰(zhàn)略”方向。

佳緣推薦系統(tǒng)流程圖(2014)

2014年無(wú)疑是工程年。

產(chǎn)品年:2015

2014年工程年的效果還是不錯(cuò)的,多個(gè)轉(zhuǎn)化模型的分別構(gòu)建和組合使用,使得業(yè)務(wù)上的各個(gè)指標(biāo)都有所提升,很多指標(biāo)的提升幅度都超過(guò)了50%。

現(xiàn)在看來(lái),2014年的戰(zhàn)術(shù)是非常正確的?;艘荒陼r(shí)間在特征工程上,團(tuán)隊(duì)確實(shí)對(duì)業(yè)務(wù)數(shù)據(jù)的理解更深入了很多,也積累了模型優(yōu)化的一些經(jīng)驗(yàn)。戰(zhàn)略上雖然大方向沒(méi)錯(cuò),卻也存在一些問(wèn)題。首先,運(yùn)營(yíng)需求與用戶需求本來(lái)就是相關(guān)的,它們不可能完全獨(dú)立,我們?cè)趦?yōu)化一個(gè)指標(biāo)的同時(shí)很容易對(duì)另一個(gè)指標(biāo)產(chǎn)生副作用。

例如,按照上面的流程圖,第一步的候選系統(tǒng)通過(guò)考慮運(yùn)營(yíng)需求來(lái)產(chǎn)生候選集,然后候選集由考慮用戶需求的排序系統(tǒng)進(jìn)行排序。如果產(chǎn)生的候選集很小,那排序系統(tǒng)的優(yōu)化空間就很小,作用自然也不會(huì)大;而如果候選集很大,那通過(guò)排序系統(tǒng)排序后獲得最終推薦結(jié)果的做法就會(huì)降低運(yùn)營(yíng)需求的控制力度。

2014年底的時(shí)候我開(kāi)始考慮2015年推薦系統(tǒng)團(tuán)隊(duì)的工作方向。那段時(shí)間我集中看了很多公司推薦相關(guān)的資料,其中幾年前百度大推薦部門(mén)(現(xiàn)在已經(jīng)解散)公開(kāi)的一些演講資料對(duì)我啟發(fā)最大。很多公司講推薦的資料都注重講算法,或者數(shù)據(jù)和特征;而百度的這些資料主要偏向于從系統(tǒng)方向來(lái)講。這啟發(fā)我回到排序系統(tǒng)的本質(zhì)來(lái)看推薦系統(tǒng)。

搜索,廣告和推薦系統(tǒng),本質(zhì)都是大規(guī)模排序系統(tǒng)。它們都遵循“候選產(chǎn)生 –> 排序 –> 后處理”的一般流程(見(jiàn)下圖)。

再仔細(xì)說(shuō)明下上面這個(gè)流程中的前兩步:

1)候選產(chǎn)生(檢索)系統(tǒng):找與用戶相關(guān)的候選集合。對(duì)于佳緣來(lái)說(shuō),這里的相關(guān)候選集合可以通過(guò)(互相)滿足擇偶條件來(lái)獲得,也可以通過(guò)算法如kNN,AR等來(lái)獲得。不管用什么方式,最終目的就是把用戶與候選集合聯(lián)系起來(lái)。

2)排序系統(tǒng):排序系統(tǒng)里的排序目的是最大化產(chǎn)品目標(biāo)。對(duì)佳緣來(lái)說(shuō),產(chǎn)品目標(biāo)包括了運(yùn)營(yíng)目標(biāo)和用戶滿意度。

相對(duì)于2014年運(yùn)營(yíng)需求與用戶需求獨(dú)立優(yōu)化的“戰(zhàn)略”,2015年的優(yōu)化思路有所調(diào)整:

  • 分離出運(yùn)營(yíng)需求中與用戶需求耦合小的部分,使用規(guī)則控制。這樣做的原因主要還是佳緣的業(yè)務(wù)邏輯太復(fù)雜,完全依靠算法達(dá)成產(chǎn)品目標(biāo)很困難,所以加入了一些規(guī)則進(jìn)行宏觀控制。
  • 統(tǒng)一優(yōu)化無(wú)法分離的運(yùn)營(yíng)需求與用戶需求。這種統(tǒng)一不僅體現(xiàn)在排序系統(tǒng)會(huì)同時(shí)考慮這兩方面的指標(biāo),也會(huì)以較弱的形式體現(xiàn)在候選產(chǎn)生系統(tǒng)里,畢竟從候選產(chǎn)生系統(tǒng)產(chǎn)生的候選集不可能是所有與用戶相關(guān)的物品(異性)。

那么,為什么把2015年叫做推薦系統(tǒng)的產(chǎn)品年?因?yàn)榻衲晖扑]系統(tǒng)的目標(biāo)是優(yōu)化產(chǎn)品目標(biāo)!

推薦系統(tǒng)是為產(chǎn)品服務(wù)的,而不是直接為用戶服務(wù)。

上面這句話聽(tīng)起來(lái)很簡(jiǎn)單,但其實(shí)很多時(shí)候我們會(huì)在不知不覺(jué)中認(rèn)為推薦系統(tǒng)是直接在為用戶服務(wù)的。我們?cè)谧钤绲臅r(shí)候就是犯了這個(gè)錯(cuò)誤。

本節(jié)的最后,匯總羅列下我這幾年做推薦的感想:

  • 技術(shù)為產(chǎn)品服務(wù),而不是直接面向用戶
  • 數(shù)據(jù)質(zhì)量是地基,保證好的質(zhì)量很不容易
  • 如何制定正確的優(yōu)化指標(biāo)真的很難
  • 業(yè)務(wù)理解 > 工程實(shí)現(xiàn)
  • 數(shù)據(jù) > 系統(tǒng) > 算法
  • 快速試錯(cuò)

一些技術(shù)嘗試

這節(jié)我只是簡(jiǎn)單羅列下最近幾年自己接觸的比較有代表性的一些技術(shù),跟工作關(guān)系不大。

Dirichlet Process 和 Dirichlet Process Mixture模型

了解DP主要是因?yàn)楫?dāng)時(shí)在看Mahout源代碼的時(shí)候發(fā)現(xiàn)有個(gè)算法以前竟然沒(méi)接觸過(guò),覺(jué)得挺有意思就仔細(xì)學(xué)了下。DP不太好理解,它被稱為分布的分布。從DP抽取出的每個(gè)樣本(一個(gè)函數(shù))都可以被認(rèn)為是一個(gè)離散隨機(jī)變量的分布函數(shù),這個(gè)隨機(jī)變量以非零概率值在可數(shù)無(wú)窮個(gè)離散點(diǎn)上取值。DPM是非參數(shù)貝葉斯聚類模型,聚類時(shí)可以讓模型自動(dòng)學(xué)習(xí)類數(shù)。雖然聽(tīng)著好像很不錯(cuò),其實(shí)有很多槽點(diǎn),具體可見(jiàn)參考文獻(xiàn)2。

Latent Dirichlet Allocation (LDA)

LDA是文本處理里的利器,經(jīng)常被用于對(duì)文本進(jìn)行聚類,或者預(yù)處理。更詳細(xì)的理論介紹可見(jiàn)參考文獻(xiàn)3。當(dāng)時(shí)我嘗試把它用于佳緣的發(fā)信數(shù)據(jù),看看能不能找出一些有明顯特征的發(fā)信群體。聚類結(jié)果整體上基本不可解釋,但有一個(gè)類別意義很明顯,這類人主要給離婚異性發(fā)信。大家可以想想這類人是什么人。嘗試感想是LDA直接用于聚類未必靠譜,但是可以把它用于數(shù)據(jù)的預(yù)處理,比如降維什么的。

Alternating Direction Method of Multipliers (ADMM)

ADMM是個(gè)優(yōu)化算法框架,它把一個(gè)大問(wèn)題分成可分布式同時(shí)求解的多個(gè)小問(wèn)題。理論上,ADMM的框架可以解決大部分實(shí)際中的大尺度問(wèn)題。槽點(diǎn)很多,謹(jǐn)慎使用!更詳細(xì)的介紹可見(jiàn)參考文獻(xiàn)4。

Deep Learning

前段時(shí)間,我利用佳緣的用戶頭像數(shù)據(jù),嘗試了DL里的一些常用算法。為了看算法的效果,我把用戶的性別作為預(yù)測(cè)目標(biāo)。這種預(yù)測(cè)對(duì)于佳緣的業(yè)務(wù)直接意義不大,因?yàn)橛脩粼谧?cè)時(shí)就被要求填寫(xiě)其性別。

算法預(yù)測(cè)的效果還是不錯(cuò)的,準(zhǔn)確度達(dá)到了87%。這還是在很小訓(xùn)練集上訓(xùn)練后獲得的精度。DL麻煩是訓(xùn)練時(shí)需要調(diào)整的超參數(shù)實(shí)在是太多了,改一次超參數(shù)就要重跑一次,真的是很耗時(shí)。沒(méi)有好的計(jì)算資源的話,建議別考慮DL。

利用GBDT模型構(gòu)造新特征

實(shí)在想不出更多的有用特征?嘗試下Facebook提出的利用GBDT來(lái)構(gòu)造新特征的方法吧。我們的使用經(jīng)驗(yàn)表明確實(shí)還是挺靠譜的,只要你效率能扛得住。具體介紹可見(jiàn)參考文獻(xiàn)5。

特征哈希(Feature Hashing)

很多個(gè)性化特征?特征數(shù)量太多?試試特征哈希的方法吧。此方法我們目前也沒(méi)使用過(guò),歡迎有經(jīng)驗(yàn)的人發(fā)表意見(jiàn)。具體介紹可見(jiàn)參考文獻(xiàn)5。

不平衡數(shù)據(jù)的抽樣方法

正負(fù)樣本數(shù)量差異太大?訓(xùn)練樣本太多機(jī)器跑不動(dòng)?嘗試下參考文獻(xiàn)7中的抽樣方法吧。我們之前的嘗試表明還是有點(diǎn)作用的。不過(guò)如果你的數(shù)據(jù)不是大得跑不動(dòng),那嘗試的必要性就不太大了

End.

極客網(wǎng)企業(yè)會(huì)員

免責(zé)聲明:本網(wǎng)站內(nèi)容主要來(lái)自原創(chuàng)、合作伙伴供稿和第三方自媒體作者投稿,凡在本網(wǎng)站出現(xiàn)的信息,均僅供參考。本網(wǎng)站將盡力確保所提供信息的準(zhǔn)確性及可靠性,但不保證有關(guān)資料的準(zhǔn)確性及可靠性,讀者在使用前請(qǐng)進(jìn)一步核實(shí),并對(duì)任何自主決定的行為負(fù)責(zé)。本網(wǎng)站對(duì)有關(guān)資料所引致的錯(cuò)誤、不確或遺漏,概不負(fù)任何法律責(zé)任。任何單位或個(gè)人認(rèn)為本網(wǎng)站中的網(wǎng)頁(yè)或鏈接內(nèi)容可能涉嫌侵犯其知識(shí)產(chǎn)權(quán)或存在不實(shí)內(nèi)容時(shí),應(yīng)及時(shí)向本網(wǎng)站提出書(shū)面權(quán)利通知或不實(shí)情況說(shuō)明,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)或不實(shí)情況證明。本網(wǎng)站在收到上述法律文件后,將會(huì)依法盡快聯(lián)系相關(guān)文章源頭核實(shí),溝通刪除相關(guān)內(nèi)容或斷開(kāi)相關(guān)鏈接。

2015-06-22
你的老婆是怎么算出來(lái)的?揭秘佳緣用戶推薦系統(tǒng)
總結(jié)、溫習(xí),這兩點(diǎn)讓人成長(zhǎng)。而不是你走得有多快!

長(zhǎng)按掃碼 閱讀全文