本文第一部分讲解自然语言处理的原理,第二部分讲解聊天机器人的实现原理,解决方案及挑战,最后以 seq2seq+Attention 机制讲解模型结构。第三部分讲解如何从 0 开始训练一个聊天机器人。 一、自然语言处理的原理人工智能理解自然语言的原理,要解释清楚,首先需要界定下这个问题的含义,一种是狭义的说如何用计算机来处理和分析自然语言;另一种是则是广义地理解关于“人工智能”、“自然语言”和“理解”的含义。 我们先从广义层面探讨。弄清楚这几个名词。 自然语言:就是人类社会中发明和演变的用于沟通和交流的语言。而人工智能在对事物(不仅仅是自然语言)的理解,往往包含两个层次:一是研究内容;二是方法论。研究内容上主要是现在流行的研究课题,例如知识图谱、CV、语音识别、NLP 等。方法论是指实现人工智能的方法,主要有三种:符号主义、联结主义、行为主义。符号主义是用数理逻辑的推理来模拟人的思维智能,例如专家系统的实现。联结主义对人脑的仿生学研究,最常见的就是神经网络模型。行为主义重点在可预测的人类行为上,认为人类通过与外界环境的交互而得到自适应性,涉及的算法有遗传算法、强化学习等。 现有的NLP主要是以规则和统计相结合来处理的。它的规则一面偏向于符号主义的视角;而统计一面偏向于挖掘一般规律,属于归纳,目前用的方法,比如将自然语言用词向量的方法表征,然后接入神经网络中进行训练,也就是联结主义的思想。 理解:关于机器是否能真正理解语言一直有争论。先抛开这个问题,我们看看人类对语言的理解是怎么样的。实际上,人类对理解这个事情也做的不一定好。比如,南北方对“豆腐脑”的认知是不同的,两人交谈可能就会对同一物体的理解不同。因此,理解是需要由相似的生活经历、共同话题、上下文、会话的环境、双方的知识等很多因素决定的。既然对于人类来说,真正能理解对方,需要这么多的隐性因素,那对于机器来说,我们最好就不要关心机器是否真正能理解问题的含义本身,而是尽可能地让机器关注上述因素,来模拟人的智能。 狭义的层面是我们工程师研究的主要方向。也就是将自然语言理解看成是用计算机来处理和分析自然语言,它涉及到语言学(词、词性、语法)和计算机学科(模型/算法)的范畴。 从语言学上来看,研究的方向包括词干提取、词性还原、分词、词性标注、命名实体识别、词性消歧、句法分析、篇章分析等等。这属于研究的基础范畴,在这些基础的研究内容之上,面向的是具体的文本处理应用,如,机器翻译、文本摘要、情感分类、问答系统、聊天机器人等。 在计算机算法的研究方面,一般是以规则和统计相结合的方法,也就是理性主义和经验主义相结合。自然语言本质上还是符号系统,因此有一定的规则可寻,但是它的复杂性又决定了没有规则可以既不相互冲突又能覆盖所有的语言现象。后来大规模语料库的完善和统计机器学习方法流行起来后,就省去了很多人工编制规则的负担,使模型生成自动生成特征。 所以,我们研究的NLP就是使用数理和机器学习的方法对语言进行建模。可以说,NLP不是达到真正的自然语言理解,而是把语言当成是一种计算任务。 二、聊天机器人的实现原理、解决方案及挑战我们从聊天机器人的分类和实现原理分别说起。目前聊天机器人根据对话的产生方式,可以分为基于检索的模型(Retrieval-Based Models)和生成式模型(Generative Models)。 基于检索的模型有一个预先定义的回答集,我们需要设计一些启发式规则,这些规则能够根据输入的问句及上下文,挑选出合适的回答。 生成式模型不依赖预先定义的回答集,而是根据输入的问句及上下文,产生一个新的回答。 聊天机器人的这两条技术路线,从长远的角度看目前技术还都还处在山底,两种技术路线的异同和优势如下: 基于检索的模型的优势:
但是它的劣势在于:需要对候选的结果做排序,进行选择。 基于生成式模型的优势:
但是它的劣势在于:难以保证生成的结果是可读的,多样的。 因此,上述方法共同面临的挑战有:
这有点类似于我们的信息检索系统,既希望在垂直领域做得更好;也希望对不同的人的 query 有不同的排序偏好。 从应用目的的角度区分,可以分为目标驱动(Goal Driven),应用于客服助理等,在封闭话题场景中;无目标驱动(Non-Goal Driven),应用在开放话题的场景下,这是可谈论的主题是不限的,但是需要机器人有一定的基础常识。 尽管目前工业界应用的大多数是基于检索的模型,属于目标驱动的,例如:阿里小蜜,应用的话题领域比较窄,稍微将话题扩大一点,它就会不着边际回复或者文不对题。如下图: 一个开放话题场景下的生成式模型应该是最智能、符合我们预期的聊天机器人。因此总结来看: 智能聊天机器人的目标:
那么对于一个智能机器人来说,它的聊天的功能在其中应该处于什么位置?首先,聊天应该是一个基础模块;其次,聊天应该和完成任务的模块有很好的协作;最后,聊天应该使机器人看上去像您的朋友,而不是您的代理或者助手。 从上述角度来说,现在有一些经常与聊天机器人混淆的概念,也是一些聊天系统的周边产品:
因此,尽管聊天系统都是针对文本理解的大方向,但目标不同决定了技术路线会有所偏重,但聊天功能是一个基础功能。 智能聊天机器人可以从上面的周边系统研究领域的数据集有所借鉴:
那如何来评价一个聊天机器人的好坏?最重要的是问句和答句的相关性,也就是本质是:短文本相关度计算。但要注意:
目前在聊天机器人上使用的深度学习方法有如下这些:
其中,深度强化学习是把“如何得到一个足够让人满意的生成式结果”量化成 Reward。这些因素包括:
那么如何实现在智能聊天机器人的第三个目标,差异化回答呢?也就是如何在对话里如何引入个性化(personality)信息? 首先预训练一个人的向量,让生成的结果贴近人的特点。通过 word embedding 将人的信息作为一个词向量,在输入部分增加一组人的向量;在生成回答的时候,考虑不同的人应该选什么样的词语。 目前,我们要做一个真正智能的自动聊天机器人,仍然面临一些挑战:
(本文余下还有7000字) |
|