亚马逊领悟 是一种自然语言处理 (NLP) 服务,可用于从文档中自动提取实体、关键短语、语言、情感和其他见解。 例如,您可以立即开始通过 Amazon Comprehend控制台, AWS命令行界面或 Amazon Comprehend API. 此外,如果您需要提取不属于 Amazon Comprehend 内置实体类型,您可以创建自定义实体识别模型(也称为 自定义实体 识别器) 以提取与您的特定用例更相关的术语,例如产品目录中的项目名称、特定于域的标识符等。 使用机器学习库和框架自行创建准确的实体识别器可能是一个复杂且耗时的过程。 Amazon Comprehend 显着简化了您的模型训练工作。 您需要做的就是加载文档和注释数据集,并使用 Amazon Comprehend 控制台、AWS CLI 或 API 创建模型。
要训练自定义实体识别器,您可以向 Amazon Comprehend 提供训练数据: 注释或实体列表. 在第一种情况下,您提供文档集合和带有注释的文件,这些注释指定实体在文档集中出现的位置。 或者,使用实体列表,您可以提供实体列表及其对应的实体类型标签,以及您希望实体出现的一组未注释文档。 这两种方法都可以用来训练一个成功的自定义实体识别模型; 但是,在某些情况下,一种方法可能是更好的选择。 例如,当特定实体的含义可能不明确且依赖于上下文时,建议提供注释,因为这可能有助于您创建能够在提取实体时更好地使用上下文的 Amazon Comprehend 模型。
注释文档可能需要相当多的精力和时间,尤其是当您考虑到注释的质量和数量都会对生成的实体识别模型产生影响时。 不精确或过少的注释会导致较差的结果。 为了帮助您设置获取注释的流程,我们提供了一些工具,例如 亚马逊SageMaker地面真相,您可以使用它来更快地注释文档并生成 增强的清单注释文件. 但是,即使您使用 Ground Truth,您仍然需要确保您的训练数据集足够大以成功构建您的实体识别器。
直到今天,要开始训练 Amazon Comprehend 自定义实体识别器,您必须为每个实体类型提供至少 250 个文档和至少 100 个注释的集合。 今天,我们宣布,由于最近对 Amazon Comprehend 底层模型的改进,我们降低了使用纯文本 CSV 注释文件训练识别器的最低要求。 您现在可以构建自定义实体识别模型,每个实体类型只需三个文档和 25 个注释。 您可以在以下位置找到有关新服务限制的更多详细信息 指导方针和配额.
为了展示这种减少如何帮助您开始创建自定义实体识别器,我们在一些开源数据集上运行了一些测试并收集了性能指标。 在这篇文章中,我们将引导您完成基准测试过程以及我们在处理子采样数据集时获得的结果。
数据集准备
在这篇文章中,我们解释了我们如何使用带注释的文档训练 Amazon Comprehend 自定义实体识别器。 通常,注释可以作为 CSV文件,一个 Ground Truth 生成的增强清单文件,或 PDF文件. 我们的重点是 CSV 纯文本注释,因为这是受新的最低要求影响的注释类型。 CSV 文件应具有以下结构:
相关字段如下:
- 文件 – 包含文件的文件的名称
- Line – 包含实体的行号,从第 0 行开始
- 开始 抵销 – 输入文本中的字符偏移量(相对于行首)显示实体开始的位置,考虑到第一个字符位于位置 0
- 结束偏移 – 输入文本中显示实体结束位置的字符偏移量
- Type – 您要定义的实体类型的名称
此外,在使用这种方法时,您必须以 .txt 文件的形式提供一组训练文档,每行一个文档,或者每个文件一个文档。
对于我们的测试,我们使用了 SNIPS 自然语言理解基准,分布在七个用户意图中的众包话语数据集(AddToPlaylist
, BookRestaurant
, GetWeather
, PlayMusic
, RateBook
, SearchCreativeWork
, SearchScreeningEvent
)。 该数据集于 2018 年在论文的背景下发布 Snips 语音平台:用于私人设计语音界面的嵌入式口语理解系统 由 Coucke 等人撰写。
SNIPS 数据集由一组 JSON 文件组成,其中包含注释和原始文本文件。 以下是数据集中的一个片段:
在创建实体识别器之前,我们将 SNIPS 注释和原始文本文件转换为 CSV 注释文件和 .txt 文档文件。
以下是我们的节选 annotations.csv
文件:
以下是我们的节选 documents.txt
文件:
采样配置和基准测试过程
对于我们的实验,我们专注于 SNIPS 数据集中的实体类型子集:
- 书店 – 实体类型:
spatial_relation
,poi
,party_size_number
,restaurant_name
,city
,timeRange
,restaurant_type
,served_dish
,party_size_description
,country
,facility
,state
,sort
,cuisine
- 获取天气 – 实体类型:
condition_temperature
,current_location
,geographic_poi
,timeRange
,state
,spatial_relation
,condition_description
,city
,country
- 播放音乐 – 实体类型:
track
,artist
,music_item
,service
,genre
,sort
,playlist
,album
,year
此外,我们对每个数据集进行二次采样,以获得不同的配置,包括为训练采样的文档数量和每个实体的注释数量(也称为 镜头)。 这是通过使用一个自定义脚本来完成的,该脚本旨在创建每个实体类型至少出现在其中的子采样数据集 k 次,至少在 n 文档。
每个模型都使用训练数据集的特定子样本进行训练; 九种模型配置如下表所示。
二次抽样数据集名称 | 为训练采样的文档数量 | 为测试而抽样的文件数量 | 每个实体类型的平均注释数(镜头) |
snips-BookRestaurant-subsample-A |
132 | 17 | 33 |
snips-BookRestaurant-subsample-B |
257 | 33 | 64 |
snips-BookRestaurant-subsample-C |
508 | 64 | 128 |
snips-GetWeather-subsample-A |
91 | 12 | 25 |
snips-GetWeather-subsample-B |
185 | 24 | 49 |
snips-GetWeather-subsample-C |
361 | 46 | 95 |
snips-PlayMusic-subsample-A |
130 | 17 | 30 |
snips-PlayMusic-subsample-B |
254 | 32 | 60 |
snips-PlayMusic-subsample-C |
505 | 64 | 119 |
为了衡量我们模型的准确性,我们收集了 Amazon Comprehend 在训练实体识别器时自动计算的评估指标:
- 平台精度 – 这表示识别器检测到的被正确识别和标记的实体的比例。 从不同的角度来看,精度可以定义为 tp / (tp + fp),其中 tp 是真阳性(正确识别)的数量和 fp 是误报(错误识别)的数量。
- 记得 – 这表示文档中正确识别和标记的实体的比例。 它计算为 tp / (tp + fn),其中 tp 是真阳性的数量和 fn 是假阴性(遗漏的识别)的数量。
- F1分数 – 这是精度和召回指标的组合,用于衡量模型的整体准确性。 F1 分数是准确率和召回率指标的调和平均值,计算公式为 2 * 精度 * 召回 /(精度 + 召回).
为了比较实体识别器的性能,我们关注 F1 分数。
考虑到给定数据集和子样本大小(就文档和镜头数量而言),您可以生成不同的子样本,我们为九种配置中的每一种生成了 10 个子样本,训练实体识别模型,收集性能指标,并使用微平均对它们进行平均。 这使我们能够获得更稳定的结果,尤其是对于少样本子样本。
成果
下表显示了根据 Amazon Comprehend 在训练每个实体识别器后返回的性能指标计算的微平均 F1 分数。
二次抽样数据集名称 | 实体识别器微平均 F1 分数 (%) |
snips-BookRestaurant-subsample-A |
86.89 |
snips-BookRestaurant-subsample-B |
90.18 |
snips-BookRestaurant-subsample-C |
92.84 |
snips-GetWeather-subsample-A |
84.73 |
snips-GetWeather-subsample-B |
93.27 |
snips-GetWeather-subsample-C |
93.43 |
snips-PlayMusic-subsample-A |
80.61 |
snips-PlayMusic-subsample-B |
81.80 |
snips-PlayMusic-subsample-C |
85.04 |
下面的柱形图显示了我们如上一节所述训练的九种配置的 F1 分数分布。
我们可以观察到,即使每个实体类型只有 25 个注释,我们也能够成功训练自定义实体识别模型。 如果我们关注三个最小的子采样数据集(snips-BookRestaurant-subsample-A
, snips-GetWeather-subsample-A
及 snips-PlayMusic-subsample-A
),我们看到,平均而言,我们能够达到 1% 的 F84 分数,考虑到我们使用的文档和注释数量有限,这是一个相当不错的结果。 如果我们想提高模型的性能,我们可以收集额外的文档和注释,并用更多数据训练一个新模型。 例如,对于中等大小的子样本(snips-BookRestaurant-subsample-B
, snips-GetWeather-subsample-B
及 snips-PlayMusic-subsample-B
),其中包含两倍多的文档和注释,我们平均获得了 1% 的 F88 分数(相对于 subsample-A
数据集)。 最后,更大的子采样数据集(snips-BookRestaurant-subsample-C
, snips-GetWeather-subsample-C
及 snips-PlayMusic-subsample-C
),其中包含更多带注释的数据(大约是用于 subsample-A
数据集),进一步提高了 2%,将平均 F1 分数提高到 90%。
结论
在这篇博文中,我们宣布降低了使用 Amazon Comprehend 训练自定义实体识别器的最低要求,并在开源数据集上运行了一些基准测试,以展示这种降低如何帮助您入门。 从今天开始,您可以创建一个实体识别模型,每个实体类型只有 25 个注释(而不是 100 个),以及至少三个文档(而不是 250 个)。 通过此公告,我们降低了对使用 Amazon Comprehend 自定义实体识别技术感兴趣的用户的进入门槛。 如果您需要为您的用例提供更准确的实体识别模型,您现在可以使用非常少的注释文档集合开始运行实验,分析初步结果,并通过包含其他注释和文档进行迭代。
要了解更多信息并开始使用自定义实体识别器,请参阅 自定义实体识别.
特别感谢我的同事 Jyoti Bansal 和 Jie Ma 在数据准备和基准测试方面提供的宝贵帮助。
关于作者
卢卡圭达 是 AWS 的解决方案架构师; 他常驻米兰,为意大利 ISV 的云之旅提供支持。 凭借计算机科学和工程的学术背景,他开始在大学培养他对 AI/ML 的热情。 作为 AWS 内自然语言处理 (NLP) 社区的成员,Luca 帮助客户在采用 AI/ML 服务的同时取得成功。