如何在 Bot Framework 上实施常见问题解答?

How do I implement FAQ on Bot Framework?

我正在为使用 Bot Framework 实施常见问题解答而应该采用的方法而苦恼。我考虑过使用 LUIS,但发现我必须为每个问题创建一个 Intent。由于可能有很多(比如100个),我想知道是否有更好的方法?

我不认为你需要为每个问题创建一个 Intent,信息设计是不可接受的。你需要做的是对你的问题类型进行分类,这些分类应该是你的意图。

我们几乎在做同样的事情,所以在我的例子中,我为通常以 "What is.." 开头的问题创建了一个名为 "Definition" 的 Intent。然后我尝试用所有可能的问题来训练 LUIS 来要求定义。

由于您正在处理常见问题解答,因此它是一组有限的信息。您基本上可以使用所有常见问题解答并将它们作为话语提交,并将它们分类为适当的意图。

如果您所做的只是返回常见问题解答,则根本不清楚您是否需要 LUIS。只需使用搜索技术。您可以使用像 Lucene 这样的搜索引擎,或者如果您只有几百个常见问题解答,则可以使用更简单的方法来编写您自己的排名器,该排名器根据用户查询中与文档匹配的词数来选择答案。

一个相当简单的排名算法是将用户话语分解为标记,然后针对每个文档搜索文档中的每个标记。您的分数是通过计算文档中匹配的标记数量并计算覆盖率分数来生成的。覆盖率基本上是用户查询中的术语与文档匹配的百分比。

有多种方法可以计算覆盖率,但这里有一种相当简单的方法。将所有匹配的标记的长度相加,然后除以要搜索的 document/field 的总长度。假设我们有查询 "show me dogs from asia" 并且我们有一个标题为 "Asian Dogs" 的文档。我们在用户话语中有 2 个匹配的标记,"dogs" 和 "asia"。它们的总长度为 8,标题的长度为 10。因此 (8 / 10) 会为标题字段产生 0.8 的覆盖率分数。

您可以在搜索文档时使用相同的基本技术,但您需要考虑术语匹配的次数。基本上,我们想要一个出现 5 次 "dog" 和 10 次出现 "asia" 的文档,以超过每个只出现 1 次的文档。

您可以向排名算法中添加许多其他内容,例如词干提取和 TF-IDF 支持,但此时您应该只使用搜索引擎。