一、倒排索引
倒排索引(英文:Inverted Index),是一種索引方法,常被用于全文檢索系統(tǒng)中的一種單詞文檔映射結(jié)構(gòu)。倒排索引又叫反向索引,它是一種逆向思維運(yùn)算,是現(xiàn)代信息檢索領(lǐng)域里面最有效的一種索引結(jié)構(gòu)。
二、Offline
offline是基于存儲(chǔ)好的物料畫(huà)像和用戶(hù)畫(huà)像進(jìn)行離線計(jì)算, 為每個(gè)用戶(hù)提供一個(gè)熱門(mén)頁(yè)列表和推薦頁(yè)列表并進(jìn)行緩存, 方便online服務(wù)的列表獲取。
2.1 熱門(mén)頁(yè)列表
熱門(mén)頁(yè)就是對(duì)于每篇文章,會(huì)根據(jù)它的發(fā)布時(shí)間,用戶(hù)對(duì)它的行為記錄(獲得的點(diǎn)贊數(shù),收藏?cái)?shù)和閱讀數(shù))去計(jì)算該文章的熱度信息, 然后根據(jù)熱度值進(jìn)行排序得到, 所以計(jì)算文章的熱門(mén)記錄, 只需要文章畫(huà)像的動(dòng)靜態(tài)信息即可,天級(jí)更新, 邏輯如下:
- 每天凌晨物料處理完,會(huì)得到每篇文章的發(fā)布時(shí)間(靜態(tài)特征)以及每篇文章目前為止累計(jì)的獲贊數(shù),被收藏?cái)?shù)和被閱讀數(shù)(動(dòng)態(tài)特征),這時(shí)候,我們就可以遍歷物料池中的每篇文章, 拿到文章的發(fā)布時(shí)間,與當(dāng)前時(shí)間作差得到文章的時(shí)效性;
- 然后根據(jù)時(shí)效性過(guò)濾掉發(fā)布太久的文章;
- 再結(jié)合文章的動(dòng)態(tài)特征,基于熱度公式,就能計(jì)算文章的熱度值。每篇文章都有一個(gè)熱度值,根據(jù)熱度值排序,就可以得到文章熱門(mén)列表,把該列表以zset的形式緩存到redis,之所以zset,是因?yàn)榭梢詭椭覀兏鶕?jù)hot value自動(dòng)排好序。 這是一份公共的熱門(mén)列表,這個(gè)可以作為每個(gè)用戶(hù)熱門(mén)列表的初始化狀態(tài)。
由于每個(gè)用戶(hù)的喜好興趣不同,對(duì)于同一個(gè)熱門(mén)頁(yè),點(diǎn)擊的文章可能會(huì)有所不同,而我們給用戶(hù)曝光的時(shí)候,往往是會(huì)先過(guò)濾掉對(duì)用戶(hù)曝光過(guò)的內(nèi)容,所以為了每個(gè)用戶(hù)的個(gè)性化曝光,當(dāng)用戶(hù)登錄的時(shí)候,我們會(huì)給每個(gè)用戶(hù)單獨(dú)生成一個(gè)熱門(mén)頁(yè)列表, 初始化狀態(tài)就是上面的公共列表。之后,用戶(hù)再去點(diǎn)擊熱門(mén)的時(shí)候,就從自己的熱門(mén)頁(yè)列表中獲取文章了。
2.2 推薦頁(yè)列表
推薦頁(yè)是推薦系統(tǒng)發(fā)揮效用的部分,對(duì)于每個(gè)用戶(hù),會(huì)生成不同的推薦頁(yè)面,這就是大家所知悉的"千人千面",如何做到這一點(diǎn)? 就需要借助已經(jīng)存好的用戶(hù)畫(huà)像和物品畫(huà)像,制作特征,然后通過(guò)模型預(yù)測(cè)排序,做到所謂的個(gè)性化。 當(dāng)然,對(duì)于一個(gè)新來(lái)的用戶(hù),由于我們事先沒(méi)有存儲(chǔ)好用戶(hù)畫(huà)像,這就意味著可能沒(méi)法走個(gè)性化推薦流程,這里我們當(dāng)做冷啟動(dòng)處理。所以這塊分成了冷啟動(dòng)和個(gè)性化推薦兩塊進(jìn)行梳理,邏輯如下:
- 冷啟動(dòng):冷啟動(dòng)主要是針對(duì)新用戶(hù),沒(méi)有太詳細(xì)的用戶(hù)畫(huà)像信息,只能通過(guò)一些粗略的信息,比如年齡,性別(用戶(hù)注冊(cè)時(shí)會(huì)獲取到)等,獲取到一些大類(lèi)別下的文章(適合該年齡,該性別看的文章),然后再根據(jù)文章的熱度信息,給新用戶(hù)生成一份冷啟動(dòng)推薦列表。
- 個(gè)性化:個(gè)性化推薦主要是針對(duì)老用戶(hù),我們通過(guò)正常推薦流程, 捕捉其興趣愛(ài)好,做到個(gè)性推薦,優(yōu)化用戶(hù)體驗(yàn)。 這塊走正常推薦流程,比如我們所熟知的召回→排序→重排→個(gè)性化列表生成, 召回的目的是根據(jù)用戶(hù)部分特征,從海量物品庫(kù),快速找到小部分用戶(hù)潛在感興趣的物品交給精排,重點(diǎn)強(qiáng)調(diào)快,精排主要是融入更多特征,使用復(fù)雜模型,來(lái)做個(gè)性化推薦,強(qiáng)調(diào)準(zhǔn)。 而重排側(cè),主要是結(jié)合精排的結(jié)果,再加上各種業(yè)務(wù)策略,比如去重,插入,打散,多樣性保證等,主要是技術(shù)產(chǎn)品策略主導(dǎo)或改善用戶(hù)體驗(yàn)的。 所以這幾個(gè)環(huán)節(jié)組合起來(lái),以"迅雷不及掩耳漏斗之勢(shì)",組成了個(gè)性化推薦系統(tǒng)的整個(gè)架構(gòu)。
三、Online
Online是為用戶(hù)在使用APP或者系統(tǒng)的過(guò)程中觸發(fā)的行為提供一系列服務(wù),當(dāng)用戶(hù)剛進(jìn)入系統(tǒng)的時(shí)候, 會(huì)進(jìn)入新聞的推薦頁(yè)面,此時(shí)系統(tǒng)會(huì)為該用戶(hù)獲取推薦頁(yè)文章并進(jìn)行展示,當(dāng)用戶(hù)進(jìn)入熱門(mén)頁(yè), 系統(tǒng)就會(huì)為該用戶(hù)獲取熱門(mén)頁(yè)列表并進(jìn)行展示。
3.1 獲取推薦頁(yè)列表
獲取推薦頁(yè)列表這個(gè)服務(wù)在用戶(hù)剛進(jìn)入系統(tǒng),以及在推薦頁(yè)中瀏覽文章刷新下拉過(guò)程中進(jìn)行觸發(fā),當(dāng)系統(tǒng)觸發(fā)該服務(wù)的時(shí)候, 首先會(huì)判斷該用戶(hù)是新用戶(hù)還是老用戶(hù)。
- 如果是新用戶(hù), 就從離線存儲(chǔ)好的冷啟動(dòng)列表中讀取推薦列表, 選擇指定的數(shù)目(比如一次觸發(fā)給用戶(hù)推薦10篇)的文章推薦,但推薦之前,需要去除已曝光的文章(避免重復(fù)曝光,影響用戶(hù)體驗(yàn)),所以對(duì)于每個(gè)用戶(hù),我們還會(huì)記錄一份已曝光列表,方便我們?nèi)ブ兀?同時(shí),當(dāng)批文章曝光出去,還要即使更新我們的曝光列表。
- 如果是老用戶(hù), 就從離線存儲(chǔ)好的個(gè)性化推薦列表中讀取, 和上面一樣, 選擇指定數(shù)目的文章,去掉曝光,生成最終推薦列表,同時(shí)更新用戶(hù)曝光記錄。
3.2 獲取熱門(mén)頁(yè)列表
獲取熱門(mén)頁(yè)列表這個(gè)服務(wù)是用戶(hù)點(diǎn)擊熱門(mén)頁(yè),以及在熱門(mén)頁(yè)中瀏覽文章刷新下來(lái)過(guò)程中進(jìn)行觸發(fā),當(dāng)該服務(wù)觸發(fā)的時(shí)候,依然會(huì)判斷新用戶(hù)和老用戶(hù)。
- 如果是新用戶(hù),需要從離線存儲(chǔ)好的公共冷啟動(dòng)模板中為該用戶(hù)生成一份熱門(mén)頁(yè)列表,然后獲取,選擇指定數(shù)目文章推薦,和上面一樣,去曝光,生成最終推薦列表,更新曝光記錄。
- 如果是老用戶(hù), 從離線存儲(chǔ)好的該用戶(hù)熱門(mén)列表中讀取,選擇指定數(shù)目文章推薦,去曝光,生成最終推薦列表,更新曝光記錄。
四、總結(jié)
本章節(jié)主要介紹了推薦系統(tǒng)的后續(xù)過(guò)程,前面提到了推薦系統(tǒng)的前端后臺(tái)以及交互,那么本章節(jié)就是告訴我們?cè)谄脚_(tái)搭建成功后如何將目標(biāo)資料推薦給大家,到現(xiàn)在為止,整個(gè)推薦系統(tǒng)就介紹的差不多了,總的來(lái)說(shuō),要想弄懂整個(gè)推薦系統(tǒng),需要有強(qiáng)大的代碼功底和很強(qiáng)的邏輯思維能力。