前面幾篇介紹了基于規則的召回和基于協同過濾思想的召回,本篇文章給大家詳細介紹基于向量的召回。這也是目前實際工業界落地時應用最多的召回方法。
一、什麼是向量召回
1. 向量
具有大小和方向的量。向量召回的核心思想就是将用戶特征和物料特征全部用向量來表示,然後基于向量來計算用戶與物料的相似度、用戶與用戶的相似度、物料與物料的相似度。
2. Embedding
何為Embedding?大家應該經常聽到這個詞,那麼到底什麼是Embedding了?Embedding翻譯:“嵌入”& “向量映射”,是一種用一個數值向量“表示”一個對象(Object)的方法。Embedding可以理解為是一種編碼方式,把相關字符類值比如“安徽”通過編碼的方式轉化為可以供計算機使用的數字。
下面我們用一個例子來先看一下基于向量的表達。
上圖中一個用戶有六個特征,分别是【年齡、性别、年薪、愛好、戶籍、學曆】,很多特征都是文本特征,計算機無法直接基于文本特征來計算兩個用戶之間的相似度,需要先把文本轉化為向量,計算機最後基于向量計算出兩個用戶之間的相似度了。
二、隐語義模型向量召回中最經典的應用也就是隐語義模型了,或者叫做隐向量模型,或者叫做矩陣分解模型。我們之前介紹了協同過濾思想,協同過濾思想有什麼不好的地方了,隐語義模型對比協同過濾有什麼先進之處了。
2.1 案例引入
首先我們通過一個生動的例子來回顧一下協同過濾的思想。某天吃貨路飛走進了一家飯店進行點餐,服務員小薇上來服務:
1)Item-CF思想點餐
基于路飛之前吃過的菜,為其推薦相似的菜品。
2)User-CF思想點餐
基于和路飛口味相同的人,為其推薦口味相同的人愛吃的菜。
3)隐語義思想點餐
隐語義模型的思想是先确認User的興趣偏好分類,然後将User的興趣偏好分類和Item的分類對齊。各位讀者也可以明顯看得出來隐語義思想是一種更加貼近于我們實際生活,更加先進的思想。
我們用這麼一張概括圖片,大家就能夠非常清晰地明白協調過濾思想和隐語義模型思想之間的差異了:
協同過濾是将物料和用戶之間建立更多的鍊接,而隐語義模型的思想是将用戶和物料歸到相同的特征維度上,最後在相同的特征維度上進行相似度比較。
User-CF:首先找到和目标用戶吃同樣菜的其他用戶,然後為目标用戶推薦其他用戶喜歡吃的菜;Item-CF:首先明确目标用戶曆史喜歡吃的菜,然後找到和曆史喜歡吃的菜比較相似的新菜;
隐語義模型:首先明确目标用戶的興趣愛好,比如喜歡什麼類型的菜,将用戶的興趣分類和菜的分類對齊,最後為其匹配符合其偏好的菜品;下面一個例子就是基于原始的用戶對于物料的評分表,将用戶和物料進行矩陣分解Embedding在相同的特征維度上。
通過路飛和沙拉在相同維度下的匹配度,最後計算出路飛對于沙拉的偏好為0。
2.2 隐語義模型概述
我們對隐語義模型進行一個概述,日常我們經常聽到的隐向量模型或者矩陣分解模型,它們的其實含義是一樣的。
隐語義模型 or 隐向量模型 or 矩陣分解模型:通過用戶的行為數據,挖掘出隐含的特征(Latent Factor),最終将用戶與物料Embedding在相同維度的特征上,在相同維度下進行相似度計算。使用更稠密的隐向量表示用戶和物品, 挖掘用戶和物品的隐含興趣和隐含特征。大家經常會看到Embedding這個詞,翻譯成中文叫做“嵌入”或者“向量映射”,實際就是将用戶和物料的特征映射到某個特征空間用向量來表達的一種方法。
隐語義模型的核心就是如何将一個共現矩陣(用戶和物料的交互矩陣)分解成兩個小矩陣,也就是分解成一個用戶矩陣和一個物料矩陣,其中兩個小矩陣必須分解在相同的隐向量維度上,也就是下圖中的K,兩個小矩陣相乘可以變回原本的共現矩陣。
當我們将一個大矩陣分解成兩個小矩陣時,面臨兩個核心問題,第一個核心問題是兩個小矩陣公用的這個隐向量維度K怎麼設置?K的維度設置為多少比較合适?
隐向量K維度的設置:
第一點:K代表的含義是什麼?
K本身代表的隐向量維度不具有現實世界中的實際語義含義,不可解釋。Part2.1裡面的點餐案例用了一些大家都能夠熟悉的語義進行舉例,但實際在隐語義模型裡隐向量都是不可解釋的,也不具備實際的語義含義。
第二點:K是不是越大越好?
K本身并不是越大越好,K越大雖然表示的信息維度就會越多,但是泛化能力也會越差,K越大對于系統性能的要求以及算力要求也會越高;K越小表示的信息維度就會越少,但是泛化能力也會越強。最終K的取值是在模型效果和系統性能之間進行權衡利弊後做出的選擇。
第三點:用戶U對于物料I的偏好度如何計算?
用戶U對于物料I的偏好度最終的計算其實就是将用戶在第K個隐向量上的分數和物料在第K個隐向量上的分數進行相乘,最終将所有K維度的分數累加在一起。
2.3 矩陣分解
矩陣分解的第二個核心問題就是通過什麼方法将一個大矩陣拆分成兩個小矩陣,其實這本質是一個數學問題。目前有三種比較常見的方法。
方法一:特征值分解
隻能作用于N * N的方矩陣,而實際User和Item的矩陣均不是方矩陣,所以不具有适用性;
方法二:奇異值分解
适用于所有M * N矩陣,但是對矩陣的稠密度要求高,現實中的矩陣都是稀疏的,如果需要使用必須把缺失的值通過近似值進行補全,一般通過平均值等方式;計算複雜度極高Ο(m∗n^2)。具體的數學計算邏輯較複雜,這裡我們也不進行詳細數學計算過程的展開了。因為奇異值分解方式對于計算資源要求極高而且要求矩陣必須是稠密的,所以實際在互聯網場景中我們也不使用奇異值分解的方式。
方法三:梯度下降法
梯度下降法,2006年網飛舉辦的電影預測評分大賽上一位叫做 Simon Funk的選手提出一種新的方法叫做Funk SVD,後來又被稱為LFM。梯度下降法矩陣分解引入了用戶向量和物品向量,用q_{u}表示用戶u的向量,p_{i}表示物品i的向量,利用用戶向量與物品向量的内積q_{u}^{T}p_{i}來拟合用戶對物品的評分r_{u,i},利用梯度下降的方法來逐步叠代更新參數。目前工業界都使用方法三來進行矩陣分解。
三、隐語義模型的優缺點對比上一篇文章裡面介紹的協同過濾思想下的召回方法,隐語義模型具有哪些優缺點了。
3.1 優點
- 泛化能力強:隐語義模型同樣需要依賴于數據,但是一定程度上可以緩解矩陣稀疏的問題;
- 計算空間複雜度低:矩陣分解最終生成的是用戶向量、物品向量,其複雜度為(m n)*k,而協同過濾所需維護的用戶或物品相似度矩陣的複雜度為m*m或n*n,遠遠高于矩陣分解的複雜度;
- 更好的靈活性和擴展性:矩陣分解生成的用戶向量、物品向量可以很好的與其他特征組合或拼接,也可以和深度學習神經網絡相結合。
3.2 缺點
僅考慮了用戶與物料各自的特征,不方便加入用戶、物料與上下文的特征以及其他的一些交互特征,模型本身仍然具有一定局限性。
本文由 @King James 原創發布于人人都是産品經理。未經許可,禁止轉載。
題圖來自 Pexels,基于 CC0 協議
該文觀點僅代表作者本人,人人都是産品經理平台僅提供信息存儲空間服務。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!