【问题标题】:Mapping FAQ with RASA for large dataset (2000+)使用 RASA 映射大型数据集的常见问题解答 (2000+)
【发布时间】:2018-11-03 10:06:52
【问题描述】:

RASA 由 RASA NLU + Core 组成,我已经测试过我了解它的一些部分。 我尝试将其放入示例实践中,并且它的工作完美。

我打算把它带入一个新的水平,我希望在“tensorflow”后端的帮助下创建一个基于 RASA 堆栈的常见问题解答系统。

我收到了超过 1200 对问题和答案。第一,NLU 将在实体提取的同时发挥理解和分类意图的作用。 第二,它将 json 响应传递给 RASA 核心,其中 Answers 将映射或响应回用户。这听起来很简单,但当我去检查 RASA 时,它给出了不同的东西。通常,RASA 核心将根据预先定义的故事以及 ==> "utter_" 回复用户。预定义的故事很好,但仅适用于少量数据集。我们必须手动编写。

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

之前,我使用 [Retrieval Model] Sklean Tfidf-vectorizer 作为词袋和 consine-similairy 来比较并返回最相似的问题索引,当找到索引时,答案将基于索引进行选择,但是这种解决方案是无效的,因为意义会丢失和更多的问题。

谁有这么好的解决方案??

谢谢

【问题讨论】:

    标签: nlp artificial-intelligence chatbot rasa-nlu rasa-core


    【解决方案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
    
    [...]
    

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

    在下一步中,我将在您的 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 生成答案或使用custom actions。根据提取的实体(例如 placeitem),您可以查询数据库并生成答案。

    【讨论】:

    • 答案是使用 RASA 框架来创建基于模板的聊天机器人。它通过交互起作用,这意味着发生了信号游戏。缺少的是扎实的语法。那是可用的主题以及它们如何组合在一起的本体。例如,关于超市的问题是位置问题的子问题。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 2014-08-14
      • 1970-01-01
      • 1970-01-01
      • 2011-12-27
      • 1970-01-01
      相关资源
      最近更新 更多