精华内容
下载资源
问答
  • 作者 | 阿里巴巴智能语音交互团队编辑 | Sean一、对话式交互技术以智能音箱、智能电视为代表的对话式交互,是时下非常火热的、且能够走近我们生活的人工智能子领域。从本篇开始,我们将一起走进对话式交互。什么是...
    作者 | 阿里巴巴智能语音交互团队
    编辑 | Sean
    一、对话式交互技术

    以智能音箱、智能电视为代表的对话式交互,是时下非常火热的、且能够走近我们生活的人工智能子领域。从本篇开始,我们将一起走进对话式交互。

    什么是对话式交互呢?我们首先从一个例子开始。贾维斯,电影《钢铁侠》中那位钢铁侠的 AI 管家,他能独立思考、可以实时帮钢铁侠处理各种事情,包括计算海量数据。其中最让观众印象深刻的就是,贾维斯可以随时随地像人一样进行口语交流,来解决钢铁侠的问题。

    贾维斯能听、会说,能实时理解主人的对话意图并根据实际场景进行下一步的对话,如果在对话过程中碰到有歧义的情况,他还会追问钢铁侠,让他提供更多的信息来消除歧义。贾维斯的这些能力就是对话式交互要提供的,其中的核心是 VUI (Voice User Interface,语音用户界面)的设计。相对于 GUI(Graphical User Interface,图形用户界面),VUI 解放了人的双手,某些场景下,简单的一句语音命令就能代替 GUI 下鼠标 / 遥控器的多次点击,这带来的不只是方便,还节省了时间。一个好的 VUI 系统,能够让用户尽可能通过最少轮次的对话实现既定意图的执行。贾维斯总能在危机时刻帮到钢铁侠,他是一个具有完美 VUI 的语音助手。

    嗯,我们不要入戏过深,贾维斯是一部电影里的虚拟系统。那么,现实生活中,我们能创造出来一个接近贾维斯的对话式交互系统吗?我们该怎么做呢?呃,很遗憾,以当前的科技发展水平,我们还做不到电影里那么智能,更不用说让机器有意识。但人机交互并不是昨天才发明出来的,人类在这个领域已经探索了几十年,我们可以实现钢铁侠与贾维斯的交互方式,并用这种方式来帮我们处理一些数据或控制我们身边的一些硬件设备(比如让语音助手根据天气提供穿衣建议或者控制厨房和卧室的各个家电),这就是我们要聊的对话式交互技术。

    对话式交互技术包括了语音识别 / 合成、语义理解和对话管理三个部分。当下的对话式交互产品主要分两类:以微软小冰为代表的开放域(Open Domain)对话系统和以亚马逊 Alex 为代表的任务导向(Task Oriented)对话系统。以现在的技术能力,在开放域聊天中,准确理解用户的话并给出正确答案的难度是很大的,因为面对用户千奇百怪的提问,机器对意图的理解很可能出现错误,知识库也可能涵盖不了那么广。开放域聊天更像是一个信息检索系统,基于已有知识库,为用户的输入匹配到一个答案。这样的对话能力是十分有限的,构造一个完善的知识库更是困难重重。而任务导向的对话系统旨在帮助用户完成特定领域的任务,比如”查询天气“、“订酒店”,这种领域特定的对话系统的最大优势是实现起来相对有效并且易于产品化。本系列的后续文章,我们将深入 Amazon、Google 和 Microsoft 三家任务导向的对话平台。在此之前,我们先一起领略对话式交互技术流程的各个环节。

    二、对话式交互流程

    回顾一下钢铁侠和贾维斯的交互过程,我们以钢铁侠询问贾维斯当前装备的损伤状况为例,他们的对话可以概括如下:钢铁侠向贾维斯询问,贾维斯接收到钢铁侠的话并理解他的意图,然后去查询相关数据,最后把数据展示在屏幕上或读出相关数据给钢铁侠听。这个交互的过程可以总结成下面这张图:

    • 钢铁侠向贾维斯询问:钢铁侠的语音流发送给贾维斯。

    • 贾维斯接收到钢铁侠的话:贾维斯将语音识别为对应的文字,并将口语化的文本归一、纠错,并书面化。

    • 理解他的意图:贾维斯进行语义理解,并进入对话管理。这里省去了多轮对话的示意,当意图相关信息不明确时,贾维斯会发起确认对话,钢铁侠也可以根据贾维斯的反馈,继续问其他相关内容,这些都是语义理解和对话管理服务的范畴。

    • 然后去查询相关数据:在对话式交互服务中,这个流程的提供者我们称其为内容服务。

    • 最后把数据展示在屏幕上:对话结束,产生执行动作。

    • 或读出相关数据给钢铁侠听:对话结束,语言生成文本经过语音合成服务,转换为语音流,播报给用户。

    我们一般称将这样的对话式交互系统为语音对话系统(Spoken Dialog System)。这里简单描述下各个组件。

    语音识别 ASR

    ASR(Automatic Speech Recognition)直译为自动语音识别,是一种通过声学模型和语言模型,将人的语音识别为文本的技术。近年来,随着深度学习在语音识别中的广泛使用,识别的准确率大大提高,让这项技术能被广泛地应用于语音输入、语音搜索、实时翻译、智能家居等领域,让人与机器的语音交互变为可能。

    语义理解 NLU

    语音识别只是知道我们说了什么,但真正要理解我们说的是什么,就需要依靠 NLU 这项技术。NLU(Natural Language Understand)直译为自然语言理解,是 NLP(Natural Language Processing,自然语言处理)的一个子集,专注于“口语表达和对话”方向的自然语言处理。我们首先快速了解一下 NLP,NLP 研究主要用来解决下面这些问题:

    • 分词:中文的书写词语之间不会用空格等符号来分割,分词就是将汉字序列切分成词序列,因为在汉语中,词是承载语义的基本单元。比如从北京飞上海这句话的分词为:从 北京 飞 上海。

    • 词性标注:词性用来描述一个词在上下文中的作用,如名词、动词、形容词等,词性标注就是识别这些词的词性,来确定其在上下文中的作用。

    • 命名实体识别:在句子中定位并识别人名、地名、机构名、数字、日期等实体。

    • 文本分类:文本分类就是将一篇文档归入预定义类别中的一个或几个,比如将某一类邮件归类为垃圾邮件,区分不同新闻的类型等。

    • 情感分析:情感分析是找出说话者或文本作者对某个话题的两极性观点(积极或消极)、情绪(高兴、悲伤、喜欢、厌恶等)。

    自然语言理解通过使用上述技术,完成指代消解、否定判断、语句泛化、口语归一化、ASR 纠错等工作,识别人机对话中的领域和意图,获得对话任务的语义信息。我们可以通过下面几个例子感受一下:

    1. 第 45 任美国总统是谁?

      他是哪里出生的?他 = 唐纳德·特朗普

    2. 感觉怎么样?

      不太好 不要紧 没问题 有问题 没有问题 没没没 没事

    3. 我要看温情的电影 来个柔情的片子 我想看看暖心的影片

    语义表示有多种形式,本系列使用的是最常见也是目前为止最成功的"框架语义(Frame Semantics)",即采用领域(Domain)、意图(Intent)和词槽(Slot)来表示语义结果。

    • 领域(Domain):领域是指同一类型的数据或资源,以及围绕这些数据或资源提供的服务。比如“天气”、“音乐”、“酒店”等。

    • 意图(Intent):意图是指对于领域数据的操作,一般以动宾短语来命名,比如音乐领域有“查询歌曲”、“播放音乐”、“暂停音乐”等意图。

    • 词槽(Slot):词槽用来存放领域的属性,比如音乐领域有“歌曲名”、“歌手”等词槽。

    举个例子,从“北京明天天气怎么样”这句话中,NLU 可以得到以下语义结果:

    • 领域(Domain):天气

    • 意图(Intent):查询天气

    • 词槽(Slot):

      • 城市(city) = 北京

      • 时间(date) = 明天

    对话管理 DM

    DM(Dialog Management)直译为对话管理,是对话式交互系统的核心,负责控制整个对话过程。主要包括对话上下文(Dialog Context)、对话状态跟踪(Dialog State Tracking)和对话策略(Dialog Policy)几部分。

    • 对话上下文:记录对话的领域、意图和词槽数据,每个领域可能包含多个意图的数据, 一般以队列的形式存储。

    • 对话状态跟踪:每轮对话开始后,会结合本轮对话提供的语义信息和上下文数据,确定当前对话状态,同时会补全或替换词槽。

    • 对话策略:根据对话状态和具体任务决定要执行什么动作,比如进一步询问用户以获得更多的信息、调用内容服务等。

    同样以天气场景的对话举例说明:

    Q:明天天气怎么样?(

    intent=query_weather,date= 明天,city=null

    A:您要查询哪个城市的天气?(

    action= 询问查询哪个城市

    Q:北京的 (

    intent=query_weather,date= 明天,city= 北京

    A:北京明天晴(

    action= 调用天气服务

    Q:那杭州呢?(

    intent=query_weather,date= 明天,city= 杭州

    A:杭州明天小雨(

    action= 调用天气服务

    Q:后天天气(

    intent=query_weather,date= 后天,city= 杭州

    A:杭州后天小雪(

    action= 调用天气服务

    假设我们要查询天气信息。查询天气这个意图需要两个必选词槽,城市和日期。也就是说,只有当这两个词槽都有数据时才能查询天气服务,得到天气数据。从上面对话场景中可以看到,对话管理模块会维护多轮对话上下文数据(包含意图和词槽等),跟踪对话状态,填补或替换词槽数据,并决定如何与用户交互或执行什么样的动作。比如缺少必选词槽时,对话系统会追问用户,以补全词槽。

    对话生成 NLG

    NLG(Natural Language Generation)直译为自然语言生成,即对话生成的技术。对于任务导向的对话来说,NLG 基本以模板形式来实现。模板中的回复信息可由词槽或通过内容服务得到的数据来替换。对话生成的原则是符合自然语言交互的习惯,易于用户理解,最快完成对话。此外,NLG 还可以用于引导用户的交流习惯,比如 NLG 的内容为"已经为你开启导航",可以引导用户在希望导航时,说"开启导航"。

    语音合成 TTS

    TTS(Text To Speech)是指语音合成技术。对话系统的输出是文本形式的 NLG 或者指令,当对话返回的内容是 NLG 时,通过 TTS 技术能将这些文本转换成流畅的语音,播放给用户。TTS 技术提供语速、音调、音量、音频码率上的控制,打破 GUI 中传统的文字式人机交互方式,让人机沟通更自然。

    讲完了对话式交互的流程和关键技术,接下来来我们再深入思考下对话式交互的产品化。

    三、VUI 语音用户界面

    GUI(Graphical User Interface),即图形用户界面,是我们最熟悉的人机交互方式。我们每天面对的 PC 和手机,无论是使用鼠标点击还是手指操作触摸屏,我们早已习惯了这种无声的图形界面交流方式。随着 AI 技术的发展,对话式交互逐渐走近我们的生活,我们和机器之间的交互从 GUI 迈向了 VUI(Voice User Interface),即语音用户界面。VUI 是语音应用 / 设备的入口,当你说"Hey Google"的时候,Google Home 的音箱就会被唤醒,进而与你交流。语音成为了 VUI 世界的连接者,就像 GUI 时代的鼠标和手指。

    相比 GUI 需要用户动手触发某个动作后结果只能以视觉形式展现给用户,VUI 有自己独特的优点,它可以解放用户的双手和双眼,无需手持或者紧盯着设备,用说话这种更自然的方式去触发动作,而返回结果则以语音方式播放给用户听。这在一些像驾驶、做饭、跑步等无法动手操作的场景下特别有用。设计良好的 VUI,会以最少的交互完成用户的意图,能极大地提升用户体验。比如,通过学习用户习惯从而为用户提供"条件反射式"的服务、更口语化的交流、引导用户收敛话题,通过询问纠正异常情况(当用户不按套路出牌时)等。

    在 GUI 中,用户的行为流程是预先设计好的,比如在某个界面能触发什么动作都是固定的,或者有个一级一级的引导关系,用户只能按照设定好的流程去做。而在 VUI 中,用户的行为则是无法预测的,不同用户在不同的场景下的行为可能完全不一样,而且语音交互需要用户高度集中注意力去听系统说了什么。在一些场景下反而会带来不便,比如在电视上想看一个节目列表,用图形界面展示的方式会更直观一点,用户可以慢慢看,但用语音播报的话,数据量大的时候,用户很可能听了后面的忘记前面的,效果反而不如 GUI 好。所以设计 VUI 时千万不要让用户有认知负荷,不要挑战人类短暂的记忆力。

    声音是自然的交互方式,但却不能完全取代 GUI,它们是一个互补协作的关系。所以在设计语音交互界面时,可以把 VUI 和 GUI 结合起来,以实现多模态的智能交互。通过上面的描述,我们对 VUI 有了大致的了解,趁热打铁,我们来设计一个对话式交互产品。一起体会下对话平台要注意哪些问题。

    四、对话式交互产品的设计

    设计一个好的对话式交互产品首先要突破 GUI 的设计思维。我们设计一个对话任务的目标是最快速地解决用户的问题。对话式交互产品重点是交互,因此一定要结合场景来设计,要把自己代入对话场景中,想象如果自己使用这个语音界面,会在什么情况下使用、以怎样的方式跟它对话、希望它怎么回复我们。下面我总结出了一些设计步骤和原则,可以作为参考:

    设计步骤

    1. 选择正确的用户场景,提供优质对话体验

    不要尝试直接把现有的手机或桌面应用的交互方式转变成语音交互,这样可能会让语音交互变得更加复杂。我们应该结合用户使用语音交互时的状态,比如在户外不方便看网页或屏幕,或者双手被占用无法操作别的东西。

    这里有以下几点建议来帮忙选择适合转换成语音交互的场景:

    • 需要用户输入的特别熟悉的信息,比如个人信息、位置、时间等。

    • 能快速提供有用信息的场景,用户说几句话就能节省很多操作,比如订餐、叫车。

    • 天生适合语音交互的场景,比如做饭时听菜谱、开车时做笔记。

    2. 创建符合当前场景的对话风格和形象

    开始设计语音交互之前,先考虑你希望它听起来怎么样,能带给人怎样的感受。比如要设计个趣味游戏,你可能想要一种搞笑风格;而设计个新闻阅读器,就需要严肃认真的语气,给人靠谱的感觉。

    3. 编写对话

    选好场景、确定形象后,你可能想要马上投入开发,但是一定要拒绝冲动。相反,我们要用纸和笔先构思一下对话。写下用户可能参与的独立或多轮对话,下面是一些对话类型和可能需要考虑的问题:

    • 完成对话任务最简单的方式,不要太复杂。

    • 完成对话任务的其他方式,这可能是多样化的,因为有的用户一次只说一部分信息,这就需要多次交互才能完成任务,而有的用户则一次把所有信息说完。

    • 需要修正的对话场景,比如系统不支持,或不理解用户的意图。

    • 用户中途结束对话,或完成对话任务后,怎么确认结束对话场景。

    • 问候语,以及怎么引出对话场景。

    • 语音交互部分搞定后,需要考虑怎么在设备屏幕上展示对话内容。比如对话通过语音方式说出了一部分内容,而还有一些数据需要展示在屏幕上。

    4. 进行测试

    测试没有想象中的麻烦,你需要做的就是找一些开发团队之外的人,在没有提示的情况下,让他们用平时正常说话的方式使用你的产品,从各个角度测试对话。多试几次可能就会发现哪些对话任务完成有困难,或者交互给人的感受怎么样。

    设计对话的目标是满足用户的意图,而不仅仅是完成一个功能。

    设计原则
    • 给语音交互界面赋予一个拟人化的形象,不要让用户觉得太生硬,是在跟机器对话。

    • 保持简洁,节省用户的时间,提供有效的信息。

    • 信任用户,用户知道怎么讲话,所以不要试图教用户怎么说,我们只需要提供最自然的方式,推进对话进展就可以。

    • 可以增加个性化能力,使用户听起来感到愉悦,但不要分散用户注意力。

    • 使新用户感兴趣,也要吸引专家用户,设计要面向海量用户,而不是只满足低端需求。

    • 轮流说话,当轮到用户说话时,不要贸然打断。如果是问用户问题,那就不要在他们回答问题的时候又突然插入其他指令。

    • 不要猜测用户的意图,给用户展现事实,让他们自己决定。

    • 结合上下文语境,追踪对话的来龙去脉,保证准确理解用户的话。

    综上,我们对对话式交互有了比较全面的认识,本系列接下来的三篇文章将以本篇讲述的对话式交互知识为背景,深度讲述亚马逊、谷歌和微软的语音交互平台,和大家一起分享如何在这三大平台上,实现我们自己的对话式交互技能。这里对技能的定义是特定领域的对话能力,包括语义理解、对话逻辑控制和相关的内容服务。

    参考
    • https://developer.amazon.com/designing-for-voice/

    • https://developer.amazon.com/alexa-skills-kit/vui

    • https://developers.google.com/actions/design/principles

    • https://design.google/library/conversation-design-speaking-same-language/

    • https://yq.aliyun.com/articles/8301

    作者介绍

    我们来自阿里巴巴智能语音交互团队,隶属于阿里巴巴机器智能技术部门。我们的主攻方向是对话式交互技术,对外输出 Spoken Language System 产品 (http://nls.console.aliyun.com )。我们是上汽集团智联网汽车、上海地铁语音购票、海尔人工智能电视等产品,语音交互能力背后的男人。



    展开全文
  • 浅谈智能搜索和对话式OS

    千次阅读 2018-01-26 14:15:44
    amp;utm_content=note&utm_medium=seo_notes&...utm_source=recommendation浅谈智能搜索和对话式OS前面的文章主要从理论的角度介绍了自然语言人机对话系统所可能涉及到的多个领域的经典模型和基础知识。...

    转载:

    https://www.jianshu.com/p/3a9f49834c4a?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    浅谈智能搜索和对话式OS

    前面的文章主要从理论的角度介绍了自然语言人机对话系统所可能涉及到的多个领域的经典模型和基础知识。这篇文章,甚至之后的文章,会从更贴近业务的角度来写,侧重于介绍一些与自然语言问答业务密切相关,且已经商业化,已被证明可行的技术。

    本篇文章准备从技术的角度从头捋一下百度度秘事业部 CTO 朱凯华做的题为《AI 赋能的搜索和对话交互》的报告,介绍智能搜索和对话式 OS 的发展趋势以及一些经典问题的解决方案。里面提到的技术会包含,里面没提到但是我有联想到的内容,也会补充进去。

    智能搜索

    根据朱凯华的原话,现代搜索引擎面临两个重要挑战:

    • 更好的建模搜索结果的语义相关性
    • 更直接地给用户答案

    看到这两个挑战,第一个让我想到的是检索模型与 LDA 等模型的关系,传统检索模型是在文档包含查询词的前提下进行相似度的计算与排序,而 LDA 以及类似的其他模型可以利用词向量(或者讲,语义相关性)发现两篇完全没有重合词的相似文档。

    第二个让我想到的是知识图谱,知识图谱使知识对计算机而言成为了可计算的,在知识图谱的基础上,计算机可以通过简单的推理直接给出一些问题的答案,而不再是提供与查询词相关的网页集合,能够更直接的解决用户的问题。

    智能搜索这部分就从语义相关性知识推理两个方面来讲。

    语义相关性

    我们所希望实现的,是不论查询词是否包含在相应文档中,只要查询词与文档拥有语义相关性,就能将其找到。

    精确命中

    这个方面也还是从传统检索模型开始讲起,也即在文档包含查询词的情况下,或者讲查询词精确命中文档的前提下,如何计算相似度,如何对内容进行排序。

    《浅谈搜索引擎基础(上)》中,我提到过,BM25 模型是目前最成功的内容排序模型,也对其进行了详细的介绍,这里结合朱凯华的PPT再简单说一下:

    这是我文章中的图:

    BM25 模型计算公式融合了 4 个考虑因素:IDF 因子文档词频文档长度因子查询词频,并利用 3 个自由调节因子(k1、k2 和 b)对各种因子的权值进行调整组合。

    与他在图中展示的相对应:BM25 模型计算公式中的求和符号,表示命中的关键词对语义相关性有正向贡献;二元独立模型(当前条件下等价于IDF 因子)和文档词频(TF)决定了命中词的贡献值;文档长度因子使得文档未命中词对语义相关性有着负向贡献;他的图中并没有直接的提到查询词频,但实际上他式子中的qtf就是查询词频

    精确命中的查询词对整体语义相关性的正/负向贡献,是语义表达能力的基础。

    接下来我们考虑另一种情况:

    也即如果查询词并没有精确命中,那该怎样计算语义相关性?图中指出了四个方向:归一化命中同义词命中主题命中反义主题命中,后两个是我造的:)

    归一化命中

    先来说归一化命中,这个是最简单的:

    图中包含四个类别:词干提取拼写纠错简繁体转换数字格式归一化

    我还能想到的,比如全角半角归一化、标点符号处理、大小写归一化、汉语的错别字纠正等等。

    归一化命中,就是解决同一个词多种形态的问题。

    其实如果强行分的话,归一化命中也可以分作两种问题:一种是计算机背锅的问题,比如词干提取、简繁体转换、数字格式归一化、全角半角归一化、标点符号处理、大小写归一化;另一种就是人背锅的问题,比如英文拼写纠错以及汉语错别字纠正。

    同义词命中

    同义词命中,自然就是解决同一含义多个同义词的问题。

    具体的例子图中也给出了,对于汉语而言,主要的类别包括:上下文无关的同义词上下文相关的同义词多term的同义词(实体消歧和共指消解?)

    上下文无关的同义词可以利用一些在线的同义词典来解决;对于上下文相关的同义词,猜想一下,依照自身业务,通过人工定义规则可以解决一部分,另一部分可以通过筛选后面的多term同义词以及主题命中的结果来得到。

    多term的同义词让我想起了知识图谱构建三个层次之一的知识融合,知识融合其中有一部分关键内容叫做实体链接,这在《浅谈知识图谱基础》中详细的讲过,实体链接的意义恰巧在于通过实体消歧共指消解为不同的实体名称/别名找到真正对应的实体。

    实体消歧是在同一个名称可能对应多个实体时根据上下文找到正确的实体,共指消解主要用于解决多个指称对应同一实体对象的问题。

    利用知识图谱中的实体链接技术,就能找到哪些些实体名称/别名对应的是同一个实体。

    主题命中

    主题命中是相当重要的一部分内容,这里准备花大量篇幅去拓展开来讲。

    图中讲,建模词与词之间『爱』的关系,这个『爱』我没明白,这里我按照拥有相同主题来理解,比如『苹果』和『乔布斯』和『iPad』、比如『星巴克』和『咖啡』等。

    在 PPT 中,百度用 SMT 模型来计算词与词之间的相关关系。SMT 先放一放,我们先说词相关的问题。既然说到了词相关的问题,就不得不说到词向量了,说到词向量又不得不提 word2vec,这部分就从 word2vec 开始讲起。

    word2vec

    word2vec 是 Google 于2013年开源推出的一个用于获取词向量的工具包。

    先提一下什么是 Huffman 树和 Huffman 编码,简单一句话,词频越大的词离根节点越近,词频越大的词的编码长度越短。

    然后再说一下语言模型,毕竟词向量和语言模型有着密切的关系。

    根据牛津大学的《Deep Learning for Natural Language Processing》课程,至少存在三种可行的语言模型,分别是:Count based N-Gram Language Models(N-Gram 语言模型)Neural N-Gram Language Models(神经概率语言模型)Recurrent Neural Network Language Models(RNN 语言模型)

    这里先说前两种,其实第一种在我的《浅谈自然语言处理基础(上)》中,已经详细讲过了,是一种利用 n-1 阶马尔科夫假设的简单语言模型。

    然后这里着重介绍一下神经概率语言模型,神经概率语言模型由 Bengio 等人在文《A neural probabilistic language model. Journal of Machine Learning Research》提出,该模型中用到了词向量。

    那什么是词向量呢,一种最简单的词向量是 one-hot representation(稀疏向量),就是用一个很长的向量来表示一个词,向量的长度为词典的大小,向量的分量只有一个 1,其它全为0,1 的位置对应该词在词典中的索引。

    《浅谈机器学习基础(上)》中讲朴素贝叶斯算法时就提到了词集模型(Set Of Words,SOW)词袋模型(Bag Of Words,BOW),其实词集模型就是文档中不同词的 one-hot representation 之和;词袋模型与词集模型的区别在于,词集模型对一个词的 one-hot representation 只加一次,而词袋模型全部累加起来,记录词在文档中的出现次数。

    《浅谈数据挖掘基础》中,我提到过维数灾难,维数灾难的一个表现是,在高维空间下,几乎所有的点对之间的距离都差不多相等;另一个表现是,集合任意的两个向量之间都是近似正交的。这会让我们的欧氏距离和余弦距离计算方式失效。在词典大小过大的情况下,使用 one-hot representation 表示文档,并通过《浅谈搜索引擎基础(上)》中提到的空间向量法等计算相似度,就会触发维数灾难。并且如果利用 one-hot representation ,那两个词的词向量之间就永远是正交关系,我们无法利用它来刻画词与词之间的相似性。

    然后还有另一种词向量,叫做 Distributed Representation(密集向量/稠密向量),它最早由 Hinton 于 1986 年提出的,其基本想法是:通过训练将某种语言中的每一个词映射成一个固定长度的短向量(这里的短是相对于 one-hot representation 来说的),所有这些向量构成一个词向量空间,而每一向量可视为该空间中的一个点,在这个空间上引入『距离』,就可以根据词之间的距离来判断它们之间的(词法、语义上的)相似性了。神经概率语言模型和 word2vec 采用的都是这种 Distributed Representation 的词向量。得到词语的 Distributed Representation 的词向量的过程,可以看做是 Word Embedding。

    然后回到神经概率语言模型,既然是神经概率语言模型,自然要用到神经网络,这里给出这个神经网络的结构示意图,出自《word2vec 的数学原理详解》:

    它包括四个层:输入层投影层(Projection Layer)隐藏层输出层。有人也将输入层与投影层结合,统一看做输入层,这样就变成了三层神经网络结构。

    然后来详细讲一下这个图,对于语料 C 中的任意一个词 w,将 Context(w) 取为其前面的 n-1 个词(类似于 N-Gram),如果其前面的词不足 n-1 个,则可以人为的添加一个或几个填充向量,它们也参与训练过程。这样二元对(Context(w),w)就是一个训练样本了。

    先来说输入层和投影层,如果词向量长度为 m,则投影层的规模是 (n-1)m。因为输入层包含 Context(w) 中 n-1 个词的词向量,而投影层的向量由输入层的 n-1 个词的词向量按顺序首尾相接地拼起来形成一个长向量。

    然后是输出层,输出层的规模与词典大小的规模相同,而隐藏层的规模是可调参数,由用户指定。

    通过语料训练,我们得到了词典中不同单词 w 的词向量以及填充向量,和这个神经网络的参数。对于神经概率语言模型,训练时,词向量是用来帮助构造目标函数的辅助参数,训练完成后,它也只是语言模型的一个副产品,不过是很重要的副产品。

    根据词向量就可以度量词之间的相似性,包括同一种语言内的词的相似性,甚至还可以度量不同语言之间词的相似性,如下图所示:

    词向量只是针对『词』来提的,事实上,我们可以针对更细粒度和更粗粒度进行推广,比如字向量句子向量文档向量,它们能为字、句子、文档等单元提供更好的表示。

    正因为有了词向量,神经概率语言模型与传统的 N-Gram 语言模型相比,可以更好的建模一些原训练语料中没有出现过的搭配。比如语料中存在『A cute cat』,但却不存在『A cute dog』。如果在 N-Gram 语言模型下,『A cute cat』的生成概率会很高,而『A cute dog』的生成概率就近乎为零,但神经概率语言模型却可以发现『cat』与『dog』的相似性,进而为『A cute dog』提供一个更恰当的生成概率。

    接下来正式开始介绍 word2vec,word2vec 并不是直接基于前面说的神经概率语言模型,而是用到了两个特殊的模型:CBOW模型(Continuous Bag-of-Words Model)Skip-gram 模型(Continuous Skip-gram Model)

    两个模型都包含三层:输入层投影层输出层。前者是在已知当前词 w 上下文的前提下预测当前词;而后者恰恰相反,是在已知当前词 w 的前提下,预测其上下文:

    对于 CBOW 和 Skip-gram 两个模型,word2vec 给出了两套框架,它们分别基于 Hierarchical Softmax 和 Negative Sampling(简称为 NEG),NEG 是 NCE(Noise Contrastive Estimation)的一个简化版本,目的是用来提高训练速度并改善所得词向量的质量。与 Hierarchical Softmax 相比,NEG不再使用复杂的 Huffman 树,而是利用相对简单的随机负采样,能大幅提高性能。

    先来说基于 Hierarchical Softmax 的 CBOW 模型:

    与前面讲过的神经概率语言模型相比,主要存在三处不同:

    • (从输出层到投影层的操作)神经概率语言模型是通过拼接,而 CBOW 是通过累加求和
    • (隐藏层)神经概率语言模型有隐藏层,而 CBOW 没有隐藏层
    • (输出层)神经概率语言模型是线性结构,而 CBOW 采用 Huffman 树,当然基于 Hierarchical Softmax 采用的都是 Huffman 树。

    那如何利用 Huffman 树来得到我们所需的 p(w|Context(w)) 呢?对于词典 D 中的任意词 w,Huffman 树中必存在一条从根节点到词 w 对应节点的路径 pw(且这条路径是唯一的)。路径 pw 上存在 lw-1 个分支,将每个分支看做一次二分类,每一次分类就产生一个概率,将这些概率乘起来,就是所需的 p(w|Context(w))。

    然后是基于 Hierarchical Softmax 的 Skip-gram 模型:

    前面说过,Skip-gram 是在已知当前词 w 的前提下,预测其上下文,所以其输入就只包含当前样本的中心词 w;图中的投影层其实是多余的,只是为了方便比较,因为只输入词 w,所以投影层和输入层恒等;与 CBOW 模型一样,输出也是一棵 Huffman 树。

    在 Skip-gram 模型中,我们需要的是 p(Context(w)|w),p(Context(w)|w) 需要通过计算 p(u|w) 的累乘积来得到(u 是所有包含在 Context(w) 中的词)。而每个 p(u|w) 的的计算方式,与 CBOW 中的思想类似。

    前面说,NEG 以随机负采样代替 Huffman 树,其实严格来说,这么讲不对,一种方法怎么代替一种结构呢,只是不再使用 Huffman 树,转而利用负采样近似取得相同的结果,同时大幅提高了性能。

    其实 NEG 本质采用的方法还是最大似然估计,类似逻辑回归(Logistic Regression),增大正样本的概率同时降低负样本的概率。

    比如对于基于 NEG 的 CBOW 模型,已知 w 的上下文 Context(w),需要预测 w,因此,对于给定的 Context(w),w 就是一个正样本,其他词就是负样本了,那负样本那么多,该如何挑选呢?

    接下来介绍负采样算法,这本质上是一个带权采样问题,词典 D 中的词在语料 C 中出现的次数有高有低,对于那些高频词,被选为负样本的概率就应该比较大,反之,对于那些低频词,其被选中的概率就应该比较小。

    接下来再谈谈 word2vec 中的具体做法,其实与我在《浅谈深度学习基础(上)》中提到的吉布斯采样类似,如下图所示:

    假设词典 D 中共有 N 个词,每个词对应一段长度,这个长度与其在语料 C 中的出现频率正相关,也即图中的上半部分,一个有 N 个剖分区间的非等距剖分。假设存在 M>>N,图的下半部分是对同样总长度的等距剖分,拥有 M 个剖分区间。

    这样,对于正样本 w,每当我们需要抽取一个负样本,就从 M 个剖分区间随机抽取一个,找到其对应的非等距剖分区间所对应的单词,作为负样本。这样,在语料中词频越高的单词就越容易被选中。另外,如果负样本采样时正好抽到了我们的正样本 w,那就跳过去继续抽取。

    LSA、pLSA、LDA

    除了 word2vec 所采用的 CBOW 和 Skip-gram 以及神经概率语言模型之外,还有很多不同模型可以用来估计词向量,其中就包括在《浅谈推荐系统基础》详细讲过的LDA(Latent Dirichlet Allocation),以及与其类似的主题模型 LSA(Latent Semantic Analysis)pLSA(probabilistic Latent Semantic Analysis)

    通常 LDA 的效果要好于 LSA 和 pLSA。

    先简单回顾一下 LDA,LDA 模型是这样引入的:

    假设我们需要生成 M 篇文章,每篇文章包含 N 个单词。LDA 模型包含了 α β θ z w 五个参数,一个生成任务对应一对 α β,α 决定主题向量 θ 的分布,每篇文章对应一个主题向量 θ,主题向量 θ 决定主题 z 的分布,文章中的每个单词对应一个主题 z,主题 z 与 β 一起决定每个单词的分布。

    LDA 的联合概率分布如下:

    LDA 可以合理的将单词归类到不同的隐含主题之中;并且通过计算两篇文章主题向量 θ 的 KL 散度(相对熵),可以得到两篇文章的相似性。

    LSA 与 pLSA 这里也简单介绍一下原理。

    LSA 的基本思想其实就是将文章从稀疏的高维空间(基于 one-hot representation 的词向量)映射到一个低维的向量空间(基于Distributed Representation 的词向量),我们称之为隐含语义空间(Latent Semantic Space),那如何做到的呢。

    《浅谈机器学习基础(下)》中,我介绍过 SVD 的这样一个用法:SVD 可以应用在自然语言处理中,利用矩阵分解的思想估计出同义词类、文章主题以及同义词类与文章主题之间的关系。

    和 PCA 采用特征值分解的思想类似,LSA 就采用了 SVD 的方式来求解 Latent Semantic Space。

    pLSA 是对 LSA 的优化,引入了概率模型,但并不够完善。LDA 在 pLSA 的基础上进一步优化了概率模型,自从诞生之后便蓬勃的发展,广泛应用于个性化推荐、社交网络、广告预测等各个领域。

    SMT、DSSM、Sent2Vec

    然后回到朱凯华 PPT 中提到的 SMT 模型:

    我找到了 PPT 中图的出处,出自 Jianfeng Gao 的这篇论文 Clickthrough-Based Translation Models for Web Search: from Word Models to Phrase Models

    这篇论文的主要意思是,查询语句与文档中所使用的词汇以及语言风格的差异,会给搜索引擎带来挑战。所以 Jianfeng Gao 等提出了将翻译模型引入传统检索模型的想法。文章中尝试训练了两个不同的翻译模型,一个基于词的翻译模型用于学习单个词之间的翻译概率,而另一个基于短语的翻译模型用于学习多词短语之间的翻译概率,这两个模型被集成到了传统检索模型中,发现可以得到更优的搜索质量。并且一些标准的统计机器翻译技术,如字对齐,双语短语提取等,也可以被用来构建更好的网页文献检索系统。模型的训练集来源于用户的点击日志,文章认为用户的查询语句与用户最终点击的文档标题具有一定的语义相关性,这就是题目中 Clickthrough-Based 的来源。

    朱凯华的 PPT 中所提到的统计机器翻译模型,指的就是这个。既然 SMT 模型就是为了解决词汇以及语言风格之间的差异问题,那它能够通过计算词之间的相似性以提高搜索质量就是理所应当的了。

    在查询 SMT 模型相关文献的同时,我发现了同样出自微软之手的 DSSM(Deep Structured Semantic Model),出自论文 Learning Deep Structured Semantic Models for Web Search using Clickthrough Data

    DSSM 的提出背景与 SMT 模型基本相同,同样是致力于利用语义匹配理解文档与查询语句间词汇使用以及语言风格的差异,以进一步提高搜索质量。DSSM 同样基于用户点击数据来训练模型。

    DSSM 具有三个特点:

    • 采用基于三字母(tri-letter)的词哈希方式来表示长短不同的单词
    • 采用深度神经网络来抽象高层次的语义表示
    • 采用用户点击数据来有监督的训练模型

    举个例子,什么叫做基于三字母(tri-letter)的词哈希方式。比如词『#cat#』,它的三字母表示方式就是『#-c-a』、『 c-a-t』、『a-t-#』。这与在《浅谈语音识别基础》 中所提到的三音素异曲同工。

    关于 DSSM 模型的效果,文中有这样一张图:

    其中,NDCG(Normalized Discounted Cumulative Gain)是用来衡量搜索质量的指标。其计算公式如下:

    Gain 定义了每条结果的质量,Position discount 使得排名越靠前的结果权重越大,NDCG 通过累积计算前 k 条结果的质量来定义搜索质量。

    然后重新回到图中,图中讲基于点击日志的 DSSM 模型,要优于同样基于点击日志的 Word Translation Model(即百度 PPT 中提到的 SMT 模型)等,也优于基于文档集的 LSA、pLSA 和 Deep Auto-Encoder(在《浅谈深度学习基础(上)》中有详细讲解),也优于传统的 BM25 模型。只是不知道为什么没有与 LDA 比较。

    基于 DSSM,微软开放下载了 Sent2VecSent2Vec 将一对短字符串(比如查询语句与用户点击的文档标题)映射到一个连续低维空间,这样就可以利用余弦相似度来计算短字符串对之间的语义相似性。

    简单总结一下,word2vec 可以通过词向量估计词之间的相似性,Sent2Vec 可以通过字符串向量估计短字符串对之间的相似性,LDA 在估计长篇文档之间的相似性时,效果较好。

    反义主题命中

    然后我们重新回到 PPT 中来:

    其实归一化命中、同义词命中、主题命中都是对任何一个查询语句中的词,建立一个相关词表,每个相关词配上一个权重,如果文档中出现了任意一个相关词,都会得到大小不等的正向贡献。比如归一化命中贡献为1,同义词命中贡献为 0.8,主题命中的权重更小。

    这样的建模方式有一个根本性的限制,就是相关词列表不能太大,否则模型大小会爆炸,无法实用。

    在这种方式的基础上我们还可以更进一步,就是建模词与词之间的反义关系,比如『爱/恨』,这样当某个词在查询中出现,那包含其反义词的文档,理论上应该进行适当降权。

    建模词反义关系的做法与主题命中中的方法类似,任意两个向量都可以计算距离,而距离有正有负。

    百度 DNN 模型

    之后在 PPT 中,朱凯华更进一步讲了百度的做法,下图为百度 DNN 模型初版结构:

    通过一个 DNN 模型来计算查询 Query 与用户最终点击的文档 title 之间的语义相关性。中间绿色的 Looking up Table 是 Word Embedding 层。

    然后是进行 Pairwise loss 训练的 DNN 模型结构:

    前面说 SMT 模型(Word Translation Model)和 DSSM 都是基于用户点击数据进行训练的,这里 PPT 中给出了一种可行的利用用户点击数据的训练方式,其目的是建模同一个 Query 下有点击和无点击的文档标题之间的语义差异。

    其实在《浅谈搜索引擎基础(上)》中,已经介绍过了机器学习排序算法下三种可行的训练方式,分别为:单文档方法文档对方法文档列表方法。而这三种方法的英文名称,就分别为 PointwisePairwiseListwise

    Pointwis 方法的主要思想是将排序问题转化为多类分类问题或者回归问题。也即预测查询语句与文档标题之间的相似度(回归问题),或预测查询语句与文档标题之间的相似级别(多类分类问题),然后根据相似度/相似级别进行排序。

    Pairwise 方法是目前比较流行的方法,效果也非常不错。它的主要思想是将 Ranking 问题形式化为二元分类问题。也即处理的对象为文档对 <Doc1,Doc2> ,我们利用训练好的模型为 <Doc1,Doc2> 做二分类,一类是 Doc1 排序前于 Doc2,另一类则相反,依次来得到不同文档之间的排序。在训练时,就如 PPT 中所说的,以同一个 Query 下用户点击与否作为训练数据的来源。举个例子,比如在同一个 Query 下,用户点击了 Doc1,那 <Doc1,Doc2> 的二分类结果就应当为 Doc1 排序前于 Doc2,由此我们就得到了带标注(labeled)的训练数据,也可以依此来做监督学习训练我们的 DNN 模型。

    Listwise 方法相对于前两种(Pointwise,Pairwise)而言,不再将 Ranking 问题直接形式化为一个分类或者回归问题,而是直接对文档的排序结果(List)进行优化。至于优化方法,我们比较自然想到的是直接利用排序评价指标,比如《浅谈搜索引擎基础(上)》中讲过的 P@10 和 MAP,或者是前面提到的 NDCG,但是问题在于 NDCG 这样的评价指标通常是非平滑(连续)的,而通用的目标函数优化方法针对的都是连续函数。针对排序问题的优化函数有:

    • RankCosine:使用正确排序与预测排序的分值向量之间的 Cosine 相似度(夹角)来表示损失函数
    • ListNet:使用正确排序与预测排序的排列概率分布之间的 KL 距离(相对熵)作为损失函数

    接下来 PPT 中以『ghibli车头如何放置车牌』为例讲解的 DNN 模型对搜索结果的影响:

    在上线 DNN 模型之前,搜索上述 Query,搜索引擎完全不能理解 Query 的含义,毕竟 BM25 模型只考虑了 IDF 因子、文档词频、文档长度因子和查询词频,如果文档与 Query 中的词不重合,那 BM25 模型也没有办法。

    而在上线了 DNN 模型之后,DNN模型成功捕获了 Query 中『车头』和 Document 中『前』、『前面』的语义关系;捕获了 Query 中『如何放置』和 Document 中『放哪里』、『怎么装』、『咋挂』的语义关系。

    朱凯华讲,其实这是在训练的100亿样本中,有一些样本体现了这样的语义关系,被 DNN 模型学习到了。两个例子如上图,那是两个用户点击过的 Query/Document 对。

    然后是进一步分析的例子:

    如果 Query 和 Document1 都完全相同是『三岁小孩感冒怎么办』的时候,DNN 的预测分数是-15;如果我们在 Document1 后面加『宝宝树』,预测得分立刻大幅提高了(升到-13),虽然『宝宝树』这个词没有出现在 Query 中,但是DNN模型认为这个词和 Query其他部分是有语义相关关系的,所以给出了正向的贡献。如果我们在 Document1 后面加了『搜房网』,预测得分立刻下降了(降到-15.8),因为 DNN 模型认为这个『搜房网』的出现和 Query 其他部分语义更不相关,所以给出了负向的贡献。这个例子中,其实D2、D3 和 D1 的区别都是增加了一个和 Query 没关系的 Term ,在传统的 Information Retrieval(信息检索)中是一定会给 D2、D3 一样的相关性得分,而区别不出两者的差异。

    后面两个例子类似,DNN 能够区分『宝宝』和『小宝宝』类似,而和『狗宝宝』语义不相关。『励志格言』与『格言』类似,而『幼儿教师』和『幼儿』语义不相关。

    然后朱凯华提到了 DNN 模型的发展方向:

    至于图中提到的 SNE,是一种高维数据可视化工具:

    百度 CNN 模型

    将 CNN 模型应用在 NLP 中能够更好的建模短距离依赖关系,PPT 中给出了 CNN 模型与 BOW-DNN 模型的比较:

    BOW-DNN 模型无法考虑词序,所以不能区分 Query 中的『葫芦岛北到北京西』和『北京西到葫芦岛北』,给出了一样的得分;而 CNN 能够知道哪个才是语义相关的。

    第二个例子也是同理,CNN 能够区分『我被好友删除』和『好友被我删除』之间的语义差别。

    CNN for NLP

    《浅谈深度学习基础(下)》中,其实已经详细的介绍了 CNN 的结构,但文中只是将 CNN 看做计算机视觉系统的核心结构,并没有提到 CNN 在 NLP 领域的应用。

    这里我阅读了《UNDERSTANDING CONVOLUTIONAL NEURAL NETWORKS FOR NLP》以及李航老师等的 Convolutional Neural Network Architectures for Matching Natural Language Sentences,对 CNN 在 NLP 领域的应用有了一个基本的了解。

    在 NLP 中应用 CNN,CNN 的输入不再是图像像素,而是由句子或文档表示而成的矩阵。通常情况下,表示方法如上图所示,每一行代表一个词的词向量,这个词向量可以是通过 word2vec 等得到的 Distributed Representation 的词向量,甚至也可以是利用 one-hot representation 的词向量。这个矩阵,或者说『图像』的行数是单词的个数,而列数等于词向量的维数。

    接下来是卷积过程,图中所用的六个卷积核宽度均与矩阵的宽度相同,否则会将同一个词的词向量割裂,这是与图像识别中的卷积核不同的地方;另外,它们的高度分别为 4 个词、3 个词和 2 个词,它们的卷积步长为 1 个词。由此得到 6 张不同的 feature maps。

    之后对 feature maps 进行最大池化,记录下每张 feature map 中的最大值;随后将其连接起来,组成一个特征向量;最后对这个特征向量进行处理,得到我们所需的分类结果。

    在 CV(Computer Vision,计算机视觉)中使用 CNN,低层抽象与高层抽象的物理意义是较为明显的,一般低层抽象发现图像的边缘等特征,高层抽象是低层抽象的组合,抽象程度更高,所记录的特征也更复杂。而在 NLP 中,这样的物理意义似乎并不太明显,因为具有相关关系的词并不一定紧邻着出现在句子中,而图像中同一个物体一般会由相邻的像素来表示。

    CNN 在 NLP 领域有一些常见应用,比如情感分析、垃圾信息监测、主题分类、关系抽取和关系分类等。

    李航博士的论文之中提到了 CNN 在语义匹配中的应用,提出了卷积语句模型(Convolutional Sentence Model)和两个卷积匹配模型(Convolutional Matching Models):ARC-1 和 ARC-2。

    其中,卷积语句模型的示例如上图,其实与前文提到的 CNN 在 NLP 中的基本用法相类似,将句子表示成以词数为行数、词向量维数为列数的矩阵,对其进行多次卷积和池化,最终得到固定长度的特征向量。

    需要特别注意的是,图中第一次卷积的结果,一竖列为一张 feature map,竖列的个数为不同卷积核的个数。De 为词向量的维数,F1 为不同卷积核的个数。

    卷积匹配模型 ARC-1 其实原理很简单,就是拿两个句子分别过一下上面的卷积语句模型,得到特征向量,再将这两个特征向量输入到一个 MLP(multi-layer perceptron,多层感知机)中,去计算匹配度,其示意图如下:

    不过有人实验后提出,如果直接像图中一样连接两个向量作为输入送给 MLP, 效果并不好,因为会丢失边界信息,MLP 不知道 a 与 b 两个特征向量的分界在哪,更优的方式是将 [a, b, aTWb] 整体作为输入给到 MLP,一定要有 aTWb 这项。

    相比较而言,ARC-2 的结构反而与 CNN 在 CV 中的应用更相似一些,其示意图如下:

    ARC-2 尝试让两个句子在得到像 ARC-1 结果那样的高层抽象表示之前就进行相互作用,不再先分别通过 CNN 结构得到各自高层抽象表示。

    可以这样理解,ARC-2 将两个句子看做了二维图像的两个维度,两个一维的句子结合成了一张二维的『图片』,然后将这张特别的『图片』作为 CNN 结构的输入。

    这导致在 ARC-1 模型中,一张 feature map 仅仅是一个列向量,或者说是一个一维矩阵,若干个列向量并在一起形成了 ARC-1 示意图中的模样(二维),而在 ARC-2 中,一张 feature map 成为了一个二维矩阵,若干个二维矩阵叠在一起形成了 ARC-2 示意图中的模样(三维)。

    再之后的卷积、池化过程就与 CV 中 CNN 的卷积、池化过程类似了。

    需要注意的地方,第一个仍然是,在 1D 卷积层中,涉及到将两个词向量连接,直接连接仍然会存在丢失边界信息的问题,采用前文提到的方案可以得到更优结果。另外,直接用传统 Word Embedding 方法得到的词向量来表示句子作为 CNN 的输入可能不是最佳方案,利用已经过了 LSTM 的 hidden state 效果可能会更好。

    百度 RNN 模型

    通过 RNN 可以建模长距离的依赖关系:

    RNN Language Model

    《浅谈深度学习基础(下)》中,简单提及了 RNN 并对 LSTM 的结构进行了较为详细的介绍,但是对 RNN 的应用提及不多,这里主要参考这篇《The Unreasonable Effectiveness of Recurrent Neural Networks》,以一个基于 RNN 的简单的字符级语言模型(Character-Level Language Models)为例来介绍 RNN 语言模型。

    对于 RNN,我们需要知道,RNN 的当前输出并不只取决于当前输入,前一个隐层状态与当前输入共同决定了当前隐层状态,而当前隐层状态决定了当前输出。而且 RNN 的输入输出均为序列:

    我们希望能利用 RNN 搭建一个简单的语言模型,这个语言模型拥有一个只包含四个字符『h、e、l、o』的单词表。我们希望能通过训练使得该模型拥有输出『hello』的能力,具体来讲,也即当上文为『h』时输出『e』,上文为『he』时输出『l』,上文为『hel』时输出『l』,上文为『hell』时输出『o』。

    下图为这个 RNN 语言模型的示意:

    RNN 的输入输出采用的是 one-hot representation 的词向量,最开始的隐层状态被初始化为零向量,上一隐层状态与 W_hh 相乘后与当前输入向量与 W_xh 相乘后的结果相加后过一个 tanh 激活函数,再与 W_hy 相乘得到输出向量。输出向量中拥有最大权值的分量所对应的字符被视为输出字符。

    我们希望通过训练使得输出向量中绿色加粗的权值能够尽可能大,而红色权值能够尽可能小。

    另外,从图中可以发现,当输出为『e』时,hidden layer 向量中第三分量最大,而输出为『l』时,第一分量最大,输出『o』时,第二分量最大。所以 RNN 语言模型同样可以产生类似于神经概率语言模型词向量的 Distributed Representation 的词向量,并且,前文中也确实提到过,如果将 CNN 的输入替换为 LSTM 的 hidden state 可能会得到更好的结果。

    还有,我考虑这样一个问题,如果 RNN 语言模型的输入输出用的不是 one-hot representation 而是 Distributed Representation,然后输出就是一个 Word Embedding 的结果,我们找到词向量空间中与输出向量最接近的 k 个词,然后为其分配一定的概率来决定输出字符,这样会不会有更好的结果?(我并没有找到对应的论文,也不知道这个想法是否已经被实践了,只是顺着思考下去)

    《The Unreasonable Effectiveness of Recurrent Neural Networks》原文中另外采用莎士比亚的文集训练了 RNN 语言模型,也得到了不错的结果。

    知识推理

    知识图谱

    我们希望通过引入『知识』,利用推理能力,能够更直接的给出用户答案,而不是给出用户相关网页的集合。

    为了实现这样的目的,第一个方向就是采用知识图谱推理:

    《浅谈知识图谱基础》对知识图谱的结构以及相关技术架构做了一个粗略的介绍,这里再简单回顾一下:

    知识图谱的逻辑结构分为两个层次:数据层模式层

    数据层通常以『实体-关系-实体』或者『实体-属性-值』三元组作为事实的基本表达方式。

    模式层通常采用本体库来管理,存储的是经过提炼的知识。

    知识图谱的构建技术分为三个步骤:信息抽取知识融合知识加工

    信息抽取是一种自动化地从半结构化和无结构数据中抽取实体、关系以及实体属性等结构化信息的技术。涉及的关键技术包括:命名实体识别关系抽取属性抽取

    知识融合对数据进行清理和整合,包含 2 部分内容:实体链接知识合并。实体链接的主要技术为实体消歧共指消解。知识合并指从第三方知识库产品或已有结构化数据获取知识输入,常见的知识合并需求有两个,一个是合并外部知识库,另一个是合并关系数据库

    知识加工用于获得结构化,网络化的知识体系,主要包括3方面内容:本体构建知识推理质量评估

    本体构建包含 3 个阶段:实体并列关系相似度计算实体上下位关系抽取以及本体的生成

    知识的推理方法可以分为2大类:基于逻辑的推理基于图的推理。基于逻辑的推理主要包括一阶逻辑谓词描述逻辑以及基于规则的推理。基于图的推理主要基于神经网络模型Path Ranking 算法

    质量评估可以对知识的可信度进行量化,通过舍弃置信度较低的知识,可以保障知识库的质量。

    PPT 中显示百度支持不同种类的基于知识图谱的推理,比如『主语+谓词』,比如『刘德华的老婆』:

    支持『谓词+取值范围』方式的推理,比如『180cm以上的男明星』:

    支持『谓词+排名』方式的推理,比如『世界第五/第八/第十高峰』:

    还有多步推理,比如『谢霆锋的爸爸的儿子的前妻的年龄』:

    另外,需要注意的是,有些问句需要先对其进行句法分析,才能确定如何查询知识图谱,比如:

    百度采用了依存语法对用户问句进行句法分析。

    依存句法分析与语义依存分析

    《浅谈自然语言处理基础(下)》对依存句法分析进行过较为详细的介绍,这里结合哈工大语言云再回顾一下。

    **依存句法分析 (Dependency Parsing, DP) **通过分析语言单位内成分之间的依存关系揭示其句法结构。 直观来讲,依存句法分析识别句子中的『主谓宾』、『定状补』这些语法成分,并分析各成分之间的关系。示意图如下:

    在查找文献的过程中,我发现了比依存语法分析更进一步的语义依存分析,语义依存分析是在我之前的文章中没有提到过的。

    语义依存分析 (Semantic Dependency Parsing, SDP),分析句子各个语言单位之间的语义关联,并将语义关联以依存结构呈现。 使用语义依存刻画句子语义,好处在于不需要去抽象词汇本身,而是通过词汇所承受的语义框架来描述该词汇,而论元的数目相对词汇来说数量总是少了很多的。语义依存分析目标是跨越句子表层句法结构的束缚,直接获取深层的语义信息。其示意图如下:

    与依存句法分析相对比,语义依存分析所得到的结果更能反映句子的语义。依存语法分析识别句子中的『主谓宾』、『定状补』这些语法成分,而语义依存分析着重寻找的是:主要语义角色事件关系语义依附标记

    常见的语义依存关系如下:

    知识图谱推理的两大限制及三种解决方案

    基于知识图谱推理有一些关键的限制,限制之一是知识图谱有盲区(Blindness),图中是一个 bush wives 的例子:

    一旦某概念不在知识图谱中,知识图谱会做一个它自己尽可能好的解释,但它可能和真正的解释相差很多。比如『从百草园到三味书屋』,确实有地方叫百草园,也有地方叫三味书屋,一个只关注地理位置 POI 的知识图谱就会觉得他是一个完美匹配导航需求的 Query。但放大来看,大家都知道他是鲁迅的一篇散文。

    基于知识图谱推理的第二个限制是静态的图谱很难描述用户意图的分布以及变化

    举例来说,『天龙八部』这四个字,可以是小说,游戏,电视剧,电影。并且如果当前有一部电影叫做『天龙八部』上映了,那搜索结果也应该做适当的调整。

    只用知识图谱向用户提高答案是不够的,通常只能覆盖 1%~2% 的 Query。

    而搜索能够帮助知识图谱解决盲区和意图分布的问题:

    搜索通过为知识图谱提供上下文,帮助其解决盲区所带来的问题,并可以更好的理解用户的真实意图。而知识图谱能够帮助搜索引擎理解搜索的 Query 和结果,能够更直接的给予用户答案。

    知识图谱与搜索结合的常见方式有三种:知识图谱+搜索+长答案知识图谱+搜索+结果聚合知识图谱+搜索+知识实体

    知识图谱+搜索+长答案

    朱凯华讲这是自动识别最佳答案段落(Paragraph Ranking)的问题,其实与自动摘要(automatic summarization/abstracting)技术的原理类似。

    这里要区分一下自动摘要与前面提到过的信息抽取,自动摘要是利用计算机自动实现文本分析、内容归纳和摘要自动生成技术,而信息抽取则是从自然语言文本中自动抽取指定类型的实体、关系事件等事实信息的应用技术。

    自动摘要常见的方法有两种,一种是基于图的方法,另一种是基于特征的方法

    基于图的方法将文档的每句话作为节点,句子之间的相似度作为边权值构建图模型,用 Page Rank 算法进行求解,得到每个句子的得分。边的权重隐式定义了不同句子间的游走概率。这些方法把做摘要的问题看成随机游走来找出稳态分布(Stable Distribution)下的高概率(重要)的句子集。基于图的自动摘要算法的代表有 TextRank 和 LexRank。

    基于特征的方法通过考虑句子长度、句子位置、句子是否包含标题词等特征来发现文档中的关键句,代表算法是 TextTeaser。

    但前面的方法往往都只考虑了相关性而没考虑多样性,排序后得到结果的缺点之一便是无法避免选出来的句子之间相似度极高的现象,可能排名靠前的几句话表达的都是相似的意思。

    针对句子过于相似的现象,有人提出引入惩罚因子,这就是 MMR (Maximal Marginal Relevance,最大边缘相关模型) 算法。基于 MMR 的变种,有人提出了玻森新闻自动摘要算法,可以方便的平衡句子的相关性和多样性,并提供了可供调用的 新闻自动摘要 API

    知识图谱+搜索+结果聚合

    结果聚合这里用到了情感分析(Sentiment Analysis)的技术。因为有些问题可能目前并没有一个权威的答案,众说纷纭。我们就可以通过情感分析了解,有多大比例的人持赞同意见,以提供给用户参考。

    情感分析由易到难分为三个层次:

    • 分辨积极/消极情绪(PPT 中的做法)
    • 为情绪评级,由消极到积极
    • 检测出情绪的主体、客体以及复杂的情绪类型

    情感文本分类可以大致分为有监督学习方法半监督学习方法无监督学习方法三类。

    有监督学习方法利用大量标注样本,并结合各种特征和特征权值选择策略,使用机器学习方法进行情感分类。半监督学习方法通过少量标注样本进行初步训练,之后利用大量未标注样本进行学习,以此构建分类模型。无监督学习方法仅使用非标注样本,比如可以利用一些情感分类标注中的种子词集来实现无监督分类。

    知识图谱+搜索+知识实体

    将搜索与知识图谱结合可以处理一些对于知识图谱而言难度很高的问题。比如『王刚第二任妻子是谁』这个 Query 其实对知识图谱理解的要求很高:要理解这个第二,不是年龄第二,不是身高第二,而是结婚时间排序第二。

    利用语义分析可以得出『是谁』询问的是一个人;利用搜索可以找到与该 Query 相关的上下文内容;利用知识图谱可以找到上下文中哪些实体是人。

    朱凯华讲,百度可以直接回答用户 7% 的 Query:

    对话式OS

    概述

    我一直持有一个观点:对话交互是人机交互的未来,因为对话交互就是当前人与人沟通最重要的方式。

    我们创造了计算器,可以类比于发现了一个语言不通的原始部落,我们需要先去学习他们的语言,这是沟通的基础。而当我们学会了他们的语言之后,就要开始逐步教会他们我们的语言,因为作为一个高级文明,我们语言的沟通效率要更高,并且对于人类来讲,沟通门槛更低,也更自然。

    而且实在难以想象,我们未来对家里的台灯、洗衣机、扫地机器人等智能设备下命令时,还要走到它身边按按钮。

    阿里小蜜的分析文章将对话系统分成了两层,分别是:意图识别层问答匹配层

    意图识别层识别语言的真实意图,将意图进行分类并进行意图属性抽取。意图识别层是一个结合上下文数据模型与领域数据模型不断对意图进行明确和推理的过程,决定了后续的领域识别流程。

    问答匹配层对问题进行匹配识别及生成答案,经典的问题类型有三种:

    • 问答型:例如『密码忘记怎么办?』
    • 任务型:例如『我想订一张明天从杭州到北京的机票』
    • 闲聊型:例如『我心情不好』

    特别的,我个人把这类虚拟个人助理(Virtual Personal Assistant,VPA)执行任务的过程分为三个阶段:

    • 理解阶段:即理解人类的需求,常用技术有语音识别、图像识别、自然语言理解等。
    • 思考阶段:即寻找需求的解决方案,常用技术有搜索引擎、推荐系统、知识图谱等。
    • 执行阶段:即完成人类的需求,常用的技术有自然语言生成、智能家居/物联网以及目前被用来满足需求的其它技术。

    并且,不同种类的任务对于不同阶段的侧重程度也不同,比如『明天下午三点提醒我去开会』、『后天杭州冷吗,会不会下雨』侧重于理解;『什么样的衬衫比较适合我』、『第 30 任美国总统是谁』侧重于思考;『开始扫地/洗衣服/烧水』、『开灯/关灯』侧重于执行。

    对于『对话式OS』这部分,下文准备先讲解一些问答领域的关键技术,再针对上文提到的经典问题类型分场景来讨论解决方案。

    DuerOS 与 POMDP 框架

    PPT 中提到了 POMDP 框架,POMDP(Partially Observable Markov Decision Processes,部分可观测马尔科夫决策过程)是 **MDP(Markov Decision Processes,马尔科夫决策过程) **的扩展,而 POMDP、MDP 与浅谈自然语言处理基础(上)中讲过的 MC(马尔可夫链)和 HMM(隐马尔科夫模型)又有一定相关性,示意图如下:

    我们容易理解 MC 到 HMM 是状态由可见变为了不可见;由 MC 到 MDP 多考虑了动作,我们可以以下棋为例,每个状态到下个状态的转移不仅和当前状态有关,还和当前状态我们采取的动作有关;由 MDP 到 POMDP 的过程同样是状态由可见变为不可见的过程,也同样举个例子,MDP 中,在明确当前状态的前提下,与动作结合后,确定下一个状态,而 POMDP 中,我们并不明确知道当前状态,只知道当前状态不同可能性的概率,这样我们的决策过程就要考虑到当前状态的不同可能性。

    下文将会讲到的强化学习还会重新提到 MDP 这部分内容。

    朱凯华提到,从整个对话系统来说,DuerOS的整体是符合POMDP的框架的。采用POMDP的框架有很大的好处:

    • 整个系统可以整体建模每个环节的出错可能性
    • 整个系统可以整体建模几轮对话后用户最终给予的反馈

    PPT 中还提到了整个『对话式OS』系统的基本组成部分,从 ASR(自动语言识别)到 NLU (自然语言理解)到 DST(对话状态跟踪)到 DM(对话管理),之后选择直接执行动作或者进行 NLG(自然语言生成)和 TTS(语音合成)。

    按照我之前的任务过程的三个阶段来划分,图中的 ASR、NLU、DST 是理解阶段,DM 是思考阶段,Action、NLG、TTS 是执行阶段,也是完全符合我的构想的 :)

    ASR 与语音纠错

    PPT 中还介绍了百度的语音纠错技术,利用了RNN的序列标注能力,来找到语义上可能的替换点,然后通过上文提到过的 Skip-gram 检索最终产生正确的替换。

    但是作为 PM,我个人对这个功能持保留意见,这个功能用起来很蛋疼:

    • 一是整个用户群体对这种功能的认知程度不高,不了解这个功能
    • 即便了解这个功能,还需要会拆字,对用户来说太麻烦,学习成本高
    • 即便会拆字,怎么让用户相信他拆字说的那一大段话你都能识别正确,心理成本太大
    • 而且用户更正的方式确实是千奇百怪多种多样的,理论上是个无限集,怎么保证识别率

    所以这样的情况理论上式存在的:用户说了一句话,出现了识别错误,用户语音纠错,结果纠错语句被识别错误,用户继续语音纠错,结果越来越错,从今往后用户再也不会用这个功能了。

    对于这类 VPA,你能做到什么功能并不是最重要的事情,最重要的事情是让用户相信,通过你来满足这个需求的预期心理成本要低于他之前的做法,这样他才会来用你。而这种预期心理成本又包括了解成本、学习成本、信任成本以及你产品功能未达预期的损失成本等等。

    综上,这部分技术我不再做详细介绍。

    NLU 与 Slot Filling

    Slot Filling 是完成之前提到的任务型问题的重要技术,百度采用一个字符级的双向 LSTM 和 CRF 层来做序列标注,再利用序列标注的结果做填槽。

    这里先来说一下双向 LSTM,LSTM 结构在浅谈深度学习基础(下) 中有过详细的讲解,这里就不重复了,这里的重点主要放在双向上。

    我们知道 RNN 的一个突出优点是能够解决长距离的依赖关系,这对于自然语言处理是非常重要的,因为语言中一词多义的情况很多,很多时候没有上下文就无法对词的真实含义进行准确的判断。但是普通的 LSTM 存在一个问题,就是只能利用上文中的信息,而如果能像访问过去的上下文信息一样,访问未来的上下文,这样对于许多序列标注任务是非常有益,这就是双向 LSTM 的基本思想。

    上图为双向 RNN(BRNN) 的结构示意图,与前文中的单向 RNN 的示意图比较,可以发现,双向 RNN 中的输出不再只取决于 Forward Layer 中的隐层状态,而是同时取决于 Foward Layer 与 Backward Layer 中的两个隐层状态;当前输入也同时影响 Forward Layer 与 Backward Layer 对应位置的隐层状态。

    而双向 LSTM,就是将 BRNN 中的普通 RNN 单元更换为 LSTM 单元。

    百度的做法如下图所示:

    这里举了一个例子『王乐君伪装者观看』,先经过自动分词浅谈自然语言处理基础(中)中有详细介绍)拿到划词边界,并以 0/1 的方式存储。

    随后将每个字进行 Word Embedding,拿到字向量,作为双向 LSTM 的输入,而从图中来看,双向 LSTM 的输出是一个具有两个分量的向量。

    仔细观察的话可以发现,CRF layer 中,对『剧名』和『演员』的标注是以 IOB 方式进行的:I 为词中、B 为词首、O 为词外。实际上在浅谈自然语言处理基础(下)中,就提到,基于语块的语义角色标注方法利用 IOB 等方式将语义角色标注作为一个序列标注问题来解决。而且基于语块的语义角色标注方法一般没有论元剪除这个过程,因为 O 相当于已经剪除了大量非 base NP,也即不可能为论元的内容。论元辨识通常也不需要了,base NP就可以认为是论元。

    看起来,在 CRF Layer 中,序列标注是这样进行的。首先有多少个/种类的槽需要填写,LSTM 的输出向量中就存在多少个分量,然后在 CRF Layer 中,将向量进行拆解,不同输出向量中相同位置的分量被放在一起处理,作为该特定槽位所需的序列标注素材。

    至于 CRF(条件随机场),在浅谈自然语言处理基础(中)中有过详细介绍,这里就不重复了。

    DST(对话状态跟踪)、上下文替换、主体补全

    对话状态跟踪就是根据多轮的对话来确定用户当前的目标(user goal)到底是什么的过程。

    在封闭域的任务型问题中,对话状态跟踪以槽位的填写为核心,下文中会有讲解。这里主要说一下开放域中的状态跟踪:

    开放域中状态追踪的核心是上下文替换主体补全。从图中来看,上下文替换将上文中的动作加给当前句子中的主体,而主体补全为上文中的主体执行当前句子中的动作;上下文替换是去上文中找动作,主体补全是去上文中找主体。

    这两个经典问题很适合用来测试开放域 chatbot 的多轮对话能力,我测试了一下图灵机器人:

    发现它在上下文替换方面做过优化,而主体补全做的就不好了:

    回答完全不知所云。

    这里还要与知识图谱中的实体消歧和共指消解做一下区分,实体消歧是区分同名实体,共指消解是为实体的代称找到对应的实体,比如『他/它/她/这』是什么;而这里的上下文替换和主体补全的场景是对话,而不是文档,很多事情代词也会被省略,仅通过共指消解无法起到这里主体补全的作用。当然也并不是一点作用都起不到,只是上下文替换和主体补全更适合对话的场景。

    这里重新放一下百度的 PPT:

    这里采用了 BIE 的标注方式,与前文中的 IOB 相比,多了对词尾的标注 E。

    百度通过 RNN + CRF 来做到的状态更新:用户顺序说Q1,Q2,百度看到Q2会直接更新理解为Q3。从图中来看,上下文替换/主体补全的基础和填槽一样,仍然是序列标注,BIE 标注识别主体,如果句子中没有主体就从上文找;如果句子中只有主体,就代入到上一句,替换掉上一句中的主体。

    seq2seq、Encoder-Decoder、Attention Model

    既然谈到了开放域的对话问题,就不得不说到 seq2seq 了。seq2seq 是 Google 开源推出的一个具体实现了 Encoder-Decoder 框架,并结合了 Attention Model 的一个序列转换模型,可以被用于机器翻译、文本总结,会话建模、图像字幕等场景,其示意图如下:

    先说什么是 Encoder-Decoder 框架,Encoder-Decoder 框架可以看作是一种文本处理领域的研究模式,其最抽象的一种表示如下图所示:

    如果采用 RNN 来实现 Encoder-Decoder 框架,一种常见的模型配置如下图所示:

    上图所示的模型客观上存在两个问题:

    • 第一个是,输入序列的所有信息都需要靠图中 C 的记忆模块来存储,C 的记忆模块实际上成为了整个网络性能的瓶颈
    • 第二个是,以翻译场景为例,将『Tom chase Jerry』翻译为『汤姆追逐杰瑞』,在翻译『汤姆』时,『Tom』和『chase』、『Jerry』的权重相同,这显然是不应该的

    依照这样的思路,Attention Model 被提出了,其示意图如下:

    以 RNN 为例,将其细化,如下图:

    输出序列中的每一个字符产生时,不仅考虑了当前输入(实际上通常为输出序列的上一个输出字符)和上个隐层状态,还为输入序列的输出(下图中的 h1 到 h5)分配了不同权重,一并考虑进来:

    一般文献中会把 Attention Model 看做单词对齐模型,这在机器翻译的场景下表现的尤为突出:

    输入序列中的不同字符对输出序列产生某一特定字符所起到的作用显然应该是有区别的,就像读英文篇章做阅读理解,一道题目的答案通常也出自篇章中特定的几句话,将注意力平均分配给所有内容是不应该的。

    在 Google 提供的 seq2seq 的示意图中,紫色的粗细代表了输入序列中的不同字符对当前输出序列产生字符的影响大小。

    DM(对话状态管理)与 Reinforcement Learning(强化学习)

    在对话状态管理阶段,主要是系统需要选择合适的 Action 来动作。

    PPT 中举了一个度秘高考的例子,通过与考生对话,引导考生进一步了解他关心学校的信息,来最终做出决定。

    百度把这个 Dialogue management 的问题构建成一个 MDP 问题(由于在实际产品中并不知道考生最终填报了哪个志愿, Reward 被设计成每次交互都会给出显示的奖惩),放在经典的 Reinforcement Learning 的框架中来求解。

    接下来介绍 Reinforcement Learning,针对强化学习,南京大学的俞扬博士有过两篇文章:强化学习前沿(上)强化学习前沿(下),非常详尽,我这里只是概要的介绍一下。

    其实我在第一篇文章浅谈机器学习基础(上)中就提到过强化学习。可以这样理解,强化学习与训练动物的过程类似,动物面对一个未知环境,驯兽师发出指令后,如果动物做出了正确的行为,就会得到奖励。强化学习也是同理,是一个让机器学习正确动作并最大化总奖励的过程。

    强化学习与监督学习不同,如下图所示:

    监督学习是一个开环的学习过程:

    • 通常,监督学习任务会从环境中收集一批数据
    • 接着我们用监督学习算法从数据中产生模型
    • 最后就可以用这个模型来做预测了

    而强化学习,是一个闭环学习过程:

    • 首先,也是从环境中产生数据;
    • 用强化学习的算法从数据中产生模型;
    • 还要把模型放回到环境中运行,接着又会产生新的数据出来,再重复以上步骤。

    总结起来,两者最核心的区别,在于强化学习需考虑自身对环境的影响

    强化学习的历史非常悠久,其中,早期的强化学习和它的一个数学模型 MDP 有很大关系,也就是前文中提到过的马尔科夫决策过程,其示意图如下:

    马尔科夫决策过程里有一个四元组,即状态、动作、奖赏、转移;每个状态可能做不同的动作,所以转移概率也不同。

    早期的强化学习是完全以 MDP 为数学基础的,对它来说也是要找一个策略,这个策略就是选择不同动作会有不同的概率,或者是确定性策略,在一个状态就输出一个动作。

    求解马尔科夫决策过程上的最优策略,就是找到马尔科夫决策过程中总回报最大的策略。

    在计算回报时,会涉及到 V 值函数Q 值函数

    V 值的含义是从当前状态出发,经过足够长时间之后,所估算出的该步的回报是多少。但是如果只计算 V 值,从中导出策略并不方便,它表示的是总的回报,而我们需要选择动作,也即知道哪个动作所导致的下个状态的 V 值更好。

    为了避免麻烦,我们引入 Q 值函数,Q 值函数比 V 值函数多了一个动作输入,它要估计的是在当前做了动作 a 以后,再跟着这个策略 π 一直做下去,它的回报是多少。有了 Q 值函数,看到状态 s 后,把每个 a 带进去,看哪个 a 出来的 Q 值大,就用哪个 a。所以这样就可以在当前状态直接决定用哪个动作了。

    Q 值和 V 值是有直接的对应关系的,如果按照策略来选择动作,平均的 Q 值就是 V 值。

    寻找最优策略通常有两种方法:

    • 第一种方法:首先评估给定一个策略的 V 值,然后找一个方向来提高这个策略,重新计算 V 值来做策略迭代
    • 第二种方法:直接通过V值来更新V值,这一方法称为值迭代

    上面讲了 MDP,但是 MDP 并不是强化学习,因为它的四元组都已给出,特别是奖赏和转移。你任给它一个状态和动作,都可以算出奖赏值;转移也是,输入一个状态、动作以后,它会告诉你转移出来的状态是什么。

    而在强化学习任务中,奖赏和转移都是未知的,需要通过学习得出。具体解决办法有两个,一个是基于模型(Model-Based)的方法,另一个是免模型学习

    基于模型方法就是构建出强化学习所对应的 MDP 模型,再在 MDP 模型的基础上去求解策略。从随机策略开始,把策略放到环境中运行,从运行的序列数据中把 MDP 抽象出来。因为序列数据可以提供环境转移和奖赏的监督信息,简单的做一个回归,就能知道一个状态做了一个动作下面会转移到哪儿,以及能得到的奖赏是多少。但是基于模型的方法计算起来往往比较复杂,现在的研究工作大多专注在免模型学习上。

    免模型学习和之前讲到的策略迭代的思路很像,首先,评估当前策略怎么样;第二,提高当前策略。主要方法有两种:一种叫做蒙特卡罗采样方法(Monte-Carlo method),一种是时序差分法(Temporal Difference method)

    蒙特卡罗采样方法的本质是利用采样来计算 Q 的期望值,比如简单的,我们可以直接采样环境中的数据,来估计 Q 的值。但是这种简单的方法存在一个问题,就是由于缺乏对环境的探索,没有足够多种类的数据,无法评估策略在所有情况下的可能性,导致 Q 值的更新可能会存在问题。

    所以我们需要对环境进行探索,得到不同动作的 Q 值。我们可以探索尽可能多的次数,来确保 Q 值估算的准确性,但花费了太多机会在 Q 值低的动作上;也可以不同动作都只探索一次,然后根据这一次的 Q 值估算结果,将剩余的机会都给予这次估计中 Q 值大的动作,这就是一个寻找平衡点的问题了。

    有一种理论上相当漂亮的 UCB(Upper Confidence Bound)方法被用来处理这个问题,简单的讲,两个动作的平均 Q 值差距越大,探索次数就越少。

    而且对于策略而言,存在 On/Off Policy 策略的区别,简单的说 On Policy 就是策略中包含探索,而 Off Policy 的话,探索是探索,策略是策略,通过带探索的策略采样,但更新的只是策略本身。

    另外,蒙特卡洛采样算法有一个很突出的缺陷:一定要拿到整个轨迹以后,才能更新模型。而时序差分法每走一步都可以更新模型。

    在时序差分法中,On Policy 策略对应** SARSA 算法**,Off Policy 策略对应 Q-Learning 算法

    前面所讲的这两种方法,处理的都是离散的情景,但真实环境中有很多问题无法离散的来表示,为了能让强化学习方法能够处理连续场景下的问题,又有两种方法被提出了,分别是:值函数估计(Value function approximation)策略搜索(Policy Search)

    策略搜索可以学出随机性策略,不同于值函数的确定性策略;并且策略搜索和监督学习的兼容性比较好;在高维数据下的表现也好一些。

    阿里小蜜技术实践分析

    上文已经对自然语言问答所涉及到的技术进行了概要的讲解,这里准备以阿里小蜜为例,具体的探讨不同问题场景下的技术选型,以《颠覆传统的电商智能助理-阿里小蜜技术揭秘》为参考。

    首先,为了匹配问题场景,需要进行意图识别

    将用户相关特征、用户行为序列、Query+Context 等,表示为前文讲过的 one-hot representation 或者 Distributed Representation 的词向量,作为输入送入 DNN 模型,可以直接进行多分类,也可以进行多次二分类。多分类的性能要优于二分类,而二分类的复用性较好。

    之后进入到具体问题场景的处理阶段,前文提到,经典的问题类型有三种:问答型任务型闲聊型

    而目前主流的智能匹配技术分为如下 4 种方法:

    • 基于模板匹配(Rule-Based)
    • 基于检索模型(Retrieval Model)
    • 基于统计机器翻译模型(SMT)
    • 基于深度学习模型(Deep Learning)

    模板匹配就是基于规则的自然语言处理了,通常是基于上下文无关文法搭建一个解析系统,由人工编写或机器生成一些匹配句式,配合同义词典来处理用户问句。

    检索模型上文提到过,BM25 就是一个典型的例子。

    SMT 上文也提到过,通过将翻译模型引入搜索,来建模词与词之间的语义相近关系。

    基于深度学习模型的上文也提到过很多,比如神经概率语言模型、word2vec、DSSM、基于 CNN的、基于 RNN 的。

    对于问答型问题,其特点是:有领域知识的概念,且知识之间的关联性高,并且对精准度要求比较高。

    基于问答型场景的特点,阿里小蜜在技术选型上采用了知识图谱构建+检索模型相结合的方式来进行核心匹配模型的设计。所谓『知识图谱构建+检索模型』,与前文百度的『知识图谱+搜索』是异曲同工的。

    知识图谱的构建方法在《浅谈知识图谱基础》中有详细的讲解。

    知识图谱在模型构建初期可能会存在数据的松散和覆盖率问题,导致匹配的覆盖率不足,也就是前文提到的『盲区』问题;原文中还提到了知识图谱的维护成本较高;原文中没有提到,但必定存在的是,仅凭知识图谱无法分辨用户具体意图,也就是前文提到的『用户意图』问题。所以除了知识图谱,还要配合传统的检索模型,阿里小蜜检索模型的基本流程如下图:

    其实主要也就是搜索引擎里面的那些东西,可以参考《浅谈搜索引擎基础(上)》《浅谈搜索引擎基础(下)》两篇文章。

    计算模块阿里小蜜用的是空间向量模型,利用余弦相似度等计算文本之间的相似度。不过改成概率检索模型 BM25,再配合前文提到的归一化命中、同义词命中、主题命中和反义主题命中,可能会得到更好的结果。

    然后是任务型问题,特点是有领域知识的概念,每个任务负责独立的业务流程,任务之间相对互斥性强,精准度要求高。

    基于任务型的特点,在技术选型上,阿里小蜜采用了意图决策+Slot Filling 的方式进行会话匹配设计。

    所谓意图决策,就是找到对应的领域本体知识场景,比如机票的场景:

    而意图决策其实就是分类,和词性标注、词义消歧、实体消歧、意图识别这些方法类似,比如可以用上下文特征向量和余弦相似度来聚类(无监督)、用朴素贝叶斯算法(有监督生成模型)、用最大熵模型(有监督判别模型)、或者把上下文 Embedding 了送进一个 DNN 里也是可以的(深度学习)。

    找到对应的领域本体知识场景之后,就要开始填槽了,做 Slot Filling 的方法前文也有涉及,百度用的是双向 LSTM+CRF。

    阿里的基本流程是,在问答匹配过程中结合上下文模型和领域数据模型不断在 Query 中进行 Slot Filling,并循环进行本体意图树的不断填充和修改,直到必选意图树填充完整后进行输出,如下图:

    核心就是把所有必填的槽位都填好,没填好就追问,这也是封闭域中的一种可行的多轮对话方式。

    但是其实任务型问题远不止这么简单,就比如上文中提到的帮助用户填报高考志愿这样的一个任务型问题,不是通过追问填好槽位 A B C 就能输出结果的。这种任务型问题涉及到状态的转移,用户在询问的过程中不断了解,不断澄清,系统要不断选择合适的 Action 来引导用户逐步明确自己的意向,最终填好最重要的那个槽。比如『我该怎么填写高考志愿』,难道直接问用户『你想去哪所学校』、『你想报哪个专业』来填槽?。这样的问题通过 Reinforcement Learning 来处理可能会是不错的方法。

    然后就是闲聊型了,特点是非面向目标,语义意图不明确,通常期待的是语义相关性和渐进性,对准确率要求相对较低。

    不过我个人有个观点,就是『不能通过图灵测试的chatbot,其价值不如个人助理』。

    阿里小蜜的闲聊型问题的解决方案是检索模型与 Deep Learning 相结合

    检索模型就不说了,所谓 Deep Learning 的方法,就是指前文中的 seq2seq、Encoder-Decoder、Attention Model那些了。

    阿里小蜜的聊天引擎,结合了两者各自的优势,将两个模型进行了融合。先通过传统的检索模型检索出候选集数据,然后通过 seq2seq 对候选集进行 Rerank,重排序后超过指定的阈值就进行输出,不到阈值就通过 seq2seq 进行答案生成,整体流程如下图:

    后记

    花了半年,看了几百万字的材料,写了将近 20 万字的文章,从机器学习、深度学习、自然语言处理、语音识别、推荐系统、搜索引擎、数据挖掘、知识图谱的经典模型和基础知识,到综合前面的所有内容来构建自然语言问答这块的技术基础,到今天,终于算是圆满完成给自己定下的毕业前的任务了。也希望我能在 3-5 年后,成为能够独当一面的人工智能产品经理 :)

    作者:我偏笑_NSNirvana 链接:https://www.jianshu.com/p/3a9f49834c4a 來源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • 文|佘凯文 来源|智能相对论(aixdlun) “在经历了糟糕的客服体验后...日前,国际研究机构IDC就发布了一组名为《中国对话式人工智能市场,2020》的报告,报告主要体现了在企业服务资源需求增加的背景下,企业正大量引

    文|佘凯文

    来源|智能相对论(aixdlun)

    “在经历了糟糕的客服体验后,骂骂咧咧的挂断电话”,相信这个场景每个人都不会太陌生,“无休止的等待、冗长繁琐的认证、莫名其妙的分类、一堆毫无作用的回答,最后还希望你对此次服务做出评价。”

    这是过去十多年客服体验的一个缩影,也庆幸这正在成为过去式,随着新型的智能软件解决方案的出现,“客户服务”不再是一个恼人的话题。

    日前,国际研究机构IDC就发布了一组名为《中国对话式人工智能市场,2020》的报告,报告主要体现了在企业服务资源需求增加的背景下,企业正大量引入对话式人工智能能力用于多渠道的产品服务销售与客户管理等工作。

     

    在此之中,百度智能云被评为行业“领导者”,但这个结果对于百度智能云而言可能也没有太多惊喜。

    一、“对话式人工智能”爆发,百度成为“领导者”不意外

    “对话式人工智能”,通俗的说可以是“人工智能小助手”,能够完成与用户、客户的正常对话,捕捉语境并提供智能响应。这种技术放在市场层面也许更易感知:现阶段AI生态系统正在不断丰富,采用对话式人工智能技术的智能语音+文本客服已经广泛出现在金融、零售、医疗、制造、政府、教育等等领域。对于这一变化,IDC也在报告中指出,“得益于聊天机器人和智能对话终端应用的大规模落地,对话式人工智能市场正驱动着整个人工智能软件市场的发展。而到了2024年,这一技术在中国的市场规模将达到15.6亿美元。

    有市场的地方,就会有江湖,对话式人工智能技术亦是如此,基于这一庞大的市场,国内出现了一批技术厂商,且呈百舸争流之势。因此,IDC通过评估核心技术、产品化能力、定制化能力、落地应用数理及生态构成等方面,提出了一批优质“对话式人工智能”技术提供商,其中百度智能云在能力和战略两个维度均显著领先其它厂商,在评估中处于领导者位置。

    二、“善钓者谋趣,不善钓者求鱼”

    所谓“善钓者谋趣,不善钓者求鱼”,直白理解就是“会钓鱼人的,其在意的是过程,不会钓鱼的人他的追求只是上鱼。”

    对于百度智能云而言,“对话式人工智能”是镶嵌在百度整个人工智能体系里面的一个点,做好“对话式人工智能”或许和“善钓者”钓鱼一样,“上鱼”只是一个必然过程。

    当然,想要成为一名“善钓者”也是有前提的。

    1、“善不善钓”好渔具都需必备

    即便浸淫人工智能多年,但想要成为“领导者”还是需要硬核支撑,百度智能云有哪些硬核实力?IDC也在报告中则给出了较为详实的解释。

    第一,专注语音语义技术,并提供覆盖智能客服应用、联络中心、云通信等完备的一体化解决方案;比如百度语音日均调用量已经超过155亿次。又比如在自然语言理解领域,百度文心(ERNIE)在多项中文NLP任务上效果全面超越BERT。7月9日,文心(ERNIE)摘得2020世界人工智能大会最高奖项SAIL奖。百度打造的知识图谱基于知识中台, 提供多专业亿级别规模图谱的高效构建。

    第二,可以提供标准化的产品,以快速的集成能力降低项目实施成本,并注重产品开放性,将易用的产品能力和开放接口赋能业务和技术。

    第三,积累了大量实施方法经验,以人才、运营、最佳实践的三位一体智能服务方案赋能各行业,注重人才培养。

    从技术、到产品,再到生态,不难看出这些优势为百度智能云在“对话式人工智能”领域成为“善钓者”打下了坚实基础。

    2、“善钓者”必然“善打窝”

    在工具备齐后,“钓鱼”还有一步至关重要就是“打窝”,“窝”打的好不好,将直接决定吸引鱼的数量,带到产业领域其实就类似于一个“生态”。百度智能云的相关负责人曾在公开场合表示,百度智能云所追求的是为用户实现“节流、智能、开源和触点”这四大价值。据公开数据显示,百度智能客服产品已经有70多家客户,覆盖了金融、能源、运营商、航空、地产、政府、教育、物流、航空、汽车等多个行业,还获得了多个行业级创新奖项。

    三、“善钓”的百度智能云到底在“钓”什么?

    可以看见,百度智能云对于“对话式人工智能”也是下了大力气的,当然不止是为了博得一个行业领先的名头,归根结底是百度智能云看到市场背后更大的价值。

    1、“企业服务智能化”形成价值裂变

    企业服务的难题已经困扰市场多年,特别是现在需求是起来了,但是“服务模型”却跟不上了,进一步加剧了“市场对于高质量服务的需求与企业能力有限难以达成”之间的矛盾。

    例如,在客户选择的问题上,“大客户”与“小客户”的服务需求显然不同,且在同类型客户中,又因个体差异会出现其它不同,为此企业需要准备大量的服务标准与内容,无形间使企业压力倍增。

    而通过智能的语音对话、服务机器人等多种形式,就让企业完成千人千面的服务成为可能。

    还有突发性事件,同样在加重企业服务的负担,如今年“黑天鹅”事件袭扰,让大量机构、医院压力陡增,所以“企业服务智能化”的需求已经是“迫在眉睫”。

    像百度智能云在疫情期间大放异彩,就是因为通过其AI技术赋能社会公共服务,免费对外提供了智能外呼服务,为防控争取了更多时间的同时,并释放大量人力去做更具针对性的的防疫工作。对整体疫情防控及后来的复工复产提供了宝贵助力。

    2、客服服务的替代与增值

    在客服服务领域另一趋势是,单纯的客户服务正转向客户营销,之前在进行客户接待时,以解决用户问题为主,客户有什么问题,客服人员就处理什么。而现在,客服人员处理问题的着眼点要从访客咨询向全局服务过渡。

     

    但是传统的人工客服却很难解决这一问题,比如他不了解具体的用户喜好,也不清楚用户习惯,所以也导致传统模式只能被动的“解决问题”。

    智能客服的出现则完美实现了这一需求,企业可通过访客轨迹、访客名片等功能,来获取到用户此前的行为记录及习惯,用户画像将贯穿整个客服路径,在解决用户问题的同事,还能完成营销环节,提高消费者消费行为的转化与复购率。

    这么一来,智能客服的出现就不仅仅是减少了资源消耗,还能由成本中心向盈利中心转型。

    基于此,百度智能客服已经实现了多维度的落地,如联合浦发银行打造的银行业首个数字人员工“小浦”就是智能客服的成功范例。用户打开浦发银行APP,通过语音呼唤“小浦小浦”,即可实现与小浦一对一的个性化互动。只要说出个人投资目标、投资期限、投资金额以及风险偏好后,小浦即可精准推荐匹配该名用户的理财产品、基金和资产配置方案。小浦可通过人脸表情识别技术,实时感知用户情绪变化,还通晓不少金融理财基础知识,实时为用户答疑解惑。数字人在减轻银行人力成本同时,让客户足不出户就能获得真人一样的情感交互体验,以及“千人千面”的个性化金融服务。

     

    对于这一款产品,有专业人士盛赞:小浦的出现,不只是改变了企业的营销效率,甚至可能彻底颠覆了企业与客户的沟通方式。

    3、满足“欲壑难填”的服务化需求

    “对话式人工智能”最大的价值则是在于满足市场“欲壑难填”的服务化需求。

    网上有个段子,是说某游戏大厂“没有客服”,为此已经引得无数“声讨”,其实并非是“没有客服”,也有语音客服,但解决问题的能力趋近于没有,而人工通道则是一年四季的“人满为患,无法拨通”。

    一个有能力的“智能客服”的重要性已经不言而喻,通过智能化的升级,帮助企业重塑和优化组织分工,在任意时间和地点为用户提供一致性和延续性的服务,已经是“十万火急”。

    总之,从企业价值提升出来看,还是从用户服务体验而言,“智能客服”领域的前景都十分广阔,所以“企业服务智能化”、“客服营销化”、“无差别服务”成为了既是需求也是趋势的存在,百度智能云也是早就看到了这些“大鱼”,所以才会早早动身,“备好工具、打好窝”静待“一钓惊人”。

    四、总结

    无论如何,“对话式人工智能”的重要性已经不言而喻,特别是在“智能经济”的浪潮下,B端市场也好,C端市场也好,“对话式人工智能”都已展现出了其独特优势,而行业中以百度智能云为首的行业态势也逐步形成,未来“对话式人工智能”还将展现出更大的价值空间。

    深挖智能这口井,同好添加vx:zhinengxiaoyan

    此内容为【智能相对论】原创,

    仅代表个人观点,未经授权,任何人不得以任何方式使用,包括转载、摘编、复制或建立镜像。

    部分图片来自网络,且未核实版权归属,不作为商业用途,如有侵犯,请作者与我们联系。

    智能相对论(微信ID:aixdlun):

    •AI产业新媒体;

    •今日头条青云计划获奖者TOP10;

    •澎湃新闻科技榜单月度top5;

    •文章长期“霸占”钛媒体热门文章排行榜TOP10;

    •著有《人工智能 十万个为什么》

    •【重点关注领域】智能家电(含白电、黑电、智能手机、无人机等AIoT设备)、智能驾驶、AI+医疗、机器人、物联网、AI+金融、AI+教育、AR/VR、云计算、开发者以及背后的芯片、算法等。

    展开全文
  • 爱因互动是做对话服务的,是一家 To B 的公司。我们服务的内容是用对话的形态来交付企业的价值。为了提高对话的效率、质量,我们采用了人工智能技术。在这个过程当中,我们会涉及到更加偏售前的方式,会做更
        

    洪强宁 / 爱因互动 CTO 

    前豆瓣首席架构师,TGO 北京分会成员。编程 30 余年,11 年互联网从业经验。

    640?wx_fmt=png&wxfrom=5&wx_lazy=1

    16年的时候,我离开宜信出来创业,与原来豆瓣的首席科学家王守崑一起创立了爱因互动这家公司。爱因互动是做对话服务的,是一家 To B 的公司。我们服务的内容是用对话的形态来交付企业的价值。为了提高对话的效率、质量,我们采用了人工智能技术。在这个过程当中,我们会涉及到更加偏售前的方式,会做更多的个性化推荐,促进交易转化,所以是一个多轮对话的过程。这种对话机器人的主题会与微软小冰那样的闲聊机器人的主题有很大区别,这两个在对话机器人行业里属于两种技术路线。


    人工智能时代正在来临


    640?wx_fmt=png

    人工智能时代正在来临,现在每天都可以听到AI这个词。我在创业决定走入这个行业之前,和守崑一起回顾了从互联网出现到现在差不多30年的时间中,都有哪些标志性的事件使得我们的技术得到突飞猛进的发展。最早的时候是在互联网商用的时候,即互联网诞生,这件事情我觉得意义非常重大,不亚于早期的工业革命,其实它也被称为“第三次工业革命”。互联网出现这件事情,使得整个人类的信息开始流通,互联互通,从这个时候开始人类的知识联系在一起了。从这个时代开始科学技术得到了非常快速的发展,这是因为联通在一起之后,整个人类成为一个共同体,它的进化、发展速度都比之前快很多。

    第二个标志性的事件是Mosaic Web浏览器发布,开始进入Web时代,只要打开浏览器全世界的事情随时可以收集到。这个事情是第二次提速,使得我们的发展速度变得更快。

    第三个是在06、07年左右的时候,连着发生三件大事:第一件事情是谷歌发表了被称为“三驾马车”的分布式系统论文,这个使得我们处理大数据的能力具备了。原来的时候一个数据太大,超过了单机处理能力的时候,就会非常地难处理,需要切片,考虑各种各样的故障,怎么恢复等。但谷歌的这三篇论文其实在很大程度解决了这个问题,通过这三篇论文,产生了整个Hadoop的生态,基本上各家公司都会采用这个方式解决大数据的问题。

    第二件事是亚马逊发布了AWS,这是“云”的开端,我们获取计算资源直接从云上摘就可以了,随时随地可以有非常大量的计算资源可以使用,而且很廉价。

    第三件事是苹果发布了iPhone,这件事开启了移动互联网时代。所以我把那段时间称为移动互联网时代和云计算时代,这个时代一共有10年时间,现在大家已经非常习以为常了,每天都揣着手机使用互联网。做云计算的也是,大家都已经非常习惯了,做一个项目在云上直接开机器,大数据处理也不是问题。在这里还产生了大量的数据,我们每时每刻,24小时都是连上网的,这些数据可以被存储在云端,然后可以使用大数据的计算框架进行处理,这使我们进入了一个新的时代。

    另外一个是AlphaGo战胜李世乭这件事。我觉得这是一个标志性的事件,标志着人工智能的通用技术开始体现出它的价值,具备了之前的人工智能不能具备的能力。我觉得这一波人工智能的兴起是真的来了,进入到了一个人工智能的时代。

    人工智能时代为什么到现在才可以成为现实的事情呢?这跟前面那十年的发展是分不开的,我们有产生和处理大数据的能力,有云计算的能力,在这两个基础之上才存在现在的人工智能算法的可能性。因为现在的人工智能算法是以深度学习算法为代表的,而这个算法是非常消耗计算能力的。也正是出于这个角度考虑,我认为人工智能是下一个10年甚至更长时间内的一个大事情。


    UI的进化


    640?wx_fmt=png

    另外一个角度来说,我们和计算机系统,或者说和互联网系统,是通过一个UI界面来交互的,人工智能的发展使得UI交互也发生了非常深刻的变化。可以回顾下非常早期的时候,那个时候用的是DOS,还没有Windows,包括现在程序员在服务器上也是要使用命令行。命令行就是一个非常典型的人机交互界面,这个界面是命令式的,人去命令机器做一个事情,而且是要人去适配机器。因为机器只懂特定的命令,所以需要去学习机器能理解的命令,这是最早期的时候人机交互的方式。

    后来Windows出现,开始进入到图形化界面(GUI)的方式。与命令行(CLI)交互方式的主要区别在于增加了一个能力——“发现”。使用者不再需要事先去学习机器能懂什么了,现在东西都展现在屏幕上面,能够直观地去看它能做些什么,所以是一个发现式的界面。

    现在我们可以看到各种各样的技术在往上发展,比如AR技术,VR技术,语音技术等,其实都是在导向自然UI的方式。就是说我们在和机器交互的时候,和我们与真实的物理世界去交互是一样的。我们人和人之间说话是用自然语言去沟通,当我们看见一个东西的时候是可以去拨弄它的。典型的场景比如说触摸屏,以前的时候都是拿鼠标点,现在我们可以真的去摸那个东西了。GUI的一部分也属于自然UI的组成部分。

    这边的CUI指的是Conversation UI,它属于NUI中的一类。指的是使用者可以用对话的方式与机器进行交互,不需要事先学习机器能听懂什么话,只需要使用原来与人沟通的方式就能与机器交互,这是一种机器适配人的形态。这是UI下一步的发展方向。


    两种形态的差别

    640?wx_fmt=png

    大家对GUI已经非常熟悉了,GUI大概统治了我们有20年了,大家都很习惯使用GUI了。CUI并不是GUI的替代品,但是它能够在一定程度上补充GUI的不足。GUI更加重视信息展示的广度,能够在一个屏幕上面,把你可能感兴趣的东西全部展现出来,人要做的事情是从中发现自己真正感兴趣的那部分。而CUI是一维的,它更加重视的是深度,就这一个主题,用户接下来感兴趣的内容是什么,针对这个主题反复地进行挖掘。

    第二个是指给人的直接观感。GUI更加重视空间感,布局中什么东西放上面,什么东西放下面,哪个地方需要加粗,哪个地方是醒目的颜色等,这些东西是一个空间的感觉。而对话UI更加强调的是时间感,我刚刚说了什么,我很久以前说了什么,这个对人的感觉是不一样的,大家的注意力都会放在最近发生的事情上。这个对话是线性流动的,是一个时间的感觉。

    第三个,在GUI的情况下更强调共性。我们在使用各种APP的时候,其实每个人心里会有个预期,我看到的和其他人看到的差不多,我今天看到的和之前看到的也差不多。但在CUI的情况下是不一样的,没有人想每天在一个对话的交互界面里反复地重复相同的对话。它一定是非常个性化的,针对我此时此刻的需要来发生变化的。

    另外就是GUI是很稳定的,基本上我们期望的是熟悉了一个界面之后,这个界面最好不要再发生大的变化,这样使用的时候效率最高。而在CUI的情况下面,我们是希望它能不断进化的。我之前跟你说过的话,以后就不要再提了,因为我已经告诉过你了。这是GUI和CUI在交互上典型的不同。所以CUI其实是非常重视沟通的,希望你能够不断地跟我说话,就某个话题去深入,然后你能够知道我关心的是什么,曾经是个什么样的需求,现在能不能解决我的需求,会更加关心这个。

    640?wx_fmt=png

    CUI它本身不是独立的技术,并不独立产生价值,它只是一个界面而已。它真正产生价值是使用对话这种方式,把真正有价值的东西表达出来,传达给用户。包括像个性化推荐,刚才提到了在对话的情况下,它是适合个性的,适合进化的场景,所以个性化推荐是非常适合使用对话技术来完成的。此外还有定向广告,数据挖掘等,我能够了解你的细节,去展现跟你相关的东西。以及在我业务场景下的一些细节的知识,可以通过对话的方式展示给用户。


    对话机器人的应用场景


    640?wx_fmt=png

    对话机器人目前能够落地的场景,大概有这么三类。一类是个人信息助理,类似Siri这种。一类就是客服和导购的机器人,在商业上面可以通过机器人的方式服务一个用户,向他介绍产品,销售,然后做售后服务。还有一类是泛娱乐的,就是做陪聊性质的,满足的是情感需求。三类场景都有人在做,我们做的是第二类的客服导购机器人。


    对话的不同形态


    640?wx_fmt=png

    在导购这个情况下,它是一个非常复杂的形态,并不是说你问我一句话机器人回答一句话就完了。仔细地分一下,可以把对话的形态分为三类。一类是人主导的对话,人发出需求,我想要一个什么,问一个什么,然后机器人来回答,回答完了以后再问新的,然后机器人再回答,这是一个响应式的。第二类是机器人主导的对话,机器人问你要什么,你说我要这个,然后机器人再问,你再回答。还有一类是交叉的,人去问一个,机器人反问,人回答了,机器人再回答前一个问题的答案。大致上可以分成这三类。


    • 人主导的对话 - 单轮问答

    640?wx_fmt=png

    主导的对话中最简单的形态,也是现在最成熟的形态,是单轮问答。所谓的单轮就是说,用户说一句话,机器人回一句,这事就结束了,下一句话和这句话没什么关系。比如说问机器人什么是外汇储备,然后机器人会告诉你外汇储备是什么意思,这个问题就答完了。一问一答,这是最简单的形态。

    640?wx_fmt=png

    要做这件事情,基本上整体架构是和搜索引擎差不多的。搜索引擎其实就是个一问一答的结构,你搜一个问题,然后它告诉你答案,下一个搜索跟上一个搜索没什么关系。中间是一个检索模块,从一个知识库里面去检索。检索的时候因为是对话形态,相较于搜索引擎它会多做些事情,它会更加关注你想要问的东西是什么,或者你问的这个问题在文档里面有没有出现。所以会做一些同义词的替换,可以使用复述句的方式扩展你可能的问题,更好地去命中知识库。可以使用深度学习的方式来产生词向量或者句向量,使得更好地完成同位词的替换,这样可以减少知识库构建的压力。检索到之后会去做匹配,过滤掉一些不合适的,然后排序。这基本上和传统的搜索引擎是一致的,只不过在深度学习出现之后,可以有一些更好的算法,在大量语料的情况下获得更好的结果。


    • 人主导的对话 - 多轮问答

    640?wx_fmt=png

    但之前提到过,CUI的特点是有时间维度的。人和人之间对话的时候,不会是每一句话都和上一句没关系的,这和搜索不一样。这里有一个典型的场景,比如问什么是基金,然后机器人告诉我什么是基金。接下来我问有风险吗,这句话其实是有隐含条件的,因为我刚刚问你的是什么是基金,所以这里不是问股票有没有风险,是问基金有没有风险。所以这个时候要匹配到的是一段话来解释基金有没有风险。这是人主导的对话中多轮问答的典型场景。

    640?wx_fmt=png

    这种场景现在主要的解决方法是通过NLP的技术,对句子进行句法分析,这个其实是已经发展了很多年的技术,就是通过指代消解的方式。第一个问题来的时候,我们做句法分析,分析出主谓宾的句子成分,把句子成分存储到一个上下文空间里。下一个问题来的时候,“那有风险吗”,这句话是没有主语的,所以就到上一个句子的Context里去查,把基金拿出来做为一个主语,变成“那基金有风险吗”,然后拿这句话去知识库里查。这就是一个非常经典的指代消解的方法。同样地,有时候我们有主语,但是主语是代词,“它”、“这个”、“那个”,也可以用相同的方法去做替换。


    • 人主导的对话 - 闲聊

    640?wx_fmt=png

    人主导的对话还有一种形态,闲聊。闲聊在最近深度学习起来之后其实是研究非常多的地方,当然在商业场景下闲聊的作用不是特别大,因为在商业场景下我们往往是希望尽可能快地把事情做完,追求的是短的对话轮次来完成任务。而在闲聊的场景下,比如陪伴机器人或娱乐机器人,追求的是能够和人多聊,能聊很多轮次,这个指标是完全不一样的。我们的场景中也会涉及到一些闲聊的情况,会拿闲聊去做兜底,当机器人完不成任务不知道你在说啥时,就会用闲聊的技术来完成。

    640?wx_fmt=png

    这样的对话最典型的做法是用sequence-to-squence这样的深度学习算法来构建一个模型,利用大量的语料去训练它,可以从海量的语料知道你问的这句话以前的人是怎么答的,然后把以前的人答的那句话抽出来。当然sequence-to-squence是把句子拆成了词,在词的层面上来做这件事,生成一句话来回答你。在这个基础之上,还可以做很多的增强,比如可以把一些个人信息注入进来,在谈论什么东西的背景信息也注入进来。这也是一种流派,通过这种方式去学习海量的数据,最后有一天就什么都能答了。但是从目前对话技术的发展来看,这条路还处于很早的阶段,真的要让它做到什么都能答,答得有意义答得对,还是有很长的路要走的。

    640?wx_fmt=png

    这里有个解决的问题域的因素要考虑,对话机器人要解决开放域的问题还是解决封闭域的问题。所谓开放域,就是指不管问的是什么样的问题,都应该能找到一个正确的答案。如果这个事情能做到,那它就是开放域的。封闭域是指,机器人只能解决固定的有限集合的问题,超出这个问题范围之内的,它就答不了。从一个已知的答案列表中去获取回复,来回答一个开放域的问题,这是不可能的,因为你无法穷举世界上的所有问题。用Retrieving responses这种方法只能解决封闭域的问题,而这个是非常简单的,比如说前面的问答系统就能完成这件事。如果想要去解决开放域的问题,那就必须使用生成式的回复,通过理解你的问题,动态地去生成一句话,而生成技术现在还非常地不成熟。现在能做到的就是说一些模棱两可的话,不论你说什么反正都能糊弄过去。所以现在在商用场景下面,主要还是用封闭域的技术解决问题。


    • 机器人主导的对话 - 采集信息

    640?wx_fmt=png

    第二种形态是机器人主导的对话,这在商用的场景下是更常见的。因为人主导的对话,你不能控制人只在一个封闭域里面去问问题,经常性地人可能跳出这个封闭域问问题。所以在更加实际的场景下,我们往往把这个话题转成由机器人主导,我问你答,这样人回答的内容一般不会太出格。比如说问人投资目标是什么,给你5个选项,养老、子女教育、购置房产、享受生活、赚更多的钱。所以我可以猜测你的回答应该就是在这五个选项里面,不太可能突然在这种情况下蹦出来一句“你昨天吃了啥”这样的回复。这样的话这个对话就比较容易进行下去,一句一句地把这个事情做下去,类似于填表。

    640?wx_fmt=png

    这种有固定的流程采集信息的情况,可以使用Form-Bot来完成。预先定义好一个个问题,可能的答案有哪些。用户每次回答来的时候,就通过一个中控模块,去判断用户的回答是不是在答刚才的问题。如果是在答刚才的问题,那么就把下一个问题抛给用户。然后中间有一个状态保存,知道现在问到了哪个问题,Travesal本身是无状态的形式。


    • 机器人主导的对话 - 推荐产品

    640?wx_fmt=png

    机器人主导的对话还有一个典型场景是推荐产品。比如这边课程推荐的例子,我已经给用户准备好了一些课程,询问用户想听关于什么的课程。用户说想听大数据的课程,那么我这边有相关的课程就会推荐给用户,看用户喜不喜欢,这时候用户就可以进一步地进行交互。这种形态其实我们在Web页面或者App页面经常能看到,有推荐位这种东西。在对话的形态里面做推荐这件事,它有额外的好处是,可以针对性地推荐,再进一步地提需求。比如用户说这个老师的课以前听过,能不能换一个老师,这时候机器人就可以换一个仍是大数据方面的,但不是当前这个老师的课程给到用户。

    640?wx_fmt=png

    在这个场景下推荐机器人的大致流程是这样的:首先,根据用户的画像及当前用户的需求,可以产生一个推荐产品列表,推给用户,然后用户就可以进行答复。这个时候可以通过分析用户的意图,判断用户的答复是不是对这个产品提出了更细致的要求。如果是的话,就把这个要求返回给推荐引擎,让推荐引擎产生更新过的列表,然后再给用户。直到用户觉得满意了,或者表达出不需要推荐了,才退出这个流程。用这种方法就可以实现一个机器人主导的产品推荐。


    • 人和机器人交叉主导的对话 - 分支问答

    640?wx_fmt=png

    分支问答是在问答场景下由人和机器人交叉主导的对话。人先问一句话,机器人并不直接回答,而是做一句反问。在不能立刻给出答复的情况下,或者虽然能够给答复,但是我的答复有太多的可能性,所以我想要了解更多的细节然后再做答复,这时候就可以做机器人反问。比如说用户注册的时候实名认证失败了,这个时候人可能会问机器人为什么实名认证失败了。机器人从知识库库里了解到,实名认证失败有很多种可能性,如果直接给一大段的文档,那么体验是非常糟糕的。所有这个时候机器人就可以采取分支问答的方式,首先问你名字当中有繁体字吗?没有,那就再看下一个最有可能的问题,你是否改过名字?改过,那之后就可以给用户提供相应的解决方法,这样子就可以实现一个体验更加良好的交互方式。

    640?wx_fmt=png

    这个要实现的话用前面提到的FAQ-Bot和Form-Bot做组合就可以了。FAQ-Bot做问题的匹配,匹配到的答案交给Form-Bot,由Form-Bot去做后续的提问,等到了某个阶段确定了用户的情况,就给出反馈。


    • 人和机器人交叉主导的对话 - 多轮任务

    640?wx_fmt=png

    这是另外一种人和机器人交叉主导的对话形态,是完成一个多轮的任务。用户发出一个指令,想要干什么什么样的事情,想让机器人去做。但是机器人发现想要干这件事情掌握的参数不够,所以机器人要反过来主导对话,把那些不够的参数问出来。这里是一个订餐的场景,用户问“我想预定今晚7点,大董,9个人,有没有包厢?”。这时候机器人要先做意图理解,知道你要定饭店了,但是发现缺个参数,大董在北京有好多家店,到底是订哪一家。所以机器人会再反问一下,确定具体是哪家店。

    640?wx_fmt=png

    再细致地分析下,首先“请帮忙预定今晚7点的大董”这句话,可以通过深度学习或者机器学习的方法,得到一个意图分类器,判断出这种句式是在表达预定的意图。然后根据知识工程我们可以知道当预定餐厅这件事情发生的时候,我们有一些槽位需要填充,包括时间槽位、餐厅槽位、姓名、手机号、分店、人数、包间。知道了这么多信息,就可以去执行这个任务了。经过分析,发现分店信息不确定,这时候机器人就可以进行相应的问询,可以根据定单的历史,如果用户以前老预定某家分店,那么这次很有可能还是那家分店。至于是直接帮他就订了这家分店,还是再问一句进行二次确认,这个可以根据咱们业务的需求来做。

    640?wx_fmt=png

    图中是Task-Bot典型的架构流程。在前面还可以加ASR语音识别,在最后可以加TTS语音输出,这样子就可以实现纯语音的对话。首先做问题的分析,然后开始做问题的理解,理解完以后记录一个当前的状态,有哪些槽位还没有填充。针对每一种状态,去做一个对话策略的优化,可以知道这时候该生成什么样的话能最有效地获得槽位。得到了之后去执行任务,然后用自然语言生成或者模板填充的方式返回一个回复,比如“请提供下手机号及姓名”,这样一下子可以获得两个槽位。这就是Task-Bot典型的实现方式。


    融合对话的不同形态


    前面已经提到三个机器人的对话方式,一个是人主导的,一个是机器主导的,还有一个是交叉主导的,每个都有其特定的应用场景。但如果我们希望机器人能够在现实世界当中发挥价值,往往会发现人和机器之间的对话不是一种形态的,总是要在各种形态间跳来跳去。所以我们需要能够解决这个问题,要在不同的对话模式中切换。

    比如说之前遇到过的一个做风险测评场景,机器人主导的时候,问客户“请问你能不能够承受波动率超过15%的风险?”,期望的是客户说能或者不能。结果用户回答的是“什么是波动率?”,这个时候就要跳到问答的场景,变成人主导的方式,解决客户不懂波动率的问题。去知识库里找什么是波动率的答案,然后把答案返回给客户。波动率答完以后,还是要再回来,接着刚才的情况问客户能否接受15%的波动率。有时候用户说的话会弄错,要有容错的机制,AI行业最苦逼的就是没法做到百分之百的确定,所以一定会有错的情况。这时候可以做确认,“你指的是不是这个?”,这样也会把整个的对话模式给变了。还有就是兜底,我听不懂但是我也没办法去猜你是做什么,所以给你回些模棱两可的话,这也涉及到不同对话模式的切换。

    640?wx_fmt=png

    要解决这个问题,就需要在各种模式的技术之外再加一层,做一个路由的Bot。我需要去知道在当前的状态下,应该使用哪一种对话模式的哪一种对话技术去完成。如果前面的路由Bot还并不能够完整地分析出来的时候,可能事后还要做个融合,根据另外一个反馈模型去判断,这几个Bot给出的回复哪个更有可能是用户想要的回复。这就是一个可以把不同的对话模型整合在一起的方式。

    640?wx_fmt=png

    这是Route-Bot的一个示例,我们内部在Route-Bot和其它Bot之间定义了一个协议,叫做Botlet Protocol,他们按照这个协议互相通信。可以做Pre-route,判断他是不是在问话,如果是问话就交给FAQ-Bot。也可以做Post-route,在FAQ-Bot结束的时候追加一句回应,继续刚才填表的问题。Route-Bot自己会维护一个当前的对话列表,因为有的时候有来一句话并不能确定到底该交给谁。为了完成这一点我们需要增加短期记忆和长期记忆,短期记忆就是前面提到的对话列表,需要能够记住刚刚在聊什么。长期记忆比如说之前告诉过你我叫什么,那以后就不要再问了。


    Chatbot and Cloud

    • SaaS

    640?wx_fmt=png

    首先对于做对话机器人来说,SaaS是非常适合的,后面是服务,前面是各种各样应用场景的接入。最后是通过一个中心化的chat service把它统一成同样的协议,在后面进行统一处理。获得的语料也可以获得统一的训练,这样可以使机器人准确率的提高速度变得非常快,不断地获取新鲜的数据反复地进行训练。


    • PaaS

    640?wx_fmt=png

    在前面的介绍里可以看到,有不同的对话模式,每种对话模式又有不同的具体场景需要使用不同的算法来实现。做AI最苦逼的地方也在这里,有什么样的数据就用什么样的算法,没有放之四海而皆准的算法。在整个过程当中需要不断地尝试,根据数据去调整算法,迭代的速度非常重要。所以我们希望使用一个PaaS平台来加速这个过程,也使得整个的稳定性能得到提升。

    内部我们大概是分这么几层,最下面是IaaS层,我们现在是跑在AWS的云上。因为上面的支撑,其实下面跑在虚拟机或者物理机上都可以。这些是依赖于容器的,只要能够跑容器的地方就可以跑各种的机器人,Docker Swarm及Kubernetes这两个形态都是支持的。这两个形态之上封装了一层应用PaaS,使用了Lain这个组件,是个开源的容器云平台,在应用这个级别去通知它我想要的是什么结果。包括也整合了整个一套开发、部署、测试的体系在里面。在这个之上,因为它是一个通用的PaaS平台,我们主要是做机器人这个项目,所以在机器人之上封装了一个叫subot的PaaS。可以快速地用一个yaml去定义想要的机器人,期望由哪些机器人组件组成,包括一些测试用例也可以放在里面。


    • 微服务

    640?wx_fmt=png

    因为每一个技术环节都是需要去不断地迭代调整,变化非常快,所以我们采用了微服务的架构来获取最大的灵活性。控制台是获得语料的地方,用户上传的语料或者我们自己抓取的语料可以到达控制台,控制台把语料存储下来以后会通知subot平台。subot平台这时候会去通知Overlord。Overlord是我们的训练调度平台,它会启一堆的Trainer,根据不同的场景,会启动相应算法的训练器,获取语料去训练出模型然后保存下来。同时subot也会去通知机器人服务加载新的模型,Brain会让完成这个业务的各个小的Botlet去加载模型,这样模型就上线了。


    对话机器人的大航海时代


    最后要说一下,刚才我也提到了AI行业很苦逼,对话机器人其实也很苦逼。上次我去听李飞飞的演讲,对她的一个说法非常认可,就是说人工智能科学现在还没有达到科学状态,还算是伽利略时代。伽利略时代我们已经可以观测到一些科学现象了,但是科学体系还没有建立起来,真正的物理学科学体系到牛顿那个时代才确立。现在大家是说有些方法有效果,但是为啥,不知道。对话机器人我觉得还要更苦逼一点,我们现在连有些东西是否有效果都还不知道。我们知道有很多技术可以用,在某些场景下能得到不错的效果,但是是否在其它场景都有用,这个不知道,得试。所以更加像一个大航海时代,我们把船开出去,一边开一边看,只要有一天我们能找到个新大陆,这个东西就能解决我们绝大部分的问题。


    Q&A


    提问:我们正常的自然语言进来,SR的方案用哪个?技术角度哪种方案的选择?怎么达到语义的识别?

    洪强宁:其实SR语音识别这个技术已经可以达到了,不知道大家有没有关注,其实还是可以的,在国内效果比较好的,比如说科大讯飞,比如说百度的云识别,在我们的使用下还是不错的,我们客户自己也开始使用了,效果也还可以。但是现在的语音技术都有一个特点,它对语音质量的要求比较高,背景音乐不能太大,麦克风不能太远,口音不能太重,会有些受限,但是如果是手机录音的方式,说的是普通话,基本上属于可用状态,如果你说的话里面有一些专业的词汇,还是需要专门的训练,日常用语可以用了,好的产品在95%以上吧。

    语义的部分,和应用场景去结合,狭义的理解部分,要知道你说的是什么意思。语义量特别少的时候可以用这种。这是一个非常标准的做法,就是手写规则,只有当积累比较多的时候可以建立模型。对知识库查询的状态,比如说什么是基金,问一个基金的意图,因为人工比较大,单独划出来。


    提问:对话机器人这一块真正落地的时候是以SaaS的形式还是什么?

    洪强宁:我们最喜欢的是SaaS,有一些金融客户要求必须使用,对于我们来说技术层面一样的,容器云的那一套,不管底下跑的公有云还是物理机也好,还是私有云,都是一样的跑法,维护成本会升高,我们训练模型,不像在云端。


    提问:假如说对一些金融行业,对数据比较敏感的,真正落地的时候,其实这个数据相当于专门基于它自己的数据,自己在项目里面把知识库的工作全部做了?

    洪强宁:一定程度上是的,知识可以分三层,最底下一层是我们说中国话,说汉语都可以用得到这个知识。中间一层次是行业领域。再往上是专用知识,主要是建模在专用知识,需要和客户一起完成,投入比较大。


    提问:有一个通用模型,用它的语料,然后产生一个知识库?怎么对模型进行评判

    洪强宁:对。现在学界还在研究这个问题,没有明晰的判断标准,我们自己在做还是准确度的判断,机器自己可以给自己判断,准确的判断这些答的,还是得好人外部的判断,我们把这个对话挑出来,然后机器的回答是否符合预期。


    提问:假设达不到客户业务的需求,我这个要通过人工标注反馈给模型再去练?

    洪强宁:反馈有几种,我们现在用的都是监督性学习的方法,要输入才可以,是不是得通过标注的形态,不一定的,因为在运行的时候有人值守,进行交互的时候已经产生了反馈数据。


    提问:刚才提到的Route-Bot可以理解为移动识别的功能?

    洪强宁:是它的一个组成部分,还有下一个识别,分发出去,这个Route-Bot回复以后看是否用你这句话。


    展开全文
  • 本场 Chat 是7月12日 AI 科技大本营在线公开课 NLP 专场的文字版。 适合对象:研发人员,对对话...启发式对话系统; 对话系统中的知识管理; 知识图谱在对话意图理解中的作用; 知识图谱在对话管理中的作用。 报名...
  • 生成式对话系统总结(1)

    千次阅读 2020-04-24 15:02:30
    比如背景信息、用户画像、年龄等) , 构建出一个个性化Sequence-to-Sequence 模型,称为 Speaker Model,为不同的用户,以及同一个用户对不同的对象自然语言生成不同风格的Response,架构如下所示. References
  • 背景:由于CVAE在summary_yxu的代码和讯飞的自己提取出来的对话数据集上,初见成效,于是这次用在一些官方的数据集上和一些对话摘要的baseline上试一下,万一效果也好呢? NOTE:再次提醒自己这次一定要用心,用心...
  • 本文是cs224n关于nlg系列课程中,关于【问答式对话】的介绍。主要介绍了《A Conversational Question Answering Challenge》这篇论文的想法,无具体算法剖析。
  • 图文:两大运营商高端对话

    千次阅读 2010-03-28 23:40:00
    图文:两大运营商高端对话http://www.sina.com.cn 2010年03月28日 15:22 新浪科技为运营商高端对话全景。(来源:新浪科技 俊萍摄)<!-- --> 新浪科技讯 3月28日消息,2010中国(深圳)IT领袖峰会周日在深圳...
  • 这样就实现了一个简单的对话框显示,效果如下: 源代码: LDialog.js var Layer; var picLayer; var textLayer; var textsize=32;//每个对话框可添加长度 var dialog; var ...
  • 2. 机器学习背景知识 本章简要回顾了深度学习和强化学习,这些学习与后续章节中的会话AI最相关。 2.1 机器学习基础 Mitchell(1997)将机器学习广义地定义为包括任何计算机程序,该计算机程序通过经验E来改善其在...
  • 来源 | AI科技大本营在线公开课 分享嘉宾 | 葛付江(思必驰 NLP ...启发式对话通过建立知识点之间的话题关联,使对话系统能够主动发现相关知识,充分发挥知识的协同作用,引导对话过程,把知识在合适的时间主动送...
  • 对话方块的一般形式是包含多种子视窗控制项的弹出视窗,这些控制项的大小和位置在程资源描述档的「对话方块模板」中指定。虽然程写作者能够「手工」定义对话方块模板,但是现在通常是在Visual C++ Develo
  • 基于背景知识的对话 目前,基于背景知识的对话方法可以为两大类:生成方法和抽取方法。两类方法各有优缺点。 ▲ 3. 生成与抽取方法的回复 如 4 所示,生成方法以每个时间步生成一个词(token by ...
  • 智能对话系统之多轮对话

    千次阅读 2019-09-10 15:58:48
    序言 以一周前的一条微博作为开始。...对于一个对话系统而言,我微博中所指的『后续服务』,就是上中的 DST(对话状态维护)以及 Policy(动作候选排序),或者统一的称其为 DM(Dialogue Mannagem...
  • Unity对话系统让你: 用分支逻辑编写交互式对话。 在灵活的、完全可自定义的UI系统中显示会话。 定义玩家要完成的任务/任务。 播放镜头序列,如相机剪辑和音频。 保存和加载游戏,并在场景更改中持久化数据。 使用...
  • 阿里 ChatUI 开源:让对话美而简单

    千次阅读 2020-10-01 23:48:02
    作者 |孙辉背景对话式交互一直存在于我们的日常生活中,工作时使用的钉钉,联系朋友使用的微信,都属于对话式交互应用。随着技术的发展,我们正在经历从「移动互联网时代」走向「人工智能时代」的...
  • 填槽与多轮对话

    千次阅读 2019-01-21 20:27:18
    对于一个对话系统而言,上中的 DST(对话状态维护)以及 Policy(动作候选排序),或者统一的称其为 DM(Dialogue Mannagement,对话管理)。也即,当接收到 NLU 模块的输出、其他场景及用户特征信息之后,判断...
  • Windows程开发设计指南--图形基础

    千次阅读 2012-08-31 23:34:30
    您不必指定字体、文字颜色、文字後面的背景色彩以及字元间距,因为这些属性都是装置内容的一部分。当您想改变这些属性之一时,您呼叫一个可以改变装置内容中属性的函,以後针对该装置内容的TextOut呼叫来使用改变...
  • 最新任务型对话数据集大全

    千次阅读 2019-05-16 15:57:29
    合适的数据集或者语料是优秀的自然语言研究工作的基础,然而找寻合适的数据集通常是一件耗时耗力的工作。这时候一份优质的数据集汇总...1. 数据集汇总项目这份数据集大全涵盖了到目前在任务型对话领域的所有常用数...
  • 对话生成:seq2seq模型原理及优化

    千次阅读 2019-06-12 15:56:39
    平安寿险AI团队姚晓远:对话生成模型研究背景模型介绍模型改进效果评估资料获取 更多内容干货请敬请关注「平安寿险PAI」 人机对话作为人机交互系统的核心功能之一,发挥着十分重要的作用。目前,生成的人机...
  • 关于对话机器人,你需要了解这些技术

    万次阅读 多人点赞 2017-12-05 18:54:59
    对话系统(对话机器人)本质上是通过机器学习和人工智能等技术让机器理解人的语言。它包含了诸多学科方法的融合使用,是人工智能领域的一个技术集中演练营。1给出了对话系统开发中涉及到的主要技术。
  • 本文概述了最近几年开发的对话式AI神经方法。 我们将对话系统分为三类:(1)问答代理,(2)面向任务的对话代理和(3)聊天机器人。 对于每个类别,我们将使用特定的系统和模型作为案例研究,对当前最先进的神经...
  •  某银行内,一位阿姨因等待办理业务的时间太长,与快宝机器人展开了一场来自灵魂的对话对于银行工作人员的不满,大妈向快宝说道:“你们的工作人员在里面哄孩子,怎么不出来办业务“;快宝答:'我们柜台里的哥哥姐姐...
  • 对话系统原理和实践

    千次阅读 2018-02-07 00:00:00
    在很多场景下,对话用户界面(CUI - Conversational User Interface)比图形用户界面(GUI - Graphical User Interface)更加自然和高效。过去一年中,CUI得到了大量的关注,也取得了迅速的发展。微软提出了对话即...
  • 作者丨戴音培、虞晖华、蒋溢轩、唐呈光、李永彬、孙健单位丨阿里巴巴-达摩院-小蜜Conversational AI团队,康奈尔大学对话管理模型背景从人工智能研究的初期开始,人们就致力于开发...
  • 原文地址 作者丨唐呈光、戴音培、李永彬、孙健...近几年来,强化学习在任务导向型对话系统中得到了广泛的应用,对话系统通常被统计建模成为一个马尔科夫决策过程(Markov Decision Process)模型,通过随机优化的方法来
  • 在做剧情的时候,发现使用unity十分繁琐复杂,这时发现了Fungus对话系统这个插件,仿若捡了宝贝...有了ta 做起剧情来水到渠成,而且操作简单,功能强大。然而,网上关于fungus的讲解与教程翻来覆去就那几个,用的人...
  • 1. 对话管理模型背景 从人工智能研究的初期开始,人们就致力于开发高度智能化的人机对话系统。艾伦·图灵(Alan Turing)在 1950 年提出图灵测试 [1],认为如果人类无法区分和他对话交谈的是机器还是人类,那么就...
  • 对话系统 | (4) 任务型对话系统基础

    千次阅读 2020-08-14 21:48:33
    本篇博客内容主要来自第十四届中国中文信息学会暑期学校暨中国中文信息学会《前沿技术讲习班》— 张伟男、车万翔《任务型对话系统》 PPT下载链接 1. 任务型对话系统概述 人机对话系统四大功能/分类 2. 任务型对话...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,734
精华内容 5,493
关键字:

对话式背景图