本文介绍了一种新的用户偏好表示方法PreHash ,同时考虑到了大规模数据和冷启动用户。该方法可以在很多推荐算法中替代其用户embedding矩阵。若干SOTA算法上的实验结果显示该算法不仅取得了更好的效果,还减少了模型的参数。

作者:胖鱼,北京交大研究生在读,方向为机器学习,推荐系统。

「0 摘要:」

论文标题:Beyond User Embedding Matrix: Learning to Hash for Modeling Large-Scale Users in Recommendation(后台回复【prehash】可下载论文)

处理 「大规模数据」 和 「冷启动用户」是推荐系统的两大挑战。在真实场景(千万级别用户)下,很难利用用户的embedding矩阵储存个性化的用户偏好。许多研究者关注具有丰富历史信息的用户,然而,在真实的系统里,大多数用户都只有少量交互信息。在本文的工作中,作者提出了一种新的「用户偏好表示方法PreHash」 ,同时考虑到了大规模数据和冷启动用户。在该方法中,根据用户的 「历史交互信息」 生成了一系列 「篮子」。具有相似偏好的用户自动被分在用一个篮子。之后将会学习每一个篮子的表示。在设计篮子时,只有有限的参数被储存,这样大大节省了内存。更重要的是,当用户进行新的交互行为后,他的篮子和表示会相应的更新,这样可以更有效得理解和建模用户。该算法还十分灵活,「可以在很多推荐算法中替代其用户embedding矩阵」。因此,我们在很多SOTA算法上进行了实验。实验结果展示该算法不仅取得了更好的效果,还减少了模型的参数。

「1 Introduction:」

个性化的用户偏好向量在推荐系统里非常重要。先前的工作为每个用户生成其偏好特征向量,并把他们当作特征矩阵储存。矩阵分解方法通常使用一个特定向量表示用户。一些深度模型也使用embedding层将用户映射为偏好向量。

然而,这些方法 「很难应用于实际的大规模数据」 上。原因之一是,储存这样一个用户 「embedding矩阵」很困难(内存和计算时间)。同时,其无法考虑到冷启动用户。最后,这些算法无法做到 「增量学习」 ,即在更新用户特征向量时只能重新训练模型。

构建用户偏好特征向量的简单方法就是将与之交互过的物品向量求和。然而对于冷启动用户,这样的方法不适用。

本文提出的PreHash方法是一种灵活的用户偏好表示模块,可以 「替代很多推荐方法中的用户embedding矩阵」 。PreHash有两个部分,「历史部分和hash部分」 。历史部分使用一个注意力网络提取 「历史偏好向量」 。在hash部分,有 「许多篮子」,每一个篮子包含偏好相似的用户。Hash部分最重要的功能是 「对于每一个用户」 ,他都会找到一些与其 「行为类似的频繁用户」 。

「3 用户偏好哈希:」

「3.1核心思想」

学习用户偏好向量通过两种方式:用户近期交互过的物品,与当前用户有相似偏好的其他用户。因此使用一个history part从用户的交互历史中学到用户的历史偏好。为了找到与当前用户偏好类似的用户,这里设计了一个hash part建模用户的hash偏好向量。最后用注意力网络将两个part混合。

biasedMF,相对于普通的矩阵分解加上了biases项。PreHash将其用户表示部分u替换。

「3.2历史部分」

这一部分从用户 「以往的交互信息中捕获了偏好」 。考虑到每当对于一个新的物品,有一些物品能显著表达用户偏好,而一些物品则不行。所以这里采取了「注意力网络对物品向量加权」 。v是目标物品的向量。权重可以看做 「当前物品和历史物品的关联程度」 。根号l是对交互次数做标准化。

关于注意力网络的解释:是否购买iphone,与用户以前购买的book信息无关。

「3.3哈希部分」

仅仅利用 「历史向量不足以捕获用户偏好」 ,因为很多 「新用户没有足够的交互信息」 。这里使用了一个哈希模块, 「根据与目标用户的相似性」(根据历史物品交互),找到 「一些频繁用户来表示目标用户」 。哈希部分的功能就是用有限的空间储存和计算偏好。

在哈希部分,偏好类似的用户使用共同的桶来储存偏好。「当有新的交互后,这一部分可以动态更新。」

「3.3.1 哈希桶」

用来储存类似用户的偏好。「首先将每个桶a与一个频繁用户u绑定」 。将其称作“锚用户”。他们最终的哈希向量直接来源于a:

在这里的哈希函数可以看做 「输入用户历史向量,输出其哈希向量」 。

这里的 「频繁用户可以被预先定义」 。本文采取简单的策略,直接 「选取交互行为最多的用户」 。

对于其余用户,PreHash使用层级哈希找到最关联的篮子。然后将篮子向量加权求和得到当前用户的哈希向量。

