Transformer课程 业务对话机器人Rasa 3.x NLU Training Data

Transformer课程 业务对话机器人Rasa 3.x NLU Training Data

NLU Training Data

NLU训练数据存储有关用户消息的结构化信息。

自然语言理解(NLU)的目标是从用户消息中提取结构化信息。这通常包括用户的意图及其消息包含的任何实体。您可以向训练数据中添加额外的信息,如正则表达式和查找表,以帮助模型正确识别意图和实体。

Training Examples

NLU训练数据由按意图分类的示例用户话语组成。为了更方便地使用您的意图,请为它们指定与用户想要实现的意图相关的名称,并保持小写,避免使用空格和特殊字符。
注意:/ 符号保留为分隔符,用于将检索意图与响应文本标识符分开。确保不要以你的意图的名义使用它。

Entities

实体是用户消息中的结构化信息片段。要使实体提取工作正常,您需要指定训练数据来训练ML模型,或者需要定义正则表达式来使用基于字符模式的RegexEntityExtractor提取实体。

在决定需要提取哪些实体时,请考虑助手需要哪些信息来实现其用户目标。用户可能会提供任何用户目标都不需要的其他信息;您不需要将它们提取为实体。

有关如何在训练数据中注释实体的详细信息,请参见训练数据格式。

Synonyms

同义词#

同义词将提取的实体映射到提取的文本以外的值。当用户以多种方式引用同一事物时,可以使用同义词。考虑提取实体的最终目标,并从中找出哪些值应被视为等效值。

假设您有一个实体 account 帐户,用于查找用户的余额。可能的账户类型之一是 credit“信用”。您的用户也将其 credit“信用”账户称为“信用账户”和“信用卡账户”。

在这种情况下,您可以将“信用卡账户”和“信用账户”定义为“信用”的同义词:

nlu:
- synonym: credit
  examples: |
    - credit card account
    - credit account

然后,如果这些短语中的任何一个被提取为一个实体,它将被映射到值credit。
提供训练示例

同义词映射仅在提取实体后发生。这意味着您的训练示例应包括同义词示例(信用卡帐户和信用帐户),以便模型将学习将它们识别为实体,并将其替换为信用。

有关如何在训练数据中包含同义词的详细信息,请参见训练数据格式。

Regular Expressions#

您可以结合管道中的RegexFeatureizer和RegexEntityExtractor组件,使用正则表达式改进意图分类和实体提取。

Regular Expressions for Intent Classification

通过在管道中包含RegexFeatureizer组件,可以使用正则表达式改进意图分类。使用RegexFeatureizer时,regex不作为对意图进行分类的规则。它只提供了意图分类器将用于学习意图分类模式的功能。目前,所有意图分类器都使用可用的正则表达式特性。

在本例中,正则表达式的名称是人类可读的描述。它可以帮助您记住正则表达式的用途,它是相应模式功能的标题。它不必匹配任何意图或实体名称。“help”请求的正则表达式可能如下所示

nlu:
- regex: help
  examples: |
    - \bhelp\b

被匹配的意图可以是问候、帮助我、帮助或其他任何事情。

尝试以尽可能少的单词匹配的方式创建正则表达式。例如,使用\bhelp\b代替 help.*,因为后者可能匹配整个消息,而前者只匹配一个单词。

提供训练示例

RegexFeatureizer为意图分类器提供功能,但它不能直接预测意图。包括足够多包含正则表达式的示例,以便意图分类器可以学习使用正则表达式功能。

Regular Expressions for Entity Extraction

如果实体具有确定性结构,则可以通过以下两种方式之一使用正则表达式:

  • 正则表达式作为特征#

可以使用正则表达式为NLU管道中的RegexFeatureizer组件创建功能。

将正则表达式与RegexFeatureizer一起使用时,正则表达式的名称无关紧要。使用RegexFeatureizer时,正则表达式提供了一个功能,可以帮助模型了解意图/实体与符合正则表达式的输入之间的关联

提供训练示例

RegexFeatureizer为实体提取器提供功能,但它不能直接预测实体。包括足够多包含正则表达式的示例,以便实体提取器可以学习使用正则表达式功能。

用于实体提取的正则表达式功能目前仅受CRFEntityExtractor和DIETClassifier组件的支持。其他实体提取器,如MitieEntityExtractor或SpacEntityExtractor,不会使用生成的特征,它们的存在也不会改善这些提取器的实体识别。

  • Regular Expressions for Rule-based Entity Extraction#

可以使用NLU管道中的RegexEntityExtractor组件使用正则表达式进行基于规则的实体提取。

使用RegexEntityExtractor时,正则表达式的名称应与要提取的实体的名称匹配。例如,通过在训练数据中包含此正则表达式和至少两个带注释的示例,可以提取10-12位的帐号:

nlu:
- regex: account_number
  examples: |
    - \d{10,12}
- intent: inform
  examples: |
    - my account number is [1234567891](account_number)
    - This is my account number [1234567891](account_number)

每当用户消息包含10-12位数的序列时,它将被提取为帐号实体。RegexEntityExtractor不需要训练示例来学习提取实体,但您确实需要至少两个实体的注释示例,以便NLU模型可以在训练时将其注册为实体。

Lookup Tables

