写点什么

Gmail Inbox 发布基于深度学习的智能回复功能

  • 2015-11-13
  • 本文字数:1734 字

    阅读完需:约 6 分钟

作为日常工作最主要的沟通手段,Email 在发明后几十年仍然活跃在工作第一线,越来越多的智能功能被添加进来。近日,继旅程助手提醒推荐功能以后,Gmail 团队发布了Inbox 最新功能:智能回复(Smart Reply)(界面如下图),并撰文阐述了背后基于深度学习的实现思路

推出智能回复功能的契机很直白:由于工作强度的增强,人们的交流日益频繁,然而大多数人有用手机收发邮件的习惯,使得回复Email 有时变成了很烦躁的事情,费时费力。而很多时候,工作邮件都可以通过一些简短的回复例如“正在尝试”、“马上发给您”、“开会时讨论一下”等等来解决。智能回复就是基于这种考虑,通过深度学习技术,来“猜测”可能的简短回复,帮用户简化回复过程。智能回复会基于用户收到的邮件内容,来推荐三个可能的回复供用户选择,一个直观的展示参见下图:

智能回复将此前数次按键输入直接简化为一两次,极大方便了用户,提高了Inbox 体验,而后台支撑该功能的技术却是相当复杂。Inbox 利用机器学习技术(确切来讲是深度学习技术)识别那些能够被“秒回”的邮件,并动态生成回复。值得一提的是,用户选择智能回复词的过程中,后台的机器学习模型会根据选择不断迭代。下面再介绍一些具体的技术细节。

在展开介绍之前,多说一句Google 内部的很多项目都在使用机器学习技术来改进用户体验,比如利用深度学习改进语音搜索 YouTube 缩略图等等。因此 Gmail 团队的 Bálint Miklós 看到了上文中提到的回复邮件痛点,找到资深科学家 Greg Corrado,后者表示了极大的兴趣。

智能回复的原理是很复杂的,涉及到自然语言理解和生成技术,这些技术多用于机器翻译,而回复邮件也可以抽象认为是个机器翻译问题,即来信是一种语言,而回信是另一种语言,智能回复就是要理解来信,并“翻译”生成回信。长期的实践已经表明相关技术并没有发展到能直接应用到产品中的程度,大部分时间都只能实现一些逗乐聊天机器人。但对于智能回复词这一特定场景,是能够给出比较满意答案的。Google 科学家 Oriol Vinyals, Ilya Sutskever 和 Quoc Le 在去年曾重点研究理解和生成技术,称为序列学习,Greg 的同事Anjuli Kannan 在此基础上开发了可生成智能回复的产品级神经网络。

类似其他序列学习系统,智能回复功能由一对RNN 组成,如下图所示。

一个用来对用户收到的邮件内容进行编码,另一个则用来预测可能的回复。编码网络一次读入一个单词,然后生成一个由数字组成的向量。该向量被Geoff Hinton 老先生称为“ thought vector ”,能够在一定程度上表达邮件的语义。在这种情况下,英文句子“Are you free tomorrow?”和句子“Does tomorrow work for you?”语义距离更近。第二个网络根据 thought vector 来生成一个语义语法都正确的回复。值得一提的是,整个网络都无需任何人工接入,完全通过历史邮件和回复来学习模型。

Greg 提到,跟邮件打交道的一个挑战就是,学习模型的输入和输出都很长,有时多达几百单词。因此需要选择合适的 RNN 模型,Google 选择的是 LSTM 模型,能够很好处理比较远的单词之间的依赖关系,并能够发现邮件内容中最重要的部分,而不会被附近的短句所影响。Greg 还提到,另一个挑战就是用户的隐私问题,在模型训练的过程当中,要保证没有任何人阅读用户的邮件,全程都是机器自动化操作。