「3.3.2层级哈希」

一个全连接树,历史向量u作为输入,每一个节点有一个决策向量n,从父节点继承权重。第i层第j个节点。假定其有c个子节点,其权重分配:

目的也是为了获得用户和桶的关联权重。

为什么采用哈希?提高计算效率。

「3.3.3Top-k加权求和」

为了得到用户哈希偏好,这里不对所有的篮子加权求和,只考虑 「关联最大的k个篮子」

「3.4模型输出」

为了生成最终的用户偏好向量,PreHash使用一个注意力网络。将 「两个向量变成最终的用户表示」 。类似加权求和的效果。

「4 实验设置」

「数据集:」 亚马逊电子商务数据集的四个子集,以及RecSys Challenge 2017数据集。

「Baseline:」 矩阵分解的经典方法,以及深度的经典方法Wide&Deep等

「训练:」 将任务视为top-n推荐。使用 「pair-wise训练策略」 (BPR那篇文章)训练所有的模型。对每一个正交互样本,随机采样其负样本。

是相应的预测结果。损失函数鼓励对正样本的预测高于负样本。

「5 实验结果分析」

实验部分写的很清楚,首先提出了四个需要回答的问题,之后逐一验证。

「5.1有效性」

首先,两种常见的矩阵分解方法取得了最差的效果,这是由于数据的稀疏性。FISM远远好于其他方法。他没有用户偏好矩阵,而是直接根据物品相似性进行推荐。结果说明了「矩阵分解方法在大型稀疏数据集上效果很差」,必须采取新的方法来考虑用户偏好。FISM是基于物品相似度的方法,也表明了基于用户交互项进行用户表示的方法比使用user embedding矩阵的方法好。这也验证了最近发现的ItemKNN要比很多SOTA网络方法好。

为什么加上PreHash之后标准的矩阵分解方法效果变好了很多?原因在于在进行目 「标物品推荐」 的时候,获取了 「每名用户的历史信息」。对于每名目标用户,hash部分帮助找到一些相关的篮子来储存类似用户的偏好。这些 「历史信息对为每位用户的推荐有帮助」,特别是冷启动用户。除此以外的优点:省内存。

「5.2高效性」

根据结果列表,可以看出PreHash的方法相比原始方法大大 「节省了参数」 。

「5.3灵活性」

验证是否可以在深度模型中使用:

深度模型好的原因是其 「利用到了review信息」 。三个深度模型的参数相同原因是相比于用户物品embedding矩阵而言,其网络参数数量可忽略。

「5.4在冷启动用户上」

测试集上的用户被划分为了三个不同类别。以往少于三次交互的成为冷启动用户

实验结果表明,效果在三个部分都有提升。PreHash好的原因是在hash部分 「显式得利用到了同组频繁用户」 (warm user)的偏好。

「6.1剥离实验」

「去除hash part,只包含history part的效果已经比较好」 。因为在矩阵过于稀疏时,矩阵分解中的潜向量很难捕捉到用户历史和偏好。但是「history part可以捕捉到」 。

与一些聚类算法相对比(用聚类id用户)。展示了PreHash在建模相似用户偏好的有效性。

「6.2参数敏感度」

篮子的个数增加时,性能是先减小在增加,这说明可能当篮子数量小时反而会引起组内混乱。

「6.3案例分析」

为了观察PreHash在篮子中学到了什么。检索了每个篮子里出现次数最多物品。可以观察到,在层级hash后,两个篮子相关但是彼此不同。两个篮子分别是游戏软件和硬件。证明PreHash中算法的有效性。

「对我们的启发:」

  1. 用户建模部分一定要关注 「冷启动用户」 ,可以将其与频繁用户关联。

  2. 在融合两方面的特征时,可以使用一些技巧代替直接concat。

