Netflix 的個性化推薦演算法,重點居然是在這一張一張的海報縮圖上?

Netflix 的個性化推薦演算法,重點居然是在這一張一張的海報縮圖上?

當你點開Netflix為你推薦的新劇時,你也許不知道,這部劇所顯示的海報是專門為你挑選的。幾年來,Netflix一直致力於研發它的使用者個性化推薦系統,簡單來說就是根據使用者留下的數據、經過複雜的演算法框架,最終配上最可能吸引用戶點開連結的海報。那麼,這種配備個性化海報的困難與挑戰在哪裡?它的優勢又是什麼?

圖片來源:Unsplash|攝影freestocks

幾年以來,Netflix一直致力於完善它的個性化推薦系統,即在正確的時間為每一位使用者推薦他們感興趣的內容。Netflix手頭上有數千個影集,它的使用者有上億人(注:據Netflix官方公佈的最新數據,2020年第一季度Netflix全球訂閱用戶數為1.83億),因此精準的個性化推薦就非常有必要了。

但是個性化推薦要面臨不少挑戰,比如,系統憑藉什麼來篤定某位使用者喜歡某些內容?怎麼判斷使用者會不會對以前從未看過的新類型、新影集感興趣呢?如何說服這些使用者去看某一部新劇呢?

對上述問題的回答將決定了Netflix的推薦系統如何改進。對相關研發人員來說,說服使用者去看他們不熟悉的影集是非常困難的。

研發人員最初考慮的方法是:透過這部劇的圖像(可能是海報、劇照等)吸引使用者。這些圖像在某種程度上可以給使用者留下好的第一印象,畢竟優秀的視覺效果是對影集優秀的一種「保證」,讓使用者忍不住想點開。這些圖像裡可能有你熟悉的明星,或者是飛馳的車輛等驚險刺激的場景,讓你產生看電影大片的感覺。所以,如果我們在你的使用者首頁上投放含有精美圖片的推薦(傳播行業裡有句老話:一張照片頂得上一千個文字),那麼或許——僅僅是或許——你會點開它看一看。

這是Netflix與傳統媒體不同的地方,它不期待所有人都喜歡它的某一個產品,而是主動提供千萬種產品,然後為使用者進行個性化推薦。

這是Netflix的原始首頁,隨著使用者不斷看劇,推薦系統將為使用者進行越來越精準的個性化推薦|圖片來源:Medium

剛才我們已經提到,Netflix正在致力於完善它的精準推薦系統,希望為每一位使用者找到最適合他們的影集。

此外,Netflix強大的演算法系統還能給每一個使用者展示他們最感興趣的海報。我解釋一下,比如根據演算法推薦的結果,《Stranger Things》這個劇有好幾種海報,可以讓不同的使用者都感興趣。那麼,這種讓演算法決定某部劇的海報真的合理嗎?常識告訴我們,每個人的口味千差萬別,但我們真的可以按照每個人的口味,給同一部劇配不同的海報,進而戳中不同使用者的興趣點?

Stranger Things為每個使用者推薦時,會根據演算法給他們展示不同的海報,吸引不同口味的使用者的興趣。這些圖像都和主題有關,都反映了主題的某一面|圖片來源:Medium

讓我們從下面的例子出發進行分析,看看個性化的海報推薦對使用者有什麼效果。

先拿影視劇的類型舉個例子,下面左側是兩名不同使用者看過影片的歷史記錄,右側是我們根據演算法系統為他們推薦的新影集:《Good Will Hunting》。如何更精準地吸引兩名使用者呢?

第一個使用者顯然看過很多浪漫愛情的電影,所以我們就使用一張兩位主角相互親暱的圖像作為海報;另一個使用者顯然看過很多喜劇,所以我們就把喜劇明星羅賓·威廉斯(Robin Williams)的圖像作為海報。

圖片來源:Medium

