Rasa训练数据

目录

Markdown格式

JSON格式

可视化工具

样本集(common_examples)

同义词(Entity Synonyms)

正则表达式(Regular Expression Features)

自定义词表(Lookup Tables)

训练数据存储方式


网址:https://rasa.com/docs/nlu/dataformat/

Markdown格式

Rasa NLU的训练数据分为几类:样本集、同义词、正则表达式、自定义词表

同义词可以将不同的实体名字映射为相同的名字,但需要样本集中有类似的训练数据。

自定义词表可以用列表或txt文件的形式,可以进行精确抽取。

JSON格式

{
    "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/

样本集(common_examples)

{
  "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对应的字段,这样就可以匹配同义词、错误拼写等。

同义词(Entity Synonyms)

[
  {
    "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"]
      }
    ]
  }
}

注意:同义词并不能提升实体识别的效果。

正则表达式(Regular Expression Features)

{
    "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支持正则表达式;所有意图识别分类器都支持正则表达式。

正则表达式只是一个辅助功能,并不定义实体或意图,仍然需要在训练数据集中定义实体或意图。

自定义词表(Lookup Tables)

可以是文件,也可以是列表。

文件形式:

{
    "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

你可能感兴趣的:(RASA)