需要注意的是,在本课中我们假设我们得到的使用者的表达都是以文本形式被系统接收的。
当我们接收到使用者输入的信息后,我们要做的第一件事就是去判断他的意图。举个例子,当接收到"How long to drive to the nearest Starbucks"时,判断其意图是"navigition,time,closest".当接收"Give me directions to nearest Starbucks"时,意图应该是"navigation,directions,closest".
而对于自然语言来说,同样的意图有很多不同的表达方式,系统的任务就是对不同的意图加以辨认与分类。
我们可以假设有一个表格,这个表格是使用者与对话系统的交流媒介,为了让对话系统理解自己的目的,使用者需要将自己的意图填到表格中。为了方便对话系统对自然语言的理解,一个意图又被分成了若干含有更加精确的信息的语义槽,填充这些语义槽将变成我们的新任务。举个例子,当意图是"navigition,directions"时,袋填充的将是"from","to"两个语义槽。
接下来我们要做的就是给使用者输入的信息贴上语义槽标签。举个例子,当输入为句子"Show me the way to History Museum."时,to后面的"History Museum"为to语义槽中应该填充的内容。对该句中的单词以BIO三种标签分类,即语义槽中的起始部分B,语义槽内的部分I,和语义槽外的部分,得到下图表格。
为了评价一个语义槽标签模块的好坏,引入召回率与精确度的概念,其中召回率是指找到的准确语义槽在全部符合要求的槽数中的占比,精确度是指找到的准确语义槽在找的槽中的占比。具体公式如下图:
输入"Give me directions to San Francisco.",意图分类器将其意图判断为"navigation.directions",语义槽标签化模块将"San Francisco"贴上to标签,对话管理器在接收到所需信息后连接地图软件,输出路线。
先输入"Give me directions from L.A.",进行如上判断,给"L.A.“贴上from标签,但对话管理器发现to语义槽未被填充,发起下一轮对话"Where do you want to go?”,在下一轮对话中完成对to语义槽的填充,连接地图,输出路线。
在课程中介绍了一种简单的方法,给意图分类器,语义槽标签化模块添加简单特征。第一个特征是过去的意图,过去的意图被保存,用来指导下一步操作。第二个特征是语义槽填充情况,记录哪些语义槽被填充,哪些尚未被填充。这种方法虽然简单,但可以将f1值提高0.5%,降低%6.7的意图分类器错误率。
传统模型:n元组词袋,TF-IDF
CNN卷积神经网络模型
RNN循环神经网络
制定特定规则,比如:规定take me to后面的词贴上to标签
利用RNN循环神经网络训练的seq2seq模型
利用CNN循环神经网络训练的seq2seq模型
*seq2seq模型在第四周的第二部分中介绍
全称是Airline Travel Information System,包含很多单轮次对话记录,涵盖17种意图以及127个语义槽标签
举例:里面都是一些类似于" show me flights from Seattle to San Diego tomorrow"的表达
**简单地说,就是将利用双向编码器以及最后的隐藏状态同时传递给语义槽标签化模块和意图分类器,再分别解码出语义槽标签和意图。以此来提高训练的效率与质量。
以ATIS数据集为基础进行联合训练,可以将语义槽的f1值由单独训练的95.78增加为95.87,将意图分析的错误率由单独训练的2.02%降低为1.57%
当进行完一定轮次的人机对话后,机器可能没有填充满所需的语义槽,下一轮对话将继续进行。下一轮对话由机器人发起,所以存储之前对话中使用者的意图就变得很有必要。我们用一种特殊的循环神经网络将过去的对话内容存储到记忆向量当中。
在得到一个新的记忆向量c后,要将其与之前的记忆向量建立新的关系。选取之前建立的记忆向量,按照注意力机制对其赋予相对应的权值,将权值放到记忆向量h中。后将c与h重新一起编码,得到新的记忆向量o,其中既保存了新的信息,又包含了与以前向量的关系。
然后就可以将这些信息用于循环神经网络中得到语义槽标签序列。*
我们在第一周学习了n元组的词袋模型,在输入单词后,我们将会按照词带模型在词典中寻找n元匹配项。举个例子,在输入"san"后,会匹配出"San Francisco"和"San Antonio"两种结果,我们便可从中作出选择。匹配遵守以下三条原则:精准匹配优先于部分匹配,更长的匹配优先于短的匹配,越早出现匹配越好
按照BIOE编码以词典为基准对词进行编码,BIOES五个字母分别对应Begin, Inside, Outside, End, Single。不同的词典结果会有很大的不同,样例如图
1.*可以将自己的句子样本化当做词典的一部分
2.可以通过替换语义槽中的变量来达到扩展数据集的目的,例如"take me to Beijing"可以替换成"take me to NewYork"