MMR原理
Q
Q
Q : 用户;
D
D
D : 推荐结果集合;
S
S
S :
R
R
R中已被选中集合; KaTeX parse error: Undefined control sequence: \S at position 2: R\̲S̲: 中未被选中集合;
λ
λ
λ: 权重系数,调节推荐结果相关性与多样性
该如何理解这个公式?简单说,从未选中的集合中选择一个物品,计算它和用户的相似性,以及它和已选物品的相似性。我们希望该物品和用户尽可能相似,和已选物品尽可能不相似,这样展示的物品有比较好的多样性
代码
def MMR(itemScoreDict, similarityMatrix, lambdaConstant=0.5, topN=20):
s, 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.remove(selectOne)
s.append(selectOne)
return (s, s[:topN])[topN > len(s)]