Ste*_*ane 1 nlp artificial-intelligence chatbot rasa-nlu rasa-core
RASA 由 RASA NLU + Core 组成,我已经测试过我了解它的一些部分。我尝试将其放入示例实践中,并且它的工作完美无缺。
我计划将其提升到一个新的水平,我希望在“tensorflow”后端的帮助下创建一个基于 RASA 堆栈的常见问题解答系统。
我收到了超过 1200 对问题和答案。第一,NLU 将负责理解和分类意图以及实体提取。第二,它将 json 响应传递给 RASA 核心,其中 Answers 将映射或响应给用户。这听起来很简单,但当我去检查 RASA 时,它给出了一些不同的东西。通常,RASA 核心将根据预定义的故事以及 ==> "utter_" 来响应用户。预定义的故事很好,但仅适用于少量数据集。我们必须手动编写它。
当数据集或基于知识的增长如 1000+ 或 5000+ 时如何处理,我们无法手动映射它。我试着环顾四周,但还没有找到任何合适的方法来处理它。
之前我用[Retrieval Model] Sklean Tfidf-vectorizer作为词袋和consine-similary比较并返回最相似的问题索引,当找到索引时Answer会根据索引进行选择,但这种解决方案并不有效因为意义将丢失并且更多的问题。
有没有人有这么好的解决方案?
谢谢
首先,我想澄清一下实际的架构:
在您的情况下(FAQ bot,许多问题)您可以尝试以下操作,这将导致相对简单的故事:
## 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
[...]
Run Code Online (Sandbox Code Playgroud)
当然,我会添加更多路径,例如,如果用户对答案不满意,或者用户试图与您的聊天机器人聊天等。
在下一步中,我将在您的 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)
Run Code Online (Sandbox Code Playgroud)
总而言之,我不会为每个问题做一个意图,而是将几个问题分组到一个意图中,然后提取将其缩小到具体问题的实体。
然后您可以使用 CMS 来生成答案或自定义操作。基于提取的实体(例如place和item),您可以查询您的数据库并生成答案。