乾貨:從相關性到RNN,一家線上「租碟店」的視頻推薦演算法演進
掃碼進直播間 可以永久回聽
今日彩蛋

Million Reasons
Million Reasons
Lady Gaga
00:00/00:00
邊播放邊閱讀實錄文字,會遇到驚喜哦
大家好,我是周涵寧,來自於Hulu。Hulu是美國第二大的視頻網站,今天我要分享是視頻推薦系統。
在講基於網頁的推薦之前,我想先講講傳統的視頻推薦。傳統的視頻更多的是出現在租碟店,也就是五年、十年以前大家經常光顧的光碟店。當你去的時候,老闆就會跟你說,昨天晚上又新進了一個很好的片子。老闆做這種推薦的話,你會信任這個老闆對你的了解,以及他對現在電影市場的了解,他對影視內容的品位。你和租碟店老闆之間形成了一種良性的互動。
到了網路時代,出現了很多視頻網站,包括愛奇藝、搜狐、優酷土豆。這些網站不可能為每個用戶都雇一個專職的老闆來做推薦,所以它會用自動的方法,用數字的特徵去描述一個用戶的喜好,然後產生出一些推薦的結果。
奈飛(Netflix)大家都知道,在十年以前舉辦了一次推薦演算法的比賽,獎金是一百萬美元,比賽是為了解決它當時對於用戶評分的一個預測問題,所以推薦演算法在視頻網站的應用歷史應該是比較悠久的。
那麼現在從業務的角度,我們和十年以前有哪些差別?
最大的改變可能是很多的視頻網站都加入了電視直播的內容。最早的時候,點播是一個錄下來的昨天放過的電視劇,或者之前已經製作好的節目。直播的場景的話就非常不一樣,它是實時發生的,正在發生的可能是體育比賽、某個新聞的事件。對於這種內容的推薦,還有一些獨特的挑戰。今天我也會講到,對於這種在線直播,需要用不同的模型和不同的特徵。
這個是我們今天課程的一個內容提要。第一,我會講一下優化目標和框架,第二,模型。模型裡面又包括Exploitation和Exploration的兩種具體的模型。然後基於這個模型,我會講兩個應用場景。
視頻推薦系統的優化目標
推薦系統的優化目標,如果從用戶的偏好來講,我們是希望提供給用戶一個非常健康的組合,既符合他們的口味,又有足夠的多樣性,就是有營養的內容。但是平台本身呢,它又有商業變現的要求,所以有的時候為了平衡用戶的需求和平台本身的需求,我們就要做出某種折中。也許我們不會提供像麥當勞這樣的快餐,但是我們可能要為了獲得一些短期的回報,在一個完全健康的食品和這種快餐之間取得某種折中。
最後從演算法或者數學抽象來講,我們就把這個問題抽象成為「怎樣最大化用戶的觀看時長」。
為了達成這個目標,我們就要預測用戶喜歡哪些內容。具體來講,用戶觀看時長可以用什麼方法來最大化?有幾個關鍵的要素,第一個就是,點擊進去看一個視頻之後,你看了多長時間?這個跟視頻本身的長度有關,跟你的完成度有關,我們叫playback_duration。第二個叫做有效點擊eCTR。第三個就是整個內容的曝光量。大家如果做一個簡單的代數運算,把這三項乘在一起的話,就變成了每個用戶的觀看時長。
為了優化總的觀看時長,推薦系統可以控制的就是曝光量這個要素。具體來講,就是把我們想要更多地展現給用戶的內容排在前面,這樣用戶在第一屏就會看到。推薦結果的好壞表現在eCTR,這是一個我們不能夠直接控制的量,我們通過選擇正確的物品分配更大的曝光而間接控制eCTR。我們最終想要最大化的是eCTR和曝光量的乘積。
這個圖表裡,橫軸是曝光量,縱軸是eCTR,我們把去年10月曝光量比較大的一些內容在這個圖表裡展示了一下,大家可以看到這兩個量基本上是成正比的。這說明我們的推薦系統還是做了正確的決定,就是給eCTR高的內容提供了更大的曝光。
當然從這個曲線裡面,我們也看到有一些eCTR不是那麼高的內容,比如說College football,在最右下角的地方,它也獲得了比較大的曝光,這就屬於過度曝光。所以這也提出了我們優化的一些可能的空間:可以把分給點擊不是那麼高的物品的曝光量,勻一些給其它的更高點擊、但是曝光不足的內容。
視頻推薦系統的框架
剛才講了通過KPI裡面的這些維度的劃分,怎麼樣找到一個推薦系統的表現的好壞以及改進它的機會。那麼具體來講,我們要建立一個推薦系統的話,它需要幾層?
我們可以把推薦系統抽象成為四層,最底下一層是基礎數據。第二層是特徵,特徵可以分為用戶的特徵和內容的特徵。用戶的特徵具體來講又是每個用戶單獨的特徵,或者是一群用戶的一個畫像,群體特徵。內容的特徵可以是每個內容單獨的特徵,或者是一批內容的總體特徵。
基於第二層的特徵之上,我們會建一些模型。這些模型的優化目標有兩個,一個是利用,一個是探索。利用(Exploitation)又可以有一些子目標,包括Relevant,就是相關性,包括透明度,對產品經理還是對最終用戶是不是可解釋,包括是不是上下文相關,充分利用了時間、設備、地點這些上下文信息。探索(Exploration)主要講的是對新內容我們有沒有給足夠的展現,以及有沒有給用戶驚喜、發現用戶隱藏的一些興趣。當用戶興趣發生改變的時候,我們是不是非常快地適應了用戶這種興趣改變,也就是adaptive。最後一個是多樣性,就是我們給出的這個套餐是不是組合了很多不同的類別,而不是非常單調、單一的。
在模型之上,我們要做一些應用。這些應用主要是服務四個用戶的階段。首先是所謂Onborading,就是一個新用戶,剛剛訂閱我們的服務的時候,還在一個初始的、給我們一些信號的階段。我們讓用戶選擇他最喜歡的內容頻道,然後用戶會告訴我們他喜歡體育、喜劇或者動作片。基於這些大類,我們可以給他做一個冷啟動,給他第一屏的推薦結果。
之後,在一個新用戶進來之後,我們大概有七天的時間把他轉化為一個付費用戶。從試用期到付費期的轉化,就是Convert-to-Pay。在這個階段,我們需要快速地探索用戶的各種需求,讓他體會到我們的服務非常有價值,那麼他才願意買單。
到了第三個階段,就是用戶已經是一個付費用戶,那我們就需要留住他,所以就是不斷的去給他更多的、他之前可能沒有看過,但是和之前看過的很相關的內容。
最後,第四個階段是Monetization。在有很多渠道付費訂閱的時候,當然訂閱費本身是一種變現的手段。但是我這裡指的變現,主要還是廣告變現。具體來講,廣告變現的業務指標就是用戶的觀看時長。因為插入廣告點的個數,以及廣告的庫存量是直接和用戶的觀看時長以及活躍用戶數相關的。所以這是我們所有這些模型服務的第四個任務,就是一個已經付費的用戶,已經留下來的用戶,我們怎麼樣用廣告把他的流量變現。
視頻推薦系統的演算法
優化目標:利用(Exploitation)
利用方面的模型,如果從推薦系統、特別是相關性的利用來講,有兩大類,一個是基於用戶行為的,一個是基於內容的。
基於用戶行為的話就叫做協同濾波。具體來講,協同濾波下面又有更細的分類,有基於存儲的Memory-based和基於模型的Model-based。基於存儲的話有item-based CF,基於模型的話有矩陣分解和神經網路的方法。矩陣分解下面又可以再細分。然後神經網路現在也有基於RBM的,還有Embedding-based Neural Network。
Hulu經歷了三代相關性演算法的演進,第一代是item-based CF,第二代是基於矩陣分解,現在我們正在開發的第三代是基於Embedding-based Neural Network。從Netflix公開的文件來看,它主要使用的是SVD和RBM的方法。
第1代演算法:協同濾波
我們先講比較古老的一代相關性演算法:基於物品的協同濾波。最早是20年前亞馬遜在它的電商網站上使用的。它會構建一個用戶和物品的相對評分或者影視的相關性矩陣。就是我在左下角畫的這個矩陣,它每一行是一個用戶,每一列是一個物品,裡面的數值可以是用戶購買這個物品的次數,或者點擊這個物品的次數。就是用一些用戶的隱式行為,把它轉換成為用戶和這個物品之間的某種評分。這個分數越高的話,它就和這個物品的相關性越高。
大家可以看到裡面有很多的缺失數據,因為這個矩陣是非常稀疏的,在幾萬個視頻裡面,用戶能看的也可能只有幾百個。所以大約有百分之七八十的數據是實際上是零。
那麼,基於這麼一個簡單的表示,可以去度量兩個物品之間的相似性。如果在這個矩陣裡面兩列的數值的cos distance很接近的話,我們可以認為兩個物品是類似的,因為在全量用戶上對這兩個物品的相對評分是很接近的。
第2代演算法:矩陣分解
接下來就是從協同濾波進化到矩陣分解。
剛才講到協同濾波有一個稀疏性的問題,矩陣分解為了解決這個稀疏性的問題,使用了線性代數裡面的一個特性,就是一個低秩矩陣,可以用兩個相對低維度矩陣的乘積來表示。具體來講,評分矩陣R是低秩的,它可以用一個矩陣P和矩陣Q的乘積來表示。P就是所有用戶的特徵,用一個大概一百多維的特徵向量就可以表示,每個用戶用一百多維來表示,相比原來幾萬維的用戶和所有內容的交叉,就節省了很多的存儲以及計算。相對的,每個內容也可以用一個列矩陣,就是Q來表示。
我們使用矩陣分解之後,在線上也觀察到了很多好的表現,那麼,我們肯定不滿足於這種矩陣分解的演算法,我們還想要進一步引入更多side information側面信息,其中包括用戶的demographic的這種元數據信息。
第3代演算法:神經網路
在矩陣分解的框架底下,不太容易直接地使用這些side information,所以我們就引入了一種深度神經網路的框架。
也就是,把原來矩陣分解裡面代數運算的步驟,用一個前向神經網路來替換。這樣的好處一方面是非線性前向神經網路允許一些非線性的映射,可以有更好的表達能力去model一個更複雜的分布。另外的一個好處就是我們可以直接把關於用戶的除了行為之外的所有信息,用一個矢量feed到這個神經網路裡面去。對內容我們也可以做相應的處理,就是把元數據,比如說導演、演員信息用一個向量來表示,然後把它feed到神經網路裡面去。
相關性演算法的應用場景
相關性演算法有兩個應用場景,一個是所謂的貨架場景,就是給一個網格裡面按照相關性做了排序,然後希望用戶點越靠上越靠左的這些內容。另外一個是自動播放的場景,就是播完一個內容之後,我們會自動地開始下一個我們覺得用戶最可能看的內容。對應這兩種不同的場景,其實需要不同的相關運算。
具體來講,剛才所說的協同濾波方法,它比較適用於貨架場景的召回和排序。對於自動連續播放的場景,我們採用了另外一種模型,就是時間序列的模型,叫做循環神經網路。
我們把用戶在網站上的一個行為序列,認為是由這種RNN模型所產生的。我們可以用反向傳播的方法去訓練一個RNN模型,來預測用戶在網路上的下一個行為。採用了RNN的時間序列之後,我們在線上的測試觀察到了非常高的提升。我們模擬測試的方法就是當用戶看完劇A/B/C之後,我們假裝不知道這個用戶接下來看了哪一個,然後基於時間序列的建模,來算出一個最可能看的劇,它可能是當前這一劇的下一集,或者是跳到另外一個劇D或者是另外一個劇E。根據RNN模型,我們找到最有可能的下一個劇,然後和用戶實際看的下一個劇之間做比對,這是離線的一種評估方案。
優化目標:探索(Exploration)
剛才講完了一些利用,就是基於用戶行為以及side information做貨架場景的排序和自動播放的這種持續預測。接下來我們來講探索。
自適應
我們先來看探索中的自適應的問題。為了解決用戶興趣的時變以及新內容的冷啟動,我們採用一種叫做多臂老虎機(MAB)的模型。
多臂老虎機是借用了賭場的一種場景。一個賭徒可以在不同的時間選擇不同的搖臂,每個搖臂會給這個賭徒不同的贏率。如果賭徒每次都選擇搖臂1的話,有可能不是最優的,因為可能另外一個搖臂的反饋更好。我們把賭場的場景應用到推薦系統裡面,就是每個搖臂是我們可以推給用戶的一個劇,而我們的演算法就是這個賭徒,它通過一些策略來選擇將哪個劇推給用戶。而每個搖臂獲得的獎勵,就是用戶是否點擊和觀看了。用戶的興趣本身就是這個老虎機自己的一些參數設定。
多臂老虎機已經是一個歷史比較悠久的問題,所以也有很多成熟的演算法。我們採用了一種比較流行的演算法,叫做LinUCB演算法。我們會根據當前推的結果,來實時更新對每個搖臂的點擊率的預測。
具體來講,在線上部署LinUCB的演算法,有一個線上更新提取特徵以及模型運算的過程,以及一個線下根據之前模型採集到的信號去更新模型參數的過程。
在我們這個實驗裡面,可能對大家比較有參考意義的就是我們發現的LinUCB的一些特徵,其中包括用戶當前看劇的完成度,就是他看到了第幾集、是不是看到了高潮部分還是快要結束的部分。完成度是一個很重要的特徵維度。然後就是上次給用戶曝光這個劇的時間和現在之間的時間間隔,以及它歷史上的點擊率,還有這個劇的一些元數據信息,它在外面的流行程度,以及根據剛才講的協同濾波的方法,得到的用戶和這個劇之間的相關性。
多樣性
接下來講多樣性的一個模型,叫做行列式點過程。
我們為什麼要關注多樣性?是因為用戶的興趣愛好可能不是單峰分布的。有可能用戶有多個興趣愛好,其中有非常突出的一個,就是這個比較高的右邊的峰。但是還有一個比較低的,就是右邊這張圖裡面的靠左的這個峰值。如果我們用簡單的相關性排序的方法,就會把右邊峰值里的很多內容都排在前面。而用戶隱含的興趣,就是左邊這個比較矮的峰,就不會出現。所以我們要用一些多樣性的策略,使得左邊這個矮的峰裡面的一些好的內容也會被推薦。
用戶多樣性的問題也已經被廣泛研究過。傳統上使用啟發式的方法,它會在多樣性和相關性之間用一個加權平均的方法來獲得一個總體的優化目標,然後兩兩之間比較當前推薦的差異性,然後試圖最大化這個總的平衡了之後的優化目標,用窮舉的方法。
我們在現有的啟發式的搜索基礎上,採用了一些不同的代數模型,就是把兩兩之間比較不相似性改變成為用一個多邊形的體積來量化我們給出的不同物品之間的差異性。把每個物品看作一個多維空間里的向量,然後用這些向量總體張成的一個多邊形的體積來度量這個集合的差異性。
這種方法也有一種貪婪式的解,它的計算複雜度是選品總數的立方,比剛才的那個Heuristic,就是兩兩之間比較的話,它的計算複雜度要更高一些。所以為了解決這種更優的度量帶來的計算複雜度的增加,我們用了一些代數的方法去加速,最終我們達成了一種線性複雜度的方法。
就是這個圖裡面畫的這條紅色的線,它可以和剛才講的DPP的原始實現達到同樣的精度。但是由於我們採用了incremental update的方法,有效地降低了計算複雜度,把原來Y的立方的這種計算複雜度變成了線性。
視頻推薦系統的應用場景
推薦的理由
最後我們來講幾個應用場景,其中比較重要的一個叫做推薦的理由。
Lady Gaga有一首歌唱的是「我有一億種理由離開,但是我只需要一個好的理由留下」。(彩蛋來啦,Bazinga!)那麼對推薦系統來說,它可能推出完全相同的結果,但是如果我們可以給出一個好的理由,那麼用戶會對它的信任會更高,點擊率也會相應提高。
比如說,當我們推薦《終結者2》,我們說是由於你歷史上看過《終結者1》,這時候就比完全沒有任何原因的推薦顯得更加順理成章。如何構建一個推薦的理由?我們可以用剛才很簡單的模板,就是因為你歷史上看過和它相關的一個劇。
但是如果我們想做得更加人性化、更加自然,我們要用一種知識圖譜的方法。在知識圖譜裡面構建內容,用戶的群組,相關性的信息,以及一些統計信息,包括這個劇的流行程度,它在外面的排名。我們用一種N元組的方法來記錄這個知識圖譜。
基於這個知識圖譜,我們可以設定一些推理規則,每一條規則其實對應某一種經典演算法,比如第一條規則,就是如果用戶喜歡電視劇,一是由於他曾經看過電視劇,二是電視劇2和1非常相近,這就是item-based CF邏輯的一種表達方式。類似的話,我們還可以把user-based CF也用一條規則來表達。比如說這個地方列出的第二條規則,就是如果用戶屬於某一個群組,而這個群組裡面60%的人都看過劇1,那就說明當前這個用戶也可能會喜歡看劇1。
列出了很多這樣的規則之後,我們可以在知識圖譜裡面建立一個規則樹,就是為了推理出當前這個用戶多大的幾率會喜歡一個劇X。我們可以用所有的規則和每個劇之間做一個實例化,然後來度量它是否有證據來支持當前這個規則的證明。這個推理樹裡面的節點會隨著規則的不斷展開,而從根節點開始逐漸成長,長成一棵非常大的樹。
大家看到這個節點裡面的紅色部分,就是待證明的某一個假設或者規則。藍色的部分就是實例化之後,找到了事實去支持這個假設的部分證明。當一個節點從紅色完全變成藍色,大家看到最下面的葉子節點,那就說明它已經用所有的事實完全證畢。
當然,並不是所有的規則推理最後都能夠被所有的事實來支撐,比如說最左邊的這個葉子結點,它有一個紅色的待證明項,是找不到事實支撐的,那麼這整條路徑就是失敗的。但是我們在這個樹裡面,如果你的知識圖譜足夠豐富的話,它總可以找到某一個子路徑,是可以證明當前這個推理的。
語音對話推薦
第二個應用場景是基於語音交互的一種對話的推薦。
當前很多的應用都是在手機上或者PC上,是基於圖形界面,用戶需要點擊,用戶能夠給到系統的反饋是非常有限的。沒有點擊有可能是因為不喜歡,有可能是因為當前時機不對,也有可能是你之前看過了。我們是無法獲得更深層次的用戶反饋的。而用戶要進行一個查詢,他要告訴系說,「我要看一個80年代情景劇」,他要通過多級複雜的菜單嵌套來完成這個查詢。所以圖形界面的局限性就限制了它的交互自然性。
我們提出基於語音對話的推薦,使得整個過程更加自然。我們可以允許用戶用一個簡單的自然語言來表述一個非常複雜的查詢條件。然後當用戶對當前的推薦不滿的時候,他也可以用自然語言來告訴我們,為什麼他不喜歡這個劇,以及他想要換另外一個什麼樣的劇。我們認為語音交互會成為下一代計算的一個催化劑。大家知道PC時代,滑鼠和鍵盤是最流行的交互方式,到了移動時代,觸屏變成了手機上的最流行的交互方式。隨著物聯網的發展,我們認為語音會成為下一代的交互方式。
以上就是公開課的所有內容。
對話周涵寧
Q:怎麼識別用戶的興趣是否改變呢?
A:其實對於多臂老虎機的問題模型來講,我們並不是顯式地去建模用戶的興趣是否改變,而是把用戶的興趣(一個老虎機的模型參數設定),認為是一個可以實時更新的參數。我們不斷去追蹤這個參數的改變,或者換句話講,就是我們永遠都假設用戶興趣和之前是可以有差異的。所以我們不斷地在跟蹤一個不斷改變的參數。
Q:知識圖譜是怎麼建立和生成的?
A:我們所用的知識圖譜,一方面是從第三方採買的,有專門的構建知識圖譜的廠商,他們會做數據清洗爬取。另外一部分是我們從內容提供商那裡獲得的一些元數據信息。
Q:基於規則的推理要人工構建嗎?規則要有多少?彼此之間會不會衝突?
A:這個規則的構建過程是手工建立的,但是規則條目其實並不多。我們如果便利現有的所有推薦的演算法的話,每種演算法大類來講,大約會產生一到兩條規則,所以最終我們可能只有不超過50條,規則之間是有可能衝突的,所以衝突就是它們都可以用來解釋某一個用戶喜歡內容X或者是說它可以推理出一個用戶既喜歡內容X又喜歡內容Y。所以這個時候要做路徑的選擇,就是剛才推理樹裡面哪一條路徑最有可能是真實的。所以我們會用配置認可的方法,去在這個圖裡面這個推理數的圖裡面做隨機遊走,然後找到最終權重最高的一條路徑。
Q:能否基於用戶行為和金融產品的歷史表現做金融產品的推薦?
A:關於金融產品的推薦,其實美國已經有公司在做。我上次去參加推薦系統會議的時候,就有一家紐約的公司,做的事情有點類似於定向廣告,就是它會根據用戶之前的消費記錄、投資記錄,選擇金融產品。
GIF
嘉賓簡介
周涵寧,現任Hulu北京研發中心推薦演算法研發負責人,具有15年的研發創新和管理經驗,專註於應用數據和演算法實現產品落地,有豐富的數據分析和機器學習實踐經驗。
他本科畢業於清華大學自動化系,於伊利諾伊大學香檳分校獲得計算機視覺領域博士學位。歷任施樂矽谷研究中心研究員,亞馬遜美國總部高級技術經理,盛大創新院資深研究員兼產品總監,智谷公司技術副總裁和寶寶樹CTO。他擁有十多項美國專利授權,發表學術論文二十餘篇。
還沒聽夠?
本期公開課內容整理:馮曉麗、龍牧雪


TAG:大數據文摘 |