平时大家是如何做推荐系统的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. arxiv.org/pdf/2010.1078

更多干货,请关注炼丹笔记

推荐系统里,你是怎么Embedding的?相关推荐

  1. 深度学习推荐系统中各类流行的Embedding方法(下)

    我的个人微信公众号: Microstrong 微信公众号ID: MicrostrongAI 微信公众号介绍: Microstrong(小强)同学主要研究机器学习.深度学习.推荐系统.自然语言处理.计算 ...

  2. 推荐系统里的那些坑儿

    公众号 「炼丹笔记」 写在前面的话 大家好鸭,我是时晴,跟着师傅学习推荐算法炼丹有一段时间了,过程中遇到了很多奇奇怪怪的问题.我想很多和我一样初入推荐领域的同学,都多多少少有跟我同样的经历和体会.不管 ...

  3. 深度学习推荐系统中各类流行的Embedding方法

    Embedding技术概览: 对其它Embedding技术不熟悉,可以看我的上一篇文章:深度学习推荐系统中各类流行的Embedding方法(上) Graph Embedding简介 Word2Vec和 ...

  4. 特征工程——推荐系统里的特征工程

    原文:推荐系统里的特征工程 个性化推荐系统 Personalized recommender system 比其他的机器学习方法更依赖特征工程,所以我拿它来当作问题的背景,结合我之前做过的一个推荐系统 ...

  5. 【推荐系统】推荐系统里,你是怎么Embedding的?

    作者:十方 平时大家是如何做推荐系统的Embedding的呢?是不是这样: layers.Embedding(vocab_size, dim_size, dtype='float32') 如果是很高维 ...

  6. 应用在大规模推荐系统,Facebook提出组合embedding方法 | KDD 2020

    来源 | 深度传送门(ID: deep_deliver) Facebook团队考虑embedding的存储瓶颈,提出了一种新颖的方法,通过利用类别集合的互补分区为每个类别生成唯一的embedding向 ...

  7. 推荐系统里,可以用蒸馏吗?

    无论是商品推荐,还是广告推荐,都大致可以分为召回,预排序(粗排),精排等阶段,如上篇<淘宝搜索中基于embedding的召回>的图所示: 召回最重要的就是要快,高召回率,对准确率可以不必要 ...

  8. 盘一盘推荐系统里值得一读的那些论文

    工业中常用的推荐算法其实并不像论文中那么复杂,大多数的时候是稳定的模型.充分的特征工程和各种精妙的业务策略等.当然,如果你想,也可以做的很复杂....大部分时间读论文是在拓展思路并结合自身面临的问题去 ...

  9. 《深度学习推荐系统》学习笔记(5)——Embedding(论文)

    Embedding在推荐系统中的应用 文章目录 Embedding在推荐系统中的应用 Word2vec (2013, Google) Item2vec (2006, 微软) DeepWalk (201 ...

最新文章

  1. GPTEE中的Storage API的使用
  2. hdu 2586(LCA + 节点间距离)
  3. 修正 010 Editor 模板文件 MachO.bt 的错误
  4. java restful接口测试_详解SpringBoot restful api的单元测试
  5. MySQL5.7 安装(Redhat)
  6. java 反射机制及其应用
  7. 程序员面试金典——7.2碰撞的蚂蚁
  8. AI相亲,让爱变得简单
  9. response.sendRedirect()和request.getRequestDispatcher().forward(request,reponse)的区别
  10. python爬虫设置代理ip_python爬虫使用代理ip或请求头的问题
  11. 【MATLAB】矩阵的建立与访问
  12. 蓝桥杯省赛 2021 杨辉三角形 python
  13. 每日一记之数据库事务
  14. mysql error 1213_webgame中Mysql Deadlock ERROR 1213 (40001)错误的排查历程
  15. 定制开发 app 的好处都有哪些?
  16. 如何修改网页小图标,浏览器页面上的图标。
  17. python 推箱子实验开发报告_推箱子游戏详细设计报告
  18. win10 android叹号,win10网络连接感叹号如何解决
  19. 对话系统中的中文自然语言理解 (NLU) 任务介绍
  20. js判断手机的横竖屏调整样式

热门文章

  1. Vue安装依赖npm install时报错问题解决方法
  2. redis哨兵集群的搭建
  3. IntelliJ IDEA常用快捷键小结
  4. 【Windows程序设计】Unicode简介
  5. JavaScript 面向对象编程实现
  6. vs code gitee使用_实用为王!来看看Gitee上五款新鲜出炉的WebUI组件
  7. 问题 | 执行pip install --upgrade --ignore-installed tensorflow出现Cannot open\Scripts\pip-script.py
  8. 北斗导航 | 利用模拟卫星星座估计GNSS接收机位置
  9. 安装 | CCS5.5安装包与licence以及安装教程
  10. 作文第一次用计算机350,第一次考试作文350字