GMF

浅析神经协同过滤NCF在推荐系统的应用

ⅰ亾dé卋堺 提交于 2020-10-18 07:57:09
NCF在推荐领域应用背景 CF,也就是协同过滤,在推荐领域有极其广泛的应用,应该没有谁的智能推荐系统是没用到过CF的。CF其实就是挖掘user和item的交互关系,然后生成I2I或者U2I表示向量。传统的CF从数学角度上还是偏行为统计计算的,没有用到很复杂的网络。因为深度学习很火,也是有一些关于Neural Collaborative Filtering的工作。今天介绍一下最近看的叫《Neural Collaborative Filtering》这篇论文。也有一个对应的开源项目,地址: https://github.com/hexiangnan/neural_collaborative_filtering 有兴趣的做推荐相关工作的同学,可以在自己的工作中用用。 隐式反馈vs显式反馈 其实把任何算法前面加个N,改成neural某某都是比较好发paper或者取得效果的。这篇文章比较有意思的一个点我觉得不在于将GMF或者MLP加在CF中,而是为CF构建了一套针对隐式反馈的建模理论。 说到这里先要提下隐式反馈和显式反馈。首先推荐业务一般都是按照有监督学习方式建模,也就是说要构建特征和目标列。在目标列的选择上一般会认为购买、点击、收藏这种行为是正样本,标记成label=1,其它行为全都是0。 但是这其中有一些问题,有的时候点击了的不一定是用户真正喜欢的,没点击的不一定是用户不喜欢的。

office 产品密钥

若如初见. 提交于 2020-10-15 02:34:50
刚买的小新,配置下office,作为技术人员,喜欢Share以下 office 产品密钥,任你选一组 一、序列号激活法(密钥激活法) 这种是最为安全而且最为正规的方法,通过取得合法的序列号(密钥)进行激活获得微软的认可,但前提是你得有官方的序列号,通过按正规渠道是需要花银子购买合法的序列号的,但往往我们都是通过其他方法获得可以使用的 Office2016密钥 ,这里为大家贴出了部分可以使用的Office2016密钥,但也有可能过段时间不能用了,不过我们会及时更新可以使用的Office2016密钥以便大家共享好的资源,请看清对应的版本,不同是的版本需要不同的激活码的。 Office 2016 Pro Plus Retail 版激活密钥: [Key]:3XJTG-YNBMY-TBH9M-CWB2Y-YWRHH [Key]:6TCQ3-NBBJ2-RTJCM-HFRKV-G6PQV [Key]:CGGR9-NQYC7-KRRGM-K4Y8J-XW3K7 [Key]:3GXXR-NT7BJ-9DRBB-M9FYC-CKCQV Office 2016 Visio Pro Retail 版激活密钥: [Key]:VPKCP-96NGG-6888Q-3FTVY-43KY7 Office 2016 Project Pro Retail 版激活密钥: [Key]:93N8W-W8HD8-R7M7R

Mxnet (44): 使用神经协作过滤(NeuMF模型)进行个性化排名

ⅰ亾dé卋堺 提交于 2020-10-14 22:41:59
1.个性化排名 前面对电影数据集的处理只考虑了明确的反馈,通过观察到的等级进行了训练和测试。这种方法有两个缺点: 在实际应用中,大多数的反馈都是隐式的,显式的反馈往往需要更高的收集成本。 未被观察的哪些用户-项目交互可能用于预测用户的喜好但是被忽略了,当这些缺失不是随机导致的而是由于用户的喜好导致的这些方法将不在适用。很显然,未观测的这些用户-项目对是用户真实的负反馈(用户对这些不感兴趣才没看)和缺失值(正常随机的缺失,跟喜好无关,将来有可能会看)的结合体。如果简单的忽略其实是不对的。 为了解决这个问题,针对从隐式反馈生成排名推荐列表的一类推荐模型已获得普及。通常, 可以使用逐点、逐对以及逐列的方法优化个性化排名模型。逐点方法一次只考虑一次交互,并训练分类器或回归器来预测个人偏好。矩阵分解和AutoRec使用逐点目标进行了优化。 逐对方法为每一个用户考虑一对项目并且致力于为这对项目最优排序。通常, 逐对方法更适合于排序任务,因为预测一对的顺序会使人联想到排序。逐列方法将整列的项目近似排序, 如直接优化排名指标:Normalized Discounted Cumulative Gain ( NDCG )。然而, 列表方法比点方法或成对方法更加复杂且计算量大。 1.1 贝叶斯个性化排序 贝叶斯个性化排序(BPR)是从最大后验估计量得出的成对个性化排序损失

