MaDi's Blog

一個紀錄自己在轉職軟體工程師路上的學習小空間

0%

談談推薦系統

何謂推薦系統

推薦系統是指:

一種信息過濾系統,用於預測用戶對物品的『評分』或『偏好』

I. 內容過濾(content-based recommendation)

利用物品類型與風格進行推薦,根據你過去喜歡的產品,去推薦給你相似的產品。

內容過濾又分為三個部分:

1. Item representation
每一個 物品(item) 選出其特徵來代表此物品

2. Profile learning
根據使用者過去對某物品的喜好程度的數據來學習該使用者的偏好

3. Recommendation generation
比較前兩者,為使用者推薦一組相關性最大的物品。

II. 協同過濾(collaborative filtering, 簡稱CF)

假設同樣一個物品的喜愛者,在某種程度上也會有其他共同的喜愛

協同過濾中要找到與使用者有相同品味的其他使用者分為兩種方式:

1. 以記憶為基礎(Memory-based)

1.1 以使用者為基礎(User-based)

先找出喜好行為與你類似的使用者,再將他們喜好的內容推薦給你,將有很大的機率會激起你的興趣

舉例來說:

當A,B兩人經過演算法計算後已知是共同喜好者,當A對新上映的某電影有興趣的時候,系統會推薦這部新上映的電影給B,這是基於使用者的推薦方式,前提是假設有共同喜好者的這群人都會對同樣性質的新事物有相似的喜好

1.2 以物品為基礎(Item-based)

計算物品(item)間的相似程度,以item的角度去判斷

舉例來說:

當電影天能, 鬼滅之刃都被A,B,C三人評為10分的高分,則此時D看了天能,系統會推薦給他鬼滅之刃,因為這是基於物品的角度,兩部電影都被評高分,代表兩部電影某種程度上是相似的。

2. 以模型為基礎(Model-based)

以記憶為基礎的方法會受限於資料量的多寡,為了解決前述以記憶為基礎的方式會有 資料稀疏 的問題,因此主張預先用歷史數據訓練出一個模型,再將它拿來做預測

協同過濾的常見缺點:

冷啟動(Cold Start)

顧名思義,指的是沒有足夠的使用者與物品間的資料,導致剛起步的推薦系統,其推薦效果較差

稀疏性問題(Sparsity)

指的是當推薦系統的規模變大,使用者與商品的資料都變多的時候,很難再有重疊的可能性,白話來說就是使用者很難把數量急劇增加的的全部商品瀏覽完,那他喜愛物品的資訊將無法提高推薦系統的效果,此現象隨資料量愈大,稀疏性也愈大。

常見衡量距離(相似度)的方法

在分類或推薦系統的演算法中,常常使用距離來衡量兩者資料的相似度。

歐式距離

在一個n維空間中,兩個向量之間的距離就是廣義的歐式距離

餘弦相似度

在一個n維空間中,兩個向量之間的夾角就是餘弦相似度。

距離愈短,相似度愈高,而餘弦相似度愈高,就代表兩個向量的距離愈接近

除此之外,也可以用餘弦距離(Cosine_Distance) 來衡量兩個點(A,B)在空間上的距離

Cosine_Distance (A, B) = 1 - Cosine_Similarity (A, B)

當餘弦距離等於0就代表相同,餘弦距離等於1就代表完全不同。

python程式碼:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
v1 = [1,2,3]
v2 = [2,5,7]

# 自己刻一個餘弦相似度的函式
def DIY_cosine_similarity(v1,v2):
dot = sum(e1*e2 for e1,e2 in zip(v1,v2)) #或用numpy套件 dot = np.dot(v1,v2)
norm1 = sum(e1**2 for e1 in v1)**0.5
norm2 = sum(e2**2 for e2 in v2)**0.5
return dot/(norm1*norm2)

# 用sklearn內建的餘弦相似度
from sklearn.metrics.pairwise import cosine_similarity

print(DIY_cosine_similarity(v1,v2)) # 0.9986254289035239
print(cosine_similarity([v1],[v2])) # [[0.99862543]]

比較歐式距離與餘弦相似度

比起歐式距離,餘弦相似度更在乎的是夾角(方向)上的差異,而非絕對的長度

以下圖為例,當A點不動,B點持續在同方向上向外平移,會造成餘弦相似度不變(因為夾角不變),但歐式距離會改變(兩點相對距離變長)。 因為兩種衡量距離的方式不同,資料分析適用的模型也會不同。

  • 歐式距離強調特徵的絕對差異,適用情境為使用者的行為指標分析、使用者價值的相似度
  • 餘弦相似度強調的則是方向上的差異,適用情境為使用者對內容評分來區分喜好

參考