zoukankan      html  css  js  c++  java
  • rasa框架学习一(domain.yml、nlu.md、stories.md)

    可以跟进:rasa框架学习二(slots,entities,actions,component)

     

    一、什么是rasa

           Rasa是一个用于自动文本和基于语音的对话的开源机器学习框架。了解消息,保持对话以及连接到消息传递通道和API

      Rasa分为Rasa core和 Rasa nlu两部分:

      Rasa core用于指导会话流,而Rasa nlu用于理解和处理文本以提取信息(实体)

      Rasa了解用户想说的内容(Rasa NLU - 实体和意图提取),然后根据上下文信息对其进行适当的操作谈话(Rasa Core)

      官方推荐安装方式(安装rasa和easa X):

    pip install rasa-x --extra-index-url https://pypi.rasa.com/simple

        如果您不想使用Rasa X,请改为运行

    pip install rasa

    注意:

    如果你想确保为你可能需要的任何组件安装了依赖项,并且你不介意附加的依赖项,你可以使用以下代码安装一切

    pip install -r alt_requirements/requirements_full.txt

    二、创建一个新项目

    1. 创建rasa项目

    rasa init --no-prompt

    该命令创建Rasa项目所需的所有文件。

    会创建以下文件:

    __init__.py    一个帮助python找到你动作的空文件
    actions.py     自定义操作的代码
    config.yml '*'     配置NLU和Core型号
    credentials.yml    连接其他服务的详细信息
    data/nlu.md '*'    你的NLU训练数据
    data/stories.md '*'    你的故事
    domain.yml '*'     你助手的域名
    endpoints.yml      连接到fb messenger等频道的详细信息
    models/<timestamp>.tar.gz    你的初始模型

    要检查是否已创建所有文件,请运行:

    ls -l

    2. 定义一个域

    domain.yml文件

    domain可以理解为机器的知识库,其中定义了意图,动作,以及对应动作所反馈的内容

    intents     你期望用户说的东西。
    entities    您想要从消息中提取的信息片段。
    actions     你的机器人可以做和说的东西
    slots       在会话期间跟踪的信息(例如用户年龄)
    templates   你的机器人可以说的东西的模板字符串
    intents:
      - greet
      - goodbye
      - mood_affirm
      - mood_deny
      - mood_great
      - mood_unhappy
    
    actions:
    - utter_greet
    - utter_cheer_up
    - utter_did_that_help
    - utter_happy
    - utter_goodbye
    
    templates:
      utter_greet:
      - text: "Hey! How are you?"
        buttons:
        - title: "great"
          payload: "great"
        - title: "super sad"
          payload: "super sad"
    
      utter_cheer_up:
      - text: "Here is something to cheer you up:"
        image: "https://i.imgur.com/nGF1K8f.jpg"
    
      utter_did_that_help:
      - text: "Did that help you?"
    
      utter_happy:
      - text: "Great carry on!"
    
      utter_goodbye:
      - text: "Bye"

    Rasa Core取intent,entities以及内部的对话状态,并且选择的所述一个actions应该下一个执行。如果该动作只是向用户说明,Rasa将在域中查找匹配模板(动作名称等于完全模板, utter_greet如上例所示),填写所有变量并进行响应。对于不仅仅发送消息的操作,您可以将它们定义为python类,并通过它们的模块路径在域中引用它们。

    3. 定义一个解释器

    解释器负责解析消息。目前我们的机器人已经可以通过输入意图来获取答案了,但是怎么让机器理解真正的语言呢,这个时候就需要用到NLU模块了,NLU的任务是解析消息,它能把自然语言解释成我们需要的结构化的数据

    在Rasa NLU中,我们需要定义我们的机器人应该能够以Rasa NLU训练数据格式处理的用户消息。我们将使用Markdown格式来获取NLU训练数据。我们来创建一些意图示例data/nlu.md:

    ## intent:greet
    - hey
    - hello
    - hi
    - hello there
    - good morning
    - good evening
    - moin
    - hey there
    - let's go
    - hey dude
    - goodmorning
    - goodevening
    - good afternoon
    
    ## intent:goodbye
    - cu
    - good by
    - cee you later
    - good night
    - good afternoon
    - bye
    - goodbye
    - have a nice day
    - see you around
    - bye bye
    - see you later
    
    ## intent:mood_affirm
    - yes
    - indeed
    - of course
    - that sounds good
    - correct
    
    ## intent:mood_deny
    - no
    - never
    - I don't think so
    - don't like that
    - no way
    
    ## intent:mood_great
    - perfect
    - very good
    - great
    - amazing
    - feeling like a king
    - wonderful
    - I am feeling very good
    - I am great
    - I am amazing
    - I am going to save the world
    - super
    - extremely good
    - so so perfect
    - so good
    - so perfect
    
    ## intent:mood_unhappy
    - my day was horrible
    - I am sad
    - I don't feel very well
    - I am disappointed
    - super sad
    - I'm so sad
    - sad
    - very sad
    - unhappy
    - not so good
    - not very good
    - extremly sad
    - so saad
    - so sad

    我们现在可以使用我们的示例来训练NLU模型(确保首先 安装Rasa NLU 以及 spaCy)

    4. 定义故事

    到目前为止,我们已经有了一个NLU模型,一个定义我们的机器人可以采取的动作的域以及它应该处理的输入(意图和实体)。我们仍然错过了中心部分,故事告诉我们的机器人在对话的哪一点做什么

    一个故事是,对话系统训练数据样本。有两种不同的方式来创建故事(你可以混合它们):

    • 手动创建故事,直接将它们写入文件
    • 使用交互式学习创建故事。

    我们将通过直接写入故事来创建故事stories.md。故事以##一个字符串作为标识符开始。用户操作以星号开头,机器人操作由以短划线开头的行指定。故事的结尾用换行符表示。

    ## happy path               <!-- name of the story - just for debugging -->
    * greet              
      - utter_greet
    * mood_great               <!-- user utterance, in format _intent[entities] -->
      - utter_happy
    
    ## sad path 1               <!-- this is already the start of the next story -->
    * greet
      - utter_greet             <!-- action of the bot to execute -->
    * mood_unhappy
      - utter_cheer_up
      - utter_did_that_help
    * mood_affirm
      - utter_happy
    
    ## sad path 2
    * greet
      - utter_greet
    * mood_unhappy
      - utter_cheer_up
      - utter_did_that_help
    * mood_deny
      - utter_goodbye
    
    ## say goodbye
    * goodbye
      - utter_goodbye
    

    请注意,虽然直接用手写故事比使用交互式学习要快得多,但在使用插槽时需要特别小心,因为它们需要在故事中正确设置

    5. 命令

    rasa init     使用示例训练数据,操作和配置文件创建新项目。
    rasa train    使用您的NLU数据和故事训练模型,
    rasa interactive    启动交互式学习会话,通过聊天创建新的培训数据。
    rasa shell    加载训练有素的模型,并让您在命令行上与助手交谈。
    rasa run      使用训练有素的模型启动Rasa服务器。有关详细信息,请参阅运行服务器文档。
    rasa run actions    使用Rasa SDK启动操作服务器。
    rasa visualize      可视化故事。
    rasa test     使用您的测试NLU数据和故事测试训练有素的Rasa模型。
    rasa data split nlu      根据指定的百分比执行NLU数据的拆分。
    rasa data convert nlu    在不同格式之间转换NLU训练数据。
    rasa -h       显示所有可用命令。
    

     举个实例吧 

    建一个新文件夹:rasa_study ,

    进入文件夹:cd rasa_study

    创建rasa项目:rasa init --no-prompt

    项目目录:

    1. 定义一个域(domain.yml)

    intents:
      - greet
      - mood_happy
      - mood_unhappy
    
    actions:
    - utter_greet
    - utter_happy
    - utter_unhappy
    
    templates:
      utter_greet:
      - text: "你好,你今天过的怎么样啊"
    
      utter_happy:
      - text: "那很棒棒哦"
    
      utter_unhappy:
      - text: "咋了,可以告诉我吗"

    2. 定义模型(nlu.md)

    ## intent:greet
    - 你好
    - 上午好
    - 下午好
    - 早上好
    - 晚上好
    
    ## intent:mood_happy
    - 很好
    - 我很好
    
    ## intent:mood_unhappy
    - 我很难受
    - 我心情很差

    因为用到了中文所以在config.yml里设置一下中文把en改成zh即可

    3.  定义一个故事(stories.md)

    *greet就是intent, - utter_greet是action

    ## story_happy
    *greet   
      - utter_greet  
    * mood_happy
      - utter_happy
    
    ## story_unhappy
    * greet
      - utter_greet
    *  mood_unhappy
      - utter_unhapp

    然后先要训练,在命令行里输入 rasa train注意:对上面的三个文件进行修改后都要先进行训练,再进行对话,否则对话的内容是未修改前的内容

    D:myproject asa_study>rasa train

    2019-06-05 16:28:19 INFO     rasa.model  - Data (stories) for Core model changed.

    Training Core model...

    Processed Story Blocks: 100%|███████████████████████████████████████████████████

    训练完后,就可以对话了。在cmd输入 rasa shell 进行对话

    我理解的对话流程图,不知道对不对

  • 相关阅读:
    time和/usr/bin/time
    Linux系统-real/user/sys time
    PL/SQL:集合类型 (定义,分类,使用场景,集合方法)
    关于Android开发中使用的XML
    Android Studio 常用快捷键
    Android中Adapter总结
    Android 中的 Context
    Android Studio 项目结构
    Android Studio 连接真机调试
    Android Studio 入门
  • 原文地址:https://www.cnblogs.com/huangqihui/p/10978837.html
Copyright © 2011-2022 走看看