推薦策略產(chǎn)品經(jīng)理實(shí)操(三):推薦與搜索
編輯導(dǎo)語(yǔ):推薦的目的主要在于依據(jù)用戶(hù)行為偏好,為用戶(hù)推薦可能喜歡的事物;而搜索則是用戶(hù)出于一定目的進(jìn)行檢索,前者為被動(dòng)獲取,后者為主動(dòng)獲取。具體而言,推薦系統(tǒng)與搜索系統(tǒng)有何差異?本篇文章里,作者從整體邏輯層面對(duì)推薦系統(tǒng)與搜索系統(tǒng)的區(qū)別進(jìn)行了總結(jié),一起來(lái)看一下。
根據(jù)我平時(shí)接觸的推薦和搜索業(yè)務(wù),簡(jiǎn)單地將2個(gè)業(yè)務(wù)的流程進(jìn)行梳理以及知識(shí)點(diǎn)擴(kuò)展,便于需要的同學(xué)能夠快速地了解2個(gè)系統(tǒng)的基本邏輯。
一、推薦系統(tǒng)邏輯
推薦的本質(zhì)就是為了解決信息過(guò)載造成的“選擇困難癥”,便于用戶(hù)能夠在自己選物之前,系統(tǒng)已經(jīng)幫用戶(hù)篩選到了最想要的信息。
以下是我按照用戶(hù)打開(kāi)APP進(jìn)入推薦頁(yè)面時(shí),推薦系統(tǒng)返回給該用戶(hù)推薦列表的整體流程:
整個(gè)流程的重點(diǎn)邏輯主要在召回、排序、重排三層,這一節(jié)專(zhuān)門(mén)講這一塊,至于AB實(shí)驗(yàn)平臺(tái)上的邏輯,后面會(huì)有專(zhuān)門(mén)的一節(jié)進(jìn)行AB實(shí)驗(yàn)的詳解。
1. 召回
什么是召回?大多數(shù)人都會(huì)很快解釋?zhuān)赫倩厥菑奈锪蠋?kù)中獲取一小部分物料,這一小部分物料會(huì)在后續(xù)的環(huán)節(jié)被模型用來(lái)進(jìn)行打分排序。
這里我們?cè)僦卑滓稽c(diǎn)理解吧,召回就是撈,給用戶(hù)推薦的時(shí)候,不可能把平臺(tái)上所有的item都拿出來(lái)走模型排序,這樣的話(huà)計(jì)算時(shí)間會(huì)很長(zhǎng),且資源消耗很大、不合理。這個(gè)時(shí)候就需要去平臺(tái)內(nèi)容庫(kù)里把最適合用戶(hù)的item撈出來(lái),這就是我們說(shuō)的召回。
通常都是從億萬(wàn)級(jí)數(shù)據(jù)或千萬(wàn)級(jí)數(shù)據(jù)中撈出千百級(jí)別的item。召回這一步主要是處理數(shù)據(jù)量大,需要步驟速度夠快、模型不能太復(fù)雜且使用特征相對(duì)排序少。
當(dāng)然,召回也是決定個(gè)性化推薦的基礎(chǔ),目前來(lái)看,召回多數(shù)是多路召回(這里可以理解為通過(guò)不同限制條件去撈)。
多路召回的好處:
- 提高召回率和準(zhǔn)確率,這里不對(duì)這2個(gè)名詞作解釋?zhuān)梢哉蚁嚓P(guān)文章自行查詢(xún);
- 個(gè)性化推薦的基礎(chǔ),用戶(hù)多樣性興趣探索,多元化召回;
- 保證線上事故發(fā)生時(shí)還有存余召回兜底,避免推薦接口沒(méi)有返回的數(shù)據(jù);
- 貼近業(yè)務(wù),各業(yè)務(wù)需求不一樣,需要進(jìn)行融合(廣告召回、強(qiáng)插、item冷啟動(dòng)等)。
常見(jiàn)的召回路徑(策略都是需要數(shù)據(jù)支持且與場(chǎng)景強(qiáng)相關(guān)的):
1)協(xié)同過(guò)濾
基于用戶(hù)的協(xié)同過(guò)濾,基于item的協(xié)同過(guò)濾;簡(jiǎn)單來(lái)說(shuō)就是喜歡A內(nèi)容的用戶(hù),還喜歡B游戲(這種召回方式比較老,現(xiàn)在很少有公司會(huì)用)。
協(xié)同過(guò)濾和用戶(hù)及游戲都有關(guān),矩陣,玩過(guò)就是1,沒(méi)玩就是0,沒(méi)玩過(guò)的游戲很多,很多都是0,所以會(huì)做矩陣分解:用戶(hù)矩陣和商品矩陣,每一列就是用戶(hù)向量或商品向量。
2)word2vec(詞向量)
(最早用于NLP中)需要拿到用戶(hù)的玩游戲序列,每個(gè)游戲做one-hot編碼,會(huì)有一個(gè)神經(jīng)網(wǎng)絡(luò)模型,輸入是A→B→?→D→E,輸出是C,或A→B→C→D去預(yù)測(cè)E。
模型中間的隱藏層就叫詞向量,和游戲有關(guān),和用戶(hù)沒(méi)關(guān),拿數(shù)據(jù)的時(shí)候和用戶(hù)有關(guān)(向量用法:用戶(hù)和游戲算相似度:用戶(hù)A和游戲B向量做相似度計(jì)算;用戶(hù)和用戶(hù)、游戲和游戲)。
3)內(nèi)容匹配召回
這一塊主要和標(biāo)簽(類(lèi)別)召回有關(guān),比如:用戶(hù)玩了王者榮耀,那么可以嘗試召回推薦類(lèi)似王者榮耀的吃雞游戲,這是基于內(nèi)容標(biāo)簽的召回;又或者用戶(hù)玩了植物大戰(zhàn)僵尸1,那么也可以嘗試推薦植物大戰(zhàn)僵尸2/3等,這是基于知識(shí)儲(chǔ)備的匹配。
4)高熱召回(熱門(mén)召回)
這一路召回主要是新用戶(hù)用的比較多,新用戶(hù)剛來(lái)APP,拿不到過(guò)多的用戶(hù)信息且沒(méi)有行為,這種情況下,平臺(tái)高熱召回就起了大作用,用來(lái)做新用戶(hù)冷啟動(dòng);用戶(hù)冷啟動(dòng)這里不做過(guò)多結(jié)束,后面會(huì)有專(zhuān)門(mén)的一節(jié)做介紹。
5)基于上下文的召回
這個(gè)和用戶(hù)在APP發(fā)生行為的時(shí)間、地點(diǎn)等場(chǎng)景有關(guān)系,例如游戲推薦在白天碎片休息時(shí)間推薦小游戲,在晚上休息時(shí)間推薦大游戲、游戲時(shí)長(zhǎng)較長(zhǎng)的游戲等;在其他垂類(lèi)上體現(xiàn)的話(huà),就像打車(chē)垂類(lèi)對(duì)于用戶(hù)位置信息的敏感,用戶(hù)刷新聞的時(shí)間等等。
6)級(jí)聯(lián)召回
一般的召回是用戶(hù)點(diǎn)擊做正樣本,級(jí)聯(lián)是用精排排在前面的游戲做正樣本,排在后面的做負(fù)樣本,做召回模型的正負(fù)樣本。
7)其他召回
根據(jù)業(yè)務(wù)需求,還會(huì)有其他召回,且每路召回的數(shù)量也有差異,例如為了讓新用戶(hù)快速留下來(lái),新用戶(hù)高熱召回占比較大,但老用戶(hù)的話(huà),為了挖掘用戶(hù)興趣多樣化,高熱召回占比會(huì)相對(duì)小一點(diǎn)。
召回層也是有模型的,尤其是做電商業(yè)務(wù),召回的模型會(huì)更復(fù)雜。
2.?排序——粗排/精排
粗排和精排,都是排序,一個(gè)需要快速排序盡量去掉錯(cuò)誤召回,一個(gè)需要貼合用戶(hù)和業(yè)務(wù)需求精細(xì)準(zhǔn)確排序。
粗排在召回和精排之間,一般需求從召回回來(lái)的萬(wàn)/千級(jí)別item集合中選擇出千/百級(jí)別更符合業(yè)務(wù)需求的item送到精排層。平臺(tái)內(nèi)容少時(shí),幾乎很少會(huì)做粗排這一步,因?yàn)榇峙抛畲蟮淖饔镁褪强焖儆?jì)算并截?cái)嗾倩亓?,使召回?cái)?shù)據(jù)更準(zhǔn)更適合推給用戶(hù),一般粗排需要在20ms內(nèi)完成打分。
如果沒(méi)有粗排模型,也可以在召回層和精排層用一些策略進(jìn)行數(shù)量截?cái)噙M(jìn)精排,也是一種粗排手段,例如用點(diǎn)擊轉(zhuǎn)化率進(jìn)行截?cái)唷?/p>
精排處理數(shù)據(jù)量少,需要模型做到更準(zhǔn)確,通常會(huì)上一些復(fù)雜模型以及使用較多特征。
粗排和精排層可以是一個(gè)模型打分,也可以是多個(gè)模型打分融合再進(jìn)行排序,多數(shù)業(yè)務(wù)需求情況下多數(shù)都是多個(gè)模型,根據(jù)業(yè)務(wù)需求,模型的目標(biāo)不一樣,但基本上都會(huì)有點(diǎn)擊模型(ctr)。
下面就單獨(dú)就點(diǎn)擊模型來(lái)講一下模型是怎么打分排序的,講排序之前需要先知道2個(gè)概念——label和features,這2個(gè)數(shù)據(jù),是ctr模型的主要訓(xùn)練數(shù)據(jù)。
label:用ctr模型舉例,每個(gè)模型都有l(wèi)abel(模型的預(yù)測(cè)目標(biāo)),ctr模型的label就是用戶(hù)對(duì)當(dāng)下曝光的item有沒(méi)有點(diǎn)擊行為,有曝光點(diǎn)擊就為正樣本,label=1,有曝光無(wú)點(diǎn)擊則為負(fù)樣本,label=0。
features:就是特征。特征主要分為3類(lèi):用戶(hù)特征、item特征、用戶(hù)和item的交叉特征。
- 用戶(hù)特征:用戶(hù)本身的特征,例如年齡、性別、地理位置等、登錄設(shè)備(iOS/Android);
- item特征:item本身的特征,例如標(biāo)簽、物品ID、天級(jí)點(diǎn)擊次數(shù)、評(píng)論量、熱門(mén)排名等;
- 用戶(hù)特征和item的交叉特征:例如item天級(jí)的點(diǎn)擊次數(shù)、周級(jí)點(diǎn)擊人數(shù)、天級(jí)曝光次數(shù)等。
可以看出,features是我們?cè)谕扑]系統(tǒng)都能夠收集到的數(shù)據(jù),其中有離散型特征(例如男女、分類(lèi)、整數(shù)等),也有連續(xù)型特征(例如點(diǎn)擊率、自然數(shù))。
在計(jì)算機(jī)只能處理數(shù)字編碼的前提下,將這些信息進(jìn)行編碼轉(zhuǎn)化,大多數(shù)推薦系統(tǒng)對(duì)于離散型特征多使用one-hot或embedding,對(duì)于連續(xù)性特征可以不用處理,或者先分段離散化,再使用one-hot編碼。
(大多數(shù)公司使用離散型特征的較多,連續(xù)型特征使用較少,有時(shí)連續(xù)型特征也會(huì)做分桶處理——分段,其實(shí)就是變相地處理成離散型數(shù)據(jù)。)
*注,one-hot編碼會(huì)將特征處理為[0 0 0 0 1],embedding會(huì)將特征處理為[0.2 0.4 0.6 0.8]
在明確了 features 和 label 的定義之后,會(huì)構(gòu)造對(duì)應(yīng)的訓(xùn)練樣本:
- 負(fù)樣本 (曝光不點(diǎn)擊):([**0,0,0,1,0,0,**0.12,0.13,0.05, …, ], 0)
- 正樣本 (曝光點(diǎn)擊):(**[0,0,1,0,0,0,**0.02,0.08,0.13, …, ], 1)
所以訓(xùn)練時(shí) CTR 模型輸入即為:特征向量和其對(duì)應(yīng)的 0、 1 標(biāo)簽。
預(yù)測(cè)時(shí),輸入只有特征向量,模型輸出一個(gè) 0~1 之間的數(shù)字,代表預(yù)估的 CTR 值,可以用來(lái)做排序。所以,建模之后,本質(zhì)上 CTR 預(yù)估問(wèn)題是一個(gè)二分類(lèi)問(wèn)題。
這就是其中一個(gè)模型的打分邏輯,有多模型打分融合的精排層,會(huì)將多個(gè)模型的分?jǐn)?shù)進(jìn)行打分,每個(gè)模型的重要性不一樣,因此分?jǐn)?shù)都會(huì)有權(quán)重,將每個(gè)模型的分?jǐn)?shù)進(jìn)行權(quán)重計(jì)算后相乘在一起,就是這個(gè)item的排序分?jǐn)?shù),每個(gè)item按照分?jǐn)?shù)進(jìn)行從高到底排序,就會(huì)得到精排打分列表。
3.?重排(混排/rerank)
這一步是推薦的最后一步,每個(gè)公司的叫法可能存在差異,有的叫重排,有的叫混排,學(xué)術(shù)一點(diǎn)叫rerank;雖然也是排序,但重排和粗排或精排最大的區(qū)別還是在于這一步更貼近業(yè)務(wù)需求,產(chǎn)品經(jīng)理發(fā)揮的空間也相對(duì)多一些。
做一些強(qiáng)插業(yè)務(wù)的時(shí)候,需要召回配合重排層做,例如做新內(nèi)容冷啟動(dòng)時(shí),需要給到?jīng)]有數(shù)據(jù)的內(nèi)容一個(gè)曝光的機(jī)會(huì),這個(gè)時(shí)候就需要用到重排強(qiáng)插;或者做一些打散邏輯時(shí),例如連續(xù)的7個(gè)內(nèi)容中不能有相似內(nèi)容,或連續(xù)的10個(gè)內(nèi)容中最多有2個(gè)相似內(nèi)容等等。
二、搜索系統(tǒng)邏輯
當(dāng)你在搜索框中輸入一串搜索詞后,頁(yè)面展示出你想要的結(jié)果,但其中的邏輯卻是很復(fù)雜,這里我認(rèn)為搜索是比推薦相對(duì)復(fù)雜的業(yè)務(wù):
整個(gè)流程的重點(diǎn)邏輯也包含了召回、排序、重排,但更為重要的是query處理部分,因?yàn)樯厦嬖敿?xì)講了 召回——排序——重排部分,因此這里不過(guò)多講解,只將重點(diǎn)放在query處理上。
query主要由query預(yù)處理、意圖識(shí)別、query分詞、query改寫(xiě)4個(gè)部分組成,各公司會(huì)依照搜索業(yè)務(wù)的復(fù)雜程度進(jìn)行部分簡(jiǎn)化;(query:用戶(hù)搜索詞,例如用戶(hù)在搜索框輸入“秋冬連衣裙女”并點(diǎn)擊搜索,那么用戶(hù)query就是“秋冬連衣裙女”)。
1)query預(yù)處理
這一步主要是針對(duì)用戶(hù)在搜索框中輸入的搜索詞,進(jìn)行數(shù)據(jù)清洗。
搜索詞基本上都會(huì)有長(zhǎng)度限制,一種是輸入框限制搜索詞長(zhǎng)度,一種是query預(yù)處理的時(shí)候進(jìn)行搜索詞截?cái)?,例如超過(guò)20個(gè)字長(zhǎng)度的搜索詞只截取前20個(gè)字。
因?yàn)橛脩?hù)輸入搜索詞的不規(guī)范,且不同的用戶(hù)對(duì)同一種訴求的表達(dá)往往會(huì)存在地域、文化程度以及清晰度的差異,因此會(huì)對(duì)搜索詞進(jìn)行轉(zhuǎn)化:大小寫(xiě)轉(zhuǎn)換,例如“太空狼人殺3d版”轉(zhuǎn)換為“太空狼人殺3D版”;簡(jiǎn)繁體轉(zhuǎn)換,例如“太空狼人殺”轉(zhuǎn)換為“太空狼人殺”;還有全半角轉(zhuǎn)換,這里就不再展開(kāi)過(guò)多說(shuō)明。
query預(yù)處理這一步都是根據(jù)用戶(hù)主動(dòng)輸入的搜索詞,進(jìn)行高頻query查詢(xún)檢索出的常見(jiàn)問(wèn)題,針對(duì)問(wèn)題進(jìn)行本質(zhì)問(wèn)題本質(zhì)解。
2)意圖識(shí)別
意圖識(shí)別的本質(zhì)就是分類(lèi)問(wèn)題,主要是根據(jù)業(yè)務(wù)需求進(jìn)行用戶(hù)意圖分類(lèi),分為幾個(gè)大類(lèi),收集每種意圖類(lèi)別下的常用詞進(jìn)行模型訓(xùn)練,模型準(zhǔn)確率越高,意圖識(shí)別效果越好。意圖識(shí)別在搜索系統(tǒng)中是必不可少的,意圖識(shí)別在很大程度上決定了用戶(hù)搜索質(zhì)量的好壞。
*意圖識(shí)別的難點(diǎn):
- 輸入不規(guī)范;就像上面提到的,不同用戶(hù)對(duì)同一個(gè)內(nèi)容的認(rèn)知存在差異,輸入的搜索詞也會(huì)存在不小的差異;
- 數(shù)據(jù)冷啟動(dòng),用戶(hù)行為較少數(shù)據(jù)較少,意圖獲取會(huì)相對(duì)沒(méi)那么準(zhǔn);
- 多意圖識(shí)別,無(wú)法定位精準(zhǔn)意圖,例如用戶(hù)搜索“車(chē)”,無(wú)法知道是想要玩具車(chē)還是四輪真車(chē),或者是摩托車(chē);
- 業(yè)界沒(méi)有固定的評(píng)價(jià)標(biāo)準(zhǔn),只有不同業(yè)務(wù)直接自己劃分的分類(lèi)進(jìn)行的模型分類(lèi)準(zhǔn)確率計(jì)算,而一些業(yè)務(wù)指標(biāo)例如ctr、cvr、pv等指標(biāo),都是評(píng)價(jià)整個(gè)搜索系統(tǒng)的,具體到意圖識(shí)別上的量化指標(biāo)卻沒(méi)有。
3)query分詞
query分詞主要是對(duì)用戶(hù)搜索詞進(jìn)行切分,根據(jù)切分的詞去進(jìn)行改寫(xiě)以及后續(xù)的召回邏輯,不同業(yè)務(wù)的切詞方式及自由切詞庫(kù)是有差異的。
4)query改寫(xiě)
這一步主要是針對(duì)用戶(hù)搜索詞進(jìn)行糾錯(cuò)、以及同義詞擴(kuò)展召回等。需要做糾錯(cuò)詞表或糾錯(cuò)模型,例如將“火才人”糾錯(cuò)為“火柴人”,將“超級(jí)貓麗奧”糾錯(cuò)為“超級(jí)馬里奧”,將“校園”擴(kuò)展為“學(xué)?!薄ⅰ袄蠋煛?、“教室”、“同桌”等等,同義詞擴(kuò)展里面會(huì)存在一些干擾詞,需要根據(jù)實(shí)際業(yè)務(wù)對(duì)頭部搜索詞的同義詞進(jìn)行自定義切詞表或自定義同義詞表等。
三、推薦和搜索的區(qū)別
從上述對(duì)推薦系統(tǒng)和搜索系統(tǒng)的整體流程的講述可以看出,推薦和搜索既有緊密聯(lián)系,又有不小的差異。
1. 行為主動(dòng)或被動(dòng)
本質(zhì)問(wèn)題本質(zhì)解,搜索和推薦都是為了解決信息過(guò)載問(wèn)題,都是獲取信息的方式之一,一個(gè)主動(dòng)獲取——搜索,一個(gè)被動(dòng)獲取——推薦:推薦行為是被動(dòng)的,需求不是很明確,個(gè)性化和多樣性會(huì)多一些,而搜索的需求是主動(dòng)和相對(duì)明確的,且查詢(xún)范圍相對(duì)較小。
2. 使用場(chǎng)景目的
推薦的本質(zhì)是需要留住用戶(hù)在APP中,讓用戶(hù)使用的時(shí)間變長(zhǎng),并且第二天也能留住用戶(hù),逐漸產(chǎn)生廣告收益和其他收益,讓用戶(hù)消費(fèi)更多,需要通過(guò)分析用戶(hù)的歷史行為以及當(dāng)前的實(shí)時(shí)行為場(chǎng)景等,推薦系統(tǒng)自發(fā)生成查詢(xún)條件快速給出推薦列表的行為,是一種無(wú)聲的搜索。
而搜索更像張小龍?jiān)缙诳谥械奈⑿?,需要用完即走,搜索的本質(zhì)是協(xié)助用戶(hù)快速找到自己需要的結(jié)果并完成轉(zhuǎn)化離開(kāi)。我理解,好的搜索算法需要做的是讓用戶(hù)快速使用,高效查詢(xún)并且停留時(shí)間更短。
3. 是互相成就
從流程來(lái)看,搜索就是限定了條件的推薦,推薦就是自發(fā)的主動(dòng)搜索;從用戶(hù)query中可以收集到大量個(gè)性化推薦的需求,推薦數(shù)據(jù)可以推薦用戶(hù)搜索內(nèi)容的相似內(nèi)容,進(jìn)行數(shù)據(jù)融合,而當(dāng)用戶(hù)搜索目的不明確時(shí)使用好的推薦,結(jié)合意圖識(shí)別和推薦模型,實(shí)現(xiàn)類(lèi)目下的更精準(zhǔn)推薦,是提升用戶(hù)體驗(yàn)的手段。
以上就是我對(duì)推薦和搜索場(chǎng)景在實(shí)際項(xiàng)目中的邏輯梳理,如果有感興趣的同學(xué),歡迎私聊。
加油,打工人!
本文由 @王九蛋 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。
題圖來(lái)自Unsplash,基于CC0協(xié)議。
很受用,冷啟動(dòng)情況下該怎么處理呢
想知道AB實(shí)驗(yàn)平臺(tái)做了什么工作
珂姐????!珂姐yyds!
大大講的好好,只是word2vec那一塊沒(méi)理解,這一塊是用戶(hù)的標(biāo)簽向量與動(dòng)態(tài)標(biāo)簽向量進(jìn)行匹配嗎
厲害??
非常清晰的介紹了一下推薦、搜索的架構(gòu)及每一個(gè)模塊用到的基礎(chǔ)算法知道,希望老師能多寫(xiě)一些文章
這種推薦策略類(lèi)的介紹越來(lái)越少了,支持!
現(xiàn)在沒(méi)有幾篇這么接地氣的基礎(chǔ)介紹了,寫(xiě)的很好,很容易理解,都是干貨
非常棒的文章,干貨滿(mǎn)滿(mǎn)