如何构建用于识别多个用户意图的分类器

  • 发布时间:2022-05-03 09:15:44 来源:
标签:
导读 在关于对话系统的 technology org 系列的第 7 部分中,您接触了一些数学知识,以更好地了解机器如何从输入和预期输出的示例中学习。然

在关于对话系统的 technology.org 系列的第 7 部分中,您接触了一些数学知识,以更好地了解机器如何从输入和预期输出的示例中学习。然后,通过继续第 6 部分中的意图分类器主题,您有机会将新学到的概念应用到为用户输入实现一个非常基本的单意图分类器的问题上。

在本系列的这一部分中,您将学习如何扩展基本分类器以包含更多类。此外,您将看到如何用单个分类器替换多个二元分类器。最后,我们将评估通过向分类器提供更多训练数据可以获得的性能优势。

如果您错过了前七篇文章,您可能有兴趣阅读之前的文章,然后再开始第六部分:

增强基本分类器

在第 7 部分中,我们构建了一个只能识别一个意图的分类器。我们可以将其视为对两个类别(#reset_password 和其他所有内容)的预测。然而,对于现实世界的对话系统,必须支持几十个类。假设我们的示例零售连锁店需要在其对话系统中提供不少于十几个意图。

通过在训练数据集中包含一个新语句,我们在之前的七个包中添加了三个新包,分别代表“where”、“is”和“nearest”。让我们看看这将如何改变我们新模型中的权重。

在训练模型之前,您应该弄清楚如何为输出分配一个数值。为每个类分配一个随机数可能会让我们很难找到匹配所有意图的正确函数。所以最好使用多个二元分类器,其中一个分类器负责检测单个类。如果我们结合输出,预测的意图将来自产生最高正置信度的分类器。

向训练数据添加更多示例将向下推动偏差参数。这样分类器就知道大多数话语不能属于一个特定的意图。如果我们有 10 个意图中的每一个有 10 个示例,那么每个意图将使用 10 个正示例和 90 个负示例进行训练。由于任何意图的负面例子的数量是正面例子的九倍,每个分类器肯定会知道大多数话语不是正面例子。

二元分类器与一件式分类器

您可以使用单个分类器代替几个二元分类器,该分类器的方程略有不同,即使数学结构不会发生太大变化。再次,为此您可以使用 Andrew Freed 在https://rb.gy/nohcqg提供的代码。在相同的三个输入类上训练后,得到以下一组权重:

与之前的二元分类器相比,现在的权重大多更小,偏置参数并不总是负数。解释是假定每个输入都与该分类器有关,因此没有输入可以超出范围。还要注意,在这个单一分类器中,所有概率必须加起来为 1。

诚然,以我们的方式测试我们的一体式分类器并不公平。我们应该用一个额外的类来训练它来表示与任何目标意图无关的所有话语。

在现实生活中,训练这个“其他”类可能既困难又缓慢,因为你可以与它相关联的选项总数。

无论您选择哪种分类器类型,对一个意图有利的示例将不可避免地对其余意图不利。因此,二元分类器自然会得到许多负样本,并开始通过它们的偏差参数间接处理其他类。同时,一个单件分类器应该直接与其他例子一起训练。您还可以通过创建负示例或将其他类本身视为正例来使用其他类训练二元分类器。

添加更多训练数据

我们通过尝试使用最少的数据仅预测一个意图来开始本文。然后,我们扩展了我们的预测以涵盖多个意图,但仍然使用少量数据。现在是时候检查当我们获得更多训练数据时会发生什么。

直观地说,当您向分类器提供更多和多样化的训练数据时,您期望分类器会做得更好。让我们通过根据每个意图在前一个输入示例中再添加五个输入示例来验证这个假设。

训练数据集的扩展显着改变了分类器的性能。在对新数据进行训练后,分类器学习以下权重:

由于权重现在变化更大,分类器学会了做出更多证实的结论。回想一下,我们在本文中的第一个简单分类器为每个单词指定了相同的权重,就好像它们都具有完全相同的意义一样。

同时,分类器的当前扩展版本通过识别某些词在确定意图方面比其他词更重要,展示了更多的智能。例如,“密码”现在是与重置密码相关的意图中最重要的词,而“打开”则很自然地位于与商店营业时间相关的意图的顶部。

随着更多的训练数据,我们的分类器也开始做出更好的预测。例如,话语“重置我的密码”将匹配密码重置意图的概率从 0.704 上升到 0.849。因此,添加更多的训练数据确实提高了我们分类器的性能。

至于缺点,如果仔细看上图中的权重值,其中一些显得相当可疑。像“你”、“你的”和“在”这样的词在这里声称比他们应得的更多。因此,即使在扩展之后,我们的分类器仍然忽略了我们对单词进行不平等处理的期望。为了使您的分类器更智能,您可能会考虑添加更高级的功能,例如词频加权或词干提取和词形还原。

包起来

这是关于 Dialog Systems 的technology.org系列中的第 8 篇文章,您在其中学习了如何扩展第 7 部分中的基本分类器以包含更多类。此外,您将单个分类器的性能与多个二元分类器的集合的性能进行了比较。最后,您看到了通过向分类器提供更多训练数据可以获得哪些性能优势。

  • 免责声明:本文由用户上传,如有侵权请联系删除!