隨著移動網際網路的深入發展,硬體成本的降低,智慧型手機成為每個人的標配。手機最初主要用於溝通交流,但隨著科技的進步和應用場景的拓展,手機的通信功能弱化了,人們利用手機更多地用於獲取信息。不管是看視頻、刷抖音、看新聞,還是社交、購物、投資,都可以看成是信息獲取的過程(至少信息獲取是其中最重要的一個環節之一)。在當前信息爆炸的時代,獲取有價值的信息不是一件容易的事情,但我們可以藉助機器學習算法來更好地幫助用戶獲取有價值的信息。
用戶在網際網路產品上獲取信息主要有3種方式:一種是用戶需求比較明確,用戶知道自己需要什麼,這時一般會通過搜索來獲取信息;第二種方式是用戶需求不是特別明確,這時可以藉助個性化推薦技術來幫助用戶更便捷地獲取信息,個性化推薦基於用戶歷史行為,構建數學模型,猜測用戶興趣偏好,為用戶提供個性化的信息推薦;第三種方式是用戶通過產品提供的篩選、列表等模塊自己逐個找尋、檢索自己需要的信息。第一、第二種方式都是通過算法(搜索算法、推薦算法)來幫助用戶更簡潔、方便、快速地獲得更加精準的信息。其實第三種方式也是可以藉助算法來幫助用戶更快、更精準地找到自己喜歡的信息的,這就是本文要講的列表頁智能重排序算法。
具體來說,本文會從什麼是列表頁智能重排序、智能重排序的應用場景、智能重排序的價值、智能重排序的實現方案與算法原理、智能重排序的難點與挑戰、智能重排序在電視貓上的應用等6個維度來講解智能重排序相關的知識點。期望讀者可以掌握智能重排序的基本概念、核心思想、實現原理與業務價值,並思考在自己的產品中是否可以採用本文的思路去優化、提升用戶體驗與商業價值。
在很多網際網路產品中,存在很多以某個主題組織的內容池,該主題下的標的物一般以某種方式排列(典型的比如按照標的物入庫的先後順序降序排列,新入庫的標的物放在最前面),用戶想要在該主題下找到某個自己喜歡的標的物,需要逐個瀏覽。下圖就是電視貓電視劇頻道裡面各個主題(比如戰爭風雲)的UI呈現方式,當焦點聚焦在某個主題上時,右邊會展示出所有與該主題相關的視頻。
圖1:電視貓APP電視劇頻道中的各種電視劇主題
根據上面的介紹,這類內容展現形式是將某個主題下的所有標的物按照某種規則進行更新和排序。有可能前面的標的物用戶已經操作過(看過、瀏覽過、購買過、甚至忽略過等),當用戶第二次再瀏覽該頁面時,如果用戶操作過的或者不喜歡的標的物還展示給用戶時,對用戶體驗不是很好。那麼是否有辦法解決這個問題呢?答案是肯定的,這就是利用智能重排序技術對展示的標的物列表進行智能排序。
所謂智能重排序,就是在產品(即APP)的任何一個包含大量標的物的列表頁或者類目結構中,通過機器學習算法來學習用戶對標的物的偏好程度,對列表頁/類目結構中的標的物進行智能重排,保證用戶喜歡的標的物排在前面,提升列表頁的用戶體驗和點擊轉化。該解決方案可以做到千人前面的智能重排,每個用戶的排序都是不一樣的,都是適配用戶興趣的,真正做到個性化、智能化。這裡要說明兩點,一是智能重排序後這個列表或者類目結構中包含的標的物數量是不變的,只不過排序方式是根據算法來計算出來的,用戶喜歡的會排在前面。二是,這個排序是個性化的,可以做到每個人的排序方式不一樣。舉個例子,在電視貓APP電視劇頻道首頁的戰爭風雲這個主題中(見上面圖1),如果利用算法給每個用戶生成個性化的排序,那麼這就是列表頁智能重排序。
智能重排序與推薦系統是有非常緊密的內在聯繫的。首先,我們可以將智能重排序看成是對已經召回的內容(即需要智能重排的標的物列表)的排序,從這個角度看,智能重排序就等價於推薦系統的排序模塊。其次,我們可以將智能重排序看成限定範圍的推薦,我們將推薦內容限定在需要排序的列表中的標的物上,需要通過排序將列表中的標的物推薦給用戶,並且是全部推薦給用戶。不管是上面哪一個角度看智能重排序,它都可以看成是推薦系統的一種特例。
通過上面的介紹,相信讀者已經理解了什麼是智能重排序,下面我們來說說智能重排序的應用場景。
根據上面一節中的講解,只要是在產品中存在按照某個主題或者某個類目結構來對標的物進行組織的產品架構,都可以藉助智能重排序技術來對標的物列表進行智能排序。一般來說,智能重排序主要的應用場景包含如下這3大類場景:
像愛奇藝等視頻網站,存在很多根據某個標籤(一個標籤也算一個主題)組織的內容結構,這裡當然可以利用智能重排技術對展示出的視頻進行個性化排序。下圖就是節目的篩選界面,篩選是滿足多個標籤的內容的過濾操作,將所有的包含這幾個篩選標籤的內容展示出來,這本身也是一種內容的列表。電視貓也屬於視頻類APP,只不過只在智能電視上播放,也屬於這一類。
圖2:愛奇藝APP中當用戶進行篩選時,視頻就展現為列表的形式,可以利用重排序技術重排
像電商網站,一般按照多級類目結構來組織商品,每個類目下有大量的商品,這些商品構成一個商品的列表,因此可以用智能排序技術來對物品進行個性化重排並展示出來。下面圖3就是精東男裝類目下的子類目,每個子類目點擊進去就是各種衣服或褲子列表,這些列表可以用智能重排技術來優化排序邏輯,提升用戶體驗與點擊轉化率。
圖3:精東APP男裝主題下,有很多子類目,每個子類目點進去就是這個子類目相關的商品列表
3. 生活服務類APP按照服務類型組織的服務列表
生活服務類APP中包含多個品類的服務類型,其中很多服務類型是包含子服務類別的,進入這些子服務類別就展示該類別下的所有服務,這些服務也構成一個服務列表。因此,是可以用個性化排序策略進行優化的。下面圖4是美團APP休閒/玩樂服務門類下的眾多子服務類型,進入某個子服務(如按摩/足療)就展示出由該子服務類目下的所有服務構成的列表。
圖4:美團APP中休閒/玩樂品類下的各種子類目下的各種服務組成服務列表
當然,可以做智能重排序的APP類別遠不止上面這3大類。只要滿足按照某個類別、某個主題、每個類目等來對標的物進行組織的產品形態和產品架構,都可以利用個性化重排序來優化排序邏輯,提升用戶體驗和標的物CTR點擊概率。可以說,基本所有的toC類APP都存在可以進行智能重排序的場景,因而,智能重排序的應用場景是普適而廣泛的。
這裡需要提一下,不是只要有標的物列表出現的場景就一定有必要做智能重排序,做智能排序是有一定條件的。必須當該列表包含的標的物數量非常多、有很多頁時做智能重排才有價值。否則,如果某個列表只包含很少量的標的物,那麼用戶只要花很少的時間就可以瀏覽完整個列表,進而就知道該列表中的哪些標的物是自己感興趣的了,這時智能重排序就失去了意義、得不償失。
通過前面兩節的講解,我們知道了什麼是智能重排序以及它的應用場景。智能重排序不光有這麼多的應用場景,它也是非常有價值的,它的價值主要體現在如下3個方面:
在不進行智能重排序時,標的物列表是按照某種規則(比如時間倒序)進行自然排序的,在該規則下,排序邏輯是固定的,用戶什麼時候進入該列表排序基本都是一樣的(除了新上線或者下線的標的物外,其它標的物都是不變的),可能列表前面的標的物用戶已經瀏覽過了,用戶第二次進入時如果排序不變,是非常影響用戶體驗的。而當採用智能重排序策略時,每天(甚至可以每小時或者更短的時間間隔,當然需要根據具體的產品形態和場景確定是否有必要做到那麼頻繁更新,一般的原則是如果這個場景用戶頻繁進入,可以更新更頻繁一些,否則做到T+1更新就足夠了)可以重新排列標的物的順序,將用戶感興趣的但用戶沒有瀏覽過的排在前面,這樣用戶每天看到的標的物就不一樣,明顯可以提升用戶體驗。
智能重排序可以做到千人千面,每個用戶的排序都不一樣,相比沒有智能排序前的千篇一律,智能重排序後顯然可以讓更多的標的物得到曝光的機會。由於智能重排序是根據用戶的興趣進行重排,而用戶的興趣是多樣的,這樣可以讓更多的長尾標的物分發給對它感興趣的用戶,提升了標的物的分發效率。
由於智能重排是根據每個用戶對標的物的興趣大小,將用戶沒有操作過的、用戶感興趣的標的物排在前面,顯然可以提升標的物的點擊率與轉化率。
上面3節講完了智能重排序的基礎知識,我們在本節來講解智能重排序的工程實現方案及算法原理,本節是智能重排序最重要的知識點,讀者需要深刻理解相關的方案與原理。智能重排序的工程實現方案有很多種,其中下面的方案1、2、3都是可行的,我們下面分別講解,除了講解這3種方案外,我們在4中會比較前2個方案的優劣,並且在5中簡單介紹一下智能重排序的冷啟動方案。
所謂事先計算型,就是事先將每個用戶在某個列表中的智能排序結果計算出來存到資料庫中,當用戶在前端瀏覽該列表時,推薦系統web服務直接將排序結果取出來並在前端展示給用戶。(這裡提一下,如果讀者不熟悉本節和下一節講的事先計算型和實時裝配型,可以先看看筆者之前寫的另外一篇文章《推薦系統提供web服務的2種方式》,這篇文章在公眾號」大數據與人工智慧「中,讀者可以關注閱讀,公眾號裡面有筆者寫的近40萬字關於推薦系統相關的系列原創文章)
一般來說,某個產品中需要做智能重排序的列表是非常多的(比如產品如果存在篩選功能的話,可供用戶篩選的標籤是非常多的。有很多篩選維度,每個維度下也有很多標籤,因此可行的篩選組合是一個非常大的數字,可以達到幾百,甚至成千上萬,參見上面的圖2),那麼需要事先存儲的數據量是
(這裡
是用戶數,
是需要做智能重排序的列表數),這個量是非常大的(除了數據條數多,每個列表的排序結果佔用的空間也很大,因為這些列表中可能會包含非常多的標的物,前面也提到,只有標的物很多的列表才有做智能重排的必要),如果將排序結果全部存下來,會佔用了太多的存儲資源,是不可取甚至是不可行的。
那麼可行的解決方案是什麼呢?一種方法是降低給用戶排序的個性化程度,這種思路是根據筆者將個性化推薦分為完全個性化、群組個性化、非個性化3種範式的自然延伸。怎麼理解前面這句話呢?就是先將用戶聚類,對於每一類用戶,可以將他們看成」一個「用戶(有一定數學基礎的讀者可以將每一類的用戶看成是一個等價類,一般來說,聚類算法會保證同一類的用戶具有相似的興趣偏好),這」一個「用戶在某個列表的智能重排序就是唯一的,那麼需要存儲的數據量就是
(這裡
是聚類數,
是需要做智能重排序的列表數),聚類數一般選取成千上萬就足夠了,這遠遠小於用戶數(網際網路產品的用戶數一般是百萬級、千萬級、甚至是億萬級),一般來說存儲可以減少至少3個數量級。所以,當給用戶聚類時,事先計算出排序結果並存起來是可行的。
整個事先計算型智能重排序方案的架構圖見下面圖5,重排序引擎通過處理用戶行為日誌,並基於用戶興趣將用戶聚類後再構建排序模型,為每一個聚類生成唯一的排序結果並存放到資料庫中,當用戶在產品(即APP)上訪問該列表時,智能重排序web服務模塊將該列表的排序結果取出來並在前端展現給用戶。
圖5:事先計算型智能重排序架構
整個方案的工程實現主要包含3步,首先基於用戶行為挖掘出用戶的興趣偏好表示,再基於用戶興趣偏好表示將用戶聚類,最後為每類用戶智能重排序(見下面圖6)。下面我們對每個步驟及其方法進行介紹。
圖6:事先計算型智能重排序步驟
用戶的興趣是用戶真實行為的反饋,我們可以基於用戶在APP上的各類行為(點擊、收藏、瀏覽、播放、加購物車、下單等等)挖掘出用戶的興趣偏好。用戶的興趣一般可以用標籤來顯式表示,也可以用抽象的數學對象來隱式刻畫,不管哪種方式,最終都可以用一個向量來表示用戶的興趣偏好。
如果標的物是包含標籤的,那麼用戶對標的物的操作行為就可以為用戶打上相應的標籤(比如,如果你看了一部恐怖電影,可以給你打上愛好恐怖電影的標籤),用戶對該標的物的投入度代表了用戶對該標籤的偏好度,即標籤的權重(你看該恐怖電影如果看完了肯定比只看了10分鐘更喜歡,那麼看完了的時候恐怖標籤可以給權重1,看了十分鐘可以給權重0.3,具體怎麼分配權重,需要根據策略和經驗,這裡不詳細介紹;對於電商類產品也類似,購買了的權重大於加購物車,加購物車的權重又大於瀏覽商品詳情頁)。當我們對某個用戶所有操作過的標的物標籤進行上面處理後,我們可以按照字典序將所有(標的物的)標籤排序,那麼每個用戶基於標籤表示的興趣偏好就可以表示為一個向量,向量的維數是所有標籤的數量,向量中某個非零分量代表用戶對這個標籤有興趣,而分量的大小代表的是用戶的興趣偏好大小。用戶在具有相同標籤的不同標的物上的興趣偏好權重可以是各個具備該標籤的標的物上的操作的權重的加權平均。
我們還可以用機器學習算法對用戶的興趣偏好進行建模。這裡舉個例子,推薦系統中常用的矩陣分解算法(比如Spark Mllib中的ALS算法)就可以用來刻畫用戶的興趣偏好,通過矩陣分解可以獲得用戶的特徵矩陣,每個用戶可以用一個隱向量來表示(用戶特徵矩陣的行向量),這個向量就可以用於刻畫用戶的興趣偏好,只不過每個分量是在某個隱因子上的表現,隱因子很難用現實中的某個具體概念來表述,可解釋性沒有標籤那麼強。最終通過矩陣分解也獲得了用戶的興趣向量表示了。矩陣分解只是其中的一種方法,item-based協同過濾、各類嵌入方法、深度神經網絡方法(參考文獻3中YouTube曾經用到的深度學習方法就可以獲得用戶興趣偏好的特徵向量表示)都可以獲得用戶興趣偏好的向量表示。
有了用戶的興趣偏好的向量表示,就可以對用戶聚類了,常用的KMeans聚類算法就是最簡單的一種聚類實現方案。利用KMeans聚類可以將每個用戶分配到某一個類中,那麼給這個類做智能重排序就可以了,在同一個類中的用戶具備一樣的智能重排序結果。
有了上面的步驟2,我們就可以獲得該類的聚類中心向量(該類中每個用戶向量求加權平均就可以獲得聚類中心向量了),該向量可以代表該類的興趣偏好。對於需要做智能重排序的標的物,不管是步驟1中提到的基於標籤表示還是矩陣分解表示,我們都可以獲得該標的物的向量表示。聚類中心向量跟該標的物的向量的cosine餘弦就代表該類對該標的物的偏好得分。當我們計算出了聚類中心跟需要排序的列表中所有標的物的偏好得分後,按照偏好得分降序排列,就獲得了該類的智能重排序結果。
上面講完了基於用戶聚類的事先計算型智能重排序的工程實現方案和算法原理。這裡提一下,在提供推薦web服務時,我們可以事先獲得該用戶所在的類,再將該類的排序結果取出來,並在前端展示給該用戶,因此,每個用戶屬於哪個類,我們也是需要事前存下來的(用戶屬於哪個類,我們在聚類時是知道的),同時我們計算出的智能重排序結果是基於類來存儲的,一般採用key-value型的NoSQL(如Redis、CouchBase等)存儲,每個類有一個唯一的標識(即key),該類對應的智能重排序結果作為值(即value)存儲起來。
所謂實時裝配型智能重排序就是在用戶訪問某個需要做重排序的標的物列表時,推薦系統實時計算出列表頁的標的物排序結果並返回給前端展示給用戶,這個計算過程是瞬間完成的,不會影響用戶體驗。跟事先計算型類似,我們有很多方法可以獲得用戶和標的物的特徵向量,並且這兩個向量的內積(或者cosine餘弦)代表了用戶與該標的物的相似度。實時裝配型需要實時獲得用戶對列表中某個標的物的興趣偏好,所以需要一個算法框架可以近實時地地計算出用戶特徵向量與每個標的物特徵向量的內積(該內積即用戶對該標的物的偏好得分),並對列表中所有標的物的偏好得分降序排列。只有這樣才可以做到不影響用戶體驗並且確保用戶最喜歡的一定是排在重排序列表最前面的。
下面圖7是一種實時裝配型智能重排序的技術實現方案,這裡與事先計算型不一樣的地方是有一套FAISS即席查詢服務,它的作用就是提供實時計算的能力,利用用戶偏好向量從所有標的物向量中搜索出與用戶偏好向量最相似(用戶偏好度最強的)的標的物。下面對FAISS框架進行簡單的介紹,讓讀者理解它的工作原理。
FAISS是FaceBook開源的(見參考資料2)框架,是業界用的比較多的一款用於實時即席查詢服務的框架。FAISS包含幾種相似性搜索方法,它假設用戶或者標的物被表示為向量並由整數標識(用戶和標的物用整數來唯一標識,即用戶id和標的物id),可以在海量向量庫中搜索出按照某種相似性計算的最相似的向量列表(對於智能重排序,就是利用用戶偏好向量,計算出標的物列表中所有標的物向量與它相似度的降序排列)。FAISS提供了向量之間計算L2(歐幾裡德)距離或內積距離的方法,與查詢向量最相似的向量是那些與查詢向量具有最小L2距離或最大內積的向量。FAISS具備在極短的時間(毫秒級)內計算某個向量最相似的一組向量的能力。它還支持cosine餘弦相似性查詢,因為cosine餘弦只不過是向量內積的歸一化。
圖7:實時裝配型智能重排序架構
上面提到的FAISS框架只是一種可行的解決方案。FAISS框架是一種向量近似搜索方案,要用到該方案必須將用戶和標的物表示為向量,並且向量的內積或者cosine餘弦等度量可以用于衡量兩個向量之間的相似度。雖然很多推薦算法(前面提到的標籤算法、矩陣分解算法等)可以採用這種方式實現,但這不是唯一的方式。當不能用向量化的方式表示用戶和標的物時,可以採用其他的解決方案,業界常用的TensorFlow Serving(見參考資料1,其實PyTorch也有類似的Serving解決方案)也具備這樣的能力,只不過需要事先訓練出一個排序模型,將用戶特徵和標的物特徵按照某種方式灌入該模型就可以獲得該用戶對該標的物的偏好得分,當對待排序列表中的所有標的物這樣做時就獲得了個性化的重排序列表。由於TensorFlow Serving也是實時計算的,它所起的作用跟上面圖7中的FAISS差不多,將FAISS替換為TensorFlow Serving即可,只不過這時重排序算法的實現方案是不一樣的。常用的Logistic回歸、分解機、集成學習算法、深度學習算法都是可以用於排序的,這裡不再贅述。
上面提到的FAISS和TensorFlow Serving的方案都是將排序過程解耦為一個獨立的模塊,推薦web服務通過調用排序模塊獲得重排序結果,其實還可以將排序模型整合到推薦web服務中,這在《推薦系統提供web服務的2種方式》這篇文章中有講到,這裡不細說。
第3種方案是事先對所有標的物排序,當要對某個列表頁(它是所有標的物構成的列表的子列表)智能重排序時,可以從已經排序好的所有標的物列表中過濾出該待排序的子列表包含的標的物。這種方案對標的物也只需要計算一次排序,並且排序結果也可以事先存儲起來。在提供服務時只需要進行過濾就夠了,但是要確保過濾方法是高效的,能夠在毫秒級完成(不然會影響用戶體驗)。這種方式也可以很好地避免極大的事先計算和存儲成本。這種方案也是事先計算型的,它可以看成是1的一種特例的拓展。
上面提到了需要做過濾,當然可行的過濾方式有很多,這裡介紹一個簡單過濾的方法,供讀者參考。當我們對所有標的物排序好後,那麼每個標的物可以賦予一個排序得分(比如
,這裡
是標的物排在第
位,
是所有標的物的個數,這個排序得分可以保證排在前面的標的物比排在後面的得分高,其他形式的得分賦值也是可以的,比如
也是可行的),這樣每一個待排序的標的物列表中的標的物是包含具體的得分的,那麼我們就可以採用快速排序等這類時間複雜度低的排序策略來對待排序的標的物列表進行重排序了,時間複雜度可以控制在
之內(這裡k是待排序列表的長度),這種過濾方法可以控制過濾的速度,基本在毫秒級就可以完成,做到不影響用戶體驗。
事先計算型智能重排序,是對一類(在同一聚類中的用戶組成的類)用戶進行重排序,精細化的顆粒度沒有實時裝配型那麼細(事先計算型重排序做到了群組個性化,而實時裝配型做到了完全個性化),最終效果肯定會比實時裝配型更差一些。
還有,實時裝配型可以將用戶操作過的標的物放置在列表末端,但是事先計算型不能這樣做,因為,事先計算型是對一類用戶重排序,某個用戶操作過的標的物可能其他用戶沒有操作過,所以不能直接將某個用戶操作過的放置到最末尾。
另外,事先計算型先將結果計算出來了,在推薦時直接獲取結果就可以展示給用戶而不需要像實時裝配型那樣需要實時計算出排序結果,因此接口響應時間會更短,用戶體驗可能會更好。同時,由於少了一個實時計算排序的邏輯,在穩定性方面也會更好一些(對於實時裝配型,如果實時排序服務掛了,推薦web服務接口就不可用了)。
如果某個用戶是新用戶,我們無法獲得該用戶的興趣偏好向量表示,這時可以利用原先的基於時間降序的默認排序策略作為默認方案。還可以採用對列表隨機打散的策略,這樣每天用戶進入該列表時看到的排序是不一樣的。
還可以對待排序的列表中的標的物進行聚類,在前端展示時,依次從每個類別中隨機取一個標的物展示出來,這樣就為用戶提供了多樣性的標的物供用戶選擇,這種方案可以更容易在重排序列表前面幾行擊中用戶的偏好點,提升新用戶的點擊概率。
如果可以獲得該用戶的畫像信息(比如年齡、性別、地域等),也可以利用具備該標籤的用戶的平均向量作為該新用戶的偏好向量表示(比如知道該用戶是男性,那麼就可以將所有可以計算出偏好向量的男性的偏好向量的平均向量賦予給該用戶),從而也可以為該用戶計算出重排序列表。
智能重排序屬於笛卡爾積推薦範式(一般產品是存在非常多的列表頁的,比如基於各種組合的篩選,有多少組合就有多少種待排序列表,為每個用戶在每一種列表頁進行智能重排序,就是用戶數與待排序列表數的笛卡爾積),一般用戶數和列表頁數都是非常大的,要全部將所有的智能排序結果事先計算並存儲下來是不現實的(主要是計算、存儲成本太高),這是智能重排序面臨的最大挑戰。
針對上述難點,我們在第4節提供了3種方案。第一種方案對用戶聚類,減少了用戶維度引起的計算和存儲複雜度。第二種方案對計算過程進行優化,不事先計算,而是在需要排序時進行近實時計算,這就不需要太多的存儲資源(當然需要存儲實時計算需要的特徵,這裡其實就是用戶及標的物的特徵向量,但是這個佔用的存儲空間相對較小,是用戶數加上標的物數這麼多項需要存儲,而不是它們數量的乘積),這種方案的難點是需要近實時(毫秒級)從標的物向量中篩選出跟用戶向量最相似的向量(重排序是全部篩選出),這個難點是藉助了FAISS(如果採用排序模型的方案,那可以用TensorFlow Serving、PyTorch Serving等框架,排序模型也需要在毫秒級對待排序列表進行排序)這個強大的框架來實現的。第三種技術方案是事先計算出所有標的物的排序,在為某個列表頁提供智能重排序時,只需要從所有排好序的標的物中過濾出這個列表頁中包含的標的物即可,這裡面的難點就是怎麼從排序好的所有標的物中篩選出該列表中包含的標的物,上一節3中也提供了一種可行的解決方案。
另外需要提一下,由於待排序的列表一般是包含非常多的標的物的(前面也講過,只有包含非常多標的物的列表才有做智能重排序的必要),如果一次性將所有標的物取出來返回給用戶,在網絡中傳輸的數據量會比較大,影響推薦web服務的性能,從而可能影響用戶體驗,還可能會產生更多的成本(傳輸更多的數據有帶寬成本)。針對上面這個問題,可行的解決方案是:可以採用分頁的技術。具體做法是,在接口中可以提供分頁的參數,用戶訪問列表時,根據用戶當前的頁數及用戶的操作情況(向上翻頁或者向下翻頁),前端從推薦web服務中獲取上一頁或者下一頁的排序結果並展示給用戶。
前面講解完了智能重排序相關的所有知識點,我們在最後一節簡單介紹一下電視貓在智能重排序上的實踐。
首先,在智能電視(電視貓是智能電視上的一個視頻聚合APP)上進行智能重排序是非常有必要的,為什麼在智能電視上非常必要呢?因為智能電視目前主要靠遙控器操作,而遙控器操作是非常不方便的,如果不進行智能重排序,這個列表更新不頻繁(一般是按照標的物入庫的時間降序排列,對於長視頻等視頻類標的物,每天新生產的標的物是很少的),用戶每次進入這個列表會發現內容基本是一樣的,用戶要找到新的內容,必須往下翻頁,但是用遙控器翻頁是非常不方便的,所以用戶體驗會很差。通過前面的介紹,智能重排序完全可以解決這個問題。
其次,介紹一下電視貓智能重排序的技術實現方案。電視貓最早在2017年是採用的事先計算型方案進行智能重排序,基於Spark Mllib庫中的ALS算法對用戶行為矩陣進行矩陣分解,獲得用戶的特徵向量表示,再進行聚類,最後對每個類的每個待排序列表進行重排序。後面在今年切換到了實時計算型智能重排序方案,採用的是基於FAISS框架的實現方案,用戶特徵向量採用的還是是ALS矩陣分解獲得的用戶向量和標的物向量。
最後,說一下智能重排序的效果。電視貓基本在所有六大類長視頻(電影、電視劇、動漫、少兒、紀錄片、綜藝)頻道頁的所有列表及所有的頻道篩選頁中都使用了重排序方案。平均來說,重排序方案上線後的點擊率比沒有上線之前至少提升了20%以上。
本篇文章首先介紹了列表頁智能重排序的基本概念、應用場景、業務價值等知識點。接著講解了智能重排序的實現方案和算法原理,主要包含事先計算型和實時裝配型等兩類主要的技術方案,每類方案都有自己的優缺點,如果可能的話,筆者還是建議採用實時計算型,它可以做到更加精準,更細粒度的個性化,用戶體驗和效果轉化也會更好。最後,我們介紹了智能重排序的困難和挑戰以及它在電視貓上的應用案例。