超越用户embedding矩阵:用哈希对大型用户建模相关推荐

  1. 【论文解读】SIGIR 2020 | 超越用户embedding矩阵:用哈希对大型用户建模

    " 本文介绍了一种新的用户偏好表示方法PreHash ,同时考虑到了大规模数据和冷启动用户.该方法可以在很多推荐算法中替代其用户embedding矩阵.若干SOTA算法上的实验结果显示该算法 ...

  2. Java黑皮书课后题第8章:***8.35(最大块)给定一个元素为0或者1的方阵,编写程序,找到一个元素都为1的最大的子方阵。程序提示用户输入矩阵的行数。然后显示最大的子方阵的第一个元素、行数

    ***8.35(最大块)给定一个元素为0或者1的方阵,编写程序,找到一个元素都为1的最大的子方阵.程序提示用户输入矩阵的行数.然后显示最大的子方阵的第一个元素.行数 题目 题目描述与运行示例 破题 代 ...

  3. Java黑皮书课后题第8章:**8.14(探讨矩阵)编写程序,提示用户输入一个方阵的长度,随机地在矩阵中填入0和1,打印这个矩阵,然后找出整行、整列或者对角线都是1或0的行、列和对角线

    **8.14(探讨矩阵)编写程序,提示用户输入一个方阵的长度,随机地在矩阵中填入0和1,打印这个矩阵,然后找出整行.整列或者对角线都是1或0的行.列和对角线 题目 题目描述与运行示例 破题 代码 题目 ...

  4. 基于项目的协同过滤推荐算法单机版代码实现(包含输出电影-用户评分矩阵模型、项目相似度、推荐结果、平均绝对误差MAE)

    基于项目的协同过滤推荐算法单机版代码实现(包含输出电影-用户评分矩阵模型.项目相似度.推荐结果.平均绝对误差MAE) 一.开发工具及使用技术 MyEclipse10.jdk1.7.movielens数 ...

  5. php中用户验证的方式,在php中进行用户身份验证的最佳方式是什么?

    使用 Sessions.将会话ID存储在cookie中,并将用户的状态存储在服务器端(loggedIn,userId,IP). 澄清您需要存储在会话数组中: > loggedIn:一个关于用户是 ...

  6. 什么样的用户标签系统,可以深入业务构建用户价值体系?

    用户画像的精准勾勒,能够帮助企业与消费者产生共情,设身处地地思考用户需求.一套科学的标签体系,能够赋予用户画像以生气,并在用户获取成本飙涨的市场环境下,以最低的成本最大限度地挖掘客户生命周期的价值.随 ...

  7. 用户配置 计算机配置文件,使用 CopyProfile 自定义默认用户配置文件

    使用 CopyProfile 自定义默认用户配置文件 01/17/2020 本文内容 Windows 使用默认用户配置文件作为模板,将配置文件分配给每个新用户. 通过自定义默认用户配置文件,可以配置在 ...

  8. 用户画像(一)利用mysql进行用户画像

    用户画像建模 一.什么是用户画像 用户画像.即用户标签化,通过收集用户的社会属性.消费习惯.偏好特征等各个维度的数据,对用户或者产品特征属性进行刻画,并对这些特征进行分析.统计以挖掘潜在的信息,从而抽 ...

  9. mysql管理用户数据库_MySQL 数据库管理(一)(用户与受权)

    前言 在企业信息化的过程当中,数据库中库和表都会大量存在,须要分配给管理者核实的权限进行操做 合理地分配权限,可使数据库管理井井有理,各个管理者只须要关注本身负责的内容,也可避免误操做对系统形成损失 ...

最新文章

  1. 如何在框架外部自定义C++ OP
  2. 关于汽油清洁剂,到底该不该加?
  3. Python高级运维开发2016年7月第14期隆重开课
  4. python exit 0_python中 os._exit() 和 sys.exit(), exit(0)的用法和区别
  5. 优秀技术人的管理陷阱
  6. CCIE-LAB-第十六篇-NAT+OSPF下发默认路由+校验配置(模块一结束篇章)
  7. 热式气体质量流量计检定规程_新品发布:西尼尔ST51/54热式质量流量计
  8. python转exe遇到的坑及解决方案
  9. javac编译带有package的java文件
  10. android wifi已停用,为什么手机连接wifi时总显示已停用
  11. windows配置本地的虚拟主机
  12. ktv系统服务器,ktv服务器主机系统
  13. MODIS数据下载,HEG批量拼接处理,arcmap批量掩膜提取,python栅格计算
  14. Pikachu靶场暴力破解关卡3
  15. Anchor Free系列模型11
  16. 蓝桥 星期一 JAVA
  17. 金海佳学C++primer 练习9.4/9.5
  18. 具体应如何办理股票开户?
  19. MindManager2021 Win/Mac v2020.19.思维导图软件安装下载激活教程
  20. Oracle项目管理系统之赢得值管理

热门文章

  1. 百度api语音识别一直“无内容”_PHP开发语音识别功能
  2. mysql 关联查询_响应时间长?MySQL查询优化教程来了!
  3. java入门应该学什么_初学Java应该掌握哪些基础知识?
  4. 优先级队列 c语言,使用最小堆使用优先级队列(c语言版本)
  5. 三层聚合实验的注意事项
  6. mysql 只返回第一条_mybatis 关联查询时,从表只返回第一条记录解决办法
  7. 没有运行 spring_Spring事务的传播行为案例分析
  8. linux nginx 安装_艾编程基础教程:Linux 环境下 Nginx 安装
  9. poi报空指针_POI 导出文件 报空指针异常 --Docker 中
  10. oracle中正则表达式规则,Oracle中的正则表达式(及函数)详解