另一個例子和演員相關。同樣是推薦電影《黑色追緝令》,對一個經常看鄔瑪·舒曼(Uma Thurman)的使用者,我們就以鄔瑪·舒曼的劇照作為海報;同理,對一個經常看約翰·屈伏塔(John Travolta)的作品的使用者而言,他則會收到帶有約翰·屈伏塔的海報的推薦。

圖片來源:Medium

當然,這種個性化海報推薦並不總是清晰、明確的,因為有些使用者留下的數據並不清晰。所以我們不會把這種方法當成金科玉律,只是在演算法告訴我們某位使用者有某種傾向的時候,才會用海報推薦法去推薦影集,進而為使用者帶來更好的體驗。

Netflix的挑戰

在Netflix,我們秉持讓演算法和個性化改善使用者體驗的想法,所以在我們不僅在使用者的首頁標題進行個性化推薦,還為它們配備個性化的海報。另外我們的主頁面和發送的私信也都進行了個性化定制。每一個細節的個性化對我們而言都是挑戰。

再談個性化海報推薦

對個性化海報而言,最難的地方在於我們只能給使用者推荐一張海報,所以只有一次機會給使用者留下印象。傳統的推薦方式則可以一次性給使用者提供更多的圖片,讓他們進行選擇。透過這種選擇,使用者或許會找到自己感興趣的「點」(比如某個明星、某些設定等)。

排除其他因素,個性化海報是基於這樣的假設:使用者決定是否播放一部劇,完全取決於我們為他提供的那張海報是什麼。

對我們而言,亟需解決的問題如下:(1)在什麼時間發布某個有個性化海報和推薦可以對使用者有最大程度的影響;(2)在什麼情況下,不管我們發布怎樣的海報,使用者都會選擇收看這部劇。

因此,個性化的海報推薦需要和傳統的推薦方式相結合,同時也要和演算法相適應。我們需要收集使用者大量的數據,找到使用者的傾向,在明確「用個性化海報推薦方法」更好的前提下再為他們精準投放海報。

是否要更換海報?

關於個性化海報,還有一個挑戰是考慮,對同一部劇來說,如果我們在個性化推薦的時候更改了海報,對使用者來說會有怎麼的影響,以及多大程度的影響。

舉個例子,假設一名使用者收藏了某部劇但還沒有觀看。經過一段時間後,根據他最近追劇的內容,演算法推測出他的某些傾向可能有了變化,進而修改了這部還沒來得及看的劇的海報。在這種情況下,使用者是否會重新考慮要不要看這部劇?這部劇對他來說還有興趣嗎?使用者會覺得被冒犯還是會覺得很「貼心」?

推薦系​​統不斷完善,我們看到的推薦內容和海報都是「私人訂製款」|圖片來源:Unsplash|攝影Charles Deluvio

顯然,如果我們找到了比原來更好的海報,當然要換上新海報了。但這種海報的變化會不會讓使用者感到困惑?會不會讓使用者失去點開的興趣?

畢竟,我們的假設是「使用者決定是否播放一部劇,完全取決於我們為他提供的那張海報是什麼。」所以在更換海報的問題上一定要謹慎。

海報之間的聯繫

接下來,我們還需要考慮在同一個頁面上,投放的所有海報是否和諧美觀,但在和諧美觀的同時又要注意不能雷同。

首先,如果一個頁面上的某張海報特別突出(比如突出的人像、加粗的字體),那麼就可以吸引使用者去看,但是容易讓頁面「不和諧」。相反,如果頁面上的每一個海報內容都相似,那麼雖然頁面會顯得和諧統一,但是重點不夠突出,無法吸引讀者。

所以,把每一張海報單拎出來考慮顯然是不夠的,我們還要考慮它在頁面上和其他海報放在一起時是什麼效果。

