文 | 石塔西

源 | 知乎


LR本身是一个经典的CTR模型,广泛应用于推荐/广告系统。输入的特征大多数是离散型/组合型。那么对于Embedding技术,如何在不使用深度学习模型的情况下(假设就是不能用DNN),融入到LR框架中呢?让我们来看看清华大学的博士石塔西大佬是如何解答的。

问题实战意义

其实这个问题可以再扩展一下,即,如何在传统机器学习算法(LR/GBDT)中使用Embedding信息。

这个问题并非空穴来风,而是有一定的实战价值。 目前DNN热度不减,基本上成为推荐、搜索系统的标配算法。传统机器学习算法,如LR、GBDT,纷纷被打入冷宫,得不到关注。至于为什么DNN能够成功上位,独占各位打工人的欢心,请参考我的文章《无中生有:论推荐算法中的Embedding思想》[1]

但是,DNN有一个致命缺点,就是上线困难。 训练的时候,各位调参侠,把各种酷炫的结构,什么attention, transformer, capsule,能加上的都给它加上,看着离线指标一路上涨,心里和脸上都乐开了花,却全然无视旁边的后端工程师恨得咬紧了牙根。模型越复杂,离线和线上指标未必就更好,但是线上的时间开销肯定会增加,轻则影响算法与后端的同事关系(打工人何苦为难打工人),重则你那离线指标完美的模型压根没有上线的机会。虽说,目前已经有TF Serving这样的线上serving框架,但是它也不是开箱即用的,也需要一系列的性能调优,才能满足线上的实时性要求。

所以,如果你身处一个小团队,后端工程人员的技术能力不强,在线DNN就会成为一个难题,这个时候,传统的LR、GBDT就凸显出优势。 如果全部使用ID类特征(实数特征也桶化成ID类特征),那么LR在线上就简化成“查表取权重,再累加“,连乘法都省了,实时性自然有保证。

但是,如果你想鱼与熊掌兼得,既不得不使用简单的传统机器学习算法,又想利用Embedding带来扩展能力上的提升, 你该怎么办?唉,费了半天口舌,只是解了题而已,目的是为了说明这一问题的实战意义,引起大家对这一问题的重视。

不推荐直接使用Embedding本身

首先,如果你的主框架是传统机器学习算法,那么Embedding肯定就不能是End-To-End学习得到的,而需要离线用另外的算法先学习好。比如,你使用DeepWalk先学习用户的购买序列,离线学习好商品的Embedding。

第二个问题才是传统机器学习如何利用这些Embedding。当然最简单的方法就是直接使用,为了使用一个64维的向量,就相当于LR增加了64维特征。但是,我不推荐使用这种方式:

  • 之所以线上使用LR,看中就是使用其处理高维、稀疏的ID类特征的能力,线上操作简化成“查表、累加权重”的快速便捷。如果你使用了向量这样的稠密特征,那么LR的优点就不复存在了。更何况有的Embedding,比如图片的Embedding可能上千维,破坏了稀疏性,线上的存储与计算都很困难。

  • LR所使用的Embedding是离线计算得到的,黑盒,可解释性不强。而我们使用LR,图的就是其可解释性强,方便debug。

  • 另外,Embedding还不稳定,因为计算Embedding的离线程序可能也需要升级。一旦升级,之前累积的训练样本就全部作废,因为新老Embedding肯定不处于同一个坐标系下,不能混用。

推荐使用基于Embedding的衍生指标

所以,我不推荐在LR中直接使用Embedding。 在我看来,正确的姿势,应该是基于离线生成的Embedding,衍生出一系列衡量<user,item>相关度的指标,然后在LR中使用这些衍生指标。 这种作法也并非我的空想,也是有出处、经过实践检验的。Airbnb的《Real-time Personalization using Embeddings for Search Ranking at Airbnb》[2] 中就采用这种方法,将离线计算好的Embedding,喂入他们的GBDT排序模型。

详细算法,请阅读Airbnb论文的第4.4节,我这里将Airbnb的做法简述如下:

1.前提,Airbnb已经将listing(房屋) embedding离线计算好

2.从多种角度来收集用户的历史,

  1. 比如Hc代表用户过去2周点击过的listing集合,

  2. Hs代表曝光给用户但被忽略的listing集合,

  3. Hw是用户收藏的listing的集合,

  4. Hb是用户预订过的listing的集合,......

3.将以上某个集合中所有listing的embedding取平均,当成user在这个行为(点击、忽略、收藏、预订、......)下的embedding

4.再拿user在某个行为下的user embedding,与当前要排序的listing embedding,计算cosine similarity,作为user对当前listing执行某动作(点击、忽略、收藏、预订、......)的倾向性。将这种“执行某动作的倾向性得分”作为实数特征,喂入GBDT,训练排序模型。

5.将这种“执行某动作的倾向性得分”作为实数特征,喂入GBDT,训练排序模型。

6.除了以上用户的长期兴趣(H*都是以周为单位收集的),Airbnb还计算当前待排序的listing embedding与用户最后一次点击的listing embedding的相似性,来刻画用户的短期兴趣。

Airbnb使用的全部基于listing embedding的衍生指标见论文中的表6

总结

  • 在传统机器学习中使用Embedding,这个问题,有一定的实战意义。特别是你想规避DNN模型复杂的上线流程,而又想获得Embedding带来的扩展性的提升的时候。

  • 在传统机器学习模型中使用Embedding,我不推荐直接使用Embedding,而建议使用基于Embedding计算得到的衍生指标。

后台回复关键词【入群

