0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

结合NLU在面向任务的对话系统中的具体应用进行介绍

电子工程师 来源:lp 2019-03-21 09:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

以下是节选内容

按照技术实现,我们可将任务驱动的对话系统划分为如下两类:

模块化的对话系统

分模块串行处理对话任务,每一个模块负责特定的任务,并将结果传递给下一个模块,通常由NLU(Natural Language Understanding,自然语言理解)、DST(Dialogue State Tracking,对话状态追踪)、DPL(Dialogue Policy Learning,对话策略学习)、NLG(Natural Language Generation,自然语言生成)4个部分构成。在具体的实现上,可以针对任一模块采用基于规则的人工设计方式,或者基于数据驱动的模型方式。

端到端的对话系统

考虑采用由输入直接到输出的端到端对话系统,忽略中间过程,采用数据驱动的模型实现。

目前,主流的任务对话系统实现为模块化方式,由于现有训练数据规模的限制,端到端的方式仍处于探索阶段。本文主要介绍模块化的面向任务的对话系统,图1介绍了其主要模块。

(1)NLU:将用户输入的自然语言语句映射为机器可读的结构化语义表述,这种结构化语义一般由两部分构成,分别是用户意图(user intention)和槽值(slot-value)。

图1面向任务的对话系统的主要模块

(2)DST:这一模块的目标是追踪用户需求并判断当前的对话状态。该模块以多轮对话历史、当前的用户动作为输入,通过总结和推理理解在上下文的环境下用户当前输入自然语言的具体含义。对于对话系统来说,这一模块有着重大意义,很多时候需要综合考虑用户的多轮输入才能让对话系统理解用户的真正需求。

(3)DPL:也被称为对话策略优化(optimization),根据当前的对话状态,对话策略决定下一步执行什么系统动作。系统行动与用户意图类似,也由意图和槽位构成。

(4)NLG:负责把对话策略模块选择的系统动作转化为自然语言,最终反馈给用户。

在与用户直接关联的两个模块中,ASR指的是自动语音识别,TTS指的是语音合成。如第2章介绍的,ASR和TTS并不是系统必备的模块,也不是本书介绍的重点,因此在面向任务的对话系统中不对这两部分技术做详细介绍。

1.NLU模块

本文主要结合NLU在面向任务的对话系统中的具体应用进行介绍。

对面向任务的对话系统来说,NLU模块的主要任务是将用户输入的自然语言映射为用户的意图和相应的槽位值。因此,在面向任务的对话系统中,NLU模块的输入是用户对话语句,输出是解析后得到的用户动作。该模块涉及的主要技术是意图识别和槽位填充,这两种技术分别对应用户动作的两项结构化参数,即意图和槽位。

下面主要讨论如何针对面向任务的对话系统设计NLU模块,包括针对特定任务定义意图和相应的槽位,以及后续从用户的输入中获取任务目标的意图识别方法和对应的槽位填充方法。

(1)意图和槽位的定义

意图和槽位共同构成了“用户动作”,机器是无法直接理解自然语言的,因此用户动作的作用便是将自然语言映射为机器能够理解的结构化语义表示。

意图识别,也被称为SUC(Spoken Utterance Classification),顾名思义,是将用户输入的自然语言会话进行划分,类别(classification)对应的就是用户意图。例如“今天天气如何”,其意图为“询问天气”。自然地,可以将意图识别看作一个典型的分类问题。意图的分类和定义可参考ISO-24617-2标准,其中共有56种详细的定义。面向任务的对话系统中的意图识别通常可以视为文本分类任务。同时,意图的定义与对话系统自身的定位和所具有的知识库有很大关系,即意图的定义具有非常强的领域相关性。

槽位,即意图所带的参数。一个意图可能对应若干个槽位,例如询问公交车路线时,需要给出出发地、目的地、时间等必要参数。以上参数即“询问公交车路线”这一意图对应的槽位。语义槽位填充任务的主要目标是在已知特定领域或特定意图的语义框架(semantic frame)的前提下,从输入语句中抽取该语义框架中预先定义好的语义槽的值。语义槽位填充任务可以转化为序列标注任务,即运用经典的IOB标记法,标记某一个词是某一语义槽的开始(begin)、延续(inside),或是非语义槽(outside)。

