雷锋网按:Facebook的AML和FAIR团队合作进行自然语言处理对自然语言理解进行着合作研究。在2017年4月19日举办的F8开发者大会上,Facebook向公众介绍了他们的研究进展、自然语言理解在Facebook产品中的应用,并且介绍了平民化的自然语言理解平台CLUE,希望依靠大家的力量,继续丰富自然语言理解的应用。
(首先上台的是Benoit)大家好,我是Benoit,我是Facebook自然语言理解团队的负责人。
我们团队隶属于AML(applied machine learning,机器学习应用小组)。今天我想给大家讲讲几个我们团队最近的工作成果,讲讲我们正在研究什么,同时也会讲到我们遇到、并且正在努力解决的问题和挑战。等一下我还会请一个同事上台来介绍一个有意思的产品,其中就用到了我们团队开发的技术。
进入正题,当你打开Facebook之后,你肯定会用到文字。文字是重要的沟通方式,Facebook的每个产品里面都能看到文字,Instagram,Messenger,Whatsapp等等,文字真的到处都是。而你每天在Facebook看到的或者写下的文字,是没有一点要求,任何人都可以随意发挥的,不需要戏剧化或者怎样。所以如果我们也可以理解这些文字,那我们就肯定可以让每个用户的使用感受都得到提升。
理由是这样的,拿我自己举例吧,其实我是法国裔加拿大人,在蒙特利尔长大的(观众喝彩),(笑)。那我呢,工作是科学家,业余时间喜欢冰球,所以当我每天打开Facebook的时候,我想看到我朋友们的新动向、想跟他们聊天;我也想知道最新的冰球比赛结果如何,你看现在就有一场,我挺关心我喜欢的俱乐部怎么样了——不告诉你们叫什么(笑)。同时呢,除了看这些新闻,我还要关注机器学习方面的动向,我得知道下一场会议在何时、都有谁会去、我的朋友们去不去、是谁组织的、有没什么优秀论文等等,各种各样的事情。为了达到这样的目的呢,我们就需要想办法理解这些文字内容,然后根据我的兴趣进行匹配。
我们经常提到“自然语言理解”和“内容识别”,要表达啥意思呢?简单说就是能给别人解释——一段文字经过算法处理以后,我们也可以做出结论或进行引申。在我们能做的事情里面,最基本的之一就是给文字分类。
比如(右边)这段内容是我发的,把它输到机器里,就能训练它如何把内容分类成为话题,然后就能跟别人解释了,“哦,这段内容是关于厨艺的。” (左边)还有一段关于篮球的内容是我的朋友Jole发的,不过如果你仔细看一下文字的话,你就会发现它也是关于厨艺的,只是不那么明显。不过不需要过多的担心,我们训练的机器也能处理这样的内容。
我们当然还能做更棒的,更深入地理解一段话,区分出其中的实体。这是另一个朋友的动态,要去看演出,这个乐队我没怎么听说过。当你仔细看一下文字部分就会发现,名字挺逗, 乐队名字是“Muckbucket Sunshine”,演出地点是“BOM BOM ROOM”。那如果这种时候我们能区分出实体,知道了是哪个乐队、在哪个场馆演出,然后就可以把它匹配给喜欢音乐的人;然后呢,我们不需要把所有音乐相关的信息都推荐给他们,只需要推荐跟这个乐队或者这个场馆相关的就可以了。我们所讲的“内容识别”大概就是这样。
对于Messenger,你们在听过昨天的演讲、参加一些活动以后就会知道,一旦能够理解文字内容了,就可以做一些很有趣的事情。比如这段对话,我和我的两个朋友打算一起出去喝酒。区分一下实体的话,就是我们要去palo alto,时间也能看出来。这里我想强调一下,人类可以很容易地理解这段对线种不同的方式来表达时间。
所以我们的目标就是设计和训练人工智能,让它们对文字内容的理解准确度达到人类水平,确实是这样。这个目标其实挺难达到的,我试着跟你们解释一下,Facebook上面的文字完全是自由地书写的,没有一点限制,用户们想怎么写就怎么写,对不对。
我们打算怎样达到这个目标呢,不是什么秘密,我们用了深度学习的方法。我们最重要的方法之一是来自这篇论文的。它的名字叫《从零开始做文本理解》(《Text understanding from scratch》),是几年前公开的,其中介绍了可以用深度学习,就是只需一个标准的网络模型就能进行语言识别,并且解决大多数在其中遇到的问题。我们跟Facebook的研究团队一起研究了这篇论文,然后我们就决定建立一个能够支持论文中这样的算法的平台。
这是我们在Facebook建的这样的平台建好以后的样子,我们把它叫做Deep Text,是帮我们达成文本识别方面目标的秘密武器。我们把这样的平台建立得可以灵活切换,还可以升级拓展。我们每天会拿很多文本给它训练或者处理。它需要支持多种语言,如果你参与了之前的演讲,你一定明白我们有很多用其它语言的用户,他们同样会用不同的语言创造很多内容,我们也需要理解。还有,这一个方面有许许多多的问题是需要解决,我们大家都希望这样的平台能够以无缝的方式解决许多种不同的问题。
我刚才解释过的内容分类、实体识别和区分只是众多待处理问题中的几个,我们还可以做很多别的事情。我等下还会说一个叫做“文本相似性”的,也可以很自然地用这样的平台解决的。现在我们回过头来再讲一下Deep Text,看看它是如何来解决文本分类的问题的。
刚才说过Deep Text用到了深度学习,其中很有意思的一点就是单词是以向量的形式表示的。我们在向量空间里表示这些词,这样一来,语义学上相似的词也就会处在更接近的位置上;不怎么相似的词就会离得很远。这里是一张这种表示方法的示意图,里面的蓝色和粉色点就是单词。能够正常的看到,几个球类运动的名称挨得比较近,其它概念性的词虽然也跟运动相关,但是离得就要远一些。
我们实际的措施,绝大多数都是基于卷积网络的,这是一种很自然的吸收组合上下文的方法。这里的“上下文”是指,如果你单独拿一个词出来,它可能会有好多种含义,但是当这个词在句子中、有上下文的时候,那这个词的意思就会变得明确得多。这就是我们这种办法能够很自然地做到这件事的原因。基本上你也自己能做一个话题或者分类识别器,就用这样的网络。
刚才我提到了文本相似性,它可以很好地说明我们这样的平台的灵活性。关于文本相似性,我们就拿上一页的那种网络,然后把它拓展成了一个复杂得多的模型,像这样。在这里我们要做的是,用一侧的网络对一份文本内容做分析建模,我们把这种模型叫做“双塔模型”,如果你是业内人士的话,你肯定明白我是啥意思。所以你用一侧的网络对一条文本进行建模,用另一侧的网络对另一条文本进行建模,然后再用一个函数对语义区别大的进行惩罚。
有了这样的方法,我们就可以做很厉害的事情了。比如这个,我不是喜欢冰球嘛,那么有了这样的模型,如果有一个我喜欢的动态,那这个模型就可以学会找到更多的语义类似的动态,然后我就能够正常的看到更多自己最喜欢的东西。这个模型挺厉害的,我们在很多Facebook的产品中都用到了这个模型。
这是我们当前所做的,对于未来,我们想做得更好。这是我们在通往与人类类似的文本识别准确率路上的小目标之一,我们大家可以把文字和图片或者视频进行联合识别。还是回到我朋友Jole的这个动态,文字部分是很隐晦的,但是这张图片非常好理解。所以如果把两者加以结合,让图片和文字里面的信息都发挥作用,建立一个联合识别的模型,就肯定会对这份内容有很好的理解。
以上就是我们最近在做的事情,我们也一直努力做出更好的成果。那么我就讲到这里,下面我会邀请我的同事上台,她会继续给大家讲一些的实际产品,其中就用到了我们团队开发的技术。
谢谢Benoit,我是Aparna,我来跟大家讲讲目前Deep Text是如何运用在真实的Facebook产品中的。我不知道大家有没有想过,实际上人们会用Facebook的群组做各种各样的事情,尤其是用它来买卖东西。
大概一年之前,群组的商务团队找到我们,让我们帮忙看看有没有很好的方法知道一个动态是不是关于卖东西的;如果真的要卖东西,我们能不能帮用户更好地达成他的目标,来给用户更好的使用体验。这其中的难点是,当用户想要卖东西的时候,我们不想给用户发动态的方式加上任何束缚,我们仍旧是希望用户用自然语言、自由地表达,但是我们仍旧是要能够识别出用户想要卖东西的意愿。当我们有了Deep Text以后,我们就可以做一个高精确度的分类器,它可以阅读用户的动态,看看用户有没有卖东西的打算。而且它还可以识别得更深,就像刚才Benoit说的那样,识别文本中的实体,在这个场景下就可以是产品的名字、价格、主要特性,然后我们就可以给用户更好的提供很着迷的使用体验。
再举一个例子,社交推荐,我在自己的Facebook上都经常会使用这个功能。借助Deep Text,我们大家可以观察用户的动态,如果你在让你朋友帮忙推荐东西的,比如好吃的饭馆、好玩的活动,又比如这个例子里,想找一个靠谱的理发店。我们能做的就是,用Deep Text判断用户想要做什么样的事情,一旦判断出来,接下来的事情会给用户很棒的体验,当你的朋友给出建议以后,评论会分类,找出其中的实体,更重要的是把找到的实体链接到Facebook的地址簿里,然后展示成美观的地图,方便用户互动,最终达成自己的目标。
最后再说一个应用的话,你们可能在昨天的演讲里已经听过了,那就是Messenger中的M建议。当M觉得它可以帮助你做什么的时候,它就会自动在你的聊天中跳出来。它吸引人的地方,就是缩短了从“想做”到“做成”之间的距离。所以M能帮忙做很多你想要做的事情。比如,当M发现你要去哪里的时候,它可以帮你叫一辆车,看你喜欢Uber还是lift,还能够不用离开Messenger界面就叫到车。现在这段视频就演示了当M发现用户打算叫外卖,只要点一下,就可以用一种新的体验叫到外卖。
而且你还会发现这种体验是共享化的,对话里的每个人都可以参与这个点餐的过程。点好以后仍然通过M就可以完成付款。所以这些事情都能不用离开Messenger界面就可以搞定,而随着M慢慢的变智能,我们也希望有更多类似这样的建议可以给更多的用户意愿带来方便。
第一个困难是,很难批量复制机器学习所需要的专家。大多数时候,我们团队的机器学习专家和产品团队的工程师共同合作,做出这些非常高准确度的分类器。但是你会注意到,在我提到的这些应用例子里,我们还想给很多很多别的用户意愿做出分类器,还有很多很多的实体我们想要识别提取,但是很明显,我们没办法像批量化建立功能一样地让机器专家们也批量化。
第二个问题是重复使用性,我们AML团队很看重这件事。回想一下前面我举的两个例子,其中有一个提取地址的功能,我们会认为这个功能既要用在Messenger的M建议功能里,也要用在社交推荐里是很自然的事情。所以我们也在想怎么样才可以建立一个平台,让不同的程序都能共享和重复使用这样的平台的模型、特性及数据,这样它们就都能够找到突破口,避免开发的时候要每次重复做类似的工作。
第三个难点你们应该都理解,机器学习的关键是数据,高质量的有标签数据;要获得这样的数据,大家可能都知道,不单单是难,而且还很费钱。所以我们也在想如何优化标签,让我们在训练这些分类器和提取器的时候尽可能提高标签的使用效率。
这几点就把我们引向了CLUE。CLUE是一个语言识别引擎,是一个自助式的平台。
而CLUE做的事情,是让机器学习变得民主化,它用优秀的AI和漂亮的用户界面吸引着人们进入,这样Facebook的每个用户,不一定非要是机器学习专家,都可以到CLUE里面用最先进的自然语言理解技术建立一个实体提取器和内容分类器。这样,当任何的新应用需要的时候,都可以由CLUE这个统一的入口来建立提取器和分类器。
第二个方面是,CLUE是建立于Deep Text和Facebook的AI开发平台FB LearnerFlow2和Caffe2之上的,相信你们今天已经听说过它们了。对Facebook整体来说,这些怕平台极大地提高了灵活性,让人类能共享和重复使用模型、数据和特性。
第三个方面是对标签效率的提升。CLUE使用了“主动学习”功能,这个功能在机器学习社区经常能见到,让它可以为获取到的标签做出优化,让分类器只学习它还需要学习的、还没有弄明白的标签。
接下来,我会站在一个想要运用CLUE的工程师的角度,利用它自助式的设计,建立一个分类器,就比如叫外卖的吧。那么你第一步是要做的事情是收集一些数据,你需要先给分类器一些正确的样本,比如能表现出叫外卖意愿的短语或者句子。你能够正常的看到,CLUE提供了一个非常平易近人的用户界面,带有一些关键词搜索来提示你,方便你输入带有这种意愿的语句。
在这个例子里,“我想吃赛百味或者汉堡王”就带有叫外卖的意愿,算是一个不错的开始。你能添加许多这样的确实具有意愿的句子,来达成你的目标。正确和不正确的样本都行,当你开始收集以后,你需要做的就是给他们加标签。
同样地,CLUE有一个美观的用户界面来让你做这件事。你不但可以标出哪些有意愿,哪些没意愿,而像Benoit前面说的那样,还可以给实体加标签。对我们这个例子来讲,“赛百味”和“汉堡王”都是值得加标签的内容,能够在一定程度上帮助你达成你的目标。
当你添加好标签以后,CLUE就会自动地在后台训练出一个分类器。在你添加标签的过程中,你就已得到了一个能够正常的使用的分类器了。如果你才起步的话,效果可能还不是很好,但是毕竟有一个了。然后你就可以了解一下分类器运行的状况如何。
CLUE支持多种可视化方式,比如召回率曲线、AUC曲线等等,很多种图形供你选择。现在你还可以监控你的分类器运作状况如何,来看看你计划的任务完成得如何。
你还可以用CLUE做一件厉害的事情,就是你可以用这种初始状态的分类器去分类真实的Facebook信息流,看看结果如何。我来演示一下要怎么做,在用这个分类器对真实的信息流分类以后,可能很多东西已经分类对了,但是更重要的是,能看到有哪些东西分类错了。
在这个例子里,CLUE就告诉你,你的分类器好像有点弄混了,分不清“能送上门吗”和“我们端着面条说吧”。这就可以提示你怎么样改进数据和标签,给分类器更正这些错误,给怎样得到慢慢的变好的结果指明了方向。
这就是我前面提到过的主动学习循环。随着你调整好了你的模型,当你对结果满意的时候,就可以点一下CLUE里面的“部署”按钮,就这么简单。点一下按钮,你的分类器就可以部署到所有的数据中心里,这样,只要有需要的Facebook产品团队都可以到其中选择、并把你的分类器应用到他们的程序中。
算上Deep Text和CLUE,个人会使用在Facebook产品里面的模型已超越了200个。这里面很厉害的事情是,不仅机器学习的专家们使用这一些模型,Facebook里不一样的产品团队的科学家和工程师也在用这些模型。
在这场演讲的开头,Benoit说我们真正的目标是通过各种各样的应用,借助数百万计的内容把人和人连接起来。今天的Facebook已经做得很好的事情,是通过利用社交信息流,借助你朋友们所说的话、所做的事把你和内容连接起来。我们很想要拓展这件事情,想要把你和这世界中你感兴趣的数百万计的内容也连接起来。即便今天说了这么多,其实我们也只是起步,为了让AI能达到这些目标、提供这些新的使用者真实的体验,还有很多的事情等待我们去做。谢谢大家!
AI慕课学院近期推出了《NLP工程师入门实践班:基于深度学习的自然语言处理》课程!
三大模块,五大应用,海外博士讲师手把手教你入门NLP,更有丰富项目经验相授;算法+实践,搭配典型行业应用;随到随学,专业社群,讲师在线答疑!