推薦策略產(chǎn)品經(jīng)理必讀系列—第五講推薦系統(tǒng)的召回三
前面幾篇介紹了基于規(guī)則的召回和基于協(xié)同過濾思想的召回,本篇文章給大家詳細(xì)介紹基于向量的召回。這也是目前實(shí)際工業(yè)界落地時(shí)應(yīng)用最多的召回方法。
一、什么是向量召回
1. 向量
具有大小和方向的量。向量召回的核心思想就是將用戶特征和物料特征全部用向量來表示,然后基于向量來計(jì)算用戶與物料的相似度、用戶與用戶的相似度、物料與物料的相似度。
2. Embedding
何為Embedding?大家應(yīng)該經(jīng)常聽到這個(gè)詞,那么到底什么是Embedding了?Embedding翻譯:“嵌入”& “向量映射”,是一種用一個(gè)數(shù)值向量“表示”一個(gè)對(duì)象(Object)的方法。Embedding可以理解為是一種編碼方式,把相關(guān)字符類值比如“安徽”通過編碼的方式轉(zhuǎn)化為可以供計(jì)算機(jī)使用的數(shù)字。
下面我們用一個(gè)例子來先看一下基于向量的表達(dá)。
上圖中一個(gè)用戶有六個(gè)特征,分別是【年齡、性別、年薪、愛好、戶籍、學(xué)歷】,很多特征都是文本特征,計(jì)算機(jī)無法直接基于文本特征來計(jì)算兩個(gè)用戶之間的相似度,需要先把文本轉(zhuǎn)化為向量,計(jì)算機(jī)最后基于向量計(jì)算出兩個(gè)用戶之間的相似度了。
二、隱語義模型
向量召回中最經(jīng)典的應(yīng)用也就是隱語義模型了,或者叫做隱向量模型,或者叫做矩陣分解模型。我們之前介紹了協(xié)同過濾思想,協(xié)同過濾思想有什么不好的地方了,隱語義模型對(duì)比協(xié)同過濾有什么先進(jìn)之處了。
2.1 案例引入
首先我們通過一個(gè)生動(dòng)的例子來回顧一下協(xié)同過濾的思想。某天吃貨路飛走進(jìn)了一家飯店進(jìn)行點(diǎn)餐,服務(wù)員小薇上來服務(wù):
1)Item-CF思想點(diǎn)餐
基于路飛之前吃過的菜,為其推薦相似的菜品。
2)User-CF思想點(diǎn)餐
基于和路飛口味相同的人,為其推薦口味相同的人愛吃的菜。
3)隱語義思想點(diǎn)餐
隱語義模型的思想是先確認(rèn)User的興趣偏好分類,然后將User的興趣偏好分類和Item的分類對(duì)齊。各位讀者也可以明顯看得出來隱語義思想是一種更加貼近于我們實(shí)際生活,更加先進(jìn)的思想。
我們用這么一張概括圖片,大家就能夠非常清晰地明白協(xié)調(diào)過濾思想和隱語義模型思想之間的差異了:
協(xié)同過濾是將物料和用戶之間建立更多的鏈接,而隱語義模型的思想是將用戶和物料歸到相同的特征維度上,最后在相同的特征維度上進(jìn)行相似度比較。
User-CF:首先找到和目標(biāo)用戶吃同樣菜的其他用戶,然后為目標(biāo)用戶推薦其他用戶喜歡吃的菜;Item-CF:首先明確目標(biāo)用戶歷史喜歡吃的菜,然后找到和歷史喜歡吃的菜比較相似的新菜;
隱語義模型:首先明確目標(biāo)用戶的興趣愛好,比如喜歡什么類型的菜,將用戶的興趣分類和菜的分類對(duì)齊,最后為其匹配符合其偏好的菜品;下面一個(gè)例子就是基于原始的用戶對(duì)于物料的評(píng)分表,將用戶和物料進(jìn)行矩陣分解Embedding在相同的特征維度上。
通過路飛和沙拉在相同維度下的匹配度,最后計(jì)算出路飛對(duì)于沙拉的偏好為0。
2.2 隱語義模型概述
我們對(duì)隱語義模型進(jìn)行一個(gè)概述,日常我們經(jīng)常聽到的隱向量模型或者矩陣分解模型,它們的其實(shí)含義是一樣的。
隱語義模型 or 隱向量模型 or 矩陣分解模型:通過用戶的行為數(shù)據(jù),挖掘出隱含的特征(Latent Factor),最終將用戶與物料Embedding在相同維度的特征上,在相同維度下進(jìn)行相似度計(jì)算。使用更稠密的隱向量表示用戶和物品, 挖掘用戶和物品的隱含興趣和隱含特征。大家經(jīng)常會(huì)看到Embedding這個(gè)詞,翻譯成中文叫做“嵌入”或者“向量映射”,實(shí)際就是將用戶和物料的特征映射到某個(gè)特征空間用向量來表達(dá)的一種方法。
隱語義模型的核心就是如何將一個(gè)共現(xiàn)矩陣(用戶和物料的交互矩陣)分解成兩個(gè)小矩陣,也就是分解成一個(gè)用戶矩陣和一個(gè)物料矩陣,其中兩個(gè)小矩陣必須分解在相同的隱向量維度上,也就是下圖中的K,兩個(gè)小矩陣相乘可以變回原本的共現(xiàn)矩陣。
當(dāng)我們將一個(gè)大矩陣分解成兩個(gè)小矩陣時(shí),面臨兩個(gè)核心問題,第一個(gè)核心問題是兩個(gè)小矩陣公用的這個(gè)隱向量維度K怎么設(shè)置?K的維度設(shè)置為多少比較合適?
隱向量K維度的設(shè)置:
第一點(diǎn):K代表的含義是什么?
K本身代表的隱向量維度不具有現(xiàn)實(shí)世界中的實(shí)際語義含義,不可解釋。Part2.1里面的點(diǎn)餐案例用了一些大家都能夠熟悉的語義進(jìn)行舉例,但實(shí)際在隱語義模型里隱向量都是不可解釋的,也不具備實(shí)際的語義含義。
第二點(diǎn):K是不是越大越好?
K本身并不是越大越好,K越大雖然表示的信息維度就會(huì)越多,但是泛化能力也會(huì)越差,K越大對(duì)于系統(tǒng)性能的要求以及算力要求也會(huì)越高;K越小表示的信息維度就會(huì)越少,但是泛化能力也會(huì)越強(qiáng)。最終K的取值是在模型效果和系統(tǒng)性能之間進(jìn)行權(quán)衡利弊后做出的選擇。
第三點(diǎn):用戶U對(duì)于物料I的偏好度如何計(jì)算?
用戶U對(duì)于物料I的偏好度最終的計(jì)算其實(shí)就是將用戶在第K個(gè)隱向量上的分?jǐn)?shù)和物料在第K個(gè)隱向量上的分?jǐn)?shù)進(jìn)行相乘,最終將所有K維度的分?jǐn)?shù)累加在一起。
2.3 矩陣分解
矩陣分解的第二個(gè)核心問題就是通過什么方法將一個(gè)大矩陣拆分成兩個(gè)小矩陣,其實(shí)這本質(zhì)是一個(gè)數(shù)學(xué)問題。目前有三種比較常見的方法。
方法一:特征值分解
只能作用于N * N的方矩陣,而實(shí)際User和Item的矩陣均不是方矩陣,所以不具有適用性;
方法二:奇異值分解
適用于所有M * N矩陣,但是對(duì)矩陣的稠密度要求高,現(xiàn)實(shí)中的矩陣都是稀疏的,如果需要使用必須把缺失的值通過近似值進(jìn)行補(bǔ)全,一般通過平均值等方式;計(jì)算復(fù)雜度極高Ο(m?n^2)。具體的數(shù)學(xué)計(jì)算邏輯較復(fù)雜,這里我們也不進(jìn)行詳細(xì)數(shù)學(xué)計(jì)算過程的展開了。因?yàn)槠娈愔捣纸夥绞綄?duì)于計(jì)算資源要求極高而且要求矩陣必須是稠密的,所以實(shí)際在互聯(lián)網(wǎng)場(chǎng)景中我們也不使用奇異值分解的方式。
方法三:梯度下降法
梯度下降法,2006年網(wǎng)飛舉辦的電影預(yù)測(cè)評(píng)分大賽上一位叫做 Simon Funk的選手提出一種新的方法叫做Funk SVD,后來又被稱為L(zhǎng)FM。梯度下降法矩陣分解引入了用戶向量和物品向量,用q_{u}表示用戶u的向量,p_{i}表示物品i的向量,利用用戶向量與物品向量的內(nèi)積q_{u}^{T}p_{i}來擬合用戶對(duì)物品的評(píng)分r_{u,i},利用梯度下降的方法來逐步迭代更新參數(shù)。目前工業(yè)界都使用方法三來進(jìn)行矩陣分解。
三、隱語義模型的優(yōu)缺點(diǎn)
對(duì)比上一篇文章里面介紹的協(xié)同過濾思想下的召回方法,隱語義模型具有哪些優(yōu)缺點(diǎn)了。
3.1 優(yōu)點(diǎn)
- 泛化能力強(qiáng):隱語義模型同樣需要依賴于數(shù)據(jù),但是一定程度上可以緩解矩陣稀疏的問題;
- 計(jì)算空間復(fù)雜度低:矩陣分解最終生成的是用戶向量、物品向量,其復(fù)雜度為(m+n)*k,而協(xié)同過濾所需維護(hù)的用戶或物品相似度矩陣的復(fù)雜度為m*m或n*n,遠(yuǎn)遠(yuǎn)高于矩陣分解的復(fù)雜度;
- 更好的靈活性和擴(kuò)展性:矩陣分解生成的用戶向量、物品向量可以很好的與其他特征組合或拼接,也可以和深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)相結(jié)合。
3.2 缺點(diǎn)
僅考慮了用戶與物料各自的特征,不方便加入用戶、物料與上下文的特征以及其他的一些交互特征,模型本身仍然具有一定局限性。
本文由 @King James 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Pexels,基于 CC0 協(xié)議
該文觀點(diǎn)僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺(tái)僅提供信息存儲(chǔ)空間服務(wù)。
路飛和沙拉的相似度是算錯(cuò)了嗎?感覺應(yīng)該是10分才對(duì)啊
確實(shí),里面有個(gè)數(shù)據(jù)寫錯(cuò)了,感謝指正