Skip to content

Latest commit

 

History

History
104 lines (54 loc) · 8.65 KB

bot-answer-faqs-predicting-text-similarity.md

File metadata and controls

104 lines (54 loc) · 8.65 KB

构建一个回答常见问题的机器人:预测文本相似度

原文:www.kdnuggets.com/2017/03/bot-answer-faqs-predicting-text-similarity.html

由 Amanda Sivaraj 撰写,indico

在我们关于客户支持机器人的前一个教程中,我们使用自定义集合 API 训练了一个机器人,以将客户引导到最适合解决他们问题或查询的团队成员。这个机器人提高了我们团队的响应速度,因为我们不再需要依赖一个人类协调者(他在公司里还扮演许多其他角色 #startuplife)来完成这项工作。然而,我们通常只能在东部时间上午 11 点到下午 7 点的办公时间内响应,因此在这个时间段之外的询问仍然会有延迟。我们如何改进这一点?构建一个回答常见问题的机器人,以减少对更多客户的延迟,并确保我们的工程师不需要花费过多时间远离我们为你构建的产品 :).

任务

我们将进行 Python 中的最近邻搜索,将用户输入的问题与常见问题列表进行比较。为此,我们将使用 indico 的文本特征 API 来查找文本数据的所有特征向量,并计算这些向量与用户输入问题的向量在 300 维空间中的距离。然后,我们将根据用户的问题与哪个常见问题最相似(如果它符合某个置信度阈值)返回相应的答案。

入门指南

首先,从我们的 SuperCell GitHub 仓库获取骨架代码

如果你没有所需的所有包,你需要安装它们——texttable 和当然还有indicoio

如果你还没有设置 indico 账户,请按照我们的快速入门指南操作。它将引导你完成获取 API 密钥和安装indicoio Python 库的过程。如果遇到任何问题,请查看文档中的安装部分。如果问题依然存在,你也可以通过那个小聊天气泡联系我们。假设你的账户已设置完毕,并且一切都已安装好,我们就开始吧!

首先,前往文件的顶部并导入indicoio。不要忘记设置你的 API 密钥。有多种方法可以做到这一点;我喜欢把我的 API 密钥放在配置文件中。

 import indicoio
   indicoio.config.api_key = 'YOUR_API_KEY' 

使用 indico 的文本特征 API

你需要将常见问题及其答案存储在一个字典中。为了简便起见,我在脚本中创建了一个包含五个问题和答案的字典faqs。这将是我们的初始数据集。我们只需要提取问题的文本特征,而不是答案,因此我们提取faqs.keys(),然后将这些数据传递给我们的make_feats()函数。

接下来,让我们更新run()函数。将feats保存到 Pickle 文件中,这样每次你想将用户的问题与静态的 FAQ 列表进行比较时,就不需要每次都重新运行文本特征 API。

比较常见问题与用户输入

现在我们已经获得了 FAQ 文本数据的特征表示,让我们进入下一阶段:收集和比较用户问题与我们的 FAQ。为了使每个人都可以在本地运行这个脚本,无论你打算将它连接到什么客户支持聊天服务,我们将使用raw_input()。你需要根据你的消息应用程序的文档设置自己的 webhook。

首先,让我们获取一个输入,将其添加到 FAQ 列表中,并为输入找到文本特征,然后将其添加到主要的feats列表中。这将简化我们在以后计算所有特征表示的距离时的操作。更新input_question()函数:

现在是时候再次更新run()函数了。这一次,你可以直接加载之前找到的 FAQ 特征的 Pickle 文件。

现在我们已经为所有 FAQ 和用户的问题获得了特征向量列表!这将如何帮助我们找出输入最相似的 FAQ?文本之间的相似性是通过它们对应的特征向量之间的相似性来衡量的。我们在calculate_distances函数中预测它们的相似性,该函数计算这些向量在余弦空间中的距离。余弦通常是处理高维空间中点时的比较指标。calculate_distances生成一个mn的矩阵,该矩阵存储文档m和文档n之间的距离,位置为distance_matrix[m][n]

再次更新run()函数:

最后,让我们看看我们的最近邻搜索表现如何!similarity_text()函数将遍历distance_matrix,根据相似度级别对每一段文本进行排序,然后以表格形式打印出来。我们不希望机器人在不确定找到 FAQ 匹配的情况下给出答案,因此我们需要设置一个信心阈值。将以下代码添加到similarity_text()中,紧接在print t.draw()之后:

如果机器人的信心水平达到阈值,它应该返回相应的 FAQ 答案。否则,它应该通知你的客户支持经理(你需要根据你的消息应用程序的文档来配置):

最后一次更新run()函数,然后运行代码!

它的表现如何?这里有一个示例:

常见问题机器人在终端中的结果

哇!它的表现相当不错,尽管输入问题的用词与 FAQ 匹配时有所不同且更加简洁,我们的丰富文本功能仍然能够捕捉其含义。那么,这里发生了什么——为什么会这样呢?

indico 的文本特征 API 为给定的文本输入创建了数十万个丰富的特征向量表示,这些特征是使用深度学习技术学习到的。这些特征向量——在多维空间中的数值表示——是计算机为一个词赋予意义的一种方式。

当我们将 FAQ 列表输入文本特征算法时,它本质上识别了每个问题中的某些词为“重要”,并确定了它们在多维空间中的位置。文本特征然后将这些词的表示组合起来,生成整个“文档”的表示(在这种情况下是 FAQ——你也可以传入整篇文章来找到其特征表示)。当我们展示给它我们的新输入问题时,它做了同样的事情。然后我们使用这些文档表示来计算它们之间的距离,以确定两个“文档”在概念上的相似性。多维空间中的特征越接近,它们的意义就越相近。

下一步

从本质上讲,这是一个预测文本相似性的练习。你能想象这个任务的其他应用吗?如果你用我们的 API 创建了什么酷东西,一定要告诉我们,邮箱是 [email protected]

简介:Amanda Sivaraj 是一位内容创作者、数字营销专家以及数据与技术爱好者。她为indico开发内容和教程,该公司提供用于自动化文本和图像分析的机器学习工具。

原文。经许可转载。

相关:

  • 增强版聊天机器人:推动聊天机器人的 10 项关键机器学习能力

  • 人工智能与聊天机器人的语音识别:入门

  • 近期聊天机器人技术进展的简要概述


我们的前三大课程推荐

1. Google 网络安全证书 - 快速进入网络安全职业轨道。

2. Google 数据分析专业证书 - 提升你的数据分析技能

3. Google IT 支持专业证书 - 支持你的组织的 IT 需求


更多相关主题