赠书 | 从语言学到深度学习NLP,一文概述自然语言理解模块

2022-08-31 14:17:53 浏览数 (1)

每天给你送来NLP技术干货!


自然语言理解模块是对话系统中最重要的模块,对于用户输入的语句信息,首先需要通过自然语言理解模块进行处理,该模块主要的功能在于解析并“理解”用户输入的信息,将其转变成计算机可以理解的形式。该过程也可以看作一个信息结构化的过程,用户的输入信息一般表示为如下格式:

      如图1所示即为一个用户输入语句经过结构化后的示例,该示例中的意图是希望用户提供手机号码信息,因此“act”为“request”,且当前询问的“slot”为电话信息“phone”,同时“slot”为“name”的值信息为“韩小姐”。

图1   用户输入的结构化示例

      在上面的例子中,“act”、“slot”、“value”为对话系统预定义的值,其中“act”表示当前对话系统支持的动作,当系统向用户询问相关信息时,该动作一般为“request”,而用户向系统回答该信息时,该动作称为“inform”,这两个动作为常用的动作,其他动作设置如表1所示。

如何让自然语言理解模块可以像人类一样“理解”自然语言语句的含义,并将“理解”后的内容转换为计算机可以处理的形式?为了模拟人类的操作,我们一般将自然语言理解模块拆分为以下三个子模块,分别是领域识别(domain detection)、意图识别(intent determination)与词槽填充(slot filling)。

一,领域识别

     对于用户输入的语句信息,对话系统首先需要判定当前用户所谈论的话题属于哪个领域(domain),比如当用户输入的语句为“请问附近哪家中餐厅最值得推荐呢?”,则可以认为在谈论“餐厅”领域的话题,而当用户输入的语句为“请问这里附近有哪些景点呢?”,那么用户在谈论“景点”领域的话题。

     如果一个对话系统只需要处理特定领域的对话场景,比如用于订餐的对话系统,则对话系统只需要处理订餐相关的对话,如果用户输入的语句不是关于订餐时间或者餐品种类等订餐相关的信息,那么对话系统无法给出相应的响应。如果对话系统需要同时满足多领域的对话场景,例如用于酒店服务的对话系统,则需要同时处理用户关于订餐、酒店预定、景点推荐、天气信息查询等不同的场景。

当前实际应用中,我们将领域识别任务当作一个分类问题来处理,除了常用的基于规则的方法如通过关键字进行识别,当前更常用的方法是通过基于机器学习的分类算法或者通过构建基于神经网络的分类模型来进行识别。如图2所示即为领域识别的流程。

图2 领域识别流程

确定用户输入语句的所示领域后,可以快速帮助我们缩小对话范围,方便我们更加精准的识别用户的对话意图,以及后续的对话过程,提升对话系统的整体效果。

二,意图识别

      在确定用户输入语句所属的领域后,接下来需要识别用于输入语句的具体意图(intent),意图识别就是判断用户要做什么,比如用户输入为“帮我订一张火车票”,那么用户的意图即为“订票”;如果用户输入为“帮我查询下今天的天气”,那么用户的意图即为“查询天气信息”。

      意图识别的本质是一个文本分类的过程。在意图识别的过程中,自然语言理解模块需要对用户输入的信息进行文本分析,包括对用户输入的语句的成分分析以及语法关系分析等,进而对其潜在的语义信息进行分析。

      实际应用中,意图识别的方式主要有三种,分别是基于规则的方式、基于统计机器学习的方式以及基于神经网络的方式。接下来我们分别介绍这几种方式:

  • 1.基于规则的方式

      基于规则的方式是指通过整理常见的用户输入语句,经过人工分析后总结出的规则模板,当用户输入语句与模板进行匹配后满足该模板的规则或达到一定的阈值,则可以认为该语句属于该意图。如下面的语句均为预定火车票的语句:

代码语言:javascript复制
从广州到贵阳市的车票东营到济南的车票济南去大连的车票帮我预定后天从广州到武汉的车票信息我要预定十月四号从广州到北京的车票

     对上面的语句进行总结,我们可以归纳出预定车票的模板如下:

代码语言:javascript复制
*?[地名]{到|去|至}[地名].*?

      使用基于规则的方式来做意图识别的好处是准确度较高,但是这种方法需要消耗大量的人工来指定模板,对于其他对话场景的可移植性较低。

2.基于统计机器学习的方式

      基于统计机器学习的方式是指使用统计机器学习的算法做文本分类,这种方法将用户输入的语句先表示为向量,然后使用支持向量机(Support Vector Machine, SVM)、逻辑回归(Logistic Regression,LR)、随机森林(Random Forest,RF)等算法来训练模型,然后利用模型来预测用户输入语句所属的意图类型。如图3所示为支持向量机模型的示例,如图4所示为随机森林模型的示例。

图3  支持向量机模型示例

图4   随机森林模型示例

3.基于深度学习的方式

      基于深度学习的方式是指使用神经网络来完成文本分类,这种方式的优点在于不需要人工提取文本特征,但是为了训练模型需要大量的语料数据。这种方式与基于统计学习的方式很相似,不同之处在于,基于深度学习的方式,采用特征提取能力更强的神经网络如卷积神经网络(CNN)、长短期记忆网络(LSTM)等,如图5所示为使用LSTM网络然后引入注意力机制,最后使用softmax作为意图分类结果输出。

   图5  基于神经网络的意图识别

三,词槽填充

      词槽(slot)是对话系统中的重要概念,词槽的填充是指从用户输入的对话中抽取与对话任务相关及所需的关键信息并补全到词槽中的过程。词槽的设置与词槽填充的性能对对话系统的质量有非常重要的影响。我们可以将词槽比作拼图上的“零件”,只要在这些“零件”都正确拼接的情况下,才可以拼出正确的形状。如图6所示为一个拼图。

图6  拼图示例

      在对话系统中,如果要“拼出”正确的拼图,也就是完成用户的任务,那么就需要根据实际情况预先设置好词槽。比如当用户想完成预定披萨的任务,那么我们需要先确定好哪些信息是对话系统必须知道的,比如用户想要订哪种类型的披萨、披萨的大小规格、希望什么时候送到等,这些信息便是完成本次预定披萨任务的词槽信息,只有在这些信息都获取到后,对话系统才可以帮用户完成预定披萨的任务。

     如何将用户输入的信息填充到预先设置的词槽中,是自然语言理解模块最重要的工作。当然除了用户的输入信息,实际应用中,对于某些词槽我们可以根据具体业务设置默认值或者根据对话系统从其他渠道了解的信息来进行填充,比如时间、地点、天气等信息。

     词槽填充通常也被看作是一个序列标注任务,很多常用的序列标注方法都可以应用于词槽填充,比如经典的条件随机场模型(Conditional Random Field,CRF),以及随着深度学习的发展,当前更多地使用深度神经网络如循环神经网络(RNN)、编码器解码器模型(Encoder-Decoder Model)来完成词槽填充。

      同时,在使用深度神经网络训练词槽填充任务时,一般会同时训练意图识别及领域识别。我们可以将准备号的用户输入的语句数据通过神经网络模型进行训练,然后将待预测的语句通过模型进行预测,并得到意图识别的预测结果与词槽填充的预测结果。如图7所示即为通过编码器解码器模型同时预测意图识别的结果与词槽填充的结果。

图7  编码器解码器模型完成意图分类与词槽填充示例

      经过领域识别、意图识别、词槽填充后,自然语言理解模块最终将用户输入的语句转换为结构化的数据。比如当用户输入为“我想预定两张今晚八点从北京到上海的商务票”,经过自然语言理解模块后其格式化的结果如下所示:

代码语言:javascript复制
{领域信息:出行意图信息:预定车票词槽信息:{出发地:北京目的地:上海车票数量:两张出发时间:今晚八点车票类型:商务票}}

声明:本文选自中国水利水电出版社的《自己动手做聊天机器人》一书,略有修改,经出版社授权刊登于此。

赠书规则

1、赠送书籍:赠送5本《自动动手做聊天机器人》

2、赠送规则:通过文末留言的方式送出,留言点赞数量最多前5位读者将各获得

3、开奖时间:9月3日20:00,准时开奖;中奖者请24小时内联系小编~

没有中奖的小伙伴不要灰心,欢迎购买


0 人点赞