使用 Rasa 映射大型数据集的常见问题解答 (2000+)

Mapping FAQ with Rasa for large dataset (2000+)

提问人:Stev Jane 提问时间:11/3/2018 最后编辑:Hack-RStev Jane 更新时间:5/28/2023 访问量:1299

问:

RASA 由 Rasa NLU + Core 组成,我已经测试过了,我了解它的某些部分。我试着把它放到样本实践中,它工作得很好。

我计划将其提升到一个新的水平,我希望在“tensorflow”后端的帮助下创建一个基于 RASA 堆栈的 FAQ 系统。

我得到了超过1200 +对问题和答案。首先,NLU 将负责理解和分类意图以及实体提取。

其次,它将 JSON 响应传递给 Rasa 核心,其中 Answers 将映射或响应回用户。这听起来很简单,但是当我去检查Rasa时,它给出了一些不同的东西。通常,RASA 核心会根据预定义的故事以及 ==> “utter_” 来响应用户。预定义的故事很好,但仅适用于少量数据集。我们必须手动编写它。

当数据集或基于知识的数据集越来越大(例如1000+或5000+)时如何处理,我们无法手动映射它。我试着环顾四周,但还没有找到任何合适的方法来处理它。

以前,我使用[检索模型] sklearn TfidfVectorizer作为单词袋以及余弦相似度来比较并返回最相似的问题索引,当找到索引时,答案会根据索引进行选择,但这种解决方案是无效的,因为意义会丢失,问题更多。

有人对此有很好的解决方案吗?

NLP 人工智能 聊天机器人 RASA-NLU RASA-CORE

评论


答:

6赞 Tobias 11/9/2018 #1

首先,我想向实际架构澄清一下:

  1. 用户向聊天机器人发送消息
  2. Rasa Core 获取这些消息并将它们传递给 Rasa NLU,后者进行意图识别(了解用户的目标)并从输入中提取实体
  3. 根据对话的公认意图、实体和历史记录,Rasa Core 预测机器人的下一步操作

在你的情况下(FAQ机器人,很多问题),你可以尝试以下方法,这将导致相对简单的故事:

## User asks for price
* ask_location{"place": "a entity which is extracted by NLU}
  - action_utter_place

# User asks for location
* ask_price{"item": "a entity which is extracted by NLU}
  - action_utter_price

[...]

当然,我会添加更多路径,例如,如果用户对 anwer 不满意,或者用户尝试与您的聊天机器人闲聊等。

在下一步中,我将提供 NLU 训练数据中所有可能的问题,并根据问题的内容提取不同的实体。例如:

## intent:ask_location
- Where is the [cinema](place)
- How do I get to the next [supermarket](place)
- What's the closest [doctor](place)

## intent:ask_price
- How much is it
- What does it cost
- How much is a [ticket](item) for the [cinema](place)

总而言之,我不会对每个问题做一个意图,而是将几个问题分组到一个意图中,然后提取实体,将其缩小到具体问题。

然后,您可以使用 CMS 生成答案或自定义操作。然后,根据提取的实体(例如地点项目),您可以查询数据库并生成答案。

评论

0赞 Manuel Rodriguez 11/10/2018
答案是使用 RASA 框架创建基于模板的聊天机器人。它通过交互工作,这意味着发生了信号游戏。缺少的是扎根的语法。也就是说,这是一个可用的主题的本体论,以及它们如何组合在一起。例如,关于超市的问题是位置问题的子问题。
0赞 Thusitha 9/14/2020 #2

我不完全确定你在这里说的是什么意思.对于单回合问题/答案,官方 Rasa 方法是按照您的建议使用检索操作。我们发现这有点麻烦,所以我们在 Universal Encoder 嵌入之上实现了一个简单的分类器。 *but this kind of solution is not effective since the meaning will lost and much more problem.*

即机器人有一个意图,在该意图下,所有 ~1000 个单轮问题都被分组。所有这些都映射到一个动作。在操作中,我们专门为这 ~1000 个问题构建的辅助分类器将用于推断正确的响应 ID。内部数据库将包含响应文本(可以根据业务用户的需要进行更改,而无需更改模型)。ask_faqaction_answer_faq