之前,咱们曾有篇文章介绍了中文命名实体辨认(Named Entity Recognition,NER)方面的艰难,以及Amazon SageMaker的解决之道。感兴趣的童鞋欢送点击这里温习一下:相比英文,中文命名实体的辨认难在哪?又该如何解决。
本文,咱们打算谈谈NER模型自身在构建方面可能遇到的艰难。
命名实体辨认(NER)的外围,在于筛选文本数据以查找名词短语(即命名实体),并应用人、组织或品牌等标签对其进行分类。例如,在「我最近订阅了Amazon Prime」这句话中,Amazon Prime就是一项命名实体,能够归类为品牌。但构建精确的外部自定义实体识别器往往非常复杂,须要筹备大量手动正文的训练文档,同时抉择正确的算法与参数以实现模型训练。
本文探讨了如何通过一条端到端管道,应用Amazon SageMaker Ground Truth与Amazon Comprehend构建起一套自定义NER模型。
Amazon SageMaker Ground Truth能够帮忙咱们高效、精确地标记训练机器学习零碎所必须的数据集。Ground Truth提供内置标记工作流,帮忙人类标记员逐渐实现数据正文工作。此外,Ground Truth还蕴含多种工具,可能高效精确构建带正文NER数据集以实现机器学习零碎训练。
Amazon Comprehend是一项自然语言解决(NLP)服务,应用机器学习查找文本中的洞见与关系。Amazon Comprehend可能解决任何UTF-8格局的文本文件。通过辨认文件中的实体、要害短语、语言、情感以及其余常见元素,Comprehend即可胜利汇总出剖析洞见。要应用这项自定义实体辨认采取行动,咱们须要筹备一套用于模型训练的数据集,保障其中蕴含一组带有正文的文档或实体列表及其类型标签(例如PERSON,人),外加一组用于包容各实体的文档。以此为根底,Comprehend即可自动测试算法与参数的最佳与最精确组合,进而实现模型训练。
下图所示,为这套解决方案的根本架构。
整个端到端流程如下所示:
1.将一组文本文件上传至Amazon Simple Storage Service (Amazon S3)。
2.在Ground Truth中创立一个外部工作组与NER标记作业。
3.该外部工作组负责对所有文本文档进行标记。
4.实现之后,Ground Truth在Amazon S3中创立名为manifest的加强清单。
5.解析加强输入manifest文件,并以CSV格局创立正文与文档文件,而后将其交付至Amazon Comprehend以供解决。咱们次要关注用于主动转换加强输入manifest文件的管道,此管道可通过AWS CloudFormation实现一键式部署。此外,咱们还将展现如何应用Amazon Comprehend GitHub repo提供的onvertGroundtruthToComprehendERFormat.sh脚本解析该加强输入manifest文件,并以CSV格局创立正文与文档文件。尽管大家在理论应用中往往只须要一种转换方法,但咱们强烈建议尝试这两种办法。
6.在Amazon Comprehend管制台上,启动一项自定义NER训练作业,且应用由AWS Lambda生成的数据集。
为了尽可能缩短本文示例中用于手动正文方面的工夫,倡议间接应用随附的小型语料库示例。尽管由此训练出的模型可能性能无限,但能够借此疾速体验整个端到端流程,积攒到后续应用更大语料库的实践经验,甚至能够应用其余AWS服务代替Lambda函数。
设置流程
大家须要在计算机上安装AWS命令行界面(AWS CLI)。对于具体操作阐明,请参阅装置AWS CLI。
接下来须要创立一个CloudFormation栈,该栈负责创立S3存储桶与转换管道。尽管这条管道能够主动实现转换,但大家也能够间接应用转换脚本,具体操作阐明咱们将在后文中进行介绍。
设置转换管道
本文提供一套CloudFormation模板,可帮忙大家执行多项初始设置工作:
- 创立一个新的S3存储桶。
- 应用Python 3.8运行时创立一项Lambda函数,以及用于实现其余依赖关系的Lambda层。
- 配置S3存储桶,依据接管到的output.manifest文件主动触发该Lambda函数。
管道源代码托管在GitHub repo当中。要通过模板进行部署,请在新的浏览器窗口或选项卡中登录至us-east-1区域中的AWS账户。
启动以下栈:
实现以下操作步骤:
1.在Amazon S3 URL局部,输出该模板的URL。
2.抉择Next。
3.在Stack name局部,输出栈名称。
4.在S3 Bucket Name局部,为新存储桶输出名称。
5.其余参数间接应用默认值。
6.抉择Next。
7.在Configure stack options页面中,抉择Next。
8.审查栈细节信息。
9.勾选三个复选框,确认由AWS CloudFormation创立其余资源与性能。
10.抉择Create stack。
CloudFormation当初将开始创立咱们的栈。在实现之后,大家应看到以下截屏内容。
设置转换脚本
要在计算机上设置转换脚本,请实现以下操作步骤:
1.在计算机上下载并装置Git。
2.指定您在本地设施上保留该Repo的具体位置。倡议创立一个专用文件夹,借此轻松应用命令提示符导航至该地位。
3.在浏览器中,导航至Amazon Comprehend GitHub repo。
4.在Contributors局部,抉择Clone or download。
5.在Clone with HTTPS局部,抉择剪贴板图标以复制repo URL。
要应用SSH密钥克隆该Repo,包含由组织内SSH证书颁发机构颁发的证书,请抉择Use SHH并抉择剪贴板图、将Repo URL复制至剪贴板。
6.在终端内,导航至之前保留克隆Repo的地位。咱们能够间接输出$ cd _<directory>_返回该地位。
7.输出以下代码:
`$ git clone <repo-url>`
在Repo克隆操作实现之后,依据README文件中的步骤应用脚本将Ground Truth NER标记作业与Amazon Comprehend自定义实体辨认集成起来。
将未标记样本上传至语料库
运行以下命令,将样本数据文件复制至S3存储桶:
$ aws s3 cp s3://aws-ml-blog/artifacts/blog-groundtruth-comprehend-ner/sample-data/groundtruth/doc-00.txt s3://<your-bucket>/raw/$ aws s3 cp s3://aws-ml-blog/artifacts/blog-groundtruth-comprehend-ner/sample-data/groundtruth/doc-01.txt s3://<your-bucket>/raw/$ aws s3 cp s3://aws-ml-blog/artifacts/blog-groundtruth-comprehend-ner/sample-data/groundtruth/doc-02.txt s3://<your-bucket>/raw/
这批样本数据能够缩短正文工夫,因为不谋求模型性能最大化,因而无需进行深度优化。
运行NER标记作业
此步骤波及三项手动操作:
1.创立一个外部工作组。
2.创立一项标记作业。
3.进行数据正文。
咱们能够在不同作业中重复使用这个外部工作组。
在作业实现之后,它会将后果写出为一个output.manifest
文件,并由Lambda函数主动进行内容提取。该函数会将此manifest文件转换为两个文件:.csv格局与.txt格局。假如输入manifest为s3://_<your-bucket>_/gt/_<gt-jobname>_/manifests/output/output.manifes
t,则这两个Amazon Comprehend文件将位于s3://_<your-bucket>_/gt/_<gt-jobname>_/manifests/output/comprehend/
之下。
创立一个外部工作组
在本用例中,咱们将创立一个外部工作组,并应用本人的电子邮件地址作为惟一工作人员。Ground Truth也容许咱们应用Amazon Mechanical Turk或其余供应商提供的正文人员。
1.在Amazon SageMaker控制台的Ground Truth之下,抉择Labeling workforces。
2.在Private选项卡中,抉择Create private team。
3.在Team name局部,输出工作组名称。
4.在Add workers局部,抉择Invite new workers by email。
5.在Email addresses局部,输出电子邮件地址。
6.在Organization name局部,输出组织名称。
7.在Contact email局部,输出电子邮件。
8.抉择Create private team。
9.返回新的外部工作组,找到标记门户的URL。
如果这是第一次被增加至工作组内,或者设置了Amazon Simple Notification Service (Amazon SNS)告诉性能,咱们还将收到蕴含URL、用户名以及长期明码的注册电子邮件。
10.登录至标记URL。
11.将长期明码更换为新密码。
创立一项标记作业
下一步就是创立NER标记作业。本文将重点介绍其中的各关键步骤。对于更多详细信息,请参阅应用Amazon SageMaker Ground Truth增加数据标记工作流以进行命名实体辨认。
为了缩短正文工夫,这里请间接应用复制至S3存储桶内的示例语料库作为Ground Truth作业的输出。
1.在Amazon SageMaker控制台的Ground Truth之下,抉择Labeling jobs。
2.抉择Create labeling job。
3.在Job name局部,输出一项作业名称。
4.抉择I want to specify a label attribute name different from the labeling job name。
5.在Label attribute name局部,输出ner。
6.抉择Create manifest file。
通过这一步,Ground Truth将主动把文本语料库转换为manifest文件,并会显示一个弹窗。
7.在Input dataset location局部,输出Amazon S3地位。
8.在Data type局部,抉择Text。
9.抉择Create。
这时咱们会看到提示信息称manifest文件曾经创立实现。
10.在manifest文件创建实现后,抉择Create。
咱们也能够本人提供输出manifest。请留神,NER标记作业要求其输出manifest为{"source": "embedded text"}格局
,而非援用款式中的{"source-ref": "s3://bucket/prefix/file-01.txt"}
格局。另外,生成的输出manifest会自动检测到换行符n,并在各个文档中的每一行生成一条JSON行;如果自行生成此行,则可在各文档中只保留一个JSON行(但可能仍须要保留n换行符以供上游应用)。
11.在IAM role局部,抉择CloudFormation模板此前创立的角色。
12.在Task selection局部,抉择Named entity recognition。
13.抉择Next。
14.在Select workers and configure tool页面中的Worker types局部,抉择Private。
15.在Private teams局部,抉择之前创立实现的外部工作组。
16.在Number of workers per dataset object局部,保障工作人员的数量(1)与外部工作组的理论规模相匹配。
17.在文本框中,输出标记操作方法。
18.在Labels下增加心愿应用的标签。参考以下截屏中为举荐语料库提供的标签。
19.抉择Create。
在作业创立实现后,当初咱们能够在Labeling jobs页面上跟踪各项标记工作的具体状态。
以下截屏所示,为该作业的详细信息。
标记数据
应用本示例中的举荐语料库,标记流程将在数分钟内实现。
在作业创立结束后,外部工作组将通过标记门户查看列出的工作,并依据具体调配的工作内容进行数据标记。
以下截屏所示,为工作人员UI。
在全副标记工作实现之后,标记作业状态将显示为Completed。
复核
CloudFormation模板将对示例中的S3存储桶进行配置,在蕴含manifests/output/output.manifest前缀的新对象传入特定S3存储桶时向Amazon S3提交一项指向Lambda函数put事件。最近,AWS还为标记作业增加了Amazon CloudWatch Events反对性能,咱们能够将其作为触发转换操作的另一种机制选项。对于更多详细信息,请参阅Amazon SageMaker Ground Truth现已反对多标签图像与文本分类、以及Amazon CloudWatch Events。
该Lambda函数会加载加强manifest文件,并将该文件转换为comprehend/output.csv与comprehend/output.txt,且二者皆具备与output.manifest雷同的前缀。请参考以下示例中的
s3://_<your_bucket>_/gt/_<gt-jobname>_/manifests/output/output.manifest后果:s3://<your_bucket>/gt-output/<gt-jobname>/manifests/output/comprehend/output.csvs3://<your_bucket>/gt-output/<gt-jobname>/manifests/output/comprehend/output.txt
咱们能够通过查看Lambda 函数增加至output.manifest的标签,在CloudWatch Logs中进一步跟踪Lambda的执行上下文。此项操作可在Amazon S3控制台或AWS CLI中实现。
要通过Amazon S3控制台进行跟踪,请实现以下操作步骤:
1.在Amazon S3管制台上,导航至该输入后果。
2.抉择output.manifest。
3.在Properties 选项卡中,抉择Tags。
4.查看由该Lambda函数增加的标签。
要应用AWS CLI,请输出以下代码(其中日志流标签__LATEST_xxx代表CloudWatch日志流[$LATEST]xxx。因为[$]不是Amazon S3标签中的无效字符,因而会被Lambda函数替换掉):
$ aws s3api get-object-tagging --bucket gtner-blog --key gt/test-gtner-blog-004/manifests/output/output.manifest{ "TagSet": [ { "Key": "lambda_log_stream", "Value": "2020/02/25/__LATEST_24497900b44f43b982adfe2fb1a4fbe6" }, { "Key": "lambda_req_id", "Value": "08af8228-794e-42d1-aa2b-37c00499bbca" }, { "Key": "lambda_log_group", "Value": "/aws/lambda/samtest-ConllFunction-RRQ698841RYB" } ]}
当初,咱们能够返回CloudWatch控制台并跟踪理论日志分组、日志流与RequestId,详见以下截屏内容。
在Amazon Comprehend上训练一套自定义NER模型
Amazon Comprehend要求输出语料库遵循各实体的以下最低要求:
- 1000个样本
- 语料库大小为5120字节
- 蕴含200条正文
这里,咱们在Ground Truth中应用的示例语料库无奈满足上述最低要求。因而,咱们为大家筹备了其余预生成的Amazon Comprehend输出。此样本数据将帮忙大家疾速开始训练自定义模型,但并未针对模型性能做出充沛优化。
在咱们的计算机上,输出以下代码将之前生成的数据上传至存储桶:
$ aws s3 cp s3://aws-ml-blog/artifacts/blog-groundtruth-comprehend-ner/sample-data/comprehend/output-x112.txt s3://<your_bucket>/gt/<gt-jobname>/manifests/output/comprehend/documents/$ aws s3 cp s3://aws-ml-blog/artifacts/blog-groundtruth-comprehend-ner/sample-data/comprehend/output-x112.csv s3://<your_bucket>/gt/<gt-jobname>/manifests/output/comprehend/annotations/
咱们的s3://_<your_bucket>_/gt/_<gt-jobname>_/manifests/output/comprehend/documents/文件夹应以两个文件结尾:output.txt与output-x112.txt。
咱们的s3://_<your_bucket>_/gt/_<gt-jobname>_/manifests/output/comprehend/annotations/
文件夹应该蕴含output.csv
与output-x112.csv
。
当初,大家能够开始自定义NER模型的训练流程了。
1.在Amazon Comprehend控制台的Customization下,抉择Custom entity recognition。
2.抉择Train recognizer。
3.在Recognizer name局部,输出一个名称。
4.在Custom entity type局部,输出标签。
请保障自定义实体类型与咱们在Ground Truth作业中应用的类型相匹配。
5.在Training type局部,抉择Using annotations and training docs。
6.为正文与训练文档输出Amazon S3地位。
7.在IAM role局部,如果这是第一次应用Amazon Comprehend,请抉择Create an IAM role。
8.在Permissions to access局部,请抉择Input and output (if specified) S3 bucket。
9.在Name suffix局部,输出一个后缀。
10.抉择Train。
至此,咱们能够查看列出的识别器了。
以下截屏所示,为训练实现后的视图,整个过程最多可能须要1个小时。
资源清理
在实现本轮演练之后,请通过以下步骤清理资源:
1.清空S3存储桶(或者间接删除该存储桶)。
2.终止CloudFormation栈。
论断
到这里,大家曾经理解如何应用Ground Truth以构建NER训练数据集,以及如何将生成的加强manifest文件主动转换为Amazon Comprehend可能间接解决的格局。