要使一个面向任务的对话系统能正常工作,首先要设计意图和槽位。意图和槽位能够让系统知道该执行哪项特定任务,并且给出执行该任务时需要的参数类型。为了方便与问答系统做异同对比,我们依然以一个具体的“询问天气”的需求为例,介绍面向任务的对话系统中对意图和槽位的设计。

用户输入示例:“今天上海天气怎么样”

用户意图定义:询问天气,Ask_Weather

槽位定义

槽位一:时间,Date

槽位二:地点,Location

“询问天气”的需求对应的意图和槽位如图2所示。

图2意图与槽位定义(1)

在上述示例中,针对“询问天气”任务定义了两个必要的槽位,它们分别是“时间”和“地点”。

对于一个单一的任务,上述定义便可解决任务需求。但在真实的业务环境下,一个面向任务的对话系统往往需要能够同时处理若干个任务,例如气象台除了能够回答“询问天气”的问题,也应该能够回答“询问温度”的问题。

对于同一系统处理多种任务的复杂情况,一种优化的策略是定义更上层的领域,如将“询问天气”意图和“询问温度”意图均归属于“天气”领域。在这种情况下,可以简单地将领域理解为意图的集合。定义领域并先进行领域识别的优点是可以约束领域知识范围,减少后续意图识别和槽位填充的搜索空间。此外,对于每一个领域进行更深入的理解,利用好任务及领域相关的特定知识和特征,往往能够显著地提升NLU模块的效果。据此,对图2的示例进行改进,加入“天气”领域。

用户输入示例

1.“今天上海天气怎么样”

2.“上海现在气温多少度”

领域定义:天气,Weather

用户意图定义

1. 询问天气,Ask_Weather

2. 询问温度,Ask_Temperature

槽位定义

槽位一:时间,Date

槽位二:地点,Location

改进后的“询问天气”的需求对应的意图和槽位如图3所示。

图3意图与槽位定义(2)

(2)意图识别和槽位填充

做好意图和槽位的定义后,需要从用户输入中提取用户意图和相应槽对应的槽值。意图识别的目标是从用户输入的语句中提取用户意图,单一任务可以简单地建模为一个二分类问题,如“询问天气”意图,在意图识别时可以被建模为“是询问天气”或者“不是询问天气”二分类问题。当涉及需要对话系统处理多种任务时,系统需要能够判别各个意图,在这种情况下,二分类问题就转化成了多分类问题。

槽位填充的任务是从自然语言中提取信息并填充到事先定义好的槽位中,例如在图2中已经定义好了意图和相应的槽位,对于用户输入“今天上海天气怎么样”系统应当能够提取出“今天”和“上海”并分别将其填充到“时间”和“地点”槽位。基于特征提取的传统机器学习模型已经在槽位填充任务上得到了广泛应用。近年来,随着深度学习技术在自然语言处理领域的发展,基于深度学习的方法也逐渐被应用于槽位填充任务。相比于传统的机器学习方法,深度学习模型能够自动学习输入数据的隐含特征。例如,将可以利用更多上下文特征的最大熵马尔可夫模型引入槽位填充的过程中[8],类似地,也有研究将条件随机场模型引入槽位填充。

基于RNN的深度学习模型在意图识别和槽位填充领域也得到了大量的应用,Attention-Based Recurrent Neural Network Models for Joint Intent Detection and Slot Filling中介绍了使用Attention-Based RNN模型进行意图识别和槽位填充的方法,作者提出将“alignment information”加入Encoder-Decoder模型,以及将“alignment information”和“attention”加入RNN这两种解决槽位填充和意图识别问题的模型。需要特别介绍的是,与基于RNN的意图识别和槽位填充相比,基于LSTM模型的槽位填充可以有效解决RNN模型中存在的梯度消失问题。

另外,在实际工程中往往需要先对句子中的各个组成部分进行标注,所以通常也会应用到序列标注方法。

进行意图识别和槽位填充的传统方法是使用串行执行的方式,即先进行意图识别,再根据意图识别的结果进行槽位填充任务。这种方式的主要缺陷是:

可能产生错误传递,导致错误放大。

限定领域也就意味着不同领域需要不同的方法和模型进行处理,各个领域之间的模型没有共享,但在很多情况下,例如订火车票和飞机票时,时间、地点等槽位都是一致的。

