写于19年刚刚接触NLP之际
献给曾经的自己。
撰写本文的原因是作为(伪)机器翻译领域的学生,需要查阅一些NLU的资料。
发现google到的文章上来就教你槽填充的方法,让人摸不着头脑。所以在此做一个总结同时也作为和老师讨论的资料。
定义1
One way of making sense of a piece of text is to tag the words or tokens which carry meaning to the sentences. In the field of Natural Language Processing, this problem is known as Semantic Slot Filling.——mc.ai
理解一段文字的一种方法是标记那些对句子有意义的单词或记号。在自然语言处理领域,这个问题被称为语义槽填充。
以上的定义基本上只告诉了我们语义槽是针对句子里面某些单词做标记,而我们对于这样做的目的仍然一无所知。
定义2
填槽的专业表述:从大规模的语料库中抽取给定实体(query)的被明确定义的属性(slot types)的值(slot fillers)——网络文章定义
这个定义补充了槽填充是针对这个词的某些属性做标记。
定义3
填槽指的是为了让用户意图转化为用户明确的指令而补全信息的过程。
这个定义提示了槽填充的作用 -> 将用户隐式的意图转化为显式的指令从而让计算机理解。
1.多用于任务型对话。
任务型对话系统的语言理解部分,通常使用语义槽来表示用户的需求,如出发地、到达地、出发时间等信息。
2.作为意图识别的关键字
3.作为下一步对话的提示信息
填槽的意义有两个:作条件分支多轮对话、作信息补全用户意图。 换言之,填槽不仅是补全用户意图的方式,而且前序槽位的填写还会起到指导后续信息补全走向的作用。
虽然 意义和目的有时候的区别不大,我这里还是把目的看成意义的进一步加深。
可以理解成用途/意义的根本还是围绕槽填充的目的,而槽填充的目的可以引申出各种各样的用途和意义。
既然槽填充属于NLU的任务之一,那么我们首先要了解NLU的目的。
自然语言理解(NLU)就是要获得一个计算机能直接使用的语义表示 ——总结|对话系统中的口语理解技术(SLU)(二)
NLU(Natural Language Understanding)自然语言理解希望机器像人一样,具备正常人的语言理解能力即需要知道人的意图。
意图从何而来呢?一个计算机能用的语义表示。
机器理解人类 -> 提取人类意图 -> 语义表示
而槽填充的目的和NLU是一致的,它为机器提供一个规范的语义表示
—— Frame semantics
帮我订张机票,从杭州出发。
这里就应该填充了两个槽,把『机票』、『杭州』填入名为『交通工具』、『目的地』。
那么在对话系统钟就可以让reboot理解用户是想要买一张去往杭州的机票,由于缺少出发地点,可能还会有一轮询问的对话。
最后reboot根据补充的信息,生成指令,调用接口购买从xx去往杭州的机票。
简单谈一谈近年来的方法有哪些。
经典方法
CRF: 条件随机场。通过设置各种特征函数来给序列打分。——(CRF)
深度方法
一*、*RNN 槽填充
二、RNN Encoder-Decoder 槽填充
三、Bi-GRU + CRF
——A Joint Model of Intent Determination and Slot Filling for Spoken Language
四、Attention-Based Recurrent Neural Network Models for Joint Intent Detection and Slot Filling (比较经典,论文是意图识别和槽填充共同训练)
加入了对齐信息和attention
三种情况 :图a没有使用对齐输入hi,但是用了注意力ci。图b没有使用注意力ci,但是用了对齐输入hi。图c既使用注意力ci,也用了对齐输入hi。
五、最近的paper 待更新。
对 BIO的解释
“B-X”表示此元素所在的片段属于X类型并且此元素在此片段的开头。
“I-X”表示此元素所在的片段属于X类型并且此元素在此片段的中间位置。
“O”表示不属于任何类型。