除了標題和海報之外,有時候我們還要考慮一些影集的其他內容,比如摘要、預告片和其他圖片。我們可能會為使用者提供多樣化的選擇,比如一些影集只放海報,另一些則推薦預告片。這種互補、錯落的推薦方式可以突出重點、吸引使用者。

對每一部劇來說,除了推薦個性化的海報之外,我們還需要給每部劇精選其他內容(劇照、預告等),以免使用者產生被海報「騙進來」的消極感受。這些精選的其他內容要最大程度上涵蓋口味各異的潛在使用者。畢竟,一部劇真正的競爭力還是在於使用者的觀看量。我們不僅在個性化推薦海報上不斷完善,還在美學方面下足了功夫,爭取吸引更多的人。我們聘請了藝術家和設計師,為每部劇精心挑選了涵蓋一個主題不同層面的介紹,同時根據演算法的推薦,有節制地重點突出某些內容。

技術層面的挑戰

最後,要想實現個性化海報推薦,我們還要面臨技術層面的挑戰。最大的挑戰就在於我們的頁面需要非常多的圖像。所以個性化推薦如果想要平穩運行,我們的系統處理能力必須非常強大,峰值為處理2千萬個請求/秒。如果使用者的介面無法加載和算繪這些圖片,那麼肯定會影響他們的體驗。

此外,當我們發布某部劇時,演算法必須能快速回應,並且不斷學習,不斷適應使用者的新口味——使用者的興趣和口味可能隨時隨地發生變化,演算法系統必須跟上這種變化。

Netflix已經成為越來越多人追劇的主流平台|圖片來源:Unsplash|攝影CardMapr 

Contextual bandits演算法框架

Netflix的推薦系統是靠機器學習而不斷升級的。我們會收集使用者的相關數據,然後放到演算法中不斷更新演算法系統。

但是具體選用哪一種演算法呢?傳統的方法是進行A/BTest,這種離線的檢測方法是說,我們將使用者分成A和B兩組,我們對A組使用者保持老演算法,對B組使用者使用新演算法,然後看效果:如果新的演算法效果更好,我們就會全面切換成新的演算法,反之則保留舊的演算法。

為使用者挑選個性化劇照:Netflix 的演算法讓你忍不住點開推薦

但問題在於,每個組的使用者活躍度是不一樣的,因此測試的結果不一定準確。假設B組的成員更加活躍,測試得到的結果是新演算法更好,我們就對所有使用者全部採用新演算法。但是新演算法不一定適用於每個使用者,因此就會造成新演算法讓某些使用者無法獲得更好體驗的結果,即示意圖中的綠色部分「Regret」。

為使用者挑選個性化劇照:Netflix 的演算法讓你忍不住點開推薦

為了最大程度地減少Regret使用者的數量,我們開始採用線上機器學習法。以前的機器學習需要收集數據、讓演算法更新、進行A/BTest然後再比較演算法優劣,這個過程很長,而且效果並不好。現在我們採用Contextual bandits演算法框架,在這個框架下,模型可以快速辨識出使用者的喜好並作出推薦。

這個演算法框架是什麼?

Contextual bandits演算法框架是一款在線的演算法框架,可以在線收集訓練數據、即時學習、迅速回饋,為每位使用者生成無偏差模型,而且可以立即生效。

在早期的工作中,我們用演算法框架在沒有具體場景的情況下挑選出最優圖片。現在我們需要個性化的推薦,所以就把使用者當成不同的「場景」(context),根據他們對圖片不同的需要和回饋進行調整,

Contextual bandits演算法框架的核心目標是縮短上圖中Regret使用者的數量。這一框架可以透過注入隨機的、用於訓練演算法的數據,進而得到一般性的公式,即使環境千變萬化也能迅速適應。我們把這個過程稱之為「數據探索」。數據探索的具體策略和影集提供的圖片、使用者的數量(也稱之為數據的規模)相掛鉤。

