Rasa

Rasa官网-开源自然语言理解和对话管理

Rasa使用示意图


Rasa训练过程

  1. 定义意图,并提供用户可能表达意图的例子,例如打招呼可以有你好,有人吗等,整理出来保存到 nlu.md文件中;
  • markdown格式
## intent:check_balance
- what is my balance <!-- 没有实体 -->
- how much do I have on my [savings](source_account) <!-- 实体source_account的值是savings -->
- how much do I have on my [savings account](source_account:savings) <!-- savings同义词account -->
- Could I pay in [yen](currency)?  <!-- 实体通过查询表获取 --> 
  • json格式
{
    "rasa_nlu_data": {
        "common_examples": [], //训练模型的内容放在这里
        "regex_features" : [],
        "lookup_tables"  : [],
        "entity_synonyms": []
    }
}
  1. 定于NLU模型配置,使用哪种预定义管道或者自定义管道训练模型,保存到 nlu_config.yml 文件中,之所以叫管道是组件之间使用了管道架构连接在一起;由于需要处理中文,所以只能使用 tensorflow 并辅助以jieba 分词;
language: "zh"

pipeline:
- name: "nlp_mitie"
  model: "data/total_word_feature_extractor_zh.dat"
- name: "tokenizer_jieba"
- name: "ner_mitie"
- name: "ner_synonyms"
- name: "intent_entity_featurizer_regex"
- name: "intent_featurizer_mitie"
- name: "intent_classifier_sklearn"
  1. 使用 nlu.md 和 nlu_config.yml 训练NLU模型;
    python -m rasa_nlu.train -c nlu_config.yml --data nlu.md -o models --fixed_model_name nlu --project current --verbose

  2. 写剧本,一个剧本是用户和机器人之间真实的对话,用户输入是意图,机器人响应是下一步动作,保存到 stories.md 文件中;

## story_check_balance <!--- 剧本名,可选,调试时有用 --> 
* check_balance <!--- 用户的意图和实体 -> 
 - utter_name <!--- 响应动作 --> 
  1. 定义一个领域,包括意图,回答动作和回答模板,保存到domain.yml文件中;
  2. 训练对话模型。
    python -m rasa_core.train -d domain.yml -s stories.md -o models/dialogue

业务模型

uml diagram


2019年04月26号