最小推荐系统:Neural Collaborative Filtering (NeuralCF)

和自甴很熟 提交于 2020-07-25 10:31:10
推荐系统算法中有两个根本性的思路,一是 用户和条目表征 ,二是 特征交叉 。在传统算法中, 隐语义模型 从用户和条目表征(Embedding, 或称为“嵌入”)出发,以用户表征向量与条目表征向量的乘(内积)表示用户对条目的喜好。而 因子分解机 (FM)则致力于解决特征交叉问题。在 上一篇 中的AutoRec则是首个使用深度学习从用户和条目表征的角度解决问题的方案。当然,其结构过于简单,没有应对特征交叉的能力,模型本身的非线性能力也不足。而NeuralCF [1] 是第一个深度学习下的同时处理这两个问题的模型。 NeuralCF网络可以分解为两个子网络,一个被称为Generalized Matrix Factorization (GMF, 广义矩阵分解),另一个是Multi-Layer Perceptron (MLP, 多层感知机). 这两个子网络都包含用户和条目的表征部分: embedding_user = torch . nn . Embedding ( num_embeddings = num_users , embedding_dim = latent_dim ) embedding_item = torch . nn . Embedding ( num_embeddings = num_items , embedding_dim = latent_dim ) 自然地

论文阅读

爷,独闯天下 提交于 2020-05-04 05:15:43
这是本文要讨论的论文: 背景 在基于模型的协同过滤技术(Model-Based CF)中,矩阵分解(matrix factorization, MF) 应用的最多。在 MF 中 user-item 矩阵被分解为 user 矩阵和 item 矩阵。user 和 item 都被映射到一个隐空间中,各自有一个隐向量。这个隐向量可以用来做基于近邻的推荐(计算隐向量的相似度),也可以使用 user 和 item 隐向量的内积,来预测该 user 对该 item 的评分。 user 和 item 的隐向量内积,可以用来确定 user 对 item 的评分。有了 user 对各个 item 的评分,自然可以对 item 进行排序,得出推荐。但本篇论文认为,简单地使用隐向量内积,不足以捕获到复杂的交互行为特征,即评分并不一定是隐向量之积。本文通过引入神经网络,来学习用户与物品的隐向量和评分的关系。 问题设定 本论文讨论的是隐式反馈协同过滤场景,关于显示反馈和隐式反馈,定义如下: 显式反馈:直接反应出用户的喜好的行为,比如评分。 隐性反馈:间接反应用户的喜好的行为,比如浏览、点击、搜索 隐式反馈的数据由 0 和 1 组成,1 不一定表示喜好,0 只表示用户尚未和该物品有过交互。设 $Y$ 为 user-item 矩阵,则 $y_{ui}=1$ 表示 user u 和 item i 存在交互信息,否则

GMF树形布局 3 展开/折叠时更换Node图标

不问归期 提交于 2020-04-07 12:39:49
前一篇博客实现了展开/折叠,但是如果当节点折叠时图标可以发生变化,例如变成加号,那就直观了。这篇博客解决这个问题。 具体步骤如下: 1、首先,将两个图标文件放在diagram工程下的icons\custom下,并刷新这个工程,如下图所示: 2、修改Topic节点图标的地方,在TopicNameEditPart中的getLabelIcon()方法中,需要将它修改。具体思路是:检查其父类即 TopicEditPart所对应的的模型的isExpanded成员变量,如果是false,则返回加号图像,否则,返回Topic图像。 修改 getLabelIcon()方法如下: /** * @generated NOT */ protected Image getLabelIcon() { EObject parserElement = getParserElement(); if (parserElement == null) { return null; } return this.createLabelIconImage(); } 3、在 TopicNameEditPart中添加createLabelIconImage()方法: /** * 根据父模型,创建标签图标 */ private Image createLabelIconImage() { Image labelIconImage

GMF树形布局 2 实现展开/折叠

我的未来我决定 提交于 2020-04-07 12:10:23
这一篇博客在上一篇的基础上,实现展开/折叠功能。期待的最终效果是,双击某一Node,其后面的Node与连线都隐藏;再双击时显示回来。并且折叠之后,保存关闭,下次打开时还处于折叠状态,可以正确展开。 有一个细节应当注意,如下图: 比如折叠了节点1之后再折叠节点0,之后再展开节点0的时候,节点1应当还是处于折叠状态。 具体步骤如下: 1、为了实现这个展开/折叠操作,并且方便以后实现图标的更换,可以在节点的模型文件中添加一个布尔型的变量expanded,用于标识展开状态。可以在模型文件中修改,然后重新生成Model Code以及Edit Code,具体操作可以参考 这里 的步骤1、2。注意,将 expanded的默认值设为true。 2、创建一个Command,用于实现折叠或者展开。先在diagram工程下的src目录下新建一个package,名为org.eclipse.gmf.examples.mindmap.diagram.edit.commands.custom,在其中新建一个class文件,名为ExpandOrCollapseCommand,继承自RecordingCommand。 3、ExpandOrCollapseCommand的构造函数如下,获取 public ExpandOrCollapseCommand( TransactionalEditingDomain

GMF 教程 Mindmap 3

天大地大妈咪最大 提交于 2019-12-10 18:04:47
Link Constraints 目前为止,工程运行一个Topic结点给自己连线,显然是没有意义的。接下来通过使用约束,避免这种现象。 1、打开mindmap.gmfmap,找到目前唯一的Link Mapping结点,右击,选择New Child > Link Constraints,然后右击这个Link Constraints,选择New Child > Source End Constraint,Language属性默认为ocl,设置Body属性为self <> oppositeEnd,如下图所示: 2、重新设成mindmap.gmfgen和diagram代码,运行一下,可以发现不可以给Topic结点自己连线了。 Another Connection 领域模型中的Relationship元素用来指明Topic元素之间若干可能的关系。接下来将要实现支持画出这个连线。这个例子将会更完全地说明GMF中的Link Mapping可用的属性。 Graphical Definition 3、打开mindmap.gmfgraph,右击Figure Gallery,选择New Child > Figure Descriptor,命名为DashedLineOpenArrow。然后右击新建的Figure Descriptor,选择New Child > Polyline Connection

GMF 教程 Mindmap 5

妖精的绣舞 提交于 2019-12-10 17:53:25
这一部分主要实现的是: 使用扩展的Plug-in为我们的Diagram添加一个自定义动作 Creating a Customization Plug-in 尽管可以给生成的代码添加备注@generated NOT来避免下次重新生成代码时覆盖我们修改的代码,除此之外,还可以使用一个新的Plug-in工程来将自定制(扩展)与生成的工程分离。 1、创建一个新的Plug-in工程,命名为org.eclipse.gmf.examples.mindmap.diagram.custom,使用默认的设置,不要Activator类,也不用向导提供的任何模板。 Custom Actions 目前为止创建一个新的Subtopic的方法比较麻烦,需要频繁点击工具。现在希望给Topic结点添加右击菜单项Create Subtopic来实现这个操作,直接创建Subtopic结点,包括连线。 首先,我们要知道,org.eclipse.ui.bindings可以用来将Ctrl+I组合键(或者其他组合键)分配给我们的Action。可以通过修改diagram.custom工程的plugin.xml文件来实现。不过刚创建的新工程没有这个文件,不过没关系。 2、打开diagram.custom工程的MAINIFEST.MF,选择标签Extension,单击Add,添加org.eclipse.ui.bindings扩展点:

GMF之Shapes实例Part7:过滤右击菜单

你。 提交于 2019-12-10 17:53:15
前边有至少两篇文章讲了添加右击菜单,一种是算是纯粹的用代码添加,另外一种是借助扩展点。借助扩展点的方法虽然比较简单,但是不够灵活,比如你想让某一菜单项在满足一定条件时才显示,或者想构造动态的菜单,那么就必须使用代码添加的方法了,并在构造菜单时做一个判断,满足条件才把这个菜单加上去。 现在看看我们的菜单,会发现总是有一些系统默认项,看上去不大清爽,如下图: 其实到现在只有两个菜单项是我们想要的:Delete From Model以及Change Image,其他的显示在那显得很多余,也很不美观。 GMF中菜单项的管理是在DiagramEditorContextMenuProvider类,我们在这个类中添加以下代码: // 过滤不需要的上下文菜单 public IContributionItem[] getItems() { IContributionItem[] items = super.getItems(); filterSystemPopMenu(items); return items; } 这个方法先获得所有的右击菜单项,然后使用filterSystemPopMenu(items);方法过滤菜单之后返回过滤之后的菜单项。 filterSystemPopMenu(items);代码如下: // 过滤菜单项 void filterSystemPopMenu