Rasa教程系列-NLU-3-实体抽取

文章目录

  • 介绍
  • 自定义实体
  • 抽取位置、日期、人名、组织
  • 日期、金额、时长、距离和序号
  • 正则表达式
  • 将自定义特征传给CRFEntityExtractor

介绍

目前1.6.1版本支持的extractors如下:

Component Requires Model Notes
CRFEntityExtractor sklearn-crfsuite conditional random field 适合训练自定义实体的训练
SpacyEntityExtractor spaCy conditional averaged perceptron 提供预训练实体
DucklingHTTPExtractor running duckling context-free grammar 提供预训练实体
MitieEntityExtractor MITIE structured SVM 适合训练自定义实体的训练
EntitySynonymMapper existing entities N/A 进行同义词映射

如果pipeline包含一个或者一个以上的上述组件,训练模型的输出会包含被抽取出来的实体及其一些metadata(这些数据记录着哪个组件抽取出该实体)。processors字段包含更改每个实体的组件的名称
注意:
value字段可以与文本中出现的内容不同。如果使用同义词,像chinees这样的提取实体将被映射到一个标准值,例如chinese。
响应示例如下:

{
  "text": "show me chinese restaurants",
  "intent": "restaurant_search",
  "entities": [
    {
      "start": 8,
      "end": 15,
      "value": "chinese",
      "entity": "cuisine",
      "extractor": "CRFEntityExtractor",
      "confidence": 0.854,
      "processors": []
    }
  ]
}

其他抽取器如duckling可能包括其他信息。比如:

{
  "additional_info":{
    "grain":"day",
    "type":"value",
    "value":"2018-06-21T00:00:00.000-07:00",
    "values":[
      {
        "grain":"day",
        "type":"value",
        "value":"2018-06-21T00:00:00.000-07:00"
      }
    ]
  },
  "confidence":1.0,
  "end":5,
  "entity":"time",
  "extractor":"DucklingHTTPExtractor",
  "start":0,
  "text":"today",
  "value":"2018-06-21T00:00:00.000-07:00"
}

confidence置信度取决于CRF实体提取器(CRFEntityExtractor组件)。duckling 实体提取器总是返回1。SpacyEntityExtractor提取器不提供此信息,返回null

自定义实体

几乎每个聊天机器人和语音应用程序都有一些自定义实体。餐厅助理应该把chinese理解为一种美食,但对于语言学习助理来说,它的意义就大不相同了。给定一些训练数据,CRFEntityExtractor组件可以学习任何语言的自定义实体。有关如何在训练数据中包含实体的详细信息,请参考训练数据格式。

抽取位置、日期、人名、组织

spaCy为几种不同的语言提供了优秀的预训练命名实体识别器。可以在这个交互式演示中测试它们。官方不建议尝试使用spaCy来训练自己的NER,除非你有大量的数据并且知道你在做什么。注意,有些spaCy模型是高度大小写敏感的。

日期、金额、时长、距离和序号

duckling library 在将如“next Thursday at 8pm”之类的表达式转换为实际的日期时间对象方面做了大量工作。例如:

"next Thursday at 8pm"
=> {"value":"2018-05-31T20:00:00.000+01:00"}

支持的语言列表可以在这里找到。该项目不仅可以抽取并标准化时间,还可以提取距离长度重量价格等一系列的数量单位,支持多国语言,包含中文。Duckling 可以处理“两个小时”、金钱数量、距离和序号等持续时间。幸运的是,有一个duckling docker容器可以使用,只需向上旋转并连接到Rasa NLU(参见DucklingHTTPExtractor)。

正则表达式

使用正则表达式可以帮助CRF模型学习识别实体。在训练数据集中提供的正则表达式列表,每个正则表达式提供一个CRFEntityExtractor,提供的二值分类器,即正则表达式是否找到(1,表示找到;0表示没有找到)。

例如,德国街道的名字通常以strasse结尾。将其添加为regex,这将告诉模型注意以这种方式结尾的单词,并将很快学会将其与位置实体相关联。如果只是想精确地匹配正则表达式,可以在代码中这样做:作为接收到Rasa NLU响应后的后处理步骤。

将自定义特征传给CRFEntityExtractor

如果想要将自定义特征(例如预先训练好的词嵌入)传递给CRFEntityExtractor,那么可以在CRFEntityExtractor之前将任何稠密featurizer(ConveRTFeaturizer除外)添加到管道中。请务必将相应的稠密featurizer“return_sequence”设置为True。CRFEntityExtractor会自动查找额外的稠密特征,并检查这些稠密特征是否是len(token)可迭代,其中每个entry 都是一个向量。 如果检查失败,将显示一个警告。然而,CRFEntityExtractor将继续训练,只是没有额外的自定义特性。如果存在稠密特征,CRFEntityExtractor将把稠密特征传递给sklearn_crfsuite,并将它们用于训练。

你可能感兴趣的:(Rasa)