最后 Greg 还分享了开发过程中的一些感受。最开始的时候,智能回复给出的三个答案基本意思相同,用户很难取舍。最后机器学习专家 Sujith Ravi 解决了这个问题,并表示这是一个典型的“回复多样性”缺乏问题,可通过计算句子语义相似度来解决,而不仅仅是考虑单词的相似度。另一个早期版本中的问题是不管邮件内容是什么,智能回复都倾向给出“I love you”的回复,因为类似感谢、听起来不错和我爱你这样的回复太常见了。后来通过对可能回复的概率进行归一化解决,使得回复不但常见,而且要和邮件的内容也比较相关。

据悉,智能回复功能将会在下周发布的 iOS 和 Android 版本中,感兴趣的读者可以进行更新尝试。


感谢杜小芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-11-13 18:002146
用户头像

发布了 268 篇内容, 共 125.6 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

Go sync.Once:简约而不简单的并发利器

陈明勇

Go golang 高并发 三周年连更 sync.Once

写一个完整的SHOW TABLE STATUS 语句返回的所有表的状态信息对应的结构体

linux大本营

数据库 存储 结构体 C++

共话数字化新技术、新趋势 华为云开发者日东莞站成功举办

Geek_2d6073

linux dbus客户端和服务器示例代码

linux大本营

c++ Linux dbus

eBPF的发展演进---从石器时代到成为神(三)

统信软件

操作系统 Linux内核

容量成本性能全都要有, Redis 容量版 PegaDB 设计与实践

百度开发者中心

云数据库 百度智能云

如何使用 SCP 和 Rsync 在 Linux 中传输文件

wljslmz

Linux 三周年连更

第五期(2022-2023)传统行业云原生技术落地调研报告——金融篇

York

容器 DevOps 微服务 云原生 金融

一文带你了解实战常用JavaScript API

程序员海军

JavaScript 三周年连更

6G 通信技术和 5G 通信技术的区别

汪子熙

通讯协议 通讯 三周年连更

linux dbus代码举例

linux大本营

Linux C++

云BI产品瓴羊Quick BI,为企业数字化转型保驾护航

巷子

什么是文件传输,介绍文件传输的发展进程

镭速

对数据库中存储的程序进行现代化改造,以使用 Amazon Aurora PostgreSQL 联合查询、pg_cron 和 Amazon Lambda

亚马逊云科技 (Amazon Web Services)

电子签赛道驶向深水区,法大大以数智化引领创新

ToB行业头条

YashanDB V22.2重磅发布!七大亮点带你了解新特性

YashanDB

数据库

一个有趣的图片加载效果

南城FE

CSS 前端 动画 图片

UDP报头是通过结构体位段实现的吗

linux大本营

网络协议 udp UDP协议

nvim 配置c++环境

linux大本营

vim C++

来字节跳动实习,有机会发Nature子刊

字节跳动技术范儿

解析下rte_pktmbuf_pool_create参数含义

linux大本营

DPDK DPDK开发

openbmc 中如何使用D-bus

linux大本营

dbus openBMC

重磅!阿里云云原生合作伙伴计划全新升级:加码核心权益,与伙伴共赢新未来

阿里巴巴云原生

阿里云 云原生 生态合作

什么是Java 异常?如何处理异常?

Java架构历程

Java 三周年连更

Django笔记十七之group by 分组用法总结

Hunter熊

Python django count 分组查询 sum

扎最深的寨,打最持久的仗——一知智能AI商业化攻略访谈录

B Impact

数说热点|米哈游新作《崩坏:星穹铁道》今日公测,能否再现原神奇迹?

MobTech袤博科技

打工人逃不开「单人单岗」

Java 架构 程序人生 职场

dpdk中,如何建立portid/queue的配置和逻辑核心的关系

linux大本营

队列 DPDK DPDK开发

dpdk l2fwd如何初始化每个逻辑核的port/queue的

linux大本营

队列 DPDK DPDK开发

重载++运算符分别实现i++和++i

linux大本营

运算符 数据结构与算法

Gmail Inbox发布基于深度学习的智能回复功能_语言 & 开发_张天雷_InfoQ精选文章