【推荐系统】推荐系统里,你是怎么Embedding的?
作者:十方
平时大家是如何做推荐系统的Embedding的呢?是不是这样:
layers.Embedding(vocab_size, dim_size, dtype='float32')
如果是很高维度的类别特征呢?比如电商场景下的itemid,可以有上亿,然后可能会这样:
hash_itemid = hash(itemid, vocab_size)
layers.Embedding(vocab_size, dim_size, dtype='float32')(hash_itemid)
就这样吗?效果好吗?不知道,反正跑起来了,看着AUC也不错。
《Learning to Embed Categorical Features without Embeeding Tables for Recommendation》这篇论文告诉我们,别再瞎操作了,用Deep Hash Embedding(DHE)就对了,AUC也有保障。
看下之前embedding和DHE的大致对比:
对比下左右两边很容易看出两者Embedding的区别,左边就是传统的embedding,先one-hot再lookup,这里vocab有2百万,32维度,对于一个ID会映射成32维.右边就是用DHE的方式,先通过Identifier Vector映射成1024维度的向量,这个向量并不会接受梯度,然后这个向量会通过多个mlp映射成32维度.你能相信DHE只用了传统方式1/4的参数却达到了相同的AUC吗.
为什么要用DHE
其实在背景中已经说了一部分理由了,主要总结为以下3点:
字典大小过大:推荐系统中像是videoid,itemid,advertiserid都很大,不像NLP的bert,字典只有30K(因为bert用了word-piece),我们无法用NLP的方法对推荐领域的ID特征进行降维,也没办法直接Lookup一张巨大的词表.
动态输入:这里可能很多炼丹师没有切身体会,十方作为广告领域的炼丹师深有体会,bert可以一直用一张词表,因为word-piece后的word segment基本不会变化.但是像广告,广告主每天都在创建广告,id每天都在更新,与此同时很多广告id也被废弃(广告主停投).
数据分布不均:类别特征也总是分布不均的,长尾的特征对embedding极其不友好.
总结下来用DHE就对了.
Deep Hash Embedding
先看下什么是好的encoding?
唯一性(U):好的encoding对每一个不同的特征编码都要是唯一的.如果这个保证不了,后续的decoding就没办法区分不同的特征了,那模型效果也大打折扣.
相似性(E-S):有唯一性并不足够,相似特征编码后也要足够相似.比如二进制编码,8(1000)和9(1001)就比8(1000)和7(0111)看着相似,这就会给模型带来困扰,误导后面的decoding过程.
高维性(H-D):这个很容易理解,越高维区分度越高,极端情况就是one-hot了,区分度最强.
高熵性(H-D):众所周知,熵越高信息量越高,我们肯定不希望有哪一位编码是冗余的.
了解了什么是好的encoding,我们看看哪些encoding满足这些条件:
好吧,说来说去只有DHE满足了好的encoding的所有条件,所以DHE是如何编码的呢?
DHE先用k个全域哈希函数,把id映射成k维,每一维度都是1~m,这时候相当于把id映射成了k维度的INT,但是这样是不能够喂给Decoding(DNN)的,这里有两个方案:
1、Uniform Distribution:因为每一维都可以看作1~m均匀分布,所以直接把这k维度INT normalize了.
2、Gaussian Distribution:先用第一种方式,再用Box-Muller处理,把均匀分布转变为正太分布.
论文说实践证明两种效果都很好,所以大家用第一种,简单快捷.这里需要注意,k需要很大效果才好,论文里的k用了1024.
至于decoding(就是个DNN)就不过多介绍了,这里用了h层网络.需要注意的是,论文提到这种encoding-decoding方式很容易造成欠拟合,论文中的解决方案是把激活函数从ReLU换成了MISH(如下图),同时这里DNN增加dropout,正则化也不会有什么增益.
实验效果也不赘述了,可以参考原文,在AUC各项指标中,DHE都优于各种hash方法.
参考文献
1、Learning to Embed Categorical Features without Embeeding Tables for Recommendation
https://arxiv.org/pdf/2010.10784.pdf
往期精彩回顾适合初学者入门人工智能的路线及资料下载机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载机器学习的数学基础专辑温州大学《机器学习课程》视频
本站qq群851320808,加入微信群请扫码:
【推荐系统】推荐系统里,你是怎么Embedding的?相关推荐
- 机器学习/推荐系统/推荐系统算法工程师面试指导
面试指导 文章目录 面试指导 1.机器学习/推荐系统/推荐系统算法工程师面试技能图 2.1 推荐系统算法相关面试笔试题 2.2 机器学习相关问题 重点: 2.3 框架方面 2.4 业务流程 3.简历指 ...
- 推荐系统局部敏感哈希解决Embedding最近邻搜索问题
文章目录 快速Embedding最近邻搜索问题 聚类.索引搜索最近邻 聚类搜索最近邻 索引搜索最近邻 局部敏感哈希及多桶策略 局部敏感哈希的基本原理 局部敏感哈希的多桶策略 局部敏感哈希代码实现 快速 ...
- 推荐系统如何用spark训练得到Embedding向量
文章目录 Item2Vec 序列数据的处理 模型训练 随机游走的Graph Embedding算法 数据准备 随机游走采样过程 Item2Vec 序列数据的处理 Item2Vec是要处理的是类似文本句 ...
- 自己动手写一个推荐系统,推荐系统小结,推荐系统:总体介绍、推荐算法、性能比较, 漫谈“推荐系统”, 浅谈矩阵分解在推荐系统中的应用...
自己动手写一个推荐系统 废话: 最近朋友在学习推荐系统相关,说是实现完整的推荐系统,于是我们三不之一会有一些讨论和推导,想想索性整理出来. 在文中主要以工程中做推荐系统的流程着手,穿插一些经验之谈,并 ...
- [推荐系统]推荐系统实践Reference
这只是一本197页的书 我想你未必过瘾 但作者附上了诸多好资料 无论是paper, blog文章,wikipedia词条,数据集还是开源项目等 你可以选择拥有 附上我收集 ...
- 应用在大规模推荐系统,Facebook提出组合embedding方法 | KDD 2020
来源 | 深度传送门(ID: deep_deliver) Facebook团队考虑embedding的存储瓶颈,提出了一种新颖的方法,通过利用类别集合的互补分区为每个类别生成唯一的embedding向 ...
- Embedding技术在推荐系统中的应用
编辑:子墨为客 来源:<深度学习推荐系统>笔记,并进行补充和说明 1.Embedding 是什么 Embedding是用一个低维稠密的向量来"表示"一个对象(这里的对象 ...
- 深度学习推荐系统中各类流行的Embedding方法(下)
我的个人微信公众号: Microstrong 微信公众号ID: MicrostrongAI 微信公众号介绍: Microstrong(小强)同学主要研究机器学习.深度学习.推荐系统.自然语言处理.计算 ...
- 张俊林:推荐系统排序环节特征 Embedding 建模
每天给你送来NLP技术干货! 分享嘉宾:张俊林博士 新浪微博 编辑整理:刘一全 出品平台:DataFunTalk 导读:随着深度学习在推荐系统应用的发展,特征 Embedding 建模的重要性已经成为 ...
- 盘一盘推荐系统里值得一读的那些论文
工业中常用的推荐算法其实并不像论文中那么复杂,大多数的时候是稳定的模型.充分的特征工程和各种精妙的业务策略等.当然,如果你想,也可以做的很复杂....大部分时间读论文是在拓展思路并结合自身面临的问题去 ...
最新文章
- 从Preact了解一个类React的框架是怎么实现的(一): 元素创建
- html在百度地图显示位置,在百度地图显示当前位置.html
- 玩转Win32开发(2):完整的开发流程
- (转)Bootstrap 之 Metronic 模板的学习之路 - (2)源码分析之 head 部分
- python学习网站-python学习网站整理
- 基于XML操作辅助类
- SqlServer数据库正在还原的解决办法
- android sftp 编辑器,VSCode编辑器插件之SFTP工具
- 自己给打印机怎么加粉墨,联想兄弟打印机加粉步骤
- loj10099 矿场搭建
- 飞入菜花无处寻的上一句是什么,飞入菜花无处寻是什么意思
- python爬虫影评_Python爬虫(二十)_动态爬取影评信息
- 【Azure 应用服务】NodeJS Express + MSAL 应用实现AAD集成登录并部署在App Service Linux环境中的实现步骤
- 在会计研究中使用Python进行文本分析
- Kotlin学习笔记(八)by的作用,属性委托和类的委托,和Lazy的关系
- Aspose.Words for .NET使用教程(十二):在Word文档中使用图表轴
- SAP MM ME56不能为审批后的PR分配货源? 2
- 「UOJ224」「NOI2016」旷野大计算
- 动态规划—0-1背包
- c语言适用于大型的 复杂的软件系统开发,c语言是什么
热门文章
- 谈谈游戏开发中用到设计模式
- MySQL存储引擎比较
- char、Varchar、nvarchar、ntext (转)
- javascript对数值增加千分点/删除千分点
- 诺基亚力邀App开发员加入Ovi以对抗苹果
- Mysql数据字典导出
- redis/分布式文件存储系统/数据库 存储session,解决负载均衡集群中session不一致问题...
- java中日期类型与字符串相互转换
- 一文攻破结构体-C语言
- Android(一)——Eclipse+ADT 和 Android Studio 开发环境搭建及介绍