加入卖萌屋NLP/IR/Rec与求职讨论群

后台回复关键词【顶会

获取ACL、CIKM等各大顶会论文集!

 

[1]https://zhuanlan.zhihu.com/p/320196402

[2]https://zhuanlan.zhihu.com/p/162163054

怎样将Embedding融入传统机器学习框架?相关推荐

  1. 【机器学习】怎样将Embedding融入传统机器学习框架?

    文 | 石塔西 源 | 知乎 LR本身是一个经典的CTR模型,广泛应用于推荐/广告系统.输入的特征大多数是离散型/组合型.那么对于Embedding技术,如何在不使用深度学习模型的情况下(假设就是不能 ...

  2. 最牛逼的开源机器学习框架,你知道几个

    最牛逼的开源机器学习框架,你知道几个 作者 大白鲸团队 关注 2015.12.29 20:16 字数 1829 阅读 3689评论 0喜欢 7 机器学习毫无疑问是当今最热的话题,它已经渗透到生活的方方 ...

  3. “黑”掉神经网络:腾讯披露新型AI攻击手法,主流机器学习框架受影响

    来源:AI前线 本文约3000字,建议阅读6分钟. 本文为你介绍一种新兴的针对机器学习模型的攻击方式"后门攻击". "后门攻击"是一种新兴的针对机器学习模型的攻 ...

  4. 文本分类:Keras+RNN vs传统机器学习

    摘要:本文通过Keras实现了一个RNN文本分类学习的案例,并详细介绍了循环神经网络原理知识及与机器学习对比. 本文分享自华为云社区<基于Keras+RNN的文本分类vs基于传统机器学习的文本分 ...

  5. Web开发的机器学习框架

    目前,机器学习是软件开发中最热门的趋势之一.许多分析师甚至认为机器学习将彻底改变某些程序的开发过程,包括Web和移动应用程序. 以下几点清楚地表明了机器学习对Web开发的强大影响: 传统数据挖掘的良好 ...

  6. 八个最好的开源机器学习框架和库

    人工智能(AI)技术正迅速改变我们生活中几乎每一个领域.从我们如何交流到,用于交通的手段,我们似乎越来越沉迷于人工智能.由于AI快速发展,大量的人才和资源致力于加速技术的发展.利用以下最好的开源AI技 ...

  7. 新闻上的文本分类:机器学习大乱斗 王岳王院长 王岳王院长 5 个月前 目标 从头开始实践中文短文本分类,记录一下实验流程与遇到的坑 运用多种机器学习(深度学习 + 传统机器学习)方法比较短文本分类处

    新闻上的文本分类:机器学习大乱斗 王岳王院长 5 个月前 目标 从头开始实践中文短文本分类,记录一下实验流程与遇到的坑 运用多种机器学习(深度学习 + 传统机器学习)方法比较短文本分类处理过程与结果差 ...

  8. 机器学习框架ML.NET学习笔记【1】基本概念与系列文章目录

    一.序言 微软的机器学习框架于2018年5月出了0.1版本,2019年5月发布1.0版本.期间各版本之间差异(包括命名空间.方法等)还是比较大的,随着1.0版发布,应该是趋于稳定了.之前在园子里也看到 ...

  9. matlab gpu deep learning_优秀!这个库帮你使用GPU加速传统机器学习方法和Pandas数据处理...

    随着深度学习的火热,对计算机算力的要求越来越高.从2012年AlexNet以来,人们越来越多开始使用GPU加速深度学习的计算. 然而,一些传统的机器学习方法对GPU的利用却很少,这浪费了很多的资源和探 ...

最新文章

  1. A-Frame.js 学习文档翻译(一)实体
  2. TensorFlow莫烦 placehoder (三)
  3. python分支switch_Python分支结构(switch)操作简介
  4. int型数据占用的内存空间及ASCII码表
  5. centos6中三台物理机配置nginx+keepalived+lvs
  6. CSM管理系统_复选框删除多条记录
  7. 618技术特辑(三)直播带货王,“OMG买它”的背后,为什么是一连串技术挑战?
  8. Java中封装、关键字及构造方法
  9. 网络协议从入门到底层原理(10)WebSocket、WebService、RESTful、HTTPDNS、FTP文件传输协议、邮件相关协议、IPv6
  10. MyBatis→SqlSession、sqlMapConfig.xml、映射XML文件、OGNL、拼接SQL标签、取值查值、批量SQL、一对多多对一多对多
  11. 今天你的网站被攻击了吗?
  12. this与bind(this)
  13. MySQL 自联结 自连接
  14. 质量管理的三大概念:QA,QC,QM,你能给自己准确定位吗?
  15. Kubernetes:如何解决从k8s.gcr.io拉取镜像失败问题
  16. Linux下安装gitea
  17. php:获取字符串的长度
  18. Pnadas学习day-01
  19. Linux 0.00简单多任务内核head.s超详注释
  20. 【网络通信与信息安全】之深入解析从输入一个URL到页面加载完成的过程

热门文章

  1. ios UIScrollView 基础属性
  2. [转]java 组播
  3. .Net笔试题 有答案
  4. last_kmsg和ram console
  5. Android Jni 例程
  6. 简易电子钟c语言程序,(最新整理)基于51单片机的电子钟C语言程序
  7. oracle不同session共享变量,SpringMVC使用oracle配置session共享
  8. mysql全套基础知识_Mysql基础知识整理
  9. Chapter7-6_Text Style Transfer
  10. LeetCode LCP 30. 魔塔游戏(优先队列)