商品推荐系统浅析
京东科技开发者
共 8067字,需浏览 17分钟
· 2023-08-22
![](https://filescdn.proginn.com/c6f43536fff054d19c294019e8506483/51debfe020629d5c6f07c17c804b987e.webp)
2.1 推荐系统的定义
2.2 推荐架构
![](https://filescdn.proginn.com/bcaf5349d0504495a8b9af2db6711cb8/e989ee3eb68a4602e817406ae30f0917.webp)
![](https://filescdn.proginn.com/7d49d2e90401d8dbd88418ee8aef3cb2/b6a0ab3132a842add009f43f96ad633f.webp)
![](https://filescdn.proginn.com/be1954ca8b9b6addfb48896da652c278/5841af2abc99f4367138842b0410021d.webp)
![](https://filescdn.proginn.com/6e5f0b4039a7f8768ebaa9c21a5f35f4/72f52a91ace983f0be8bbc17396c4457.webp)
![](https://filescdn.proginn.com/b2a7a39d919e2fd1af9fa6560338b87a/9483211cc331b37151223654bf93b39c.webp)
2.3.1 多路召回的优劣
2.3.2 召回分类
-
标签召回:用户感兴趣的品类、品牌、店铺召回等 -
地域召回:根据用户的地域召回地域内的优质商品。
![](https://filescdn.proginn.com/cf17af3201a812a9fc7bf5d9905b9ed4/75335587897670f76edbe389f5653dc7.webp)
商品a |
商品b | 商品c | 商品d | |
用户A |
1 |
0 |
0 | 1 |
用户B | 0 |
1 | 1 |
0 |
用户C | 1 |
0 | 1 |
1 |
用户D | 1 |
1 | 0 |
0 |
![](https://filescdn.proginn.com/11dfc99b4a719c8254e853a10bb52662/56a6a3a7426e69d408772e5dabfe1976.webp)
![](https://filescdn.proginn.com/356548fa5662a91cb1e27e285e79fc84/230f83d5431e395b2bec3a249f586f5b.webp)
![](https://filescdn.proginn.com/1fe473bc2d39db56d00cbff60f884313/bb88876218ce9c4604f3790f64006223.webp)
-
局部敏感性哈希(LSH) -
基于图(HNSW) -
基于乘积量化
![](https://filescdn.proginn.com/7d4b2bd76de5a6911ae1b49c137c6e74/0b692fbc8652364d8b82922746a8126c.webp)
![](https://filescdn.proginn.com/36889edced4aadb559cf65137efb89bd/53d61b434bfb8d45722eb497bee0b81b.webp)
![](https://filescdn.proginn.com/be644ec091c47defdca962c09b2f5b59/1fa847806c52daf786877e325f8071ac.webp)
![](https://filescdn.proginn.com/8c7a64cdbfed3138e870f780bba83168/36ea0deaf75764e404b0bcfccffd7261.webp)
![](https://filescdn.proginn.com/100b7ff1922a3ab811c13266ced1cf12/9936d396c5fd8f219a9ba9dcec897d4e.webp)
2.5 重排
![](https://filescdn.proginn.com/cf44b100688c04e3f7218a12962004a8/61656352e56e360b787c0df18333f703.webp)
def MMR(itemScoreDict, similarityMatrix, lambdaConstant=0.5, topN=20):
#s 排序后列表 r 候选项
r = [], list(itemScoreDict.keys())
while len(r) > 0:
score = 0
selectOne = None
# 遍历所有剩余项
for i in r:
firstPart = itemScoreDict[i]
# 计算候选项与"已选项目"集合的最大相似度
secondPart = 0
for j in s:
sim2 = similarityMatrix[i][j]
if sim2 > second_part:
secondPart = sim2
equationScore = lambdaConstant * (firstPart - (1 - lambdaConstant) * secondPart)
if equationScore > score:
score = equationScore
selectOne = i
if selectOne == None:
selectOne = i
# 添加新的候选项到结果集r,同时从s中删除
r.remove(selectOne)
s.append(selectOne)
return (s, s[:topN])[topN > len(s)]
评论