因为串行执行的方式存在上述问题,所以研究人员改为使用Multi-Domain Joint Semantic Frame Parsing Using Bi-Directional RNN-LSTM, INTERSPEECH中设计的联合学习(joint learning)方式进行意图识别和槽位填充。

另外,还有一种情况需要特别注意。在一次天气询问任务完成后,用户又问“那明天呢”时,实际上可以认为第二个问句是开始了另一次“询问天气”任务,只是其中的“时间”槽位是指定的,而“地点”槽位则需要重复利用(继承)上一次任务中的值。

对意图识别模块和槽位填充模块的主要评价指标包括:

意图识别的准确率,即分类的准确率。

槽位填充的F1-score。

2.DST模块

DST模块以当前的用户动作、n-1前轮的对话状态和相应的系统动作作为输入,输出是DST模块判定得到的当前对话状态

对话状态的表示(DST-State Representation)通常由以下3部分构成。

(1)目前为止的槽位填充情况。

(2)本轮对话过程中的用户动作。

(3)对话历史。

其中,槽位的填充情况通常是最重要的状态表示指标。

我们知道,由于语音识别不准确或是自然语言本身存在歧义性等原因,NLU模块的识别结果往往与真实情况存在一定的误差。所以,NLU模块的输出往往是带概率的,即每一个可能的结果有一个相应的置信程度。由此,DST在判断当前的对话状态时就有了两种选择,这两种选择分别对应了两种不同的处理方式,一种是1-Best方式,另一种则是N-Best方式[11]。

1-Best方式指DST判断当前对话状态时只考虑置信程度最高的情况,因此维护对话状态的表示时,只需要等同于槽位数量的空间,如图4所示。

图4 1-Best方式下的对话状态与槽位的对应

N-Best方式指DST判断当前对话状态时会综合考虑所有槽位的所有置信程度,因此每一个槽位的N-Best结果都需要考虑和维护,并且最终还需要维护一个槽位组合在一起(overall)的整体置信程度,将其作为最终的对话状态判断依据,如图5所示。

图5N-Best方式下的对话状态与槽位的对应

实现DST模块的方法主要有:基于条件随机场模型的序列跟踪模型、基于RNN和LSTM的序列跟踪模型等。

3.DPL模块

DPL模块的输入是DST模块输出的当前对话状态,通过预设的对话策略,选择系统动作作为输出。下面结合具体案例介绍基于规则的DPL方法,也就是通过人工设计有限状态自动机的方法实现DPL。

案例一:询问天气

以有限状态自动机的方法进行规则的设计,有两种不同的方案:一种以点表示数据,以边表示操作;另一种以点表示操作,以边表示数据,这两种方案各有优点,在具体实现时可以根据实际情况进行选择。

方案一:以点表示数据(槽位状态),以边表示操作(系统动作)(如图6所示)

在这种情况下,有限状态自动机中每一个对话状态S表示槽位的填充情况,例如槽位均为空时,状态为NULL,表示为(0,0);仅时间(Time)槽位被填充时,状态表示为(0,1)。本示例中槽位共有两个,分别为时间和地点(Location),因此共有4种不同的状态。

图6“询问天气”有限状态自动机设计(1)

状态迁移是由系统动作引起的,例如仅时间槽位被填充时,下一步的系统动作为“询问地点”(AskLocation),以获取完整的槽位填充。S0为起始状态,Z为终结状态,S1、S2、S3三个状态的作用是对槽位填充进行确认。如果成功填充,则跳转到下一个状态继续;如果没有成功,则再一次询问进行槽位填充(Ask Again)。

这种方式的弊端非常明显:随着槽位数量的增加,对话状态的数量也会急剧增加。具体来说,在上述方案中,对话状态的总数由槽位的个数决定,如果槽位有k个,那么对话状态的数量为2k个。尝试改进这一弊端的研究有很多,如Young S等人提出的隐藏信息状态模型(Hidden Information State,HIS)和Thomson B等人提出的基于贝叶斯更新的对话状态管理模型(Bayesian Update of Dialogue State,BUDS)等。

方案二:以点表示操作(系统动作),以边表示数据(槽位状态)(如图7所示)

图7“询问天气”有限状态自动机设计(2)

