講人話系列——電商推薦系統(tǒng)

概述

從18年11月開(kāi)始,接觸推薦系統(tǒng)半年左右時(shí)間,對(duì)推薦系統(tǒng)有了基本的認(rèn)識(shí)。相比于之前做的nlp任務(wù),推薦系統(tǒng)復(fù)雜更多,數(shù)據(jù)來(lái)源更復(fù)雜、pipeline更復(fù)雜、場(chǎng)景更復(fù)雜、業(yè)務(wù)更復(fù)雜、指標(biāo)更復(fù)雜。在NLP部分的時(shí)候,絕大多數(shù)時(shí)間花在了數(shù)據(jù)-模型以及其match上。而在推薦里由于系統(tǒng)復(fù)雜度提升,多了更多的功夫在系統(tǒng)架構(gòu)、代碼重構(gòu)、快速部署上,工程側(cè)的東西在復(fù)雜系統(tǒng)中顯得更為重要。秉著精益算法的思想,延續(xù)之前的系列,這里我結(jié)合自己的經(jīng)驗(yàn),給大家分享下如何快速的搭建一個(gè)不錯(cuò)baseline的推薦系統(tǒng)。請(qǐng)各位吸取精華、去其糟柏即可。

問(wèn)題描述

  • 今日主角:電商推薦系統(tǒng)
  • 問(wèn)題定義:為用戶提供其最有可能產(chǎn)生交互的商品(點(diǎn)擊、購(gòu)買、分享)
  • 問(wèn)題舉例:
    • 活動(dòng)頁(yè)場(chǎng)景:淘寶、京東各電商首頁(yè)、各個(gè)活動(dòng)界面的商品推薦
    • 購(gòu)物中后置鏈路:購(gòu)物車商品推薦、訂單頁(yè)商品推薦

技術(shù)價(jià)值:作為電商主要的業(yè)務(wù)場(chǎng)景,通過(guò)算法實(shí)現(xiàn)千人千面,由貨找人,最大化商業(yè)指標(biāo)

推薦pipeline

據(jù)我說(shuō)知,電商推薦系統(tǒng)大的框架如下,為了方便說(shuō)明問(wèn)題,我畫了個(gè)圖來(lái)解釋下。

  1. trigger:觸發(fā)階段,該階段是推薦的源頭,可以是用戶歷史瀏覽商品、用戶偏好。通常這些數(shù)據(jù)直接從日志獲取,加以簡(jiǎn)單處理。
  2. match:召回階段,通過(guò)觸發(fā)器,我們拿到一些商品或者觸發(fā)源(類目、品牌)后,我們?nèi)リP(guān)聯(lián)一些商品。這里比較重要的一部分就是通過(guò)商品-商品的關(guān)聯(lián)。也就是推薦里面協(xié)同過(guò)濾發(fā)揮作用的地方。
  3. rank:排序階段,召回后的商品量很大,我們可以通過(guò)一些ctr(點(diǎn)擊率)、cvr(轉(zhuǎn)化率)模型對(duì)topN進(jìn)行精細(xì)化排序。
  4. rerank:重排序,多為全局性考慮,需要對(duì)結(jié)果再次排序。比如類目打散、品牌打散,所以很多時(shí)候也叫打散階段。


    推薦pipeline

好叻,根據(jù)上圖簡(jiǎn)單介紹下推薦流程:

  • trigger: 一個(gè)用戶瀏覽一件連衣裙。
  • match:看了這件連衣裙的用戶也看了很多別的連衣裙。
  • rank:對(duì)關(guān)聯(lián)出來(lái)的n件商品進(jìn)行點(diǎn)擊率預(yù)估,此處加入個(gè)性化。
  • rerank:對(duì)時(shí)間因素、品牌因素進(jìn)行一些大散,避免品牌過(guò)于集中等。

推薦pipeline的思考

這里針對(duì)每個(gè)階段進(jìn)行一個(gè)細(xì)節(jié)講解,指出個(gè)人覺(jué)得重要的地方。

