如何在Bot框架上实现常见问题解答



我正在努力寻找使用Bot框架实现常见问题解答的方法。我考虑过使用LUIS,但发现我必须为每个问题创建一个Intent。由于可能有很多这样的方法(比如说100个),我想知道是否有更好的方法?

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

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

有几种方法可以计算覆盖率,但这里有一种相当简单的方法。将匹配的令牌的所有长度相加,然后除以要搜索的文档/字段的总长度。假设我们有一个查询"让我看看亚洲的狗",我们有一份名为"亚洲狗"的文件。我们会在用户话语中有两个匹配的标记,"dogs"one_answers"asia"。它们的总长度为8,标题长度为10。因此(8/10)将为标题字段产生0.8的覆盖分数。

在搜索文档时,你可以使用同样的基本技术,但你需要计算一个术语匹配的次数。基本上,我们希望一个出现5次"dog"和10次"asia"的文档比每个只出现1次的文档排名靠前。

你可以在排名算法中添加很多其他内容,比如词干&TF-IDF支持,但此时您应该只使用搜索引擎。

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

我们几乎都在做同样的事情,所以在我的案例中,我为通常以"什么是…"开头的问题创建了一个名为"定义"的意向。然后,我尝试用所有可能的问题来训练LUIS,要求定义。

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

最新更新