在这种情况下,有限状态自动机中每一个对话状态S表示一种系统动作,本例中系统动作共有3种,分别是两种问询动作:“询问时间”(Ask Date)和“询问地点”(Ask Location),以及最后的系统回复“回答天气”(Answer)动作。有限状态自动机中状态的迁移则是由槽位的状态变化,即“用户动作”引起的。

对比上述两种方案可以发现,第二种有限状态自动机以系统动作为核心,设计方式更简洁,并且易于工程实现,更适合人工设计的方式。第一种有限状态自动机以槽位状态为核心,枚举所有槽位情况的做法过于复杂,更适合数据驱动的机器学习方式。

系统动作的定义通常有问询、确认和回答3种。问询的目的是了解必要槽位缺失的信息;确认是为了解决容错性问题,填槽之前向用户再次确认;回答则是最终回复,意味着任务和有限状态自动机工作的结束。

细心的读者可能已经发现,采取问询的方式获得缺失的槽位信息,在一些情况下是不合适的,以“询问天气”任务为例,向用户问询槽位缺失的信息会大幅降低用户对系统的满意度。在真实的业务环境下,系统往往会直接采取默认值填充槽位的方式,或者结合以往的对话历史数据,自动填补个性化的结果。例如,用户以往问的都是上海的天气,那么“地点”槽位就会被个性化地填充为“上海”。

这就引出了对面向任务的对话系统的质量评估方法:对面向任务的对话系统而言,完成用户指定任务所需的对话轮数越少越好。在实际应用中,诸如“询问天气”这样的任务,通常都尽可能地在一次对话中完成,而有些任务则必须要进行多轮对话,例如订餐、购票等任务。

接下来,我们以“订餐需求”为例,说明多轮对话的必要性,以及对话轮数的取舍问题。

案例二:订餐

在典型的订餐领域的对话系统中,根据生活经验,我们知道需要为系统定义以下几个槽位。

(1)slot1:用户住址(Address)。

(2)slot2:用户手机号码(Phone)。

(3)slot3:订餐餐厅名称(Res_name)。

(4)slot4:食物名称(Food_item)。

(5)slot5:食物类型(Food_type)。

(6)slot6:价格范围(Price_range)。

其中前4项为必要槽位,对订餐任务来说是必须提供的参数,最后两项为非必要槽位,可有可无,有的话可以提高订餐任务的精准度。参考案例一的处理过程,首先对此任务设计相应的有限状态自动机,如图8所示。

图8“订餐”系统有限状态自动机设计

可以发现,在该任务下的有限状态自动机设计中,我们只加入了必要槽位的问询操作,没有对Food_type和Price_range进行强制的系统问询。两个非必要槽位能够对“Ask Food_item”,即询问具体的食物名称起到辅助作用。当用户没有明确需求时,系统可以给出具体的食物推荐,这样的设定可以有效地减少非必要的对话,减少对话轮数。

4.NLG模块

NLG模块的输入是DPL模块输出的系统动作,输出是系统对用户输入的回复

目前,NLG模块仍广泛采用传统的基于规则的方法,表1给出了3个示例规则的定义。根据规则可以将各个系统动作映射成自然语言表达。

为了实现回复的多样性,各种基于深度神经网络的模型方法被提出并得到发展。

以上是《自然语言处理实践:聊天机器人技术原理与应用》节选内容。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据驱动
    +关注

    关注

    0

    文章

    170

    浏览量

    12810
  • 模块化
    +关注

    关注

    0

    文章

    359

    浏览量

    22791
  • 自然语言
    +关注

    关注

    1

    文章

    292

    浏览量

    14025

原文标题:NLP实践:对话系统技术原理和应用