在這種數據探索的過程中,我們還會記下訊息日誌,這些日誌可以用來訓練即時模型,也可以在離線測試時作出更加準確的效果評估,這個一會兒我們會更詳細地說明。

當然,數據探索都是有成本的,因為在探索的過程中,總會有一部分用於測試的使用者沒能享受最終的、最佳的體驗。這樣做的結果是什麼呢?

事實上,在擁有1億多使用者的情況下,這一部分沒能享受最佳化體驗的人數(或者每位使用者無法享受最佳化體驗的時間)是非常少的,所以分攤下來的話,這種數據探索的成本並不大,這種代價也是完全可以接受的。

如果根據結果,這種隨機數據探索的代價太大了的話,Contextual bandits演算法框架就不適用了。

我們現在推行的在線數據探索方案幫我們建立了一個資料庫,資料庫裡每個小組中都有使用者數量和數據、影集、圖像等。我們根據演算法提供的結果決定要不要給某位使用者提供每個影集的推薦。

此外,這種數據探索是可控的,我們可以根據使用者的回饋進行調整,保證使用者在同一個影集連結中看到的圖片變化的頻率是有限的。除此之外,我們還盡量仔細地標註數據的品質,以免出現「釣魚圖」(吸引使用者點擊但是沒有什麼內容的圖片,類似「標題黨」),引發負面回饋。

模型訓練

在線上學習的設定中,我們用Contextual bandits演算法框架為基礎,根據每位使用者的需求和傾向問他們呈現不同的海報。對每一個使用者來說,我們一般都有12張左右的海報備選。

但是每位使用者看每個影集時都有12張圖像備選,我們又有這麼多使用者和影集,所以可想而知,挑選的工作量是巨大的。

為了簡化這種訓練,我們不再為每位使用者排列某個單獨的影集的海報,而是對一個使用者會接觸到的所有影集的海報進行整體排列。按照後者的排列方法,我們依舊可以針對某一個影集找到最適合使用者的海報。具體的學習方法我們採用監督學習法(supervised learning models)、湯普森採樣法(Thompson Sampling)、LinUCB或貝氏推論(Bayesian methods ),這些方法可以幫助我們在數據探索中作出最佳決策。

潛在的訊號

在Contextual bandits演算法框架中,不同的場景通常有明顯的特徵,可以藉助這些特徵來辨識不同的場景。這些特徵也可以稱之為「訊號」。使用者在使用Netflix的過程中會呈現很多特徵/訊號,比如他們點閱過的標題、他們選擇的國家,或者他們的語言偏好設置,他們登陸Netflix的設備,他們看劇的時間和周期,等等。我們的演算法在為使用者進行個性化推薦的同時,也會將上述的訊號考慮在內。

使用者在Netflix看劇的同時,Netflix也在分析使用者的各類特徵,形成「使用者畫像」|圖片來源:Unsplash|攝影Clay Banks

有一件事是需要慎重考慮的:有的時候,同一個影集的某些海報品質和效果天生就比另一些海報要高。在我們數據探索的過程中,也會為這些海報打分。在以前非個性化的海報推薦中,我們會把評分最高的海報無差別地呈現給所有使用者,現在有了演算法,我們根據使用者需求把可能最吸引他們的海報呈現給他們。

在這個過程中,我們要考慮如何在「最高品質」和「最適合使用者」的海報之間做選擇,這時候訊號就顯得很重要了。如果一位使用者發出的訊號越強烈,那麼我們就給他推薦最適合他的(但可能不是品質最高的)海報;反之,我們則更傾向於為他推薦品質最高的海報。

圖片選擇

正如前文所言,圖像選擇就是給不同的使用者、按照他們的喜好為他們呈現特別定制的海報。一旦前文中提到的模型訓練完成,我們就可以將它立馬投入使用,用來檢測某位使用者看某部劇時如果看到候選的幾張海報,分別有多大的概率會點開它。我們根據這樣的概率從高到低排順序,然後選擇概率最高的那一張呈現給那位特定的使用者。

