一、相关概念
开放域对话:不太严谨的定义可以理解为 ,在不确定用户意图前的各种瞎聊,你不知道用户会问什么样千奇百怪的问题,但是chatbot都能接住,然后和用户进行对话,这种就是开放域的对话。
填槽:填槽指的是为了让用户意图转化为用户明确的指令而补全信息的过程。
准入条件:从一个开放域转入到封闭域,或者从一个封闭域转入到另一个封闭域,中间的跳转是需要逻辑判断的,而这个逻辑判断就是准入条件。
封闭域对话:封闭域对话是指识别用户意图后,为了明确用户目的(或者称为明确任务细节)而进行的对话。
澄清话术:当用户的需求中缺乏一些必要条件时,需要对话系统主动发问,把必要条件全部集齐之后再去做最终的满足执行。
二、槽与槽位
1.槽的定义
填槽的专业表述:从大规模的语料库中抽取给定实体(query)的被明确定义的属性(slot types)的值(slot
fillers)——网络文章定义
所以这里槽可以理解为实体已明确定义的属性。例如打车中的,出发地点槽,目的地槽,出发时间槽中的属性分别是“出发地点”、“目的地”和“出发时间”。
2.槽与槽位
槽是由槽位构成的,一个槽位就是一种填槽的方式。
(1)槽位的属性:接口槽与词槽
词槽,通过用户对话的关键词获取信息的填槽方式
接口槽,通过其他方式获取信息的填槽方式
(2)槽位的属性:槽位优先级
当有多个槽位的时候,槽该采用那个信息,这时候有个优先级。
还是之前的出发地点槽,如果用户通过词槽指定了出发地点是A,优先级就应该是最高的,其次才是通过不同的接口槽获取的B,C等。
3.槽的属性:可默认填写/不可默认填写
有些槽是不可默认填写的,不填没办法继续下去,有些即使不填,有默认值也可。
4. 槽的属性: 澄清话术
当槽不可默认填写同时又没有填写的时候,就要进行澄清
为了澄清而表达的内容,就是澄清话术
不同槽的澄清话术不同,例如打车三槽中,目的地的澄清话术可能是“请告诉我您的目的地”,而出发时间的槽可能是“请告诉我您的出发时间”
5. 槽的属性:澄清顺序
当有多个槽需要澄清的时候,就存在先后顺序的问题,所以需要一个澄清顺序,先问什么,再问什么。
6. 槽的属性:平级槽或依赖槽
根据槽和槽之间是否独立,后续的槽是否依赖前面槽的结果。
可以将槽之间的关系分为
平级槽,槽与槽之间没有依赖,例如打车中的三槽
依赖槽,后续的槽是否依赖前面槽的结果,例如手机号码槽,不同国家手机号码格式不同(槽的属性不同),所以国家槽会影响选择哪个手机号码槽。
7. 槽的能力:多轮记忆状态
它能在对话的过程中,在被打断回到之前的封闭域对话后,能记住原有填槽的内容,减少重复填槽。
参考网址:
Chatbot中的填槽(Slot Filling)
填槽与多轮对话:AI产品经理需要了解的AI技术概念
三、槽填充
任务型对话系统的语言理解部分,通常使用语义槽来表示用户的需求,如出发地、到达地、出发时间等信息。通常把领域识别和用户意图检测当做文本分类问题,而把槽填充当做序列标注(Sequence Tagging)问题,也就是把连续序列中每个词赋予相应的语义类别标签。 因此可以使用序列标注模型来抽取语义槽。
很多机器学习算法都能够解决序列标注问题,包括HMM/CFG,hidden vector state(HVS)等生成式模型,以及CRF, SVM等判别式模型。
CRF (条件随机场)是过去经常使用的序列标注模型,但是受限于马尔科夫假设,它无法很好的处理长距离依赖问题。
随着深度学习方法的流行,人们使用循环神经网络,如双向 LSTM 来解决长距离依赖问题,同时还避免了繁琐的特征工程工作。
最近,人们将这两种方法进行融合,即双向 LSTM-CRF 模型,进一步提高了槽填充的准确率。
1.基于RNN的槽填充
本次实验主要参考论文《Using Recurrent Neural Networks for Slot Filling in Spoken Language Understanding 》 ,基于RNN来实现语义槽填充。
本次实验基于ATIS(Airline Travel Information Systems )数据集。顾名思义,ATIS数据集的领域为"Airline Travel"。ATIS数据集采取流行的"in/out/begin(IOB)标注法": "I-xxx"表示该词属于槽xxx,但不是槽xxx中第一个词;"O"表示该词不属于任何语义槽;"B-xxx"表示该词属于槽xxx,并且位于槽xxx的首位。
总的来说,将槽填充问题当做序列标注问题是一种有效的做法,而RNN能够较好的对序列进行建模,提取相关的上下文特征。双向RNN的表现优于单向RNN,而LSTM的表现优于Simple RNN。
从实验设置可以看出,本次实验没有过多的调参。如果想取得更好的结果,可以进行更细致的调参,包括 :
改变词向量维度和隐状态维度;
考虑采用预训练词向量,然后固定或者进行微调;
采用正则化技术,包括L1/L2, Dropout, Batch Normalization, Layer Normalization等;
尝试使用不同的优化器(如Adam),使用mini-batch,调整学习率;
增加epoch次数。
此外,可以考虑在输入时融入词性标注和命名实体识别等信息,在输出时使用Viterbi算法进行解码,也可以尝试不同形式的门控RNN(如GRU,LSTM变体等)以及采用多层RNN,并考虑是否使用残差连接等。
参考网址:“你什么意思”之基于RNN的语义槽填充(Pytorch实现)
2.使用Attention-Based RNN模型识别意图和槽填充
Attention-Based Recurrent Neural Network Models for Joint Intent Detection and Slot Filling
这篇文章主要介绍了使用Attention-Based RNN模型识别意图和槽填充(slot filling)。意图识别通常使用分类的方法将句子分为相应的意图种类。槽填充则可以看做是序列标注问题,即对于给定的句子中的每个词分别打上相应的标签。
槽填充既可以用RNN模型也可以用encoder-dedoder 模型解决。即源输入是句子序列,目标输出则是标注序列,同时意图识别也可以用encoder-dedoder 模型解决。即源输入是句子序列,目标输出则是意图种类。但是对与槽填充来说,句子与相应的标签是一 一对应的,也就是说有“explicit alignment”。作者提出了两种模型,一种是将“alignment information”加入到encoder-dedoder 模型中,另一种就是将“alignment information”和”attention“加入到RNN模型中来解决槽填充和意图识别问题。
参考网址:意图识别与槽填充
3.基于BLSTM-CNN-CRF 的联合槽填充和意图识别模型
该模型使用来自ATIS 数据集中所有可用问句及其对应的语义帧进行训练,模型的输入是问句的序列编码(如 one-hot编码),并利用 BLSTM 训练出的标签向量与通过CNN 得到的特征向量进行拼接,然后将其组合送至CRF 层解码出包含意图信息和槽值信息的完整语义帧。
参考文献:基于 BLSTM-CNN-CRF 模型的槽填充与意图识别_华冰涛,袁志祥,肖维民,郑 啸