查找表是用于生成不区分大小写的正则表达式模式的单词列表。它们可以与正则表达式的使用方式相同,与管道中的RegexFeatureizer和RegexEntityExtractor组件结合使用。

可以使用查找表来帮助提取具有一组已知可能值的实体。让你的查找表尽可能具体。例如,要提取国家名称,可以添加世界上所有国家的查找表:

nlu:
- lookup: country
  examples: |
    - Afghanistan
    - Albania
    - ...
    - Zambia
    - Zimbabwe

在将查找表与RegexFeatureizer一起使用时,请提供足够多的示例,说明要匹配的意图或实体,以便模型可以学习将生成的正则表达式用作功能。将查找表与RegexEntityExtractor一起使用时,请提供至少两个实体的注释示例,以便NLU模型可以在训练时将其注册为实体。

Entities Roles and Groups

通过将单词注释为自定义实体,可以在训练数据中定义某些概念。例如,可以通过注释城市来标识城市:

I want to fly from [Berlin]{"entity": "city"} to [San Francisco]{"entity": "city"} .

但是,有时您希望为实体添加更多细节。

例如,要构建一个应该预订航班的助手,助手需要知道上面示例中的两个城市中的哪个是出发城市,哪个是目的地城市。柏林和旧金山都是城市,但它们在信息中扮演着不同的角色。要区分不同的角色,除了实体标签外,还可以指定角色标签。

 I want to fly from [Berlin]{"entity": "city", "role": "departure"} to [San Francisco]{"entity": "city", "role": "destination"}.

还可以通过在实体标签旁边指定组标签来对不同的实体进行分组。例如,组标签可用于定义不同的订单。在下面的示例中,组标签指定了哪些配料与哪些披萨搭配,以及每个披萨的大小。

Give me a [small]{"entity": "size", "group": "1"} pizza with [mushrooms]{"entity": "topping", "group": "1"} and
a [large]{"entity": "size", "group": "2"} [pepperoni]{"entity": "topping", "group": "2"}

有关如何在训练数据中定义具有角色和组的实体的详细信息,请参见训练数据格式。

提取器返回的实体对象将包括检测到的角色/组标签。

{
  "text": "Book a flight from Berlin to SF",
  "intent": "book_flight",
  "entities": [
    {
      "start": 19,
      "end": 25,
      "value": "Berlin",
      "entity": "city",
      "role": "departure",
      "extractor": "DIETClassifier",
    },
    {
      "start": 29,
      "end": 31,
      "value": "San Francisco",
      "entity": "city",
      "role": "destination",
      "extractor": "DIETClassifier",
    }
  ]
}

实体角色和组目前仅由DIETClassifier和CRFEntityExtractor支持。

为了正确地使用具有角色和组的实体训练模型,请确保为实体和角色或组标签的每个组合提供足够的训练示例。为了使模型能够泛化,请确保在训练示例中有一些变化。例如,你应该包括像从x飞到y这样的例子,而不仅仅是从x飞到y。

要使用特定角色/组填充实体中的插槽,需要为插槽定义from_entity插槽映射,并指定所需的角色/组。例如:

entities:
   - city:
       roles:
       - departure
       - destination

slots:
  departure:
    type: any
    mappings:
    - type: from_entity
      entity: city
      role: departure
  destination:
    type: any
    mappings:
    - type: from_entity
      entity: city
      role: destination

Entity Roles and Groups influencing dialogue predictions

如果你想通过角色或群组影响对话预测,你需要修改你的故事以包含所需的角色或群组标签。您还需要在域文件中列出实体的相应角色和组。

假设您希望根据用户的位置输出不同的句子。例如,如果用户刚从伦敦抵达,您可能想问一下伦敦之行如何。但是,如果用户正在前往马德里的途中,您可能希望用户在这里过得愉快。您可以通过以下两个故事来实现这一点:

stories:
- story: The user just arrived from another city.
  steps:
    - intent: greet
    - action: utter_greet
    - intent: inform_location
      entities:
        - city: London
          role: from
    - action: utter_ask_about_trip

- story: The user is going to another city.
  steps:
    - intent: greet
    - action: utter_greet
    - intent: inform_location
      entities:
        - city: Madrid
          role: to
    - action: utter_wish_pleasant_stay

BILOU Entity Tagging

DIETClassifier和CRFEntityExtractor具有选项BILOU_flag,这是指机器学习模型在处理实体时可以使用的标记模式。BILOU是开始、内部、最后、外部和单位长度的缩写。

例如,训练示例

[Alex]{"entity": "person"} is going with [Marty A. Rick]{"entity": "person"} to [Los Angeles]{"entity": "location"}.

Transformer课程 业务对话机器人Rasa 3.x NLU Training Data
与普通标记模式相比,BILOU标记模式更丰富。这可能有助于提高机器学习模型在预测实体时的性能。

不一致的BILOU标签

当选项BILOU_flag设置为True时,模型可能会预测不一致的BILOU标签,例如B-person I-location L-person。Rasa开源使用一些启发式方法来清理不一致的BILOU标记。例如,B-person I-location L-person将更改为B-person I-person L-person。

上一篇:dotnetcore EF 分页


下一篇:Power Automate and its connector for Microsoft Dynamics 365 Finance and Operations apps