效果檢測

離線檢測

前文提到,Contextual bandits演算法框架實際上是一種線上的機器學習法。在給使用者推薦完海報後,我們會使用離線檢測技術去檢測它的效果,這種技術被稱之為「Replay技術」。這種方法可以讓我們對演算法無偏差地進行離線衡量(如下圖所示)。換句話說,我們可以透過這種離線衡量法,直觀地看到如果在過去特定的場合中我們使用另一種演算法會是什麼結果。

圖片來源:Medium

這是離線檢測的一個簡單案例:我們為每一位使用者分配一張初始海報(橫排第一行)。系統記錄了這五位使用者是否播放了這部劇,播放了則標綠,沒有播放則標紅(橫排第二行)。離線檢測則計算出新演算法的推薦結果,並在這張圖表裡用黑色框圈出推薦演算法和新演算法結果相一致的結果(即使用者1、使用者2和使用者4),然後計算這個集合中使用者的點擊率,也就是2/3。

Replay技術可以讓我們直觀地看到,如果我們推給使用者的圖片是根據新的演算法,那麼使用者會如何回饋(即是否會觀看這部劇)。

如前文所言,我們的目的在於透過展示合適的圖片最大程度地吸引使用者觀看影片。下圖顯示了Contextual bandits演算法如何幫只我們提高使用者的點擊率。

為使用者挑選個性化劇照:Netflix 的演算法讓你忍不住點開推薦

這張統計圖顯示了不同演算法下觀眾的播放影集的比例。其中藍色和粉色為Contextual Bandit演算法框架下的觀眾播放比例,可以看到它最大程度地吸引了觀眾點擊影集|圖片來源:Medium

這個例子展示了我們如何對海報進行打分。第一張海報的「喜劇值」為5.7;「浪漫值」為7.2。第二張海報的「喜劇值」為6.3;「浪漫值」為6.5。對喜歡浪漫故事的使用者來說我們會傾向於為他推薦第一張海報;對喜歡喜劇故事的人來說我們會推薦第二張|圖片來源:Medium

線上檢測

透過離線檢測,我們檢測出了效果最佳但是並沒有被採用的演算法,對後者而言,我們會再進行一次在線A/BTest,觀察它在contextual bandits演算法框架中的實際表現,根據結果及時調整演算法。

正如我們期待的那樣,這種測試大大提升了我們的核心指標,即使用者對影集的點擊率。

同時,線上檢測也讓我們觀察到了一些有趣的結果,比如對不了解某部劇的使用者來說,這種點擊率的提升是非常顯著的。這也很容易理解:畢竟在不了解一部劇的前提下,個性化推薦才可能發揮更大的作用。

結論

透過前面介紹的Contextual bandits演算法框架,我們實現了個性化推薦的第一步:為使用者提供更吸引他們的影集和海報。在這裡,我們不僅解決了「推薦什麼」的問題,更是解決了「如何推薦」的問題。這一步的意義是巨大的,因為我們可以為使用者推薦符合他們口味的內容,以及用最吸引他們的方式介紹新的影集。

當然,這僅僅是個性化推薦的一次嘗試,我們的個性化推薦系統還有很多可以完善的地方,比如我們以後可以設計出新的演算法,幫助我們快速準確地實現新影集、新圖像的冷啟動處理,或者讓使用者體驗的其他方面更加個性化,包括添加個性化的圖片、引用文字和介面等等。

在個性化推薦的道路上,這僅僅是一個起點。

36Kr
作者

36氪(36Kr.com)累計發表超過10.8萬條包含圖文、音訊、影片在內的優質內容。氪原創內容體系涵蓋新創公司、大公司、投資機構、地方產業與二級市場等內容模組,設置有快訊、深度商業報導

使用 Facebook 留言
發表回應
謹慎發言,尊重彼此。按此展開留言規則