为rasa生成domain.yml文件的简单方法
rasa-denerator的Python项目详细描述
拉萨Denerator
为rasa生成domain.yml文件的简单方法
适用于rasa rasa 1.x的旧版本!
使用python 3.7.x开发
安装
$ pip install rasa_denerator
安装之后,可以通过命令行或在python脚本中使用组件,我们提供了这两种情况的场景。
用法
cli
下面的示例将从操作模块、NLU培训数据和模板创建域文件
$ python -m rasa-denerator -actions Rasa-Denerator/notebooks/denerator_tests/actions -f templates Rasa-Denerator/notebooks/denerator_tests/data -nlu Rasa-Denerator/notebooks/denerator_tests/data/nlu/nlu.md
usage: rasa_denerator.py [-h][-o OUTPUT][-nlu NLU_FILE][-actions ACTIONS_DIR][-f TAG_FILES TAG_FILES] merge disparate Rasa domain files to create or update a aggregated domain.yml optional arguments: -h, --help show this help message and exit -o OUTPUT, --output OUTPUT -o <PATH_TO_OUTPUT_FILE> -nlu NLU_FILE, --nlu_file NLU_FILE -nlu <PATH_TO_NLU_TRAINING_DATA> -actions ACTIONS_DIR, --actions_dir ACTIONS_DIR -actions <PATH_TO_ACTIONS_DIRECTORY> -f TAG_FILES TAG_FILES, --find TAG_FILES TAG_FILES -f <TAG> <PATH_TO_DIRECTORY_OR_FILE>
除非输出文件是特定的,否则脚本将输出到std.out。
查询可能会变得相当复杂。例如,您可以指定以下内容:
$ python3 -m rasa_denerator -actions Rasa-Denerator/notebooks/denerator_tests/actions \ -f templates Rasa-Denerator/notebooks/denerator_tests/data \ -f slots Rasa-Denerator/notebooks/denerator_tests/data/ \ -nlu Rasa-Denerator/notebooks/denerator_tests/data/nlu/nlu.md \ -o domain.yml
Python
如果您想在python脚本中使用denerator,也可以这样做!
fromrasa_deneratorimportRasaDeneratornlu_file="denerator_tests/data/nlu/nlu.md"actions_dir="denerator_tests/actions/"tag_dict={"templates":"denerator_tests/data/domain","slots":"denerator_tests/data/domain","entities":"denerator_tests/data/domain"}output_file="domain.yml"denerator=RasaDenerator(nlu_file=nlu_file,actions_dir=actions_dir,tag_dict=tag_dict,output=output_file)denerator.generate_domain()
说明
在rasa中创建domain.yml文件目前是一个乏味的过程。以下面的示例为例
下面是一个示例结构,您的rasa项目现在可能看起来像这样。
your_rasa_project
│ README.md
│ other stuff...
│
└───data (This is where you store all your data)
│ nlu.md
| domain.yml
|
└───actions (This is where your action.py lives for rasa_sdk)
│ __init__.py
│ actions.py
| other_code.py
目前,开发人员必须使用来自已经存在于应用程序其他部分中的其他文件的多个资产来手工创建域文件。下面是一些要点
- 放置在培训数据文件中的实体和意图必须在培训之前手动复制到domain.yml文件中。
- 自定义操作名称必须列在domain.yml文件中。在重新培训之前,开发人员每次添加新操作时,都需要从自定义操作类中手动提取这些名称
- 模板在domain.yml文件中定义。这些模板是可以在对话中的特定训练点返回给用户的话语。一旦定义了这些模板语句,它们的标识必须手动复制到domain.yml文件的actions部分。
你以前可能感觉过这些痛点…
为了减轻一些痛苦,我创建了这个工具来自动生成一个domain.yml文件
开发注意事项:
- 根据NLU培训数据中列出的意图自动生成意图
- 根据有效的操作模块自动生成操作
- 自动聚合特定目录中递归列出的表单、操作、槽、语句
- 如果存在NLU训练数据或动作模块存在,则忽略用于实体、意图、动作或表单的标签 。
- 使其可访问命令行版本
- 使其易于包含在另一个脚本中
更好的布局
与其手动创建这些域文件,并在创建新实体、意图、语句和操作时不断更新它们,不如考虑下面的布局。
your_rasa_project
│ README.md
│ other stuff...
│
└───data (This is where you store all your data)
│ │
│ └───nlu
│ │ nlu.md
| |
│ └───domain
│ │ templates_1.yml (file containing templates)
| | templates_2.yml (file containing more templates...)
│ │ slots_1.yml (file containing slots)
| | slots_2.yml (file containing more slots...)
│ │ entities.yml (file containing entities, nlu training entities take precedence over this file)
│ │ intents.yml (file containing intents, nlu training intents take precedence over this file)
|
└───actions (This is where your action.py lives for rasa_sdk)
│ __init__.py
│ actions.py
| other_code.py
话语
所有的话语模板都可以在一组yml文件中定义。脚本将自动提取这些模板,并将它们作为模板和注册操作添加到域文件中。此外,脚本将把这些附加到生成的域文件中的已注册操作的已注册语句中。
实体和意图
实体和意图将从nlu.md训练数据文件中提取。这个脚本使用rasa的training_数据函数来加载和提取实体和意图。这允许我们接受标记、json等。训练数据中的实体和意图被提取并放入输出文件中。
如果你想手工定义实体和意图,那也没问题。只需创建一个包含它们的文件夹或文件并将其传递给脚本。
注:如果指定了一个实体或意图,它们将对NLU培训数据文件中标识的实体和意图采取谨慎态度。
操作
大多数rasa用户定义自定义操作。从它们各自的类中复制这些名称并将它们复制到域文件中目前是很乏味的。丹纳特用我的方法来解决这个问题g rasa_sdk加载用户创建的repsective action模块,提取类名,并自动添加到域文件中。
测试
所有单元测试都在笔记本文件中,可以在这里运行。我在笔记本里输入了所有的代码,所有的单元测试都可以在那里找到。
许可证
麻省理工学院2019年