吴思贤,何勇军,李辰阳,邓培至
(哈尔滨理工大学 计算机科学与技术学院,黑龙江 哈尔滨 150080)
当前国内的餐厅推荐系统主要以智慧餐饮系统为主,诸如饿了么、美团等餐饮推荐软件通过远程网络结合用户地理位置等相关信息,向用户推荐了大量的美食信息,但存在如下问题,如:搜索过程繁琐,导致时间被浪费;不够精确智能的挑选餐厅方式在点餐时容易出错;预定的餐厅位置有冲突等意图识别错误。现有餐厅推荐系统存在的此类问题很大程度影响了用户体验,因此当前急需一种方案解决餐厅推荐过程中意图识别和实体提取的问题。
基于以上问题,国内外多位学者提出了多种解决方案。2015年Ramanand等人针对消费意图识别,提出基于规则和图的方法来获取意图模板,在单一领域取得了较好的分类效果[1]。Fuchun等人提出将朴素贝叶斯(Naive Bayes, NB)方法用于意图识别[2]。Haffner等人提出的支持向量机(Support Vector Machine, SVM)模型在分类领域取得了较好的效果,被广泛应用到意图识别任务中[3]。在2005年Tur等人基于AdaBoost算法提出了一种用于自然语言意图识别的监督方法,实验发现更复杂更自然的表达方式会增加识别错误率[4]。在此基础上Tur等人于2011年提出了一种句子简化方法,即重新利用较少的词汇表达相同的意图,在相同语料的实验上错误率明显降低[5]。Jeong等人提出了一种三角形条件随机场,通过在标准条件随机场上增加一个额外的随机变量来进行意图识别[6]。以上方法都采用较为复杂的人工特征,如语法信息、韵律信息和词汇信息等,较难捕捉文本的深层语义信息。国内也有很多关于意图识别方面的研究。钱岳提出了基于CNN与LSTM(Long Short-Term Memory)网络的出行消费意图识别模型,该模型弥补了CNN不能提取深层次语义信息的缺点,并且取得了很好的性能[7]。由于短文本数据稀疏,余慧等人提出了结合短文本主题模型(Biterm Topic Model, BTM)和双向GRU(Bidirectional Gated Recurrent Unit, BGRU)的混合模型,模型在多轮对话下的用户就医意图识别的性能优于文献所提方法[8]。
现有的意图识别依旧存在三个难题。
(1)由于短文本内容短、受噪声干扰较大、一词多义等客观问题,增加了文本向量化的难度。
(2)由于短文本特征稀疏,同时还包含较大信息量,使得单轮对话中常出现多意图的情况,而且特征提取较为困难。
(3)对话短文本通常含有大量省略词或者指代词,这使得意图识别不仅与当前对话信息有关,还受历史对话信息影响,大大增加了意图识别的难度。
这些问题严重影响了文本表示和特征提取的效果,降低了意图识别的准确率。
现有的意图识别方法大多只针对单一方面,要么不考虑复杂情况的影响,单纯研究单个意图识别的情况,要么只考虑某一方面。所以实际对话中的复杂条件严重影响了算法实际应用的性能。本文结合了注意力机制对BiLSTM(Bidirectional Long Short-Term Memory)模型进行改进,在BiLSTM模型中添加独立存储单元,使其作为一种能被神经网络按需读写的知识库来增强模型,改善意图识别中无法充分利用对话历史信息的问题,提高多轮对话下意图识别的准确率。
本文提出的智能语音推荐方法主要分为自然语言理解部分和对话管理部分。
自然语言理解部分:识别用户意图、细分该任务型场景下的子场景等,主要采用LSTM来实现;采用BiLSTM实现实体识别与槽位填充,用于对话管理模块的输入。
基于Rasa_Core的对话管理部分:决策系统主要由长短时记忆神经网络实现,其根据用户意图和实体信息选择最优反馈方案,合理管理系统中人机对话的过程。
餐厅推荐系统框架如图1所示。
图1 餐厅推荐系统框架
LSTM可以充分利用对话过程的上下文对当前话语进行意图识别。根据意图识别在对话系统中的实际应用情况,准备充分的意图识别数据,确定意图识别的方案,识别前期的文本特征提取方法,制定合适的意图识别模型,调试并确认最优的模型参数。BiLSTM模型中的两种记忆模块和门控制模块既可以做到记忆历史信息,又可对历史信息加以控制,避免无用的历史信息对识别结果产生负面影响。
人机对话过程中,存在用户在单轮对话中包含不止一个意图的情况,而在人机对话中用户的话语大多有特征稀疏、字数少却包含信息量多的问题,导致多意图的识别难于准确确定用户的意图与用户的意图类别。如果仍然采用传统的单意图识别方法识别用户的多个意图,会影响用户多意图识别的准确性,进而影响对话系统的整体性能。因此,本文对多意图情况进行研究,从多意图确认以及多意图个数识别两个方面着手,提出一种结合句法结构与神经网络的多意图识别模型,改善对话系统中多意图识别特征难以提取的问题,有效提高多意图识别的准确率。
相较于传统的循环神经网络,LSTM引进了记忆单元和门机制,可以选择性记住或者遗忘记忆单元的信息,可以体现出上下文信息之间的联系。长短期记忆网络结构如图2所示。
图2 长短期记忆网络结构
输入门、遗忘门和输出门的计算公式如下:
神经单元的更新方式如下:
式中:Z为当前输入单元状态;WC为当前输入单元权重矩阵。
最后的输出表达式为:
式中,hLt是当前时刻的隐藏层。
经过以上计算,最终得到特征向量HL={hL1,hL2, ...,hLn},本结果充分考虑当前词的前文信息,可以提取出输入文本的全局特征表示,弥补了CNN网络的不足。
首先对准备好的意图识别数据进行预处理,即利用结巴分词算法对数据做分词处理,并将分词后的数据通过word2vec模型训练得到词向量。然后将训练好的词向量数据输入到LSTM层中,通过LSTM层提取数据的特征向量,再通过mean pooling层得到一个统一的向量。神经网络意图识别模型采用LSTM获取语义特征,输出不同特征下的概率,再通过softmax函数归一化分类结果,组合模型具备易修改和智能可训练的特点。最后将得到的向量放入softmax层进行意图识别,得到识别结果。LSTM模型结构如图3所示。
图3 LSTM模型结构示意图
为了提高计算机对人们意图识别的准确性,我们使用多轮对话机制对人机对话内容进行意图识别。多轮对话系统下的短文本意图识别框架分为四个部分,如图4所示,分别为编码模块、记忆模块、门控制模块和分类模块。在这四个模块之前对输入的对话信息进行向量化表示,便于下游任务的处理。
图4 文本意图识别框架
记忆模块是多轮对话下意图识别的关键组成部分,它存储了从历史对话中抽取的语义信息,确保有需要时可以读取这些信息,现有的数据也可以方便地写入。结合实际情况,本文只抽取当前短文本的前五轮历史信息。记忆的方式有两种,即内部记忆与外部记忆。传统的深度学习模型(RNN、LSTM、BiLSTM等)均采用内部记忆方式,他们通过隐藏状态或者注意力机制来达到记忆功能,但依靠内部记忆法存在一个缺点,即生成的记忆太小,无法全面记录每轮对话中表达的内容,导致输入编码时丢失很多历史信息。而且内部记忆不利于其他模块从记忆中读取需要的信息,经过编码处理后,所有信息都被高度抽象,无法灵活、方便地提取信息。在文本处理的过程中,在BiLSTM模型内部加入记忆模块,只能做到当前对话的词级别的记忆,而无法做到记忆句子级别的历史对话。为弥补这一不足,本系统加入了外部记忆模块,可以记忆句子级别的历史信息。通过对多轮对话的分析,主要列举了两种需要结合历史信息来准确识别短文本意图的情况。
第一种是使用省略句的情况,由于表达方式等原因,人们通常在交流时会省略上下文信息,见表1所列,这对意图识别来说是一大难点。
表1 省略上下文短文本示例
从表1中可以看到,用户在第二轮对话时所说的“明天呢?”是省略句,单独对这句话做处理,无论用多么精妙的模型都很难准确识别出该句表达的意图。如果我们结合前一轮的表达内容,就知道表达者的意思是“明天这个餐厅会有位置么?”,继而得出他的意图是“询问餐厅是否有空位”,由此可以看出“位置”是关键信息。在本模块中,为了获得完整的语义表示,拼接P1、P2的语义向量生成一个新的向量,该向量中包含信息“位置”。
第二种情况是部分有相同意图的短文本的语义信息相似,见表2所列。
表2 相同短文本意图示例
从表2中可以看出,P1、P2的对话文本语义相似并且表达的是同一种意图。因此,在记忆单元中可以保留与当前对话内容相似的历史对话信息。在本文中,通过2个向量之间的内积表示当前对话和历史信息的相似程度,并利用softmax函数将当前对话与历史对话向量的内积做归一化处理,用归一化后的数值作为注意力的概率分布,概率值越大,表明历史信息中的某轮对话与当前对话内容相似度越高。
利用记忆模块引入历史信息并为其分配权重,但是历史信息中有些对话与当前对话的意图相关,也有些对话与当前对话的意图无关,如果无差别的引入会出现很多噪声,对当前对话的意图判别产生负面影响。因此,需要对历史信息有一定的筛选能力。本文利用门函数计算状态值,实现控制历史信息的引入。门函数计算公式如下:
式中:向量hi是第i个记忆单元输出的历史信息;g为函数产生的状态值,其取值在0到1之间。当g接近0,表示当前短文本的意图识别无需参考历史信息;当g接近1,表示当前短文本的意图识别需要参考历史信息。由于在记忆单元中考虑了两种情况,因此我们需要引入2个门函数来控制历史信息。
Rasa_Core是Rasa框架提供的对话管理模块,它类似于聊天机器人的大脑,主要任务是维护更新对话状态和动作选择,然后对用户的输入做出响应。所谓对话状态是一种机器能够处理的对聊天数据的表征,对话状态中包含所有可能会影响下一步决策的信息,如自然语言理解模块的输出、用户特征等;动作选择是指基于当前对话状态,选择接下来合适的动作,例如向用户追问需补充的信息、执行用户要求的动作等。此外,Rasa还包括Rasa_NLU模块,该模块用来理解语义,包括意图识别、实体识别、把用户的输入转换为结构化数据等。
对于餐厅推荐系统来说,系统不仅能理解用户话语,还应根据用户提出的信息做出相应反馈,因此建立基于Rasa_Core的对话管理机制。其中对话管理中的决策系统可以根据用户意图和实体信息选择最优反馈方案,达到合理管理系统中人机对话的目的。对话流程如图5所示。
图5 对话流程
首先,将提取到的用户语音输入转为文本消息传递到Interpreter(NLU模块),该模块负责识别用户消息中的“意图”和提取所有“实体”数据;
其次,Rasa_Core会将Interpreter提取到的意图传给Tracker对象,该对象的主要作用是跟踪会话状态(Conversation state);
再次,利用Policy记录Tracker对象的当前状态,并选择执行相应的动作(Action),其中Action被记录在Tracker对象中;
最后,将执行Action返回的结果输出即完成一次人机交互,实现餐饮机器人对用户的餐厅推荐。
本文中的实验数据选取了剑桥大学关于餐馆预定的多轮对话数据集[9],并对其进行了人工翻译和标注处理。因预订餐馆的对话数据多为日常用语,本文对其处理成中文后并未对分类结果造成较大影响。数据集包含676段对话,共2 744轮,主题是预定餐馆,对话可以根据口味、地点、价格查询餐厅,选定餐厅后可根据需要提供联系电话。采集的数据主要通过不同的人与机器对话得到,对话质量较高,适合做意图识别。考虑到实验的具体需求,结合标注好的用户意图与机器回复对数据集的对话进行多轮处理,构成实验所需的多轮对话数据集。数据集中的多轮对话示例见表3所列。
表3 餐厅多轮对话示例
实验标注的多轮对话数据集共包含10 432条对话数据,100组对话,每组对话的轮次在1轮到8轮不等,共出现有11种意图标签。数据的意图类别不均衡,尤其是greet、thanks和deny这三种意图类别的数据数目非常少,对准确率的计算影响大,容易给实验带来较大误差,因此在后面的实验中计算各模型的综合性能时并未包含这三个意图。实验时将数据集按6∶2∶2的比例分别分为训练集、测试集和验证集。为保证实验的可对比性,实验中的数据集均采用相同的划分方式,实验中的数据均采用相同的短文本向量表示方法。
对于多轮对话下的意图识别来说,目前很少有公开的高质量的数据集,许多研究者的实验也是基于自己标注的数据集,且并未公开。为了证明本文模型的有效性,该部分实验是在前文介绍的经过处理的数据集上完成,并在同等数据集上分别与传统的BiLSTM模型、Yun-Nung Chen提出的MemoryNet模型和BiLSTM+Memory模型进行三组对比实验。BiLSTM模型是单纯的传统双向记忆网络模型,并未额外增加记忆模块。MemoryNet模型增加了基于注意力的记忆向量。BiLSTM+Memory在BiLSTM的基础上增加了文中描述的两种记忆模块,本文模型在BiLSTM+Memory的基础上增加了门函数。为了保证实验的对比结果,所有模型中的BiLSTM参数设置相同,且模型的记忆模块最多记忆5轮对话信息,如果超过5轮对话则保存离当前对话最近的5轮历史信息。图6为四种模型在不同意图标签上的识别结果的F1值。
图6 模型识别结果
在各类别的识别结果上,模型BiLSTM+Memory与模型BiLSTM的最高差值为0.06,说明引入历史信息对准确完成本文意图识别任务有很大帮助。从图6中还可以看出,在绝大多数意图类别的识别结果上,本文模型的F1值略高于BiLSTM+Memory模型,说明增加门函数控制对历史信息的引入可以在一定程度上改善识别效果。
由于数据不均衡,意图类别greet、thanks和deny的数据量非常少,从图6中也可以发现这三类意图的识别率整体偏低,为了不影响对模型整体性能的评估,这三类意图的识别结果不计入模型各项指标的计算中。表4为本实验模型和三个对比模型的识别结果的平均指标值。
表4 餐厅多轮对话示例对比结果
在表4中可以看出,本实验模型在加入门函数后识别的精确率、召回率和F1值都有提升。在精确率上,MemoryNet模型相较于BiLSTM模型提升了约3个百分点,BiLSTM+Memory模型相较于MemoryNet模型提升了约0.2个百分点,说明加入记忆模块的模型识别效率高于未加记忆模块的模型。综上可知,在BiLSTM模型上增加记忆模块和门函数对模型性能提升有明显效果。
本文研究基于语音的餐厅推荐系统中的意图识别和实体提取的问题,在多轮对话下的意图识别受历史信息影响,现有识别模型的内部记忆模块只能解决一部分历史问题,大多数意图识别模型都无法充分考虑上下文信息。本文根据餐厅推荐系统实际应用中对历史信息的需求情况,在BiLSTM模型的基础上增加了记忆模块和门控制模块,既可以做到记忆历史信息,又可对历史信息加以控制,避免无用的历史信息对识别结果产生负面影响,从而达到提高餐厅推荐准确率的效果。