设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2049|回复: 3

[其他] 谷歌新开源「宽度&深度学习」框架:实现更优推荐

  [复制链接]

171

主题

398

金钱

605

积分

初级用户

发表于 2016-7-4 16:08:48 | 显示全部楼层 |阅读模式

  像专家一样学会规则,你才能像艺术家一样打破规则。——巴勃罗·毕加索
  人类大脑是复杂的学习机器,能通过记忆日常生活的种种事件(「云雀会飞」和「企鹅能飞」)形成规则,并归纳这些学习以应用到我们从未见过的事物上(「有翅膀的动物会飞」)。也许更强大的是,记忆能让我们使用例外(「企鹅不会飞」)来进一步精炼我们归纳的规则。当我们探索推进机器智能的方法时,我们是在问自己这样一个问题 —— 通过结合记忆(memorization)和归纳(generalization)的力量,我们能教计算机学会人类的学习方式吗?
  这个问题很难回答,但通过将深度神经网络(用于归纳)与宽线性模型(用于记忆)联合进行训练,可以结合这两种力量让我们更进一步。在谷歌,我们称它宽度&深度学习(Wide & Deep Learning)。这对于带有稀疏输入的一般大规模回归和分类问题(带有大量可能特征值的类别特征)很有用,比如推荐系统、搜索和排名问题。

  今天我们将我们的宽度&深度学习实现方法作为 TF.Learn API 的一部分进行了开源,这样你自己也能轻松地训练一个模型。请查阅 TensorFlow 教程中关于线性模型和宽度&深度学习的内容 ,以及查看我们的研究论文了解更多。
  宽度&深度学习的工作方式
  举个例子,某天你一觉醒来,有了一个叫做 FoodIO 的新应用的想法。这个应用的用户只需要大声说出他/她想要吃的食物(查询(query)) 。这个应用就能魔法般地预测出这个用户最喜欢吃的菜,之后菜就被送到用户门口(项目(item))。这里关键的指标就是消费率——如果一道菜被用户吃了,就得 1 分,否则就是0分(标签(label))
  你可以从一些简单的规则入手,比如返回匹配查询中大多数特征的项目,然后放出 FoodIO 的第一个版本。不幸的是,你发现因为匹配太模糊导致了消费率非常低(有人喊出「炸鸡」,最后却得到了「炸鸡饭」),所以你决定增加机器学习以理解数据。
  宽度模型
  在第二个版本中,你想记住哪些项目与每次查询的匹配效果最好。所以,你在 TensorFlow 上用一个跨产品特性转换的宽泛集合训练一个线性模型,以了解查询-项目对的共现(co-occurrence )与目标标签(一个项目是否被消费)的关联方式。这个模型预测每一个项目的消费概率 P(消费 | 查询,项目),然后 FoodIO 根据预测出的最高消费率发布出最受欢迎的项目。比如说,学习了特征 AND(query="fried chicken", item="chicken fried rice") (查询「炸鸡」,得到项目「炸鸡和华夫饼」)的模型效果非常好;尽管  AND(query="fried chicken", item="chicken fried rice")(查询「炸鸡」,得到「炸鸡饭」)的匹配度也很好但消费率不高。也就是说,FoodIO 2.0 可以很好地记忆用户的喜好,它开始对用户越来越有吸引力。
  



  深度模型
  之后你发现,很多用户都在说他们已经对应用中的推荐感到厌烦了。他们渴望发现类似但又不同的能让他们眼前一亮的新菜品。所以你又刷开了你的 TensorFlow 工具包,为 FoodIO 3.0 训练一个深度前馈神经网络 。通过深度模型,你学习了每一个查询和项目的低维密集表征(通常被称为嵌入向量(embedding vector))。通过这种方式,FoodIO 能通过在嵌入空间中匹配彼此相隔较近的项目和查询来进行归纳。例如,你发现那些想要「炸鸡」的人通常不介意也来个「汉堡」。
  



  结合宽度和深度模型
  但是,你发现深度神经网络有时会归纳出太多东西和推荐不相关的菜品。然后你会去发掘之前的历史数据,发现事实上数据中存在查询-项目关系的两种不同类型。
  第一种类型的查询指向了准确的目标。对着应用喊出「脱脂无咖啡因冰拿铁」的人就是想要「脱脂无咖啡因冰拿铁」。因为即便「脱脂无咖啡因冰拿铁」与嵌入空间中的「全脂热拿铁」接近,但并不意味着后者就是一个可接受的选项。有数百万个嵌入的传递的规则可能造成的伤害比好处更多。另一方面,像「海鲜」和「意大利食品」这类更具探索性的查询可能需要更多归纳和发现不同的相关项目。意识到这些后,你顿悟出:为什么我一定要在宽度和深度模型中选择一个呢?为什么不是两个都选呢?
  最后,你在 TensorFlow 上用宽度&深度学习开发了FoodIO 4.0 版本。在上面图表所示,像 query="fried chicken" (查询=「炸鸡」)和 item="chicken fried rice" (项目=「炸鸡饭」)这样的稀疏特征同时被用在宽度部分(左边)和深度部分(右边)模型中。在训练过程中,错误预测被反向传播到两边来训练模型参数。宽度模型部件中的交叉特征转换(cross-feature transformation)能够记忆所有稀疏的特定规则,而深度模型部件能够通过嵌入归纳出类似的项目。
  更宽 更深 共同进步
  我们很高兴和大家分享 TensorFlow API 和宽度&深度学习的实现方法,你可以利用它们来尝试你的各种想法,和大家分享你的发现。可以在 GitHub 上查询代码,以及查阅 TensorFlow 教程中关于线性模型和宽度&深度学习的部分。
  源码地址:
  教程地址:
  本文选自:Google Research Blog,作者:Heng-Tze Cheng,机器之心编译;

784

主题

3万

金钱

3万

积分

专家用户

发表于 2016-7-12 09:29:30 | 显示全部楼层
涉猎很广泛
回复 支持 反对

使用道具 举报

2

主题

2031

金钱

2058

积分

中级用户

发表于 2016-7-26 14:33:57 | 显示全部楼层
顶一下!
回复

使用道具 举报

126

主题

4659

金钱

5476

积分

高级用户

发表于 2016-8-19 17:29:07 | 显示全部楼层
赞   :lol
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表