November 15, 2019

基于 Rasa 开发对话机器人 - 1

基于 Rasa 开发对话机器人 - 1

From 《Building Chatbots with Python》, C4,Building Chatbots the Hard Way...

Rasa 是什么

  • 先来看一张结构图更容易说明问题,可以看出来,Rasa 整体分为三部分,NLU 负责解析用户意图、提取实体;Core 其实是 DM,也就是对话管理,负责维护对话的 session 等;Action 部分就是对用户的具体吩咐做出动作,并拿到结果,比如用户问天气、定个餐啥的,需要有对应的 action 代码去完成信息获取动作,然后返回用户结果。
    architecture
    (from: https://github.com/howl-anderson/WeatherBot)

  • Rasa NLU 解决一个句子的意图分类实体解析两个问题,使用步骤如下,

    1. 准备数据
    2. 准备配置文件
    3. 配置好 pipeline
    4. 训练模型

    然后就可以用它来解析意图实体

  • Rasa Core 是一个 DM,也就是对话管理系统,跟传统的,基于决策树写一堆条件判断去适应复杂的业务逻辑不同,Rasa Core 可以让你一个模型出来,让它对用户的问题作出回复

为什么要用 Rasa NLU?

  • Rasa 不是一个简单封装了各种 API 调用的库,得益于机器学习、深度学习,它提供了几乎所有场景下对完成一个 chatbot 所需的技能:
    • Rasa 是一个非常活跃的社区,分别针对社区、商业提供完整、成熟的支持。
    • 如果你不想把数据放到第三方云平台上,采用类似 Rasa 这样的开源架构在自己服务器上搭建一个 chatbot 是唯一的选择。
    • 如果把诸如训练模型、获取用户意图这样的需求完全交给第三方去做,技术上也可以,但万一第三方 API 挂了...
    • 基于 Rasa,你可以完全掌控所有的数据、流程、算法,想怎么折腾怎么折腾,而不用等着第三方平台升级,而且目前 nlp 领域更新巨快,几乎每天都有新的思想、论文和算法出来,你也无法寄希望于一个完整的第三方应用跟进、定制你所有的需求。

不说了,直接开搞

  • 0.14.4 这个版本吧:
    pip install rasa-nlu==0.14.4
    
  • 配置 pipeline
    • 所谓 pipeline 说到底就是一堆用来帮你训练模型的算法,Rasa 里面常用的 pipeline 有两个: spacy_sklearntensorflow_embedding,我们先简单看下这俩:
      • spacy_sklearn:
        • 这个 pipeline 集成了两种词向量( word-vec),分别是来自基于 GloVe 或者基于 FastText(来自 Facebook) 的预训练模型。
        • spacy_sklearn 主要适应一下的情景:比如你用 "北京明天的天气如何?" 这样的语料训练模型,然后模型就很容易泛化识别出来你说 "上海后天天气怎样?" 的意思。
        • 另外这个 pipeline 不需要太多的数据做训练(GloVe 和 FastText 都算传统机器学习范畴,不是深度学习)
      • tensorflow_embedding:
        • 这种方式好处是不需要预置其他的 pipeline,但需要你准备语料预训练模型,模型训练完了,词向量自然也就有了。
        • 这种基于 word2vec 的词向量可以提供词于词之间的关系,比如可以直接采用以下词对应的向量计算: 国王-男人+女人,得到的结果跟 女王 的结果非常类似(接近).