最新最全的文章請關注個人微信公衆號:數據拾光者。算法
摘要:本篇主要分析Youtube深度學習推薦系統,借鑑模型框架以及工程中優秀的解決方案從而應用於實際項目。首先講了下用戶、廣告主和抖音這一類視頻平臺三者之間的關係:就是平臺將視頻資源做爲商品免費賣給用戶,同時將用戶做爲商品有償賣給廣告主,僅此而已。平臺想獲取更高的收益就必須提高廣告的轉化效率,而前提是吸引用戶增長觀看視頻的時長,這裏就涉及到視頻推薦的問題。由於Youtube深度學習推薦系統是基於Embedding作的,因此第二部分講了下Embedding從出現到大火的通過。最後一網打盡Youtube深度學習推薦系統。該系統主要分紅兩段式,第一段是生成候選項模型,主要做用是將用戶可能感興趣的視頻資源從百萬級別初篩到百級別;第二段是精排模型,主要做用是將用戶可能感興趣的視頻從百級別精挑到幾十級別,而後按照興趣度得分進行排序造成用戶觀看列表。但願對推薦系統感興趣的小夥伴有所幫助。數據庫
目錄微信
01 用戶、廣告主和抖音類平臺三者的關係網絡
02 One-hot編碼、Word2vec到Item2vec架構
03 Youtube深度學習推薦系統框架
1. Youtube推薦系統背景和麪臨挑戰機器學習
2. 算法總體架構ide
3. 生成候選項模型函數
4. 精排模型學習
01 用戶、廣告主和抖音類平臺三者的關係
若是對推薦系統和Embedding已經很熟的小夥伴能夠直接跳到第三章看Youtube深度學習推薦系統。
經過下面一張圖說明雞賊廣告主、吃瓜用戶和抖音平臺三者之間的關係:
圖1 用戶、廣告主和抖音類平臺三者的關係
從商業角度來講,雞賊廣告主最終目的是把廣告投放給吃瓜用戶,讓用戶有廣告轉化,這裏的廣告轉化多是點擊、下載甚至付費。可是一般狀況下吃瓜用戶通常對廣告沒啥興趣,特別有創意的除外。這時候抖音短視頻來了,給雞賊廣告主說我這邊能夠提供一個平臺吸引海量用戶,讓更多的用戶有廣告轉化。就這樣,廣告主直接給用戶投廣告的路很差走,只能經過曲線救國的方式,經過抖音平臺裏有趣的短視頻來吸引用戶,而後趁你看的開心的時候冷不丁刷到一個廣告。由於用戶花在抖音上的時間愈來愈多,曝光廣告的機會也多了,總有部分人會點擊、下載或者付費廣告,就這樣間接的達到了爲廣告主投放廣告的目的。
抖音做爲盈利性質的公司,最終目的是想多賺廣告主的錢。要想多賺廣告主的錢,就得吸引更多的用戶來平臺看短視頻而且有廣告轉化行爲。可是如今存在的問題是,用戶由於個體差別因此興趣是多種多樣的,有些人喜歡遊戲,有些人喜歡作飯,還有些人喜歡雞湯,因此平臺須要給不一樣的用戶推薦不一樣類型的短視頻,否則用戶刷兩下以爲沒意思就走了。
這裏不只要給用戶推薦他們感興趣的視頻,並且還得推薦最合適的。這裏涉及到曝光資源的稀缺性問題,這個怎麼理解。由於用戶刷抖音的時間實際上是有限的,在用戶有限的時間裏緊緊吸引住他們的眼球,而後纔有可能讓用戶有更高的廣告轉化效率。因此這裏的關係是,短視頻做爲商品被抖音提供給用戶,只不過這裏的商品是免費的。雖然對於用戶是免費的,可是總得有人來爲互聯網公司的發展和運營買單。這種「羊毛出在豬身上」的商業模式最先是雅虎創建的。以前寫過一篇文章《讀浪潮之巔》涉及到這部份內容,感興趣的小夥伴能夠去看看。
言歸正傳,這裏須要來爲互聯網公司的發展和運營買單的就是廣告主。和用戶同樣,廣告主由於自身產品的差別,因此廣告的受衆羣體也是不一樣的。好比有個賣減肥藥的廣告主想把廣告推送給對減肥藥感興趣的人羣,還有個傳奇遊戲的廣告主想把廣告推送給對傳奇遊戲感興趣的人羣等等。因此這裏的關係是,吃瓜用戶做爲商品被抖音「賣」給廣告主,而這裏的商品就再也不是免費的,是須要廣告主花錢來買的。
小結下,用戶、廣告主和抖音類平臺三者之間的關係就是平臺將視頻資源做爲商品免費賣給用戶,同時將用戶做爲商品有償賣給廣告主,僅此而已。平臺想獲取更高的收益就必須提高廣告的轉化效率,而前提是吸引用戶增長觀看視頻的時長,這裏就涉及到視頻推薦的問題。由於Youtube深度學習推薦系統是基於Embedding作的,因此下面引出Embedding。
02 One-hot編碼、Word2vec到Item2vec
1. One-hot編碼
一般機器學習中咱們會使用One-hot編碼對離散特徵進行編碼。小夥伴們要問了,啥是One-hot編碼?
舉例來講,咱們如今一共有四個詞:"i","love","legend","game"。計算機自己沒法理解這四個詞的含義,可是咱們如今用一種編碼表示。"i"編碼爲1000,"love"編碼成0100,"legend"編碼爲0010,"game"編碼爲0001。
對One-hot通俗的理解就是有多少個詞,就有多少位。若是有8個詞,咱們就須要長度爲8的「01」串來表示詞。每一個詞都有本身的順序,那麼對每一個詞One-hot編碼的時候在該位置上置1其餘都置爲0。
如今咱們把這四個詞對應的編碼輸入到計算機裏,計算機就能明白各個編碼表明的含義。這種形式就是One-hot編碼。經過One-hot編碼咱們就能輕鬆的表示這些文本。
One-hot編碼存在一個問題,上面的例子中有四個詞,咱們就須要長度爲4的01串來表示。若是有100W個詞,那麼咱們就須要長度100W的01串來進行編碼麼?這顯然不方便。因此One-hot編碼最大的問題就是使得向量很是稀疏。尤爲對於數量極其龐大的商品類的向量就會極端稀疏。
當今正處於深度學習大火的人工智能時代,One-hot編碼形成的稀疏向量問題很是不利於深度學習以及工程實踐。主要緣由是深度學習中使用梯度降低算法來訓練模型,當特徵過於稀疏時每次只更新極少數的權重會致使整個網絡收斂過慢。在樣本有限的狀況下可能致使模型根本不收斂。
2. Embedding出現
以後出現了Embedding技術,尤爲在深度學習中Embedding技術大肆風靡,甚至有"萬物皆Embedding"之說。有些小夥伴可能要好奇了,到底什麼是Embedding?
通俗的理解就是,Embedding是用一個低維的空間去表示一個物體,這個物體能夠是一個詞、一個商品、一個視頻或者一我的等等。咱們經過另外一個空間去表達某個物體,最重要的是能夠揭示物體之間的潛在關係,有點透過現象看本質的意思。
以電影舉例來講,在人類世界中咱們認爲《電鋸驚魂》和《咒怨》有潛在關係,由於它們都屬於恐怖片。可是對於機器來講原本不知道這兩個東西有啥關係,可是通過Embedding操做以後,機器學會了它倆潛在的關係,能夠說經過兩個電影的名字(表面)看到了它們都屬於恐怖片(本質)。這就是Embedding的神奇之處。
不只如此,Embedding還具備數學運算的關係,好比存在四川的Embedding-成都的Embedding=廣東的Embedding-廣州的Embedding這樣的關係。
3. Word2vec引爆Embedding潮流
天然語言處理領域中咱們使用Embedding技術來進行詞編碼,也叫Word Embedding。真正引爆Embedding技術的是2013年Google超火的Word2Vec技術。Word2Vec技術將詞映射到向量空間,經過一組向量來表示文本。Word2Vec技術很好的解決了One-hot編碼引發的高緯度和稀疏矩陣的問題。
下圖是咱們經過Word2Vec將文本映射到三維立體空間中:
圖2 Word2Vec映射到三維空間展現圖
經過Word2Vec技術咱們能夠在低緯空間上表示文本。咱們還能夠經過計算詞向量空間中的距離來表示語義的類似度。經過上圖咱們能夠看出足球和世界盃的距離比較近,奧巴馬和美國大選比較近,馬雲和阿里巴巴比較近等等。
Word2vec中有兩種模型結構:CBOW和Skip-gram。CBOW就是經過上下文的詞來預測當前詞,很是好理解的一個方式就是咱們小時候英語考試中的完形填空。給你一段話,中間摳去幾個詞,而後讓你按照上下文來預測摳掉的這幾個詞。而另一種Skip-gram則恰好相反,是根據當前的詞來預測上下文的詞,比較抽象,就不舉例子了。CBOW和Skip-gram結構以下圖所示:
圖3 Word2Vec兩種結構
4. 從Word2vec到Item2vec
自從Word2vec引爆Embedding以後,很快Embedding從天然語言領域向全部機器學習領域輻射,這其中就包括廣告、搜索、推薦等等領域。就拿推薦領域中抖音短視頻來講,咱們根據用戶觀看的短視頻序列來給用戶推薦下一個視頻。由於用戶、視頻等數據的稀疏性,咱們在構建DNN神經網絡以前須要對用戶user和視頻video進行Embedding操做,而後才餵給模型去訓練。關於Item2vec有一篇論文推薦:Item2Vec:Neural Item Embedding for Collaborative Filtering。
從本質上來講,Word2vec僅僅是Item2vec應用到天然語言處理領域中的一種。區別在於Word2vec有順序關係,一樣的幾個詞由於順序不一樣可能表達的語義也是截然不同的。而Item2vec則捨去序列中item的空間關係,沒有了時間窗口的概念。就拿用戶觀看短視頻來講,一段時間內用戶觀看ABCDEFG和EFGDCBA咱們認爲是同樣的,更多的是考慮item之間的條件機率。下面是論文中Item2vec的目標函數:
圖4 Item2vec目標函數
引入了Item2vec,下面咱們正式進入一網打盡Youtube深度學習推薦系統,詳細說說咱們如何使用Embedding技術來作用戶視頻推薦的。
03 Youtube深度學習推薦系統
1. Youtube推薦系統背景和麪臨挑戰
國人對Youtube可能不是很熟悉,這裏拿抖音短視頻來類比。我們部分人可能天天會花部分時間看短視頻娛樂消遣。對於抖音來講,用戶觀看視頻的時間越長,可能產生的商業收益就會越高。這裏用可能來講是有緣由的。若是咱們只是天天看抖音短視頻而沒有任何廣告轉化,其實對於抖音來講並不會真正產生商業收益,真正讓抖音產生收益的是看一會視頻忽然冒出來的那一兩個廣告。只有這些廣告通過用戶點擊、下載甚至付費行爲纔會給抖音增長商業收益。因此小夥伴們,這裏我真誠的建議你們在享受抖音帶來免費的快樂的同時,也盡一點本身的綿薄之力,點點廣告,下載啥的,這樣才能真的綠水長流。這也只有真正作廣告這一行業才能明白其中的艱辛。
抖音短視頻須要根據不一樣的用戶興趣來推薦不一樣類型的短視頻,這樣才能吸引你們不斷的觀看。舉個反例,若是給一個喜歡作飯的用戶不停的推薦遊戲,那這個用戶看兩個就失去興趣果斷不看了。
圖5 Youtube上的視頻推薦
推薦系統領域中,尤爲是像抖音這樣海量用戶下面臨海量視頻的推薦,主要面臨如下幾個挑戰:
2. 算法總體架構
圖6 Youtube算法總體架構
總體來看,Youtube深度學習推薦系統分紅兩段式,第一段是Candidate Generation Model,表面上理解就是生成候選項模型。像Youtube這樣大致量的公司,擁有的視頻資源量也是海量的。對於用戶而言在視頻資源池中咱們可能會有百萬數量級的候選視頻可供推薦。這一段模型主要做用是從百萬數量級的視頻中進行初篩操做。通過這一輪的初篩,咱們從百萬級別的視頻中選出了用戶可能感興趣的百數量級的視頻;第二段是Ranking,能夠理解爲精排的操做。通過這一輪精排操做,咱們從這百數量級的視頻中選出了用戶最可能看的幾十數量級的視頻,而且會進行排序,這個排序就會做爲用戶接下來觀看的視頻列表。這就是Youtube深度學習推薦系統的總體框架。下面我們詳細說下這兩段模型。
3. 生成候選項模型Candidate Generation Model
圖7 生成候選項模型
生成候選項模型如上圖所示。我們從下往上一層層抽絲剝縷。最下面一層是Embedded Video Watches和Embedded Search Tokens,做者經過Word2vec的方法對用戶觀看視頻的歷史和搜索詞作了Embedding操做。通過這一波操做咱們能夠獲得Wach Vector和Search Vector兩個向量,這兩個向量做爲用戶觀看視頻和搜索的特徵輸入。除此以外,咱們還有地理位置的特徵Geographic Embedding,性別相關的特徵Gender等等。
這裏有個比較特殊的特徵叫Example Age。這個特徵的做用是刻畫用戶對新視頻的偏好程度。具體的作法是好比用戶在20200410號下午20點18分點擊了某個視頻,那麼產生了一條數據樣本。後面模型訓練的時候這條樣本對應的Example Age就等於模型訓練時那個時刻減去20200410號下午20點18分這個時刻。
若是模型訓練時間距離樣本產生的時間超過24小時,則設置爲24。而當模型線上預測的時候則將這個特徵置爲0,這裏設置爲0的意思也很明顯,保證預測的時候是處於模型訓練的最後一刻。一個實際的現象是某個好視頻剛出來那會是最容易被你們瘋轉點擊和轉發的,過了一段時間以後熱度就會慢慢降下來趨於穩定,也就是視頻存在必定的「時效性」。論文中也印證了加入該特徵對模型的影響:
圖8 Example Age特徵的影響
經過上圖咱們能夠發現加入Example Age能使模型的預測更加接近經驗分佈,也更切合實際。
這裏延伸到咱們如今的業務中會有這樣的思考:對於給用戶投放廣告來講,用戶對於廣告的新鮮度也是有必定偏好的。一樣的廣告來回給用戶曝光,廣告的轉化效果應該不怎麼樣。分別從用戶喜歡或者不喜歡某個廣告來看,若是喜歡以前應該點過,那麼後面應該不會再點。這裏一個生活中的經驗是就算周星馳的電影你們也不會在短期內來回看,更別說廣告了;若是不喜歡曝光多少次都是沒用的。這裏對於業務實踐可能會有幫助。
言歸正傳,獲得這些不一樣的特徵以後咱們會把這些特徵拼接起來,這裏就完成了特徵準備工做。下面就是把這些特徵餵給咱們的三層Relu神經網絡了。
通過三層Relu神經網絡後咱們獲得了User Vector。User Vector一方面會用於模型線上服務,另外一方面會經過一個Softmax層,Softmax會輸出當前用戶可能觀看候選的百萬級別的視頻的機率,這裏其實變成了一個多分類問題。
如今用戶可能會看這百萬級別的視頻,每一個視頻會有一個機率,這些機率值相加爲1。這裏有個工程上的問題,由於候選的視頻有百萬級別,那麼至關因而個百萬數量級的多分類,這樣對模型的效果和速度都會有很大的影響。那麼Youtube的工程師是怎麼作的呢?論文中說進行了負採樣(Negative Sampling),而且使用Importance Weighting的方法對採樣進行了校準操做。
這裏經過一個例子來講明負採樣具體怎麼作的。好比咱們如今有100W個候選視頻,其實就有100W個類了。如今有個樣本的標籤是class_3,由於模型訓練使用的是Softmax函數,因此模型更新參數會盡可能使class_3的Softmax值偏向1,其餘99W9999的類的Softmax值輸出偏向0。當咱們採用負採樣的時候,若是設置負採樣的數目爲9999,那麼至關於屏蔽了99W的類別,這樣模型每次更新會使當前類別對應的Softmax接近1,其餘9999個類別的Softmax偏向0,將百萬分類「變」成了一萬分類。經過上面這些工程上的騷操做使得生成候選項模型即便面對百萬數量級的分類下依然能從容的應對模型訓練和模型效果。
通過Softmax以後咱們獲得了視頻向量Video Vector。這裏又有個工程上的問題,爲啥要採用最近鄰搜索算法來選擇百級別的視頻?這裏則是從工程和學術的角度作權衡以後的結果。若是直接使用訓練時的模型去預測百萬級別的候選集,模型的時間開銷太大。一個不錯的選擇是咱們經過模型分別獲得User Embedding和VideoEmbedding以後,經過最近鄰搜索的方法能夠大幅度提高效率。工業中通常是將User Embedding和Video Embedding存儲到Redis這一類內存數據庫中。
這裏有的小夥伴好奇這個User Embedding和Video Embedding具體怎麼來的,我們再細緻的講講。這裏經過一個詳細的例子來講明:
關於User Embedding,當咱們的模型訓練完成以後,假如咱們用100維度來表示User Embdding,那麼咱們隱藏層的最後一層輸出的維度就是100X1維,隱藏層的輸出做爲Softmax層的輸入,也就是說Softmax層的輸入就是100X1維,而這個100X1維就是User Embedding。由於用戶的行爲是不斷更新的,因此用戶的User Embedding也是不斷更新的,須要實時計算。實際項目中在機器等資源充足的狀況下最好能作到User Embedding和Video Embedding高頻度的更新,這樣就能把用戶最新的觀看和搜索行爲都能進入輸入層從而獲得反應用戶最新的User Embedding。DNN輸入是用戶當時觀看和搜索的視頻(相對變化較大的)和用戶畫像(相對穩定的)特徵組合,分別進入三層Relu獲得一個100X1維向量,這就是實時的User Embedding;
關於Video Embdding,若是咱們候選的視頻有200W的話,那麼咱們Softmax的輸出層就是200WX1,由於Softmax是輸出每一個視頻被用戶下一次觀看的機率值。因此Softmax層的權重矩陣就是W(100X200W),通過轉置就成了W(200WX100)。由於有200W個視頻,因此是200W行,每一個視頻是100X1維,也就獲得每一個視頻對應的Video Embedding。
這裏獲得User Embedding和Video Embedding以後,當咱們要計算user_i觀看video_j的機率時,就能夠經過兩個100維向量作內積獲得。
這裏還涉及到幾個工程方面牛逼的操做:
關於業務方面還須要說明的是模型優化目標的肯定。Youtube推薦系統將用戶觀看時間做爲模型優化的目標,這是同時從模型和商業的角度分析獲得的結果。模型方面須要反映用戶真實的興趣,選擇觀看時間比點擊率或者播放率可能更有效。有時候用戶雖然點了視頻,可是可能看了兩秒以爲沒啥意思,這時若是把點擊率當作評價指標,這條樣本就是正例,但實際狀況是用戶可能對這條視頻沒啥興趣。可是若是選擇觀看時間則能進一步反應用戶興趣,能在沒興趣的前提下堅持把視頻看完是少之又少的。因此這裏給我們機器學習工程師的參考意義是開發模型的時候要深刻到業務中,畢竟模型最終是服務於業務的。明確模型要優化的目標是成功的一半。
到這裏,我們完成了生成候選項模型的講解,下面進入第二段精排模型。
4. 精排模型Ranking
圖9 精排模型
精排階段的模型如上圖所示,能夠發現精排模型和生成候選項模型很是相似。區別在於特徵工程和最上層部分。論文中其實也有說明,精排階段的DNN模型目的是加入更多的視頻描述特徵、用戶特徵以及用戶和視頻之間關係的特徵,從而真正達到對候選視頻精排的目的。咱們一樣是從下往上層層剖析。首先就是最下層的特徵工程,從左到右依次說明:
其中Time Since Last Watch和#Previous Impression這兩個特徵很好的關注了用戶和視頻之間關係。Time Since Last Watch主要用來關注用戶觀看同類型視頻時間的間隔。這個是從用戶興趣的角度來進行的一種Attention行爲。假如用戶纔看過「王者榮耀」類型的視頻,那麼該用戶對這一類視頻是有興趣的,因此在後面的觀看列表中添加這一類視頻用戶應該也會喜歡看。這裏涉及到推薦系統須要給用戶打標籤的部分。這個特徵最終的目的就是用戶觀看了某類視頻,對這類視頻就有興趣。以前分享過一篇經過用戶操做手機行爲給用戶打標籤的文章廣告系列第一篇統一興趣建模流程,有興趣的小夥伴能夠翻來看看。
#Previous Impression特徵則是讓模型注意避免將一個視頻重複曝光給用戶,從而形成無效曝光。感受這個特徵和上面的Time Since Last Watch是相互做用的關係。上面的特徵是讓給用戶打標,瞭解用戶對某一類視頻感興趣。這個特徵則告訴模型要適度。不能發現用戶對某個視頻感興趣就瘋狂的推薦。這兩個特徵和前面講的咱們要讓用戶看視頻時既有興趣,又不會以爲膩。仍是比較難的。
值得注意的是上面兩個特徵都進行了歸一化操做。不只如此,還將歸一化後的特徵進行開方和平方處理後當作了不一樣的特徵餵給模型。這是簡單有效的工程經驗,經過開方和平方的操做引入了特徵的非線性。從論文反饋的效果來看,這一操做提高了模型離線的評估指標。
下面仍是一樣的操做,將這些特徵進行拼接以後餵給模型。後面跟了三層Relu神經網絡。而後使用了帶權重的邏輯迴歸函數Weighted Logistic Regression做爲輸出層。這裏使用帶權重的邏輯函數主要緣由是模型使用了視頻預期觀看時間做爲優化目標,能夠把觀看時間做爲正樣本的權重,在提供線上服務的時候經過e(Wx+b)作預測獲得指望觀看時間的近似。
到這裏,我們完成了精排模型的講解。
總結
本篇主要分析Youtube深度學習推薦系統,借鑑模型框架以及工程中優秀的解決方案從而應用於實際項目。首先講了下用戶、廣告主和抖音這一類視頻平臺三者之間的關係:就是平臺將視頻資源做爲商品免費賣給用戶,同時將用戶做爲商品有償賣給廣告主,僅此而已。平臺想獲取更高的收益就必須提高廣告的轉化效率,而前提是吸引用戶增長觀看視頻的時長,這裏就涉及到視頻推薦的問題。由於Youtube深度學習推薦系統是基於Embedding作的,因此第二部分講了下Embedding從出現到大火的通過。最後一網打盡Youtube深度學習推薦系統。該系統主要分紅兩段式,第一段是生成候選項模型,主要做用是將用戶可能感興趣的視頻資源從百萬級別初篩到百級別;第二段是精排模型,主要做用是將用戶可能感興趣的視頻從百級別精挑到幾十級別,而後按照興趣度得分進行排序造成用戶觀看列表。第三部分也是本篇的重點內容。
參考資料
1. 《Item2Vec: Neural Item Embedding forCollaborative Filtering》
2. 《Deep Neural Networks for YouTubeRecommendations》
注意:本篇黑色加粗的部分是對實際項目中有借鑑意義的實操經驗,小夥伴們能夠重點關注下。
最新最全的文章請關注個人微信公衆號:數據拾光者。