自然语言处理实战
上QQ阅读APP看书,第一时间看更新

1.7 聊天机器人的自然语言流水线

构建对话引擎或聊天机器人所需的NLP流水线与Ingersol、Morton和Farris所写的《驾驭文本》(Taming Text)一书中描述的问答系统类似。然而,在5个子系统中列出的一些算法可能对读者来说是全新的。我们帮助大家在Python中实现这些算法,以完成大多数应用程序(包括聊天机器人)所必需的各种NLP任务。

聊天机器人需要4个处理阶段和一个数据库来维护过去语句和回复的记录。这4个处理阶段中的每个阶段都可以包含一个或多个并行或串行工作的处理算法(如图1-3所示)。

(1)解析:从自然语言文本中提取特征、结构化数值数据。

(2)分析:通过对文本的情感、语法合法度及语义打分,生成和组合特征。

(3)生成:使用模板、搜索或语言模型生成可能的回复。

(4)执行:根据对话历史和目标,规划相应语句,并选择下一条回复。

上述4个阶段中的每个阶段都可以使用框图中相应框中列出的一个或多个算法来实现。我们将介绍如何使用Python为这些处理步骤中的每一个步骤实现近乎最高效的性能。另外,我们还会介绍这5个子系统的几种其他实现方法。

大多数聊天机器人将包含这5个子系统(4个处理阶段加上数据库)的所有元素。但是很多应用程序针对其中多个步骤只需要简单的算法。有些聊天机器人更擅长回答事实型问题,而其他一些则更擅长做出冗长、复杂、令人信服的像人一样的回复。上述提到的每一种能力都需要不同的方法,我们会介绍同时实现这两种能力的技术。

图片 3

图1-3 聊天机器人的循环流水线

此外,深度学习和数据驱动编程(机器学习或概率语言建模)使NLP和聊天机器人的应用迅速多样化。这种数据驱动的方法通过为NLP流水线提供越来越多的期望得以应用的领域中的数据使其更加复杂。当一种新的机器学习方法被发现能够更好地利用这些数据进行更有效的模型泛化或正则化时,那么就有可能实现能力的巨大飞跃。

图1-3所示的聊天机器人NLP流水线包含了本章一开始描述的大多数NLP应用程序的所有构建模块。与《驾驭文本》一书一样,我们将流水线划分为4个主要的子系统或阶段。此外,我们还显式地调用了一个数据库来于记录每个阶段所需的数据,并随着时间的推移保存这些阶段的配置和训练集。这可以在聊天机器人与外界进行交互时对每个阶段进行批量或在线再训练。我们还在生成的文本回复上给出了一个反馈循环,以便使用与处理用户语句相同的算法来处理我们的回复。然后,根据聊天机器人的对话规划或目标,将回复的得分或特征融合到一个目标函数中,以评估和选择可能的最佳回复。本书主要关注在聊天机器人上配置这个NLP流水线,但是大家也可以看到类似于文本检索或搜索的NLP问题,而搜索可能是最常见的NLP应用。很明显,这里的聊天机器人流水线也适用于《驾驭文本》这本书所关注的重点应用——问答系统。

上述流水线在金融预测或商业分析方面的应用可能不那么明显,但是想象一下流水线分析部分生成的特征。这些从分析或特征生成中得到的特征可以针对具体的金融或商业预测任务进行优化。通过这种方式,就可以将自然语言数据输入到机器学习流水线中进行预测。尽管专注于构建聊天机器人,但本书也为大家提供了从搜索到金融预测等广泛的NLP应用程序所需的工具。

在图1-3中有一个处理要素通常不会用于搜索、预测或问答系统,这就是自然语言生成。而对聊天机器人来说,这是它的核心特征。尽管如此,文本生成步骤经常被合并到搜索引擎NLP应用程序中,这可以为这样的引擎带来巨大的竞争优势。对许多流行的搜索引擎(DuckDuckGo、Bing和Google)来说,整合或概括搜索结果的能力是一项制胜特征。可以想象,如果一个金融预测引擎能够根据它从社交媒体网络和新闻源中的自然语言流中检测到的金融业务活动生成语句、推文或整篇文章,那该多么有价值!

下一节将展示如何组合这样一个系统的各层,以便在NLP流水线的每个阶段创建更复杂的功能。