目录
Markdown格式
JSON格式
可视化工具
样本集(common_examples)
同义词(Entity Synonyms)
正则表达式(Regular Expression Features)
自定义词表(Lookup Tables)
训练数据存储方式
网址:https://rasa.com/docs/nlu/dataformat/
Rasa NLU的训练数据分为几类:样本集、同义词、正则表达式、自定义词表。
同义词可以将不同的实体名字映射为相同的名字,但需要样本集中有类似的训练数据。
自定义词表可以用列表或txt文件的形式,可以进行精确抽取。
{
"rasa_nlu_data": {
"common_examples": [],
"regex_features" : [],
"lookup_tables" : [],
"entity_synonyms": []
}
}
https://github.com/RasaHQ/rasa-nlu-trainer
https://rasahq.github.io/rasa-nlu-trainer/
生成rasa所需格式的训练数据的工具:https://rodrigopivi.github.io/Chatito/
{
"text": "show me chinese restaurants",
"intent": "restaurant_search",
"entities": [
{
"start": 8,
"end": 15,
"value": "chinese",
"entity": "cuisine"
}
]
}
样本集有三个组件:text、intent、entities
text是字符串,必需;
intent是字符串,可选;
entities是列表,可选。
实体可以是多个字,value的值不需要精确匹配start和end对应的字段,这样就可以匹配同义词、错误拼写等。
[
{
"text": "in the center of NYC",
"intent": "search",
"entities": [
{
"start": 17,
"end": 20,
"value": "New York City",
"entity": "city"
}
]
},
{
"text": "in the centre of New York City",
"intent": "search",
"entities": [
{
"start": 17,
"end": 30,
"value": "New York City",
"entity": "city"
}
]
}
]
将value的值设置为一个与start、end定位的字段不同的词,就可以定义同义词。或者,可以添加entity_synonyms列表来定义同义词,形如:
{
"rasa_nlu_data": {
"entity_synonyms": [
{
"value": "New York City",
"synonyms": ["NYC", "nyc", "the big apple"]
}
]
}
}
注意:同义词并不能提升实体识别的效果。
{
"rasa_nlu_data": {
"regex_features": [
{
"name": "zipcode",
"pattern": "[0-9]{5}"
},
{
"name": "greet",
"pattern": "hey[^\\s]*"
},
]
}
}
name字段并不是entity或intent的定义,只是一个描述。
正则表达式匹配的字段要尽可能短。比如用hey[^\s]*而不要用hey.*。
要使用同义词功能,pipeline中需要有ner_synonyms组件。
实体识别,目前只有ner_crf支持正则表达式;所有意图识别分类器都支持正则表达式。
正则表达式只是一个辅助功能,并不定义实体或意图,仍然需要在训练数据集中定义实体或意图。
可以是文件,也可以是列表。
文件形式:
{
"rasa_nlu_data": {
"lookup_tables": [
{
"name": "plates",
"elements": "data/test/lookup_tables/plates.txt"
}
]
}
}
列表形式:
{
"rasa_nlu_data": {
"lookup_tables": [
{
"name": "plates",
"elements": ["beans", "rice", "tacos", "cheese"]
}
]
}
}
训练数据中需要有一些自定义词表中词的例子,自定义词表才会生效,否则模型不会使用自定义词表。
添加自定义词表中的词需要注意,不要添加那些不是待抽取实体的常见词,这会降低方法的有效性和实体识别的效果。要添加那些要抽取的词。
训练数据可以放在一个文件或多个文件中,比如一个订餐机器人需要处理一些简单对话,你的训练数据的目录为nlu_data:
nlu_data/
├── restaurants.md
├── smalltalk.md
训练语句为:
$ python -m rasa_nlu.train \
--config config.yml \
--data nlu_data/ \
--path projects