如何讓推薦列表不要千篇一律?——重排算法MMR

MMR原理

在這裏插入圖片描述

QQ : 用戶;
DD : 推薦結果集合;
SS : RR中已被選中集合; 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)]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章