本文主要總結和翻譯自Learning a Personalized Homepage。但這並非徹底和完整的翻譯稿。算法
正如咱們在以前的博客文章中所描述的那樣,在Netflix,咱們普遍使用個性化,並努力抓住向超過5700萬用戶中的每個呈現正確內容的機會。 用戶與咱們的推薦互動的主要方式是經過主頁,當他們在任何支持的設備上登陸Netflix時,他們會看到主頁。 主頁的主要功能是幫助每一個成員輕鬆找到他們喜歡的東西。 咱們面臨的一個問題是,咱們的目錄包含的視頻數量超過了單個頁面上顯示的數量,每一個成員都有本身獨特的興趣。 所以,一個算法挑戰是如何最好地定製每一個成員的主頁以使其涵蓋他們的興趣和觀看意圖,而且仍然容許他們探索其它內容。機器學習
這類問題並不是Netflix所獨有,而是其它新聞網站,搜索引擎和在線商店等共有的。 任何須要從大量可用可能性中選擇項目而後以連貫且易於導航的方式呈現項目的站點將面臨一樣的通常挑戰。 固然,優化Netflix主頁的問題有其獨特的方面,好比界面限制,以及與其餘媒體相好比何消費電影和電視的差別。ide
目前,大多數設備上的Netflix主頁由視頻(電影和電視節目)組成,這些視頻被組織成以二維佈局呈現的主題連貫行。 用戶能夠在一行中水平滾動以查看該行中的更多視頻,也能夠垂直滾動以查看其餘行。 所以,咱們個性化方法的關鍵部分是咱們如何選擇要在主頁上顯示的行。 這包括弄清楚如何選擇與每一個用戶最相關的行,如何用視頻填充這些行,以及如何在有限的頁面區域上排列它們,以便選擇要觀看的視頻是直觀的。 在本文的其他部分,咱們將重點介紹咱們認爲這個問題最相關和最有趣的方面,以及咱們如何解決其中的一些問題。咱們將主頁組織成一系列行,以便用戶輕鬆瀏覽咱們目錄的大部份內容。 經過連續呈現連貫的視頻組,爲每行提供有意義的名稱,並以有用的順序呈現行,用戶能夠快速決定連續的整組視頻是否可能包含他們有興趣觀看的內容。 這容許用戶更深刻地潛水並在主題中查找更多視頻或跳過它們並查看另外一行。函數
將視頻分組的一種天然方式是按genre或subgenre(這個概念在以前的文章中提到過)或其餘視頻元數據維度(如發佈日期)。 固然,連續視頻之間的關係不必定是元數據,也能夠是行爲信息(例如協同過濾算法),咱們認爲用戶可能觀看的視頻,甚至是一段朋友觀看的視頻 所以,每行能夠爲用戶提供惟一且個性化的目錄片斷以供導航。 建立個性化主頁的挑戰和樂趣的一部分是找出建立有用的視頻分組的新方法,咱們一直在嘗試這些方法。佈局
一旦咱們爲頁面考慮了一組可能的視頻組,咱們就能夠開始從它們組裝主頁了。爲此,咱們首先根據咱們瞭解的用戶查找可能與用戶相關的候選分組。這還涉及提供證據(或解釋)以支持一行的呈現,例如該成員先前在一種類型中觀看的電影。接下來,咱們會過濾每一個羣組以處理成熟度等級的問題,或者刪除以前觀看過的視頻。在過濾以後,咱們根據適合行的排名算法對每一個組中的視頻進行排名,該排序算法產生視頻的排序,使得組中成員的最相關視頻位於行的前面。從這組行候選中,咱們能夠應用行選擇算法來組裝整頁。在頁面組裝完成後,咱們會執行額外的過濾,例如重複數據刪除,以刪除重複視頻並將行格式化爲適合設備的大小。學習
咱們的個性化和推薦方法主要目的是幫助咱們的user找到新的東西,咱們稱之爲discovery。可是,咱們還但願讓user可以輕鬆觀看節目的下一集或從新觀看他們過去觀看的內容,這些內容一般不屬於推薦範圍。咱們但願咱們的建議準確,但它們也須要多樣化。咱們但願可以突出咱們目標中的深度,以及咱們在其餘領域的廣度,以幫助咱們的成員探索甚至找到新的興趣。咱們但願咱們的建議是新鮮的,並對user action例如觀看節目,添加到列表或評級作出響應;但咱們也想要一些穩定性,以便人們熟悉他們的主頁,而且能夠輕鬆找到他們最近推薦過的視頻。最後,咱們須要放置面向任務的行,例如「個人列表」。測試
每一個設備都有不一樣的硬件功能,能夠限制任什麼時候候顯示的視頻或行數以及整個頁面的大小。 所以,在生成頁面時必須知道它正在爲其建立頁面的設備的約束,包括行數,行的最小和最大長度,頁面的可見部分的大小,以及某些行是否不適用於某個設備。優化
咱們能夠經過幾種方法在算法上構建咱們的主頁。 最基本的是基於規則的方法,咱們使用了很長時間。 這裏有一組規則定義了一個模板,該模板指示全部成員在頁面上的某些位置能夠進入哪些行類型。 例如,規則能夠指定第一行是「keep watching」(若是有的話),而後是Top Picks(若是有的話),而後是Netflix上的Popular,而後是5個個性化的genre行,依此類推。 這種方法中惟一的personalization是以個性化的方式選擇候選行,例如包括「Because you watched <video>」行。 要選擇每種類型中的特定行,咱們使用簡單的啓發式和抽樣算法。 咱們使用A / B測試來演化此模板,以瞭解爲全部user放置行的合適位置。網站
這種方法對咱們頗有幫助,但它忽略了咱們認爲對頁面質量很重要的許多方面.模板的規則隨着時間的推移而增加,變得過於複雜,沒法處理各類行以及它們應如何放置。ui
爲了解決這些問題,咱們能夠考慮在主頁上個性化行的排序。 這樣作的最簡單方法是將行視爲排名問題中的項目,咱們將其稱爲行排名方法。 對於這種方法,咱們能夠爲行開發評分函數,將應用於全部候選行,按該函數排序,而後選擇最優先的一些行來填充頁面,從而利用大量現有的推薦方法。 然而,這樣作會致使缺少多樣性,有人會獲得一個微小變化的頁面,例如頁面上的每一行看起來主題不一樣,但其實都充滿了不一樣變體的喜劇:late-night, family, romantic, action等。
添加多樣性的一種簡單方法是使用評分函數從行排名方法切換到逐級方法,該評分函數既考慮行又考慮其與先前行和先前已爲頁面選擇的視頻的關係。 在這種狀況下,能夠採用簡單的貪心方法,選擇最大化此函數的行做爲要使用的下一行,而後將下一個位置的全部行從新評分。 這種貪心的選擇可能沒法產生最佳頁面。 使用具備k行前瞻的分階段方法能夠產生比貪心選擇更優化的頁面,可是它帶來了增長的計算成本。
然而,即便是階段式算法也不能保證產生最佳頁面,由於固定的時間範圍可能會限制在頁面下方填充更好的行的能力。 若是咱們能夠定義整頁評分函數,咱們能夠嘗試經過適當選擇行和視頻來填充頁面來優化它。 固然,頁面組合的搜索空間很大,所以直接優化定義整個頁面質量的函數在算力上是很難實現的。
使用任何這些方法解決頁面優化問題時,還須要考慮以前提到的各類約束,例如重複數據刪除,過濾和特定於設備的約束。 這些約束中的每個都增長了優化問題的複雜性。
在造成主頁時,考慮成員如何瀏覽頁面也是重要的,即,考慮他們可能在會話中注意頁面上的哪些位置。 將最相關的視頻放置在最有可能被看到的位置(一般是左上角),能夠減小成員查找與觀看相關的內容的時間。 然而,在二維頁面上建模導航是困難的,特別是考慮到不一樣的人可能導航模式不一樣,人們的導航模式可能隨時間而變化,基於交互設計在不一樣設備類型之間存在導航差別,而且導航 顯然取決於所顯示內容的相關性。 經過精確的導航模型,咱們能夠更好地瞭解視頻和行的位置以及頁面上的重點。
構建個性化頁面的核心是評分功能,能夠評估行或頁面的質量。 雖然咱們可使用啓發式或直覺來構建這樣的評分函數並使用A / B測試進行調整,但咱們更願意從數據中學習一個好的函數,以便咱們能夠輕鬆地合併新的數據源並平衡主頁的各個不一樣方面。 爲此,咱們可使用咱們爲user建立不一樣的主頁,他們實際看到的內容,他們的interactions以及他們的playback進行訓練,從而用機器學習算法建立評分功能。
咱們可使用大量features來represent rows。因爲行包含一組視頻,所以咱們能夠在行表示中聚合使用這些視頻的features。這些feature能夠是簡單的元數據或更有用的基於model的features,它們表示給用戶推薦特定視頻的理想程度。固然,咱們有許多不一樣的推薦方法,可使用ensemble方法把它們聚合起來。咱們還能夠查看與行相關的一些feature,例如對於對特定genre感興趣的user有多少,以及當前user過去是否已消耗該行或相似行。咱們還能夠添加簡單的描述性feature,例如這一行連續多少個視頻,該行放置在頁面上的位置,以及咱們在過去顯示該行的頻率。咱們還能夠經過查看行與其他行的類似程度或行中的視頻與其他部分的視頻類似程度,將多樣性歸入評分。
用於行評分的機器學習模型存在若干挑戰。一個挑戰是處理presentation bias,因爲用戶只能在咱們顯示的主頁上選擇視頻播放,沒被顯示的訓練數據就可能產生誤差。更復雜的是,頁面上某行的位置會極大地影響user是否能實際看到該並選擇從中進行播放。爲了處理這些presentation和position bias,咱們須要很是當心地選擇訓練數據。關於如何在模型中選擇視頻歸屬的行也存在挑戰;視頻可能在過去的某一行中播放過,但這是否意味着若是該視頻被放置在不一樣的行的第一個位置,該user會選擇相同的視頻?多樣性的引入也具備挑戰性,由於頁面上不一樣位置的潛在行的特徵空間已經很大,但當頁面的其他部分考慮到多樣性時,可能的特徵空間變得更大也更難以搜索。
與任何算法方法同樣,要應對這些挑戰,選擇一個好的指標很是重要。 在頁面生成中最重要的是如何評估在離線實驗期間由特定算法產生的頁面的質量。 雖然咱們最終將在A / B測試中在線測試任何潛在的算法改進,但咱們但願可以將咱們寶貴的A / B測試資源集中在咱們有證據可能提升頁面質量的算法上。 咱們還須要可以在A / B測試以前調整這些算法的參數。
爲了提出頁面級質量指標,咱們從一維列表中的指標中獲取靈感,並建立了在二維佈局上工做的指標。例如,考慮一個簡單的指標,如Recall @ n,咱們能夠將它擴展爲兩個維度爲Recall @ m-by-n,如今咱們計算頁面前m行和n列中相關項目的數量除以相關項目的總數。所以,Recall @ 3-by-4能夠表示設備上視窗中顯示的視頻質量,該設備最初一次能夠顯示3行和4個視頻。以這種方式定義的召回的一個很好的屬性是它能夠自動處理像重複視頻或短行這樣的corner case。咱們還能夠將其中一個值n(或m)固定並掃過另外一個來計算,例如,當user向下滾動頁面,視窗中的視頻增長時。固然,Recall是一個基本指標,須要選擇m和n的值,但咱們一樣能夠擴展指標如NDCG或MRR到二維狀況。 咱們還能夠調整導航模型例如Expected Reciprocal Rank,以在頁面中包含二維導航。 經過定義這樣的page-level metrics,咱們可使用它們來評估用於生成頁面的任何算法方法的變化,不只僅是algorithms for ordering the rows,還有selection, filtering, 和ranking algorithms。
在設計主頁時,不乏挑戰性的問題。 例如:什麼時候考慮其餘上下文變量(例如一天中的時間或設備),以及咱們如何填充主頁? 咱們如何在找到最佳頁面和計算成本之間找到適當的權衡? 咱們如何在user關鍵的前幾個會話期間造成主頁,而這偏偏是在咱們得到最少信息的時候? 咱們須要考慮並權衡每一個問題的重要性,以便不斷改進Netflix主頁。
個性化頁面生成是一個具備挑戰性的問題,涉及平衡多種因素,咱們認爲這只是一個開始。