思考1:關(guān)于trigger選取

  • 電商場(chǎng)景中trigger的時(shí)效性很重要,用戶越近操作的商品對(duì)于商業(yè)指標(biāo)越好。
  • trigger多樣性很重要,多路trigger能提升豐富度。
  • trigger中重點(diǎn)關(guān)注用戶直接操作過(guò)的商品。

思考2:關(guān)于是否需要trigger

  • 向量化的思路席卷各個(gè)領(lǐng)域,user-vector item-vector的匹配可以替換現(xiàn)有的trigger+協(xié)同過(guò)濾的方案。該方案目前沒(méi)有進(jìn)行嘗試,不確實(shí)是否是個(gè)比較好的baseline,一方面vector的graph embedding不一定能訓(xùn)練出來(lái),中間不可控因素較多,在初期建議以可控的方式去搭建系統(tǒng)。
  • 全向量化無(wú)疑是個(gè)值得探索的路子,更優(yōu)雅。據(jù)說(shuō)效果也更好,后續(xù)有積累后再分享。

思考3:協(xié)同過(guò)濾user to item VS item to item

  • 電商場(chǎng)景item to item可能更為合適:商品變化小、用戶變化快;item-item比user to item的結(jié)果上興趣度更集中;

思考4:協(xié)同過(guò)濾的優(yōu)劣

  • 協(xié)同過(guò)濾是推薦的老姜了,協(xié)同的效果也非常ok,比內(nèi)容匹配的指標(biāo)要好很多。協(xié)同的力量是強(qiáng)大的。
  • 劣勢(shì)一般都來(lái)自冷啟動(dòng),所以一定要搭配內(nèi)容匹配去輔助冷啟動(dòng)。
  • 匹配能力:深度學(xué)習(xí)來(lái)后,很多會(huì)進(jìn)行高階匹配,相比之下協(xié)同過(guò)濾也是有劣勢(shì)的,不過(guò)這里很細(xì)了,不多說(shuō),更多會(huì)在rank做這部分改進(jìn)。

思考5:rank VS match

  • match和rank都有打分功能,為什么要單獨(dú)弄rank,大部分原因還是來(lái)自復(fù)雜度,如果復(fù)雜度允許的情況下,當(dāng)然全局打分最好了。目前阿里在這個(gè)上面有出文章 任意深度學(xué)習(xí)+樹(shù)狀全庫(kù)檢索。
  • 通常match量比較大,進(jìn)行一個(gè)粗略的打分,然后對(duì)較為匹配的商品再給rank精細(xì)打分。

思考6:rank 模型

  • 關(guān)于模型,這可以單開(kāi)一篇了,這里以wdl做baseline即可。
  • 做ctr、cvr的話ESMM是一個(gè)非常好的通用架構(gòu),個(gè)人覺(jué)得該模型泛化能力強(qiáng),可以盡早入手。
  • 關(guān)于深度模型:DeepFM DCN DIN DIEN 這里模型太多,需要積累一段時(shí)間后才需要在rank階段深耕,前期沒(méi)必要在這里投入太多。

思考7:rerank VS rank

  • 打散階段更多是一個(gè)全局的考慮,目前的rank模型都是單個(gè)打分,沒(méi)有全局打分的,全局信息目前來(lái)看包括時(shí)效性、興趣集中度、業(yè)務(wù)邏輯等。
  • 現(xiàn)在有些研究直接對(duì)序列進(jìn)行打分,主要問(wèn)題還在復(fù)雜度上,目前沒(méi)有看到特別好的案例,所以基本還是分開(kāi)這兩個(gè)步驟,理論上可以統(tǒng)一的吧。

推薦業(yè)務(wù)思考

思考1:推薦場(chǎng)景差異度巨大

  • 推薦活動(dòng)場(chǎng)景、購(gòu)物前置鏈路、購(gòu)物后置鏈路差異巨大,需要差異化對(duì)待。
  • 購(gòu)物前置鏈路可能逛的需求更高,后置鏈路買的需求更高。
  • 應(yīng)該為每個(gè)場(chǎng)景培養(yǎng)用戶心智,而不是大一統(tǒng)模型。

