|
一鍵注冊,加入手機圈
您需要 登錄 才可以下載或查看,沒有帳號?立即注冊
x
Task3:召回模型 YoutubeDNN, DSSM-1.jpg (44.85 KB, 下載次數(shù): 9)
下載附件
2022-7-1 21:45 上傳
召回系統(tǒng)決定了最終呈現(xiàn)給用戶的推薦大致范圍,后續(xù)的操作都是在物料庫中取出的資料的基礎(chǔ)上繼續(xù)排序。當(dāng)然,每個部分都很重要。本文中涉及到的YoutubeDNN和DSSM模型都是召回模型中的經(jīng)典案例。其中YoutubeDNN更是經(jīng)典中的經(jīng)典,其論文對初學(xué)者非常友好,詳細地講述了整個漏斗模型的流程,以及在工業(yè)上線時的注意事項及其原因。而DSSM簡單雙塔結(jié)構(gòu),在我看來更易于工業(yè)實踐和理解,其模型更加輕量級,而且線上線下模型分離,穩(wěn)定性高的同時支持自動化構(gòu)建。
YoutubeDNN模型
YoutubeDNN模型有著非常經(jīng)典的漏斗結(jié)構(gòu):
Task3:召回模型 YoutubeDNN, DSSM-2.jpg (40 KB, 下載次數(shù): 12)
下載附件
2022-7-1 21:45 上傳
首先召回,然后精排
召回系統(tǒng)設(shè)計
它的輸入主要是用戶側(cè)的特征,包括用戶觀看的歷史video序列, 用戶搜索的歷史tokens, 然后就是用戶的人文特征,比如地理位置, 性別,年齡這些。 這些特征處理上,和之前那些模型的也比較類似,
- 用戶歷史序列,歷史搜索tokens這種序列性的特征: 一般長這樣[item_id5, item_id2, item_id3, ...], 這種id特征是高維稀疏,首先會通過一個embedding層,轉(zhuǎn)成低維稠密的embedding特征,即歷史序列里面的每個id都會對應(yīng)一個embedding向量, 這樣歷史序列就變成了多個embedding向量的形式, 這些向量一般會進行融合,常見的是average pooling,即每一維求平均得到一個最終向量來表示用戶的歷史興趣或搜索興趣。
這里值的一提的是這里的embedding向量得到的方式, 論文中作者這里說是通過word2vec方法計算的, 關(guān)于word2vec,這里就不過多解釋,也就是每個item事先通過w2v方式算好了的embedding,直接作為了輸入,然后進行pooling融合。
除了這種算好embedding方式之外,還可以過embedding層,跟上面的DNN一起訓(xùn)練,這些都是常規(guī)操作,之前整理的精排模型里面大都是用這種方式。
論文里面使用了用戶最近的50次觀看歷史,用戶最近50次搜索歷史token, embedding維度是256維, 采用的average pooling。 當(dāng)然,這里還可以把item的類別信息也隱射到embedding, 與前面的concat起來。
- 用戶人文特征, 這種特征處理方式就是離散型的依然是labelEncoder,然后embedding轉(zhuǎn)成低維稠密, 而連續(xù)型特征,一般是先歸一化操作,然后直接輸入,當(dāng)然有的也通過分桶,轉(zhuǎn)成離散特征,這里不過多整理,特征工程做的事情了。 當(dāng)然,這里還有一波操作值得注意,就是連續(xù)型特征除了用了xx本身,還用了x^2x2,logxlogx這種, 可以加入更多非線性,增加模型表達能力。
這些特征對新用戶的推薦會比較有幫助,常見的用戶的地理位置, 設(shè)備, 性別,年齡等。
- 這里一個比較特色的特征是example age,這個特征后面需要單獨整理。
這些特征處理好了之后,拼接起來,就成了一個非常長的向量,然后就是過DNN,這里用了一個三層的DNN, 得到了輸出, 這個輸出也是向量。
在整套系統(tǒng)的設(shè)計過程有有一些非常精妙的設(shè)計:
召回模型中加入Example Age特征
這個特征很有意思,其代表目前時間(也就是推送時間)與資源發(fā)布時間的差值,不僅加入了對新舊資源的考量,而且,最有意思的地方是,在上線時這個特征被設(shè)置為0或者一個適當(dāng)?shù)呢摂?shù)。這樣設(shè)計引導(dǎo)網(wǎng)絡(luò),相當(dāng)于讓它預(yù)測“幾分鐘后這個用戶播放時間最長的視頻”,最終測試效果也表示,通過把這一個特征設(shè)置為0或者適當(dāng)?shù)呢摂?shù)可以提高模型的預(yù)測性能。
Task3:召回模型 YoutubeDNN, DSSM-3.jpg (55.94 KB, 下載次數(shù): 10)
下載附件
2022-7-1 21:45 上傳
訓(xùn)練集預(yù)處理過程中,沒有采用原始的用戶日志,而是對每個用戶提取等數(shù)量的訓(xùn)練樣本
這是為了達到樣本均衡減少高度活躍用戶對于loss的過度影響。
完全摒棄了用戶觀看歷史的時序特征,把用戶最近的瀏覽歷史等同看待
這個原因應(yīng)該是YouTube工程師的“經(jīng)驗之談”,如果過多考慮時序的影響,用戶的推薦結(jié)果將過多受最近觀看或搜索的一個視頻的影響。YouTube給出一個例子,如果用戶剛搜索過“tayer swift”,你就把用戶主頁的推薦結(jié)果大部分變成tayer swift有關(guān)的視頻,這其實是非常差的體驗。為了綜合考慮之前多次搜索和觀看的信息,YouTube丟掉了時序信息,講用戶近期的歷史紀錄等同看待。
國內(nèi)廠商應(yīng)當(dāng)好好學(xué)習(xí)!
DSSM模型
廣告推送有兩種建模方案:
一種是自然興趣建模,根據(jù)用戶操作終端行為獲得user-item關(guān)聯(lián),給不同的數(shù)據(jù)源打標獲得item-tag關(guān)聯(lián),最后將上面兩種關(guān)聯(lián)進行join操作得到user-tag的關(guān)聯(lián)實現(xiàn)給用戶打上興趣標簽,這里相當(dāng)于是從標簽維度為廣告主推薦人群。
另一種就是商業(yè)興趣建模,在自然興趣建模的基礎(chǔ)上,從廣告維度為廣告主推薦人群,那么就需要目前大火的DSSM雙塔模型了。
拿Youtube視頻推薦系統(tǒng)舉例,一般推薦系統(tǒng)中有兩個流程。
第一步是召回模型,主要是進行初篩操作,從海量視頻資源池中初步選擇一部分用戶可能感興趣的視頻數(shù)據(jù)子集,從數(shù)量上看可能是從千萬級別篩選出百級別。
第二步是精排模型,主要作用是對上面找到的百級別的視頻子集進一步精篩,從數(shù)量上看可能是從百級別篩選出幾十級別。然后根據(jù)得分高低排序,生成一個排序列表作為用戶的候選播放列表從而完成視頻推薦任務(wù)。
2.1 DSSM模型的原理
DSSM(Deep Structured Semantic Models)也叫深度語義匹配模型,最早是微軟發(fā)表的一篇應(yīng)用于NLP領(lǐng)域中計算語義相似度任務(wù)的文章。
DSSM深度語義匹配模型原理很簡單:獲取搜索引擎中的用戶搜索query和doc的海量曝光和點擊日志數(shù)據(jù),訓(xùn)練階段分別用復(fù)雜的深度學(xué)習(xí)網(wǎng)絡(luò)構(gòu)建query側(cè)特征的query embedding和doc側(cè)特征的doc embedding,線上infer時通過計算兩個語義向量的cos距離來表示語義相似度,最終獲得語義相似模型。這個模型既可以獲得語句的低維語義向量表達sentence embedding,還可以預(yù)測兩句話的語義相似度。
2.2 DSSM深度語義匹配模型整體結(jié)構(gòu)
DSSM模型總的來說可以分成三層結(jié)構(gòu),分別是輸入層、表示層和匹配層。結(jié)構(gòu)如下圖所示:
Task3:召回模型 YoutubeDNN, DSSM-4.jpg (75.37 KB, 下載次數(shù): 9)
下載附件
2022-7-1 21:45 上傳
2.2.1 輸入層
輸入層主要的作用就是把文本映射到低維向量空間轉(zhuǎn)化成向量提供給深度學(xué)習(xí)網(wǎng)絡(luò)。NLP領(lǐng)域里中英文有比較大的差異,在輸入層處理方式不同。
(1) 英文場景
使用Word Hashing方法存在的問題是可能造成沖突。因為兩個不同的詞可能有相同的n-gram向量表示。下圖是在不同的英語詞典中分別使用2-gram和3-gram進行Word Hashing時的向量空間以及詞語碰撞統(tǒng)計:
Task3:召回模型 YoutubeDNN, DSSM-5.jpg (35.57 KB, 下載次數(shù): 10)
下載附件
2022-7-1 21:45 上傳
可以看出在50W詞的詞典中如果使用2-gram,也就是兩個字母的粒度來切分詞,向量空間壓縮到1600維,產(chǎn)生沖突的詞有1192個(這里的沖突是指兩個詞的向量表示完全相同,因為單詞儲量實在有限,本來想找?guī)讉€例子說明下,結(jié)果沒找到)。如果使用3-gram向量空間壓縮到3W維,產(chǎn)生沖突的詞只有22個。綜合下來論文中使用3-gram切分詞。
(2) 中文場景
中文輸入層和英文有很大差別,首先要面臨的是分詞問題。如果要分詞推薦jieba或者北大pkuseg,不過現(xiàn)在很多模型已經(jīng)不進行分詞了,比如BERT中文的預(yù)訓(xùn)練模型就直接使用單字作為最小粒度了。
2.2.2 表示層
DSSM模型表示層使用的是BOW(bag of words)詞袋模型,沒有考慮詞序的信息。不考慮詞序其實存在明顯的問題,因為一句話可能詞相同,但是語義則相差十萬八千里,比如“我愛女朋友”和“女朋友愛我”可能差距蠻大的(這個小伙伴們自己體會)。
下圖是DSSM表示層的結(jié)構(gòu):
Task3:召回模型 YoutubeDNN, DSSM-6.jpg (50.06 KB, 下載次數(shù): 9)
下載附件
2022-7-1 21:45 上傳
最下面的Term Vector到Word Hashing將詞映射到3W維的向量空間中。然后分別經(jīng)過兩層300維度的隱藏層,最后統(tǒng)一輸出128維度的向量。
2.2.3 匹配層
現(xiàn)在我們把query和doc統(tǒng)一轉(zhuǎn)換成了兩個128維的語義向量,接下來如何計算它們的語義相似度呢?通過cos函數(shù)計算這兩個向量的余弦相似度就可以了,公式如下:
Task3:召回模型 YoutubeDNN, DSSM-7.jpg (8.22 KB, 下載次數(shù): 11)
下載附件
2022-7-1 21:45 上傳
2.3 DSSM模型的優(yōu)缺點
先說說DSSM模型的優(yōu)點:
- 解決了LSA、LDA、Autoencoder等方法存在的字典爆炸問題,從而降低了計算復(fù)雜度。因為英文中詞的數(shù)量要遠遠高于字母n-gram的數(shù)量;
- 中文方面使用字作為最細切分粒度,可以復(fù)用每個字表達的語義,減少分詞的依賴,從而提高模型的泛化能力;
- 字母的n-gram可以更好的處理新詞,具有較強的魯棒性;
- 使用有監(jiān)督的方法,優(yōu)化語義embedding的映射問題;
- 省去了人工特征工程;
- 采用有監(jiān)督訓(xùn)練,精度較高。傳統(tǒng)的輸入層使用embedding的方式(比如Word2vec的詞向量)或者主題模型的方式(比如LDA的主題向量)做詞映射,再把各個詞的向量拼接或者累加起來。由于Word2vec和LDA都是無監(jiān)督訓(xùn)練,會給模型引入誤差。
再說說DSSM模型的缺點:
- Word Hashing可能造成詞語沖突;
- 采用詞袋模型,損失了上下文語序信息。這也是后面會有CNN-DSSM、LSTM-DSSM等DSSM模型變種的原因;
- 搜索引擎的排序由多種因素決定,用戶點擊時doc排名越靠前越容易被點擊,僅用點擊來判斷正負樣本,產(chǎn)生的噪聲較大,模型難以收斂;
- 效果不可控。因為是端到端模型,好處是省去了人工特征工程,但是也帶來了端到端模型效果不可控的問題。
----------------------------- |
|