对话系统rasa - Training Data Importers(翻译)
默认情况下,可以使用命令行参数指定rasa在磁盘上查找训练数据的位置。然后,rasa加载任何可能的训练文件并使用它们来训练您的助手。
如果有必要,你可以自定义Rasa如何导入训练数据。潜在的使用场景有:
- 使用自定义parser加载其他格式的训练数据
- 使用不同的途径收集训练数据(如,从不同的资源加载数据)
你可以让Rasa加载和使用你自定义的importer,通过在Rasa配置文件中添加importers,如下:
1
2
3
4
5
|
importers:
- name: "module.CustomImporter"
parameter1: "value"
parameter2: "value2"
- name: "module.AnotherCustomImporter"
|
name
用来说明那个importer需要被加载。任何其他额外的参数以构造函数参数的形式传入。
注意:你可以指定多个importers。Rasa会自动将结果合并。
RasaFileImporter(default)
默认情况下Rasa使用RasaFileImporter。如果您想单独使用它,则不必在配置文件中指定任何内容。如果要与其他导入程序一起使用,请将其添加到配置文件中:
1
2
|
importers:
- name: "RasaFileImporter"
|
MultiProjectImporter(experimental)
警告:此功能目前处于试验阶段,将来可能会更改或删除。请在论坛上分享您对该功能的反馈,以帮助我们将此功能准备就绪。
使用该importer,你可以通过组合多个可重用的rasa项目来构建上下文ai助手。例如,你可以处理一个项目的闲聊,并用另一个项目问候。这些项目可以单独开发,然后在训练你的时候合并以创建你的助手。
一个目录结构的示例如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
.
├── config.yml
└── projects
├── GreetBot
│ ├── data
│ │ ├── nlu.md
│ │ └── stories.md
│ └── domain.yml
└── ChitchatBot
├── config.yml
├── data
│ ├── nlu.md
│ └── stories.md
└── domain.yml
|
在本例中,上下文ai助手导入chitchatbot项目,然后导入greetbot项目。项目导入在每个项目的配置文件中定义。要指示rasa使用multiprojectimporter模块,请将此部分放在根项目的配置文件中:
1
2
|
importers:
- name: MultiProjectImporter
|
然后指定要导入的项目。在我们的示例中,根项目中的config.yml如下所示:
1
2
|
imports:
- projects/ChitchatBot
|
ChitChatBot的配置文件中要引用GreeBot,如下:
1
2
|
imports:
- ../GreetBot
|
GreetBot项目没有指定更多的项目,因此config.yml可以忽略。
rasa使用引用配置文件中的相对路径导入项目。只要允许文件访问,这些文件可以位于文件系统中的任何位置。
在训练过程中, rasa将导入所有需要的训练文件,将它们合并,并训练一名统一的ai助理。在运行时合并训练数据,因此不会创建或显示包含训练数据的其他文件。
注意:在训练过程中,rasa使用根项目目录的policy和NLU pipeline配置文件。导入项目中policy和NLU配置文件会被忽略。
注意:相同的意图,实体,slots,模板,actions和forms将被合并,如,如果两个项目中都有意图为greet的训练数据,他们的训练数据会被合并。
Writing a Custom Importer
如果你要创建自定义importer,需要实现TrainingDataImporter类一些接口,如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
from typing import Optional, Text, Dict, List, Union
import rasa
from rasa.core.domain import Domain
from rasa.core.interpreter import RegexInterpreter, NaturalLanguageInterpreter
from rasa.core.training.structures import StoryGraph
from rasa.importers.importer import TrainingDataImporter
from rasa.nlu.training_data import TrainingData
class MyImporter(TrainingDataImporter):
"""Example implementation of a custom importer component."""
def __init__(
self,
config_file: Optional[Text] = None,
domain_path: Optional[Text] = None,
training_data_paths: Optional[Union[List[Text], Text]] = None,
**kwargs: Dict
):
"""Constructor of your custom file importer.
Args:
config_file: Path to configuration file from command line arguments.
domain_path: Path to domain file from command line arguments.
training_data_paths: Path to training files from command line arguments.
**kwargs: Extra parameters passed through configuration in configuration file.
"""
pass
async def get_domain(self) -> Domain:
path_to_domain_file = self._custom_get_domain_file()
return Domain.load(path_to_domain_file)
def _custom_get_domain_file(self) -> Text:
pass
async def get_stories(
self,
interpreter: "NaturalLanguageInterpreter" = RegexInterpreter(),
template_variables: Optional[Dict] = None,
use_e2e: bool = False,
exclusion_percentage: Optional[int] = None,
) -> StoryGraph:
from rasa.core.training.dsl import StoryFileReader
path_to_stories = self._custom_get_story_file()
return await StoryFileReader.read_from_file(path_to_stories, await self.get_domain())
def _custom_get_story_file(self) -> Text:
pass
async def get_config(self) -> Dict:
path_to_config = self._custom_get_config_file()
return rasa.utils.io.read_config_file(path_to_config)
def _custom_get_config_file(self) -> Text:
pass
async def get_nlu_data(self, language: Optional[Text] = "en") -> TrainingData:
from rasa.nlu.training_data import loading
path_to_nlu_file = self._custom_get_nlu_file()
return loading.load_data(path_to_nlu_file)
def _custom_get_nlu_file(self) -> Text:
pass
|
TrainingDataImporter
class rasa.importers.impoter.TrainingDataImporter
不同机制加载数据的通用接口。
get_domain()
获取bot的domain
Returns: 加载的Domain
Return type: Domain
get_config()
获取被用于训练的将配置
Returns: 字典形式存储的配置
Return type:Dict
[~KT, ~VT]
get_nlu_data(language='en’)
获取被用于训练的NLU训练数据
参数:language,可以用来只加载某种语言的训练数据
Returns: 加载的NLU TrainingData
Return type:TrainingData
get_stories
(interpreter=<rasa.core.interpreter.RegexInterpreter object>, template_variables=None, use_e2e=False, exclusion_percentage=None)
获取被用于训练的故事
参数
- interpreter - 应该用来解析端到端学习注释的解释器。
- template_variables - 读取故事文件的时候需要被替换掉的模板值
- use_e2e - 指定是否分析端到端学习批注。
- exclusion_percentage - 训练数据中需要被排除的比例
Returns: 包含所有故事的StoryGraph
Return type:StoryGraph
原文链接
https://rasa.com/docs/rasa/api/training-data-importers/