思考2:如何發(fā)現(xiàn)迭代點(diǎn)

  • 任何看上去不合理的地方都是優(yōu)化點(diǎn),能做到像阿里這樣的不多,很多公司的推薦、搜索仔細(xì)看都是能看出問(wèn)題的,這里就是迭代點(diǎn)。

思考3:迭代流程

  • 發(fā)現(xiàn)一個(gè)迭代點(diǎn),找到可能有增益的地方,如果可以的話,事先評(píng)估下收益。
  • 開(kāi)發(fā),評(píng)估,驗(yàn)證和思路是否不符。
  • 如果沒(méi)有提升:當(dāng)所有可被證明的思路被證明后,仍然無(wú)提升,可以終止本次迭代,得出結(jié)論。
  • 通常對(duì)一個(gè)不合理的地方進(jìn)行迭代,都是可以有提升的,不要輕易放棄。

推薦系統(tǒng)思考

思考1:數(shù)據(jù)很重要,數(shù)據(jù)很重要,數(shù)據(jù)很重要?。?!

  • 同樣是數(shù)據(jù),相比于NLP中的數(shù)據(jù),推薦的數(shù)據(jù)來(lái)源很雜,可控度不是那么高,里面噪聲多,需要更細(xì)的去查,在做任何模型的時(shí)候要全面檢查數(shù)據(jù)各個(gè)指標(biāo)。分布是否合理,數(shù)值范圍,默認(rèn)值,數(shù)據(jù)規(guī)模,數(shù)據(jù)源,是否重復(fù)等。走模型前對(duì)數(shù)據(jù)一定要心里有數(shù)。

思考2:探案一樣進(jìn)行探索

  • 一個(gè)迭代動(dòng)作做完之后,如果沒(méi)有效果或者負(fù)向效果,仔細(xì)去對(duì)比每個(gè)步驟,找到可以說(shuō)服自己的理由。如果找不到就更細(xì)化的去分析,分用戶,分不同trigger去分析。就像探案一樣,推薦很多時(shí)候解釋性還是非常強(qiáng)的,環(huán)環(huán)相扣,不要因?yàn)橄到y(tǒng)復(fù)雜有蒙混的心理。解釋不通的地方通??赡軙?huì)有驚喜。

思考3:快速部署

  • 推薦系統(tǒng)比較復(fù)雜,搭建更快的部署方案能讓開(kāi)發(fā)時(shí)間大大縮減。把系統(tǒng)做好后,算法同學(xué)更好的集中精力處理問(wèn)題,而不是花費(fèi)大量的時(shí)間在部署上。

思考4:關(guān)于深度學(xué)習(xí)

  • 做好wdl可能對(duì)于很多場(chǎng)景來(lái)說(shuō)已經(jīng)夠了。做好細(xì)節(jié)可能比搞個(gè)高大上的模型有效的多,系統(tǒng)初期不建議花很多時(shí)間追高大尚的模型。

思考5:關(guān)于離線評(píng)估

  • 推薦很多時(shí)候是做ctr、cvr等指標(biāo)。所以線下不好評(píng)估。但是找到一個(gè)合適的指標(biāo)非常重要。比如auc、gauc(按用戶級(jí)別平均)、xgboost里面的特征重要性。比如常用的AUC可能就不是個(gè)好指標(biāo),因?yàn)橛脩舻燃?jí)不同,點(diǎn)擊率分布就不同,隨便一個(gè)模型就能把a(bǔ)uc提升,但平均auc則不盡然。所以一個(gè)合適的離線指標(biāo)很重要。有的時(shí)候需要和線上多次對(duì)比才能找到一個(gè)合適的指標(biāo)。

思考6:推薦系統(tǒng)高性價(jià)比部分

  • 復(fù)用組件:組件化能方便開(kāi)發(fā)。
  • AB測(cè)試:有效的線上測(cè)試是迭代的基礎(chǔ)。
  • 監(jiān)控:對(duì)核心指標(biāo)監(jiān)控能讓我們及時(shí)發(fā)現(xiàn)問(wèn)題。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容