文章出处:【微信号:rgznai100,微信公众号:rgznai100】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    一文说透了如何实现单片机的多任务并发!

    嵌入式系统开发,多任务并发是非常常见的,对于处理复杂的应用场景、提升系统的并发能力、提高系统
    发表于 01-06 06:46

    博世GTM IP模块在车载系统具体实现方式与优势

    汽车电子系统,如何充分发挥 GTM IP的功能,以满足复杂的系统级应用场景,是用户实现高效控制与精确响应的关键。本文将聚焦几个典型且核心的应用实例,探讨GTM IP在车载
    的头像 发表于 12-30 17:36 863次阅读
    博世GTM IP模块在车载<b class='flag-5'>系统</b><b class='flag-5'>中</b>的<b class='flag-5'>具体</b>实现方式与优势

    国内七大基于大模型的发射任务调度与过程保障分系统软件介绍

        七大基于大模型的发射任务调度与过程保障系统    结合公开航天资料、机构技术路线及商业航天实践,可梳理出涵盖国内外典型案例的七大智能发射调度系统及平台。这些
    的头像 发表于 12-24 11:08 394次阅读

    嵌入式基础知识-系统调度

    系统调度是操作系统重要功能,嵌入式开发,也要了解系统调度的基本原理。对于嵌入式Linux开发,一般使用多线程和多进程开发,对于运行RTOS的嵌入式
    发表于 12-16 08:15

    FreeRTOS 空闲任务

    几乎所有的小型 RTOS 中都会有一个空闲任务,空闲任务属于系统任务,是必须要执行的,用户程序不能将其关闭。不光小型系统中有空闲
    发表于 12-04 07:35

    任务系统,如何平衡任务调度以防止因高负载导致的再次进入低功耗模式的延迟?

    任务系统,如何平衡任务调度以防止因高负载导致的再次进入低功耗模式的延迟?
    发表于 12-04 06:37

    思必驰任务对话算法通过国家备案

    近日,国家网信办公开发布第十四批境内深度合成服务算法备案信息,思必驰任务对话算法正式通过备案。这是思必驰第八项通过备案的算法,进一步巩固了在对话式人工智能领域的技术与合规优势。
    的头像 发表于 11-20 10:33 1018次阅读

    一文了解Mojo编程语言

    Mojo 语言的具体介绍: 核心特点 Python 兼容性 Mojo 支持大部分 Python 语法和标准库,可直接调用 Python 生态系统的库,降低了学习成本。 极致性能优化
    发表于 11-07 05:59

    e203进行F指令扩展的具体实现

    接上文讲述F指令扩展之后,我们讲解针对e203进行F指令扩展的具体实现 取指单元 取指单元(IFU),为方便后续运算的进行,需要修改F
    发表于 10-21 11:51

    国巨软端电容CS1206系列电源电路具体怎么应用?

    一下国巨软端电容CS1206系列电源电路具体应用,CS1206系列具体包括CS1206JKNPO、CS1206JKX7R、CS1206JRNPO、CS1206
    的头像 发表于 09-09 17:52 1133次阅读
    国巨软端电容CS1206系列<b class='flag-5'>在</b>电源电路<b class='flag-5'>中</b><b class='flag-5'>具体</b>怎么应用?

    米尔RK3576部署端侧多模态多轮对话,6TOPS算力驱动30亿参数LLM

    语境下的交互推理,其核心在于通过多轮信息交换逐步明确用户需求。例如,用户可能先询问 “附近有餐厅吗?”,系统回应后用户补充 “要适合家庭聚餐的”,系统结合历史对话调整推荐策略。 这种
    发表于 09-05 17:25

    MES - 制造执行系统

    制造执行系统(MES)是用于控制、监测和记录生产的软件。它将企业资源规划(ERP)与过程控制系统结合,实现了透明、高效的生产。 受益于 MES 的行业 MES 许多行业都至关重
    发表于 09-04 15:36

    FPGA机器学习具体应用

    ,越来越多地被应用于机器学习任务。本文将探讨 FPGA 机器学习的应用,特别是加速神经网络推理、优化算法和提升处理效率方面的优势。
    的头像 发表于 07-16 15:34 3066次阅读

    AD7745使用,需要进行偏移校准和系统校准吗?

    ①AD7745使用,需要进行偏移校准和系统校准吗,规格书上面有描述,但不确定是否需要校准,目前是差分测量电容,能提供一份校准示例代码吗,谢谢。 ②贵司是否有AD7745寄存器配置示
    发表于 06-17 06:22

    RFID工地监控具体应用

    RFID是一种利用无线电波进行数据交换的自动识别技术,它通过射频信号实现数据的读取和写入。射频标签内置天线,可以存储并传递信息RFID工地监控具体应用1.材料管理材料追踪:在建筑
    的头像 发表于 04-24 17:45 845次阅读
    RFID<b class='flag-5'>在</b>工地监控<b class='flag-5'>中</b>的<b class='flag-5'>具体</b>应用