自然言语处理与人机对话系统
佑亿精密
2019-09-03 06:23:27
图灵汇官网
前言
一两年前,出于工作需要,我对自然语言处理和人机对话系统进行了深入研究。本文将总结这些知识点以及我的思考。
自然语言处理与人机对话
在大多数企业中,人机对话的主要应用是任务型人机对话系统。无论是自然语言处理(NLP)还是聊天机器人(Chatbot),学术界和工程界都有不同的实现手段。学术界的最新研究成果和趋势在实际工程中的应用较少,而工程界则采用自己的方法来实现人机对话。在人机对话的实现过程中,会大量应用NLP技术,因此可以说NLP是Chatbot的基础。
自然语言处理的关键点
自然语言处理的研究内容主要涵盖以下几个方面:
- 词:包括语法、语义和语用。
- 短语(句子):包括语法、语义和语用。
- 篇章:包括语法、语义和语用。
词和短语的研究已经相对成熟,主要集中在2000年后。篇章的研究尚不成熟,主要集中在2010年以后。
常用的语法树类型包括:
- DG(依存语法)
- CFG(上下文无关文法)
- PCFG(概率上下文无关文法)
- LCFGLP(线性约束上下文自由文法)
常用的算法包括:
- 搜索(Search)
- 动态规划(Dynamic Programming)
- 分类算法(Classification Algorithms)
- 序列标注(Sequence Labeling)
- 优化算法(Optimization Algorithms)
人机对话的主要框架
人机对话系统通常由三个主要模块组成:
- NLU(自然语言理解):理解用户输入,将其转化为结构化的表示形式。
- DM(对话管理):系统决策,决定下一步的动作。
- NLG(自然语言生成):将结构化的表示形式转化为自然语言输出。
自然语言理解
自然语言理解主要包括以下三个方面:
- 领域识别:判断用户输入的类型,如会议室预订、火车票购买、订餐等。
- 意图识别:识别用户的意图,如确认、拒绝等。
- 槽位填充:抽取与任务相关的必要信息,例如会议预订时,可以定义槽位为会议地点和时间。
用户输入“我明天在公司开会”,经过自然语言理解处理后,结果为:
- 领域:会议室预订
- 意图:提供信息
- 槽位:{时间:明天;地点:公司}
自然语言理解的研究现状:
- 基于规则的方法:使用正则表达式,虽然灵活但耗时且难以移植。
- 基于统计的方法:单独建模和联合建模。单独建模将领域识别、意图识别和槽位填充分开研究,分别使用支持向量机、卷积神经网络、决策树、条件随机场和循环神经网络,存在误差累积问题。
研发步骤:
- 根据任务需求定义标签。
- 准备数据,如果是基于规则的方法,则需要观察数据规律并提取模板;如果是基于统计的方法,则需要标注数据,分为训练集、验证集和测试集,一般需要几十万条数据。
- 编写正则表达式或建立模型进行训练。
- 完成自然语言理解的研发并进行迭代优化。
对话管理
对话管理模块的主要框架如下:
用户输入“五道口附近的餐馆”,经过NLU处理后得到意图=询问,槽位={位置:五道口}。对话状态跟踪模块接收槽位={位置:五道口}。候选动作包括餐馆检索和需求澄清。策略模块将候选动作排序。根据排序结果执行动作,更新交互状态,并通过自然语言生成模块生成回复:“还有其他需求吗?”用户继续输入。
自然语言生成
自然语言生成模块(NLG)通常包含以下三部分:
- 内容选择:从输入中选择合适的内容并决定文本的结构。
- 句子规划:决定每个句子的词汇内容。
- 内容表达:将选定的内容渲染成最终的文本。
传统方法涉及:
- 概率上下文无关文法
- n元语法
- 属性检测
- 阈值过滤
- 文本筛选
基于深度学习的方法包括:
- RNN(循环神经网络)
- LSTM(长短期记忆网络)
- seq2seq(序列到序列模型)
- encoder-decoder(编码器-解码器架构)
训练样本通常需要几十万条数据。
面临的问题与思考
- 目前的人机对话系统只能在特定的小范围内取得较好的效果,很难实现一个大规模的通用聊天机器人。
- 当前主流对话系统的框架大同小异,主要目标仍然是实现较好的效果。为了达到这个目标,需要将业务范围限定得非常小。
- 涉及到机器学习或深度学习的对话系统都需要大量的训练样本,无法绕过人工标注这一环节。
- 在工程应用中,NLU、DM和NLG三个模块主要以库的形式调用,如果以服务的形式调用会比较复杂,尤其是在涉及到多个项目组时。
- 数据是最重要的资源,没有数据几乎寸步难行。数据需要不断更新,并与在线系统形成闭环。
- 目前在工程上表现较好的系统大多仍然采用传统的基于规则的方法,在某些环节引入机器学习或深度学习。人工智能或深度学习的应用需要回归到问题的本质,而不是一味地追求高大上的技术。
- 在样本标注方面,需要开发便捷的标注系统,方便业务人员或标注人员使用。
如果您想了解更多关于人工智能的基本原理,请关注作者的《人工智能科普》专栏。