引言
58 同城作為國(guó)內(nèi)最大的生活信息服務(wù)提供商,涵蓋招聘、房產(chǎn)、車輛、兼職、黃頁(yè)等海量的生活分類信息。隨著各個(gè)業(yè)務(wù)線業(yè)務(wù)的蓬勃發(fā)展,用戶在網(wǎng)站上可獲取的分類信息是爆炸性增長(zhǎng)的。如何解決信息過(guò)載,幫助用戶快速找到關(guān)注的信息,已經(jīng)成為用戶體驗(yàn)提升的關(guān)鍵點(diǎn)與服務(wù)的核心競(jìng)爭(zhēng)力。
背景
目前,搜索與推薦是兩個(gè)主要手段。其中,搜索需要人工啟發(fā)屬于被動(dòng)查找,而推薦可以主動(dòng)推送,使得用戶查看信息這一過(guò)程更加智能化。
近幾年隨著計(jì)算機(jī)硬件性能的提升以及深度學(xué)習(xí)的快速發(fā)展,在自然語(yǔ)言處理、圖像處理、推薦系統(tǒng)等領(lǐng)域有了很多應(yīng)用,因此實(shí)現(xiàn)準(zhǔn)確、高效基于深度學(xué)習(xí)的個(gè)性化推薦,不僅能提升用戶體驗(yàn),同時(shí)也能提升平臺(tái)效率。
58 App 推薦涉及的推薦場(chǎng)景有首頁(yè)猜你喜歡、大類頁(yè)、詳情頁(yè)、搜索少無(wú)結(jié)果,首頁(yè)推薦場(chǎng)景和電商場(chǎng)景類似,不同的用戶同樣會(huì)有不同的興趣偏好。
比如用戶需要租房、買車,或者找工作、找保潔,針對(duì)用戶的個(gè)性化偏好產(chǎn)生千人千面的推薦結(jié)果;同時(shí)用戶對(duì)于相似的帖子表現(xiàn)為不同的興趣,比如同一車標(biāo)不同的車系,這其實(shí)就是一個(gè)用戶興趣建模問(wèn)題。
目前平臺(tái)已經(jīng)積累了豐富的用戶行為數(shù)據(jù),因此我們需要通過(guò)模型動(dòng)態(tài)捕捉用戶的實(shí)時(shí)興趣,從而提升線上 CTR。
58 推薦系統(tǒng)概述
整個(gè)推薦系統(tǒng)架構(gòu)可以分為數(shù)據(jù)算法層、業(yè)務(wù)邏輯層、對(duì)外接口層。為各類場(chǎng)景產(chǎn)生推薦數(shù)據(jù),如圖 1 所示。
推薦過(guò)程可以概括為數(shù)據(jù)算法層通過(guò)相關(guān)召回算法根據(jù)用戶的興趣和行為歷史在海量帖子中篩選出候選集,使用相關(guān)機(jī)器學(xué)習(xí)、深度學(xué)習(xí)模型為候選帖子集合進(jìn)行打分排序,進(jìn)而將產(chǎn)生用戶感興趣并且高質(zhì)量的 topN 條推薦帖子在首頁(yè)猜你喜歡、大類頁(yè)、詳情頁(yè)、少無(wú)結(jié)果等場(chǎng)景進(jìn)行展示。
從數(shù)據(jù)算法層來(lái)看推薦的核心主要圍繞召回算法和排序模型進(jìn)行,當(dāng)然算法和策略同等重要,因此需通過(guò)理解業(yè)務(wù)來(lái)優(yōu)化模型、策略之間的沖突。
其中排序模型的構(gòu)建則是進(jìn)一步影響線上用戶體驗(yàn)的關(guān)鍵,本文主要圍繞深度學(xué)習(xí)在 58 首頁(yè)推薦排序上的應(yīng)用展開(kāi)介紹。
圖 1 58 推薦系統(tǒng)架構(gòu)
首頁(yè)推薦場(chǎng)景位于 58 同城 App 首頁(yè)下方的推薦 tab,包含招聘、租房、二手房、二手車等多品類業(yè)務(wù)信息。
圖 2 首頁(yè)推薦場(chǎng)景 tab
如圖 2 可以看到左圖用戶興趣主要為租房,右圖用戶興趣為二手房、二手車、租房,這也就體現(xiàn)出首頁(yè)場(chǎng)景下多業(yè)務(wù)融合的特點(diǎn)。用戶在首頁(yè)推薦場(chǎng)景下行為特點(diǎn)表現(xiàn)為強(qiáng)興趣,即用戶興趣明確,但是在多業(yè)務(wù)信息融合的背景下,用戶的興趣又具有不同的周期性,以及不同的行為等,比如租房周期明顯要低于二手車成交周期,這些不同的特性對(duì)于多業(yè)務(wù)融合推薦排序任務(wù)提出了重大挑戰(zhàn)。
業(yè)界技術(shù)路徑
2016 年 Youtube 將 DNN[1]應(yīng)用于視頻召回、推薦;Google 提出 Wide&Deep[2] 模型、為后來(lái)深度學(xué)習(xí)模型在推薦任務(wù)中的優(yōu)化改進(jìn)提供了基礎(chǔ)。58 同城 TEG - 推薦技術(shù)團(tuán)隊(duì)一直緊跟技術(shù)前沿,在 58 同城各推薦場(chǎng)景探索并落地了一系列深度學(xué)習(xí)模型。本章節(jié)將介紹深度學(xué)習(xí)模型在推薦排序任務(wù)中的創(chuàng)新及經(jīng)典應(yīng)用,并以現(xiàn)有模型為基礎(chǔ)結(jié)合我們的業(yè)務(wù)特點(diǎn)進(jìn)行模型選型并優(yōu)化改進(jìn)。
1. YouTube-DNN
DNN [1]應(yīng)用場(chǎng)景為 YouTube App 首頁(yè)視頻推薦,通過(guò) Word2Vec 生成用戶歷史觀看視頻以及搜索關(guān)鍵詞 Embedding,之后將歷史行為向量進(jìn)行平均得到 watch vector、search vector 其他類別特征也需要進(jìn)行 Embedding 最終和連續(xù)值特征拼接處理,最終作為 DNN 的輸入。
對(duì)于類別特征的 Embedding 有兩種基本處理方式,通過(guò)模型生成向量比如 Word2Vec,或者采用 Embedding 層初始化后和 DNN 一起訓(xùn)練。
對(duì)于圖 3(左)召回任務(wù),YouTube 將目標(biāo)定義為用戶 next watch,通過(guò) softmax 函數(shù)得到所有候選視頻的概率分布。對(duì)于圖 3(右)排序任務(wù),作者在輸入特征部分除了在召回時(shí)用到的 Embedding 之外還加入了一些視頻描述特征、用戶畫(huà)像特征、用戶觀看同類視頻間隔時(shí)間、當(dāng)前視頻曝光給當(dāng)前用戶次數(shù)等體現(xiàn)二者關(guān)系的特征。
圖 3 YouTube DNN [1] 模型結(jié)構(gòu)
2. Google-Wide&Deep
Wide&Deep[2]模型應(yīng)用場(chǎng)景為 Google Play 也就是用于 App 推薦,論文強(qiáng)調(diào)該模型設(shè)計(jì)的目的在于具有較強(qiáng)的“Memorization”、“Generalization”。
文章中描述如下假設(shè)用戶安裝了 Netflix,并且該用戶之前曾查看過(guò) pandora,計(jì)算如下組合特征 (user_installed_app=Netflix,impression_app=pandora) 和安裝 pandora 的共現(xiàn)頻率,假設(shè)該頻率比較高則我們希望模型發(fā)現(xiàn)這一規(guī)律在用戶出現(xiàn)這一組合特征時(shí)則推薦 pandora。
像 Logistic Regression 圖 4(左)這樣的廣義線性模型可以做到 Memorization 這一點(diǎn)。而對(duì)于 DNN 圖 4(右)模型則可以通過(guò)低緯稠密的 Embedding 向量學(xué)習(xí)到之前未出現(xiàn)的特征組合從而減少特征工程的負(fù)擔(dān)并且做到 Generalization。
最終組合之后的 Wide&Deep 圖 4(中)模型即便輸入特征是非常稀疏的,同樣可以得到較高質(zhì)量的推薦結(jié)果。
圖 4 Google Wide&Deep[2] 模型結(jié)構(gòu)
3. 華為-DeepFM
DeepFM[3] 模型應(yīng)用場(chǎng)景為華為應(yīng)用商店,Wide&Deep 模型為之后兩種模型左右組合的結(jié)構(gòu)改進(jìn)提供了基礎(chǔ)。
其中圖 5 DeepFM 則是對(duì) W&D 模型的 Wide 部分進(jìn)行改進(jìn)的成果,由 FM 替換 LR,原因在于 Wide 部分仍然需要繁雜的人工特征工程。通過(guò) FM 則可以自動(dòng)學(xué)習(xí)到特征之間的交叉信息,相比 W&D 模型 DeepFM 則包含了一階、二階、deep 三部分組成從而實(shí)現(xiàn)不同特征域之間的交叉。
圖 5 華為 DeepFM[3] 模型結(jié)構(gòu)
4. 阿里巴巴-DIN
DIN[4] 模型應(yīng)用場(chǎng)景為阿里巴巴在線廣告推薦,考慮用戶興趣的多樣性,YouTube-DNN 模型中也利用了用戶歷史行為特征,但是將所有視頻 Embedding 進(jìn)行平均,這樣就相當(dāng)于是所有歷史行為對(duì)于現(xiàn)在的行為產(chǎn)生相同的影響,這樣的設(shè)計(jì)對(duì)于用戶體驗(yàn)是不合常理的。因此,考慮引入 NLP 中的 Attention 機(jī)制,針對(duì)每一個(gè)歷史行為計(jì)算不同的權(quán)重。
總的來(lái)講 DIN (圖 6)模型在為當(dāng)前待排序帖子預(yù)測(cè)點(diǎn)擊率時(shí),對(duì)用戶歷史行為特征的注意力是不一樣的,對(duì)于相關(guān)的帖子權(quán)重更高,對(duì)于不相關(guān)的帖子權(quán)重更低。
圖 6 阿里巴巴 DIN[4]模型結(jié)構(gòu)
5. 阿里巴巴-DIEN
DIEN[5](圖 7)模型應(yīng)用場(chǎng)景為阿里巴巴在線廣告推薦,該模型是對(duì) DIN 的改進(jìn)模型,主要考慮以下兩個(gè)方面,DIN 只考慮了用戶興趣的多樣性引入 Attention,但是并沒(méi)有考慮用戶興趣的動(dòng)態(tài)變化。
因此引入興趣抽取層,使用 GRU 序列模型對(duì)用戶歷史行為建模、引入興趣進(jìn)化層,使用 Attention、GRU 對(duì)用戶興趣衍化建模。在用戶無(wú)搜索關(guān)鍵詞的情況下捕捉用戶興趣的動(dòng)態(tài)變化將是提升線上點(diǎn)擊率的關(guān)鍵。
圖 7 阿里巴巴 DIEN[5] 模型結(jié)構(gòu)
通過(guò)分析以上模型我們可以發(fā)現(xiàn)深度學(xué)習(xí)模型可以減少人工特征工程,但減少并不等同于不進(jìn)行人工特征工程。
Embedding&MLP 結(jié)構(gòu)將大規(guī)模稀疏數(shù)據(jù)轉(zhuǎn)化為低緯稠密特征,最終通過(guò)轉(zhuǎn)換 (Concatenate、Attention、Average) 操作,將其轉(zhuǎn)化為固定長(zhǎng)度的向量 feed 到 MLP,學(xué)習(xí)特征間的非線性關(guān)系。
相同結(jié)構(gòu)的模型在不同的業(yè)務(wù)上效果會(huì)有差異,在近幾年發(fā)表的論文中,沒(méi)有一個(gè)模型會(huì)在所有數(shù)據(jù)集上表現(xiàn)最優(yōu),因此需要尋找適合不同場(chǎng)景、不同業(yè)務(wù)的模型并加以改造。
以 DIEN 為例,由于作者考慮到用戶購(gòu)買興趣在不同的時(shí)間點(diǎn)不同,用戶購(gòu)買手機(jī)后可能需要購(gòu)買手機(jī)殼等,用戶的興趣存在一個(gè)進(jìn)化的過(guò)程,并且用戶的整個(gè)興趣行為需要準(zhǔn)確、完整等。推薦的目標(biāo)是為用戶展示相關(guān)信息提升平臺(tái)效率,那么就要從用戶角度考慮去構(gòu)建模型,而不是單純驗(yàn)證模型。
深度學(xué)習(xí)在 58 首頁(yè)推薦的應(yīng)用
對(duì)于 58 同城推薦任務(wù),深度學(xué)習(xí)模型在不同的場(chǎng)景中也是不通用的,即使是對(duì)同一類業(yè)務(wù)下的不同場(chǎng)景同樣需要定制才可以達(dá)到提升用戶體驗(yàn)以及平臺(tái)收益的目的。
點(diǎn)擊率預(yù)估模型的目標(biāo)是提升用戶線上點(diǎn)擊率,因此平臺(tái)為每一個(gè)用戶展示的信息以及用戶點(diǎn)擊或者其他行為的信息對(duì)于模型的離線訓(xùn)練以及線上效果至關(guān)重要。
上文中提到的 DNN、Wide&Deep、DeepFM 模型為后來(lái)的一些深度學(xué)習(xí)模型的改進(jìn)提供了基礎(chǔ),這些模型我們?cè)谇皫啄暌策M(jìn)行了驗(yàn)證,并且能夠達(dá)到預(yù)期效果。由于目前平臺(tái)已經(jīng)積累了大量的用戶行為數(shù)據(jù)我們的目標(biāo)則是通過(guò)為用戶興趣建模來(lái)提升線上點(diǎn)擊率,利用阿里提出的用戶興趣網(wǎng)絡(luò)以及用戶興趣進(jìn)化網(wǎng)絡(luò)模型來(lái)定制模型結(jié)構(gòu)對(duì)于我們的目標(biāo)是有幫助的,因此我們需要根據(jù)首頁(yè)推薦場(chǎng)景多業(yè)務(wù)融合的特點(diǎn)進(jìn)行改進(jìn)。
本章節(jié)將展開(kāi)介紹 58 首頁(yè)推薦場(chǎng)景下是如何以現(xiàn)有模型為基礎(chǔ),并結(jié)合我們的業(yè)務(wù)特性來(lái)設(shè)計(jì)可以適配當(dāng)前場(chǎng)景的模型架構(gòu)。
模型
58 同城首頁(yè)推薦場(chǎng)景中的深度學(xué)習(xí)模型也是遵循 Embedding&MLP 結(jié)構(gòu)。對(duì)于用戶行為特征,我們根據(jù)業(yè)務(wù)選擇了用戶比較敏感的三類 ID 特征,帖子 ID、類目 ID、地域 ID,通過(guò) Attention 計(jì)算用戶歷史興趣對(duì)于待排序帖子的影響程度,通過(guò) AUGRU 捕捉用戶興趣的動(dòng)態(tài)變化。
其中用戶行為中 ID 類特征 Embedding 特征維度統(tǒng)一(定長(zhǎng),對(duì)應(yīng)下圖中的 Infoid、Cateid、Localid),其他類別特征維度可根據(jù)實(shí)際業(yè)務(wù)情況進(jìn)行修改(變長(zhǎng),對(duì)應(yīng)下圖中的 category1…categoryN),除用戶行為特征外,其他類別特征、連續(xù)特征可通過(guò)配置文件進(jìn)行單獨(dú)配置。
深度學(xué)習(xí)模型離線訓(xùn)練、在線預(yù)估部分輸入保持一致,保證多內(nèi)聚低耦合降低依賴就可以加快離線驗(yàn)證迭代速度,同時(shí)可以快速遷移到線上其他場(chǎng)景。
結(jié)合首頁(yè)多業(yè)務(wù)融合的特點(diǎn),用戶興趣網(wǎng)絡(luò)實(shí)現(xiàn)結(jié)構(gòu)如圖 8 所示,特征部分包含人工業(yè)務(wù)特征、人工向量化交叉、興趣特征等。
其中 Item Embedding 是在用戶行為數(shù)據(jù)中應(yīng)用 Word2Vec 得到的向量、User Embedding 則是根據(jù) Word2Vec 向量加權(quán)得到,具體加權(quán)可使用 TF-IDF、待排序帖子與用戶歷史點(diǎn)擊帖子相似度等方式。
在實(shí)現(xiàn)模型時(shí)特征處理部分需要注意,不建議使用 tf.feature_column API,需要在特征工程部分實(shí)現(xiàn)處理邏輯,可減少線上推理耗時(shí)。
圖 8 58 首頁(yè)推薦場(chǎng)景下的深度學(xué)習(xí)模型結(jié)構(gòu)
基礎(chǔ)特征
對(duì)于基礎(chǔ)特征部分我們分別構(gòu)建了帖子特征、用戶特征以及用戶-帖子組合特征,基礎(chǔ)特征由于具有明顯的物理意義,可解釋性強(qiáng)等特點(diǎn)在各個(gè)業(yè)務(wù)中不容忽視,具體基礎(chǔ)特征可參考下表。
以租房業(yè)務(wù)中的用戶-帖子類特征為例,通過(guò)建立租房用戶對(duì)于房源的地域、價(jià)格、廳室等興趣標(biāo)簽以及房源本身的地域、價(jià)格、廳室等屬性信息可以計(jì)算用戶與房源之間的相關(guān)程度。
由于 58 首頁(yè)場(chǎng)景為多品類推薦,部分特征對(duì)齊工作比較困難,比如用戶同時(shí)關(guān)注二手房,二手車等,那么房?jī)r(jià)以及車的價(jià)格不屬于同一空間維度,無(wú)法在傳統(tǒng)機(jī)器學(xué)習(xí)模型中直接使用,還有用戶興趣具有不同的周期性不同的行為等。由于這些問(wèn)題的存在,我們考慮在用戶行為上進(jìn)行構(gòu)建特征,線上 CTR 取得進(jìn)一步的提升。
類目 | 帖子所屬類目 |
地域 | 帖子所屬地域 |
歷史點(diǎn)擊次數(shù) | 帖子歷史被點(diǎn)擊次數(shù) |
歷史ctr | 帖子歷史點(diǎn)擊率 |
Word2vec | 帖子向量 |
其他 | 其他帖子特征 |
帖子特征 | 含義 |
---|
地域 | 用戶所處地域 |
用戶興趣 | 用戶歷史興趣特征 |
其他 | 其他用戶特征 |
用戶特征 | 含義 |
---|
用戶地域-帖子地域 | 用戶所處地域與帖子所屬地域匹配度 |
興趣類目-帖子類目 | 用戶興趣中類目與帖子類目匹配度 |
興趣地域-帖子地域 | 用戶興趣中地域與帖子地域匹配度 |
其他 | 其他用戶-帖子特征 |
用戶-帖子特征 | 含義 |
---|
離線向量化特征
2013 年 Google 開(kāi)源詞向量計(jì)算工具 -Word2Vec[6],該模型通過(guò)淺層神經(jīng)網(wǎng)絡(luò)訓(xùn)練之后的詞向量可以很好的學(xué)習(xí)到詞與詞之間的相似性,并在學(xué)術(shù)界、工業(yè)界得到了廣泛應(yīng)用。
這種通過(guò)低維稠密向量表示高維稀疏特征的表達(dá)方式非常適合深度學(xué)習(xí)。Embedding 思想從 NLP 領(lǐng)域擴(kuò)散到其他機(jī)器學(xué)習(xí)、深度學(xué)習(xí)領(lǐng)域。與句中的詞相類似,用戶在 58 同城全站行為數(shù)據(jù)中 Item 則同樣可進(jìn)行 Embedding 從而得到帖子的低緯稠密特征向量。全站行為可以指用戶的點(diǎn)擊行為序列,也可以指用戶的轉(zhuǎn)化行為序列。因此點(diǎn)擊率預(yù)估任務(wù)則可以通過(guò) Word2Vec 得到帖子向量表示以及用戶向量表示。
Word2vec 可以根據(jù)給定的語(yǔ)料庫(kù),通過(guò)優(yōu)化后的訓(xùn)練模型快速有效地將一個(gè)詞語(yǔ)表達(dá)成向量形式。Word2Vec 訓(xùn)練向量一般分為 CBOW(Continuous Bag-of-Words) 與 Skip-Gram 兩種模型。CBOW 模型的訓(xùn)練輸入是上下文對(duì)應(yīng)的詞向量,輸出是中心詞向量,而 Skip-Gram 模型的輸入是中心詞向量,而輸出是中心詞的上下文向量。
帖子向量的訓(xùn)練數(shù)據(jù)來(lái)源于用戶行為日志中抽取出的點(diǎn)擊曝光日志,各個(gè)業(yè)務(wù)場(chǎng)景下每天會(huì)出現(xiàn)用戶更新以及新發(fā)布的帖子,訓(xùn)練帖子向量的數(shù)據(jù)使用用戶最近 7 天的點(diǎn)擊轉(zhuǎn)化行為數(shù)據(jù)。
針對(duì)業(yè)務(wù)對(duì)用戶行為數(shù)據(jù)進(jìn)行處理,首先用戶每次點(diǎn)擊的停留時(shí)長(zhǎng)小于 3s,認(rèn)為是誤點(diǎn)擊或?qū)Ξ?dāng)前帖子不感興趣,則將當(dāng)前點(diǎn)擊從行為序列中剔除;保留點(diǎn)擊數(shù)據(jù),去除微聊、收藏和打電話行為數(shù)據(jù),將每條點(diǎn)擊數(shù)據(jù)按用戶 id 聚合并按點(diǎn)擊轉(zhuǎn)化時(shí)間排序;用戶行為序列中前后兩次行為超過(guò) 3 小時(shí)的認(rèn)為興趣已經(jīng)發(fā)生改變,對(duì)數(shù)據(jù)進(jìn)行切分,生成新的行為序列。
樣本構(gòu)建之后需要針對(duì)樣本需要進(jìn)行負(fù)采樣,負(fù)采樣流程是對(duì)所有樣本構(gòu)建一個(gè)負(fù)采樣序列,對(duì)于租房業(yè)務(wù)來(lái)說(shuō)對(duì)于用戶點(diǎn)擊的一條位于北京房源隨機(jī)采樣到長(zhǎng)沙的一個(gè)房源作為負(fù)樣本。
長(zhǎng)沙的房源顯然是一條合格的負(fù)樣本,但是為了讓同城內(nèi)正負(fù)樣本更具有區(qū)分性,針對(duì)負(fù)采樣流程做了以下優(yōu)化,對(duì)每個(gè)詞也就是帖子記錄城市、local 信息,詞頻平滑處理,分城市對(duì)同城內(nèi)的詞頻求和;拼接多個(gè)城市的負(fù)采樣序列作為最終的負(fù)采樣序列,同時(shí)記錄每個(gè)城市負(fù)采樣區(qū)間的起始和結(jié)束位置;同城內(nèi)負(fù)采樣序列按照詞頻占比越高所占區(qū)間越長(zhǎng)的規(guī)則構(gòu)建,記錄當(dāng)前中心詞所在點(diǎn)擊序列的所有出現(xiàn)的詞,作為正樣本,不進(jìn)行負(fù)采樣;負(fù)采樣時(shí),獲取中心詞的城市,傳入當(dāng)前城市在負(fù)采樣序列中的采樣起始下標(biāo)和結(jié)束下標(biāo),在當(dāng)前城市區(qū)間內(nèi)進(jìn)行隨機(jī)取樣;負(fù)樣本的 local 不等于中心詞的 local,且負(fù)樣本沒(méi)有在中心詞的點(diǎn)擊序列中出現(xiàn)過(guò),即成功采樣負(fù)樣本,否則繼續(xù)負(fù)采樣;對(duì)每個(gè)負(fù)樣本的采樣次數(shù)限制在 10 次之內(nèi),超過(guò) 10 次即在同城內(nèi)隨機(jī)負(fù)采樣。
考慮到用戶的轉(zhuǎn)化行為也是一個(gè)更重要的行為特征,在訓(xùn)練向量的過(guò)程中加入合理的正樣本使得相關(guān)的向量更相似,比如保留點(diǎn)擊、微聊和打電話行為數(shù)據(jù),用戶的微聊和打電話行為相較于點(diǎn)擊行為有更強(qiáng)烈的的喜好,可用于生成正樣本;記錄序列中每個(gè)帖子的行為及對(duì)應(yīng)的時(shí)間戳,遍歷當(dāng)前序列,記錄微聊和打電話行為發(fā)生的時(shí)間戳以及對(duì)應(yīng)帖子所在的位置下標(biāo),若中心詞位置在最近一次的微聊或打電話行為之前。
考慮到用戶的興趣在某個(gè)時(shí)間段內(nèi)有連續(xù)性,將間隔時(shí)間設(shè)置在 15 分鐘之內(nèi),在這個(gè)時(shí)間范圍內(nèi)的點(diǎn)擊可以認(rèn)為對(duì)之后發(fā)生的微聊和打電話行為有間接影響,將下一次的微聊或點(diǎn)擊作為當(dāng)前中心詞的正樣本;為了避免產(chǎn)生噪音數(shù)據(jù),限制中心詞和微聊帖或打電話帖的地域信息相同或價(jià)格區(qū)間相同,滿足條件后作為正樣本進(jìn)行訓(xùn)練。
用戶行為特征
圖 9 用戶行為定義
58 同城全站用戶行為一般包含點(diǎn)擊和轉(zhuǎn)化,轉(zhuǎn)化則是指收藏、微聊、電話,圖 9 展示了租房、二手車、二手房、招聘業(yè)務(wù)中收藏、微聊/在線聊、電話、申請(qǐng)職位所在詳情頁(yè)的位置。
基于對(duì)用戶行為的分析以及首頁(yè)推薦場(chǎng)景多業(yè)務(wù)融合的特點(diǎn),從用戶角度出發(fā),考慮到用戶一般對(duì)于發(fā)布帖子本身以及帖子所在位置關(guān)注度比較高,最終將帖子 ID、類目 ID、區(qū)域 ID作為用戶行為屬性進(jìn)行 Embedding 編碼。
特征的分布式表示在深度學(xué)習(xí)特征工程中至關(guān)重要,組合以上三類 ID 特征通過(guò)模型 Embedding 層獲得低緯稠密的帖子向量表示,最終可通過(guò) Attention 或者其他相似度度量方式等計(jì)算出當(dāng)前待排序帖子和用戶歷史點(diǎn)擊帖子的相關(guān)程度,從而使得模型學(xué)習(xí)到用戶關(guān)注點(diǎn)。
圖 10 用戶行為特征
離線用戶行為數(shù)據(jù)是將全站用戶行為特征按時(shí)間戳排序(如圖 10 所示)保存在 HDFS 中,其中單個(gè)用戶行為包含帖子 ID、類目 ID、區(qū)域 ID、時(shí)間戳等基礎(chǔ)信息,最終在離線訓(xùn)練和在線預(yù)估中選擇使用用戶最近 N 條行為特征,通過(guò)模型將這些基礎(chǔ)信息進(jìn)行embedding編碼。離線向量化特征則是通過(guò)用戶行為序列中的帖子 ID 序列使用 Word2vec 訓(xùn)練所得。對(duì)于用戶行為中帖子 ID 的 embedding 向量可以在模型中通過(guò) end2end 的方式訓(xùn)練得到,也可以通過(guò)加載預(yù)訓(xùn)練向量在模型中加載使用。
離線樣本
圖 11 樣本特征
整個(gè)離線樣本處理流程如圖 11 所示,包含用戶行為特征,基礎(chǔ)特征。由于訓(xùn)練樣本數(shù)據(jù)數(shù)量級(jí)已達(dá)到億級(jí)別,為了加快模型離線訓(xùn)練速度我們對(duì)訓(xùn)練樣本采用兩種負(fù)采樣方法進(jìn)行采樣:
隨機(jī)負(fù)采樣,即一次曝光的帖子列表中用戶未點(diǎn)擊的樣本按照自定義正負(fù)樣本比例進(jìn)行采樣;
自定義采樣,即保留一次曝光帖子列表中用戶最后一次點(diǎn)擊之前的未點(diǎn)擊樣本作為負(fù)樣本。
深度學(xué)習(xí)模型要求輸入樣本不可以存在缺失值,因此需要補(bǔ)全策略,我們針對(duì)樣本中出現(xiàn)的每一種類別特征設(shè)置了一個(gè) ID 為 0 的 Embedding 標(biāo)記該特征為缺失值,對(duì)于連續(xù)特征目前將缺失值設(shè)置為 0,后期會(huì)繼續(xù)進(jìn)行缺失值補(bǔ)全策略的實(shí)驗(yàn),比如平均值、中位數(shù)等。
離線訓(xùn)練
使用離線樣本生成流程我們將所有樣本通過(guò) MapReduce 保存在 HDFS,使用 TensorFlowDataSet 等 API 可直接讀取 HDFS 上的離線數(shù)據(jù),對(duì)于 DNN、DIN、DIEN 模型我們實(shí)現(xiàn)了單機(jī)以及分布式版本,目前單機(jī)版本已在線上使用,分布式版本還在優(yōu)化過(guò)程中。
模型離線訓(xùn)練優(yōu)化初期可通過(guò) tensorboard 監(jiān)控訓(xùn)練過(guò)程中的 accuracy、loss 等指標(biāo)(圖 12),通過(guò)監(jiān)控可以看出模型已收斂,模型正常訓(xùn)練上線之后不再使用 TensorFlow 的 summary API 可減少部分離線訓(xùn)練時(shí)長(zhǎng)。
此外,模型中如果使用到 tf.layers.batch_normalization 時(shí)應(yīng)特別注意其中的 training 參數(shù),并且在訓(xùn)練過(guò)程中需要更新 moving_mean、moving_variance 參數(shù),保存PB模型時(shí)則需要將BN層中的均值和方差保存,否則在 serving 階段取不到參數(shù)時(shí)直接使用均值為 0、方差為 1 的初始值預(yù)測(cè),出現(xiàn)同一條樣本在不同的 batch 中不同打分的錯(cuò)誤結(jié)果。
圖 12 Accuracy、Loss 變化曲線
下表為 GBDT、DIN、DIEN 的離線效果,可見(jiàn) DIN、DIEN 均已超過(guò)傳統(tǒng)機(jī)器學(xué)習(xí)模型。接下來(lái)我們將介紹線上實(shí)驗(yàn)部分。
GBDT | 0.634 |
DIN | 0.643 |
DIEN | 0.651 |
模型 | AUC |
---|
排序服務(wù)
用戶實(shí)時(shí)行為數(shù)據(jù)構(gòu)建,離線數(shù)據(jù)已經(jīng)保存在 HDFS,線上則是通過(guò)實(shí)時(shí)解析 kafka 消息將用戶實(shí)時(shí)行為保存在分片 Redis 集群中,單天可產(chǎn)生億級(jí)別的用戶行為數(shù)據(jù),用戶行為特征基本解析流程可參考圖 1。
圖 13 實(shí)時(shí)用戶行為特征解析
特征抽取部分實(shí)現(xiàn)了帖子信息、用戶興趣、用戶行為的特征并行處理,首頁(yè)場(chǎng)景線上一次排序請(qǐng)求約 120 條帖子,為降低 TensorFlow-Serving 單節(jié)點(diǎn) QPS 同時(shí)考慮單次排序請(qǐng)求的整體耗時(shí),我們將一次排序請(qǐng)求拆分成多個(gè) batch 并行請(qǐng)求深度學(xué)習(xí)模型打分服務(wù)(圖 14)。
圖 14 多 Batch 請(qǐng)求 TensorFlow-Serving
在測(cè)試環(huán)境下我們進(jìn)行了排序耗時(shí)評(píng)估,發(fā)現(xiàn) batch 為 2,10,20 平均耗時(shí)差距約為 10ms,隨著 batch 增加,一次可打分帖子量增加,則 tensorflow-serving 各節(jié)點(diǎn) QPS 會(huì)降低。
上線后對(duì)耗時(shí)日志進(jìn)行統(tǒng)計(jì),通過(guò)分析耗時(shí)統(tǒng)計(jì)結(jié)果(圖 15),99% 以上的請(qǐng)求均低于 22ms 最終權(quán)衡排序總耗時(shí)之后將線上 batch 設(shè)置為 20。
圖 15 線上單個(gè) batch 請(qǐng)求耗時(shí)分布
通過(guò)線上耗時(shí)監(jiān)控,DIN 模型每個(gè) batch 平均耗時(shí) 6-9ms(圖 16 左),DIEN 每個(gè) batch 平均耗時(shí)19-22ms(圖 16 右)均已滿足線上耗時(shí)限制。
圖 16 DIN/DIEN 線上 Batch 平均耗時(shí)
首頁(yè)場(chǎng)景下 DIN、DIEN 模型排序?qū)嶒?yàn)階段,在小流量測(cè)試階段 TensorFlow-Serving 服務(wù) QPS 峰值可達(dá)幾千時(shí),服務(wù)請(qǐng)求量及耗時(shí)量指標(biāo)可參考圖 17。
圖 17 DIN/DIEN 線上 Tensorflow-serving 請(qǐng)求量及耗時(shí)
實(shí)驗(yàn)總結(jié)
實(shí)時(shí)/截?cái)嘤脩粜袨樘卣?/p>
模型上線之后發(fā)現(xiàn)離線 AUC 高于線上最優(yōu) GBDT 模型,但是線上點(diǎn)擊率卻低于 GBDT,排查之后定位問(wèn)題出現(xiàn)在實(shí)時(shí)行為特征部分。
離線樣本生成過(guò)程會(huì)使用曝光時(shí)間戳去截取用戶歷史行為特征,但是線上則是通過(guò) kafka 實(shí)時(shí)解析用戶行為,通過(guò)監(jiān)控解析 kafka 寫(xiě)入 Redis 發(fā)現(xiàn)存在部分行為數(shù)據(jù)堆積情況以及實(shí)時(shí)日志上傳 kafka 存在延遲。用戶行為數(shù)據(jù)達(dá)到 8000 萬(wàn)左右(圖 18 左)時(shí),大于兩分鐘寫(xiě)入 Redis 的數(shù)據(jù)已經(jīng)存在 500 萬(wàn)左右(圖 18 右)。
圖 18 kafka 解析用戶實(shí)時(shí)行為監(jiān)控
因此通過(guò)線上監(jiān)控統(tǒng)計(jì)后初步斷定為行為特征時(shí)間穿越問(wèn)題,因此對(duì)線上線下的用戶點(diǎn)擊行為特征按照統(tǒng)計(jì)的時(shí)間進(jìn)行截?cái)嗖⑦M(jìn)行線上 AB 實(shí)驗(yàn),1819(DIN)、1820(DIEN) 算法號(hào)直接讀取線上實(shí)時(shí)行為特征,1227(DIN)、1796(DIEN) 算法號(hào)則通過(guò)設(shè)置時(shí)間間隔進(jìn)行截?cái)唷?/p>
通過(guò)圖 19,20 我們可以發(fā)現(xiàn)線上(實(shí)驗(yàn)號(hào) 1227)線下用戶行為特征進(jìn)行兩分鐘截取時(shí)間后線上點(diǎn)擊率比通過(guò)曝光時(shí)間戳截?。▽?shí)驗(yàn)號(hào) 1819)有 2%-4% 的提升,1796 則比 1820 有 5%-8% 的提升。
通過(guò)線上 AB 實(shí)驗(yàn)表明模型使用實(shí)時(shí)性要求比較高的用戶行為特征時(shí)對(duì)于是否存在時(shí)間穿越問(wèn)題需要重點(diǎn)關(guān)注,當(dāng)然這個(gè)問(wèn)題也可以通過(guò)增加處理 kafka 的線程數(shù)來(lái)降低消息的堆積量,不過(guò)線上線下用戶行為特征是否對(duì)齊仍需要驗(yàn)證。
因此用戶實(shí)時(shí)行為特征在 58 App 首頁(yè)推薦場(chǎng)景下需要根據(jù)實(shí)際業(yè)務(wù)數(shù)據(jù)設(shè)置時(shí)延,保證線上線下實(shí)時(shí)用戶行為特征一致。
圖 19 DIEN- 驗(yàn)證行為特征時(shí)間穿越
圖 20 DIN- 驗(yàn)證行為特征時(shí)間穿越
使用 Word2Vec 向量
離線向量特征部分提到我們使用 Word2Vec 模型對(duì)用戶行為特征中的帖子進(jìn)行離線預(yù)訓(xùn)練得到了帖子的 Embedding 向量。
對(duì)于 Word2Vec 向量的使用可分為兩種,一種是離線預(yù)訓(xùn)練,之后在模型 Embedding 層中用戶行為特征部分的 infoid 加載預(yù)訓(xùn)練向量,一種是將預(yù)訓(xùn)練的帖子向量作為連續(xù)特征直接輸入 DNN 使用,在接下來(lái)的實(shí)驗(yàn)中我們優(yōu)先使用第二種方式進(jìn)行,后期會(huì)繼續(xù)使用第一種方法進(jìn)行線上實(shí)驗(yàn)。
圖 21-22 中可見(jiàn)對(duì)于使用 Word2Vec 向量的 1209(DIN)、1222(DIEN)比未使用 Word2Vec 向量的 1227(DIN)、1796(DIEN) 均有 1.5%-4.3% 的提升。
圖 21 DIN- 是否使用 Word2Vec 向量
圖 22 DIEN- 是否使用 Word2Vec 向量
以上實(shí)驗(yàn)為上線初期的部分?jǐn)?shù)據(jù),目前線上點(diǎn)擊率實(shí)驗(yàn)中DIN比基線周平均提升 13.06%,曝光轉(zhuǎn)化率提升 16.16%;DIEN 相比基線曝光轉(zhuǎn)化率提升 17.32%,均已超過(guò)線上最優(yōu) GBDT 模型, DIEN 模型已全量部署,目前各模型線上指標(biāo)可參考下表。
總結(jié)與展望
通過(guò)團(tuán)隊(duì)協(xié)作打通基于用戶興趣相關(guān)的深度學(xué)習(xí)模型離線訓(xùn)練、線上打分流程,將 58 App 中豐富的用戶行為數(shù)據(jù)成功應(yīng)用到深度學(xué)習(xí)模型,并能夠提升首頁(yè)推薦點(diǎn)擊率,從而達(dá)到提升用戶體驗(yàn),提升平臺(tái)效率的目的。
用戶行為數(shù)據(jù)中的每一個(gè)帖子對(duì)于當(dāng)前要推薦的帖子的相關(guān)程度是不一樣的,不可一概而論。注意力機(jī)制將用戶序列 Embedding 加和平均改成加權(quán)平均,使得推薦模型可以學(xué)習(xí)到用戶關(guān)注點(diǎn)。
用戶行為是與時(shí)間順序相關(guān)的序列,序列模型可以用來(lái)學(xué)習(xí)用戶行為的演化過(guò)程,可以用于預(yù)測(cè)用戶下一次的行為。前期的離線實(shí)驗(yàn)包括目前的線上效果能夠證明通過(guò)對(duì)用戶興趣建??梢圆蹲降接脩絷P(guān)注點(diǎn)以及動(dòng)態(tài)的興趣變化。
目前深度學(xué)習(xí)已經(jīng)在 TEG- 推薦技術(shù)團(tuán)隊(duì)內(nèi)部負(fù)責(zé)的各個(gè)場(chǎng)景進(jìn)行實(shí)驗(yàn),當(dāng)然還有一些待優(yōu)化的事情,比如離線分布式訓(xùn)練及復(fù)雜深度學(xué)習(xí)模型線上性能。
還有一些特征層面的實(shí)驗(yàn)工作,比如對(duì)于用戶行為特征,不局限于帖子 id、類目 id、地域 id、用戶行為序列長(zhǎng)度擴(kuò)增等、帖子向量和用戶向量交叉等。
在模型層面,對(duì)其他 Attention 結(jié)構(gòu)進(jìn)行實(shí)驗(yàn)、DNN 部分考慮使用殘差網(wǎng)絡(luò)、通過(guò) Graph Embedding 等生成帖子向量、線上支持其他深度學(xué)習(xí)排序模型等。
責(zé)任編輯:lq
-
Google
+關(guān)注
關(guān)注
5文章
1758瀏覽量
57415 -
算法
+關(guān)注
關(guān)注
23文章
4600瀏覽量
92647 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5493瀏覽量
120979
原文標(biāo)題:社區(qū)分享 | 深度學(xué)習(xí)在 58 同城首頁(yè)推薦中的應(yīng)用
文章出處:【微信號(hào):tensorflowers,微信公眾號(hào):Tensorflowers】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論