最大边缘相关多样性算法MMR的学习和实现

  • MMR算法原理
  • Python 实现
  • 算法思路总结

在做毕业设计的时候,导师推荐了篇经典的关于推荐多样性重排的算法的论文,所以在这里记录一下学习的历程。本文介绍了推荐系统中MMR的详细实现,和其中用到的余弦相似度计算的算法。

MMR算法原理

Maximal Marginal Relevance (MMR) 算法可以减少排序结果的冗余,同时又能保证结果的相关性。最早应用于文本摘要提取和信息检索等领域。在推荐场景下体现在,给用户推荐相关商品的同时,保证推荐结果的多样性,即排序结果存在着相关性与多样性的权衡。

Python 实现

def mmr(items, itemScore, simArr, lambda1):index = []order = np.argsort(itemScore).tolist()#(0------4)[1,3,2,4,0]index.append(order[-1])#[0]order.remove(order[-1]) cosList = []rList = []while len(index) != len(items):for i in order:#[1,3,2,4]  [3,2,4]  [3,4]now_values_tonser = simArr[i]cosList = []for j in index:#[0]  [0,1]  [0,1,2]re_tonser = simArr[j]cos = cosine_distance(re_tonser, now_values_tonser)#[0.25]cosList.append(cos)bigCos = np.max(cosList)mrr = lambda1*itemScore[i]-(1-lambda1)*bigCos#mrrList.append(mrr)biggest_mrr_index = np.argsort(mrrList).tolist()[-1]index.append(order[biggest_mrr_index])order.remove(order[biggest_mrr_index])mrrList = [] return items[index]def cosine_distance(arr1, arr2):dot_product = 0normA = 0normB = 0for a, b in zip(arr1, arr2):dot_product += a * bnormA += a**2normB += b**2if normA == 0 or normB == 0:return 0else:return round(dot_product / ((normA**0.5)*(normB**0.5)) * 100, 2)

算法思路总结

首先将query和documents生成特征向量,并计算相似度,从而给出包含k个文档的集合D。集合D中选择与query相似度最高的文档加入重新排列的集合。然后我们D中所有的文档计算MMR值,选择得分最高的,加入重新排列的集合。直到集合D被清空为止。

最大边缘相关多样性算法MMR的学习和实现相关推荐

  1. 推荐系统:最大边缘相关多样性算法(MMR)(python实现)

    MMR论文 Q:用户 R:待排序商品集合 S:已排序商品集合 D:商品 Maximal Marginal Relevance(MMR)主要通过结合用户对于商品的喜爱程度与商品间的相似度加权做差值,重新 ...

  2. 多样性算法在58部落的实践和思考

    导读:本文在明确"推荐系统个体多样性优化"主题后,由整体架构出发,清楚阐述了在召回层.规则层.多样性层的优化细节.在MMR和DPP算法部分既有原理也有实践,最后用图表方式展示出了效 ...

  3. 自动摘要生成(一):最大边界相关算法(MMR)

    分享一下前一段时间公司需要做的文章自动摘要. 一.摘要方法 目前来说,文章摘要自动生成主要分为两种方法:生成式和抽取式. 生成式采用sequence2sequence+Attention的模型,采用E ...

  4. 最大边界相关算法MMR(Maximal Marginal Relevance) 实践

    NLP(自然语言处理)领域一个特别重要的任务叫做--文本摘要自动生成.此任务的主要目的是快速的抽取出一篇文章的主要内容,这样读者就能够通过最少的文字,了解到文章最要想表达的内容.由于抽取出来的摘要表达 ...

  5. MMR: 控制推荐多样性算法

    你有考虑过推荐系统的多样性层面是怎么设计的吗? 推荐系统中精排模块是对各个item进行精准预估,而在之后的重排阶段则会整体考虑推荐的N条内容间的关系,给出listwise粒度上最优的推荐序列. 多样性 ...

  6. 目标检测与识别算法综述:从传统算法到深度学习(二)

    作   者:XJTU_Ironboy 时   间:2018年11月 联系方式:tzj19970116@163.com 本文结构: 摘要 介绍 2.1 大致框架 2.2 测试评价指标 2.3 相关比赛介 ...

  7. 论文浅尝 | 从具有数值边缘属性的知识图谱中学习嵌入

    论文笔记整理:朱珈徵,天津大学硕士 链接:https://www.ijcai.org/proceedings/2021/0395.pdf 动机 从遗传数据到社会网络,在越来越多的场景下与知识图谱边缘相 ...

  8. 分水岭算法java,OpenCV 学习笔记 04 深度估计与分割——GrabCut算法与分水岭算法...

    1 使用普通摄像头进行深度估计 1.1 深度估计原理 这里会用到几何学中的极几何(Epipolar Geometry),它属于立体视觉(stereo vision)几何学,立体视觉是计算机视觉的一个分 ...

  9. 【自然语言处理】ChatGPT 相关核心算法

    ChatGPT 相关核心算法 ChatGPT 的卓越表现得益于其背后多项核心算法的支持和配合.本文将分别介绍作为其实现基础的 Transformer 模型.激发出其所蕴含知识的 Prompt / In ...

最新文章

  1. HTTP精简教程一:Web网络基础
  2. 平正真诚——记红帆公司2011年秋季旅游·衡山
  3. java 隐藏地址栏参数_要想在浏览器的地址栏上的URL中隐藏传输的参数,需要将form标签的method属性值设置为( )。 (5.0分)_学小易找答案...
  4. python 读取word 题库_Python-docx 读取word.docx内容
  5. 安卓机高的地图要用浏览器打开_浏览器F12操作概述
  6. .Net Core应用框架Util介绍(三)
  7. REST API的演变
  8. Centos7静态ip设置(亲测有效)
  9. 软件测试msf模型,Visual Studio 2010 Ultimate中MSF过程模型的设计
  10. 角色和权限Hibernate实体映射配置
  11. plpgsql语句的兼容性
  12. MongoDB联合查询 -摘自网络
  13. 谈谈Linux下动态库查找路径的问题
  14. 游戏建模中游戏人物设计要点是什么?
  15. OneDNS终端网络安全接入服务原理解析
  16. 人工智能会取代艺术家?
  17. 大一寒假训练九(map,set,vector)【更新完成】
  18. schedule_delayed_work()
  19. 查找list中重复数据
  20. WTL 9.0的变化 - atlctrls.h

热门文章

  1. 搭建一个简单的FAQ系统
  2. 唯样商城:100年前的科技脑洞到底有多大?(第一个已经实现)
  3. 如何查看谷歌浏览器中保存的密码
  4. es6,es7,webpack 和 babel(爱前端)
  5. 我成为了CSDN优秀资源分享达人
  6. ZYNQ7010教程(一)PL部分
  7. 浅谈C语言中数组理解
  8. windows 7系统安装
  9. 西山居剑心数据分析笔面试题
  10. 【人工智能实验】卷积神经网络CNN框架的实现与应用-手写数字识别