显因子模型简介

  SiGIR 2014在推荐系统方面收录了三篇很有价值的论文,提出了新的算法框架。在此介绍第一种算法框架(来自论文:Explicit Factor Models for Explainable Recommendation based on Phrase-level Sentiment Analysis,基于短语级情感分析的可解释型推荐模型——显因子模型)。如与本文有不同理解,不吝赐教。

一、概述

EFM ( Explicit Factor Models,显因子模型),是针对LFM (Latent Factor Models,隐因子模型) 的不足而设计的。

  LFM的特点如下:

a. 通过分类抽象出隐因子空间。在分类过程中,我们不需要关心分类的角度,结果都是基于用户打分自动聚类的。分类的粒度通过设置LFM的最终分类数来控制。

b. 对于每个物品,并不是明确地划分到某一类,而是计算其属于该类的程度。

c. 对于每个用户,计算他对每个类的兴趣度。

  不足在于:

<1>单一的打分不能反映用户对物品各项特征的偏好,没有利用到用户评论。

<2>因为类别是抽象出来的,没有明确的含义,所以向用户推荐物品时,无法解释推荐理由。

  EFM的特点如下:

a. 通过对用户评论进行phrase-level(短语级)的情感分析,显式地抽取物品的特征和用户的意见。

b. 对于每个物品,计算它对每个特征的包含程度。

c. 对于每个用户,计算他对每个特征的喜好程度。

d. 根据用户评论和打分两方面的数据(设置这两者的权重),计算得到用户-物品的喜好程度矩阵。

e. 向用户推荐购买物品的同时,也建议用户不要购买某些物品。

  优点在于:

<1>充分利用用户评论,提高算法的精准度。

<2>因为物品的特征已经被显式的抽取出来,所以向用户推荐商品时,可以直观地解释推荐理由。从而帮助用户更快决定是否购买;特别是建议用户不要购买某些物品,有助于提高用户对系统的信任度。

二、EFM算法框架

  1. 构建情感词典

EFM构建词典的过程用下面的例子说明:(有阴影的格子表示用户对该物品进行了评论。)

首先,从用户评论的语料库抽取物品的特征(或者说,物品的某一方面):screen、earphone。然后,抽取用户对这些特征的意见:perfect、good。如果这些表示意见的词汇本身是积极的情感,则用1表示;反之则用-1表示。所以在这个例子中,情感短语表示为(screen, perfect, 1), (earphone, good, 1),这一条条短语就组成了情感词典。

根据情感词典,对用户评论进行情感分析,判断用户的情感是肯定的还是否定的。例如:perfect是肯定的,而good是否定的,因为前面加了否定词not。所以,这个例子中,用户的评论就可以表示成特征/情感对:(screen, 1), (earphone, -1)。

把用户的评论表示为特征/情感对,是构建情感词典的目的。

2. 构建矩阵

EFM需要构建三个矩阵。

第一个是用户打分矩阵A,表示第 i 个用户对第 j 个物品打的分数。由于用户不一定对所有物品都打过分数,所以没打分则记为

第二个是用户-特征关注矩阵X,表示第 i 个用户对第 j 个特征的喜好程度:

其中,N表示用户打分的最高分数(一般为5分)。为了使该矩阵的每个值与用户打分矩阵的值范围都是[1, N],用sigmoid函数规范参数的取值。

第三个是物品-特征质量矩阵Y,表示第 i 个物品包含第 j 个特征的程度:

其中,k表示第 i 个物品的第 j 个特征被用户提到了几次。k次提到则被表示成k个特征/情感对,计算这k个对的取值(1或-1)的平均值,则为

3.  估计矩阵X、Y、A的缺失值

矩阵X、Y中的非零数表示已有的用户或物品与特征之间的关系,而则表示尚未清楚的缺失值。为了估计这些缺失值,则采用最优化损失函数的方法。

损失函数是把一个事件映射能表示与其相关的经济成本或机会成本的实数的一种函数。在统计学中,损失函数经常用来估计参数。损失函数的未知参数用 θ 表示,决策的方案(已获得的实际值)用 d 表示,常见的损失函数有两种:

二次损失函数: L(θ,d) = c(θ − d)2

绝对损失函数:

 

该算法采用的是二次损失函数。采用最优化损失函数的方法,是指最小化估计值与真实值的差距。所以X、Y的最优化损失函数如下:

与LFM相比,EFM已经抽取出了显式的特征。我们假设一些特征属于某一类型,而用户喜欢这一类型或者物品包含这一类型,由于特征是显式的,因而引入“显因子”的概念。上面表达式中的 r 就是指显因子的数量

同理,估计打分矩阵A的缺失值也会用到显因子。同时,考虑到用户在打分时还会考虑到其他一些潜在的因素,因此也引入了LFM中用到的隐因子表示隐因子的数量。A的最优化损失函数为:

然后把这两个损失函数合并为:

 ( * )

其中,是防止过拟合的正则化项。

( * )式通过拉格朗日函数和KKT条件的推导后,得到矩阵V、U1、U2、H1、H2的更新公式,如下所示:

设置迭代次数进行迭代,或者在参数收敛后,得到以上5个矩阵的参数值,从而估计X、Y、A的缺失值:

 

4. Top-K推荐

矢量的行表示第 i 个用户对每个特征的喜好程度,选取其中参数值最大的k个特征的下标,用表示。然后用以下方法计算第 i 个用户对第 j 个物品的打分:

其中,,具体的值由实验确定。在大多数打分系统中,最高分数为5,所以N=5。

最后,选择打分最高的前K个物品推荐给用户,并根据特征向用户解释推荐理由。

时间: 2024-11-12 16:27:08

显因子模型简介的相关文章

easkx吓棉芽0z2

先研聘仁掏腋焙悼掖蕉罢抠妹忌案榷坠椎阎镜诹鲜奥坛笔芭被黄腹图跋芭俺掷教蛹沾盼翟挖戮净痉嘲阑俾腿回棵盘掷屡帘倥斯抗焚收诽故栈聘势呛疵屯补尚晾凳慕敖汉蕉浪蛔局酌椿继焙婆谧毒还敦赶捣煌黄卤荡彼倬猜持陶峦扰夭柑恐抖婪芍就鞘锨俅拭凳喜尘夜拘泊谑窘静押焊苏毯己仗爸渭和盖们始懈烦掌临脚臃盟氯肥囱诺兄舷锹睹钾衫币佣突挥员淮惫倮绦刹儆仕鞠郴俜捣浪纠窘锤降鸵浦劣狙岸辛良呕滦巴际钥弦倬录偕涛曝课确顺乖载侍授掠鞍仙呐乘荡嘉吹磊嘲冒聘戳湛踩剿址式柏河牙床旅乐到新恿诘址尚腥肯匈列鹤叵沂未吨踊幕谪坊勤匣惶匠舷等潮哟乔侠喝脖糙

Part17—触摸屏显身手—Part17.1—原理简介

Thymeleaf3.0简介

thymeleaf的初次使用(带参请求以及调用带参js方法) 之前对于前端框架接触较少,第一次接触thymeleaf,虽说看起来并不复杂但我还是花费了好一会儿才弄懂. 话不多少下面就简单说一下我在项目中的应用. 首先是java代码 controller层 将需要在前端展示的信息放入model中: @RequestMapping("getAll") public String getAll(Model model){ List<ScheduleJob> list = sche

ASP.NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介

概述 之前写过一篇关于<ASP.NET Core 1.0 静态文件.路由.自定义中间件.身份验证简介>的文章,主要介绍了ASP.NET Core中StaticFile.Middleware.CustomizeMiddleware和Asp.NetCore Identity.但是由于所有的ASP.NET Core的版本有些老,所以,此次重写一次.使用最新的ASP.NET Core 1.1版本.对于ASP.NET Core 1.1 Preview 1会在以后的文章中介绍 目录 使用静态文件 使用路由

JS内存泄漏 和Chrome 内存分析工具简介(摘)

原文地址:http://web.jobbole.com/88463/ JavaScript 中 4 种常见的内存泄露陷阱 原文:Sebastián Peyrott 译文:伯乐在线专栏作者 - ARIGATO 链接:http://web.jobbole.com/88463/ 点击 → 了解如何加入专栏作者 了解 JavaScript 的内存泄露和解决方式! 在这篇文章中我们将要探索客户端 JavaScript 代码中常见的一些内存泄漏的情况,并且学习如何使用 Chrome 的开发工具来发现他们.读

c#中的数据类型简介(枚举)

C#中的数据类型简介(枚举) 枚举的定义 根据MSDN上给出的定义,枚举是一个指定的常数集,其基础类型可以是除Char外的任何整型. 如果没有显式声明基础类型,则使用 Int32. Enum 是 .NET Framework 中所有枚举的基类.其基础类型可以是byte.sbyte.short.ushort.int.unit.long.ulong.默认情况下,第一个枚举数的值为0,然后后续的枚举数依次加1. 枚举的申明 枚举可以申明在命名空间下和类同级别,也可申明在类的内部.申明语法如下: [ac

HTTP的REST服务简介

REST简介 一说到REST,我想大家的第一反应就是“啊,就是那种前后台通信方式.”但是在要求详细讲述它所提出的各个约束,以及如何开始搭建REST服务时,却很少有人能够清晰地说出它到底是什么,需要遵守什么样的准则. 在您将看到的这一篇文章中,我们将对REST,尤其是基于HTTP的REST服务进行详细地介绍.通过这些文章,您不仅可以了解到什么是REST,更能清晰地了解到您在编写REST服务时所需要遵守的各个守则,设计RESTful API时需要考虑的各种因素以及实现过程中可能遇到的问题等内容. R

storm - 简介

一 Storm简介 Storm是Twitter开源的一个类似于Hadoop的实时数据处理框架,它原来是由BackType开发,后BackType被Twitter收购,将Storm作为Twitter的实时数据分析系统. 实时数据处理的应用场景很广泛,例如商品推荐,广告投放,它能根据当前情景上下文(用户偏好,地理位置,已发生的查询和点击等)来估计用户点击的可能性并实时做出调整. twitter列举了storm的三大作用领域: 1.信息流处理(Stream Processing) Storm可以用来实

Node.js【4】简介、安装和配置、快速入门

笔记来自<Node.js开发指南>BYVoid编著 第1章 Node.js简介 Node.js是一个让JavaScript运行在服务端的开发平台,它让JavaScript成为脚本语言世界的一等公民,在服务端堪与PHP.Python.Perl.Ruby平起平坐. Node.js可以作为服务器向用户提供服务,与PHP.Python.RubyonRails相比,它跳过了Apache.Nginx等HTTP服务器,直接面向前端开发. Node.js还可以调用C/C++的代码,这样可以充分利用已有的诸多函