构建安全、可靠且高效的NLP解决方案
1. Amazon Textract处理与结果获取
当Amazon Textract的作业完成后,它会向SNS主题发送一条指示作业状态的消息。你可以将AWS Lambda函数附加到该SNS主题作为事件触发器。此Lambda函数将调用
GetDocumentAnalysis
API(https://docs.aws.amazon.com/textract/latest/dg/API_GetDocumentAnalysis.html)从Amazon Textract作业中检索结果,代码示例如下:
textract_results = textract.get_document_analysis(
JobId='<上一步返回的JobID>',
NextToken='<分页令牌>'
)
响应是一个包含表格和表单内容的文本数据块的JSON对象。
2. 使用Amazon Textract Response Parser简化JSON解析
Amazon Textract API返回的JSON文档内容全面,文档内容被分类为块,封装了页面、行、单词、表格、表单及其之间的关系等信息。为了更简单地从JSON输出中检索所需内容,创建了Amazon Textract Response Parser库(TRP)(https://github.com/aws-samples/amazon-textract-response-parser)。以下是安装和使用TRP库的步骤:
1.
安装TRP库
:
!python -m pip install amazon-textract-response-parser
- 导入库、调用Textract API分析文档并使用TRP解析结果 :
from trp import Document
import boto3
textract = boto3.client('textract')
response = textract.analyze_document(Document={'Bytes': bytes_test}, FeatureTypes=['TABLES','FORMS'])
text = Document(response)
- 遍历结果以提取页面、表格等数据 :
for page in text.pages:
for table in page.tables:
for r, row in enumerate(table.rows):
for c, cell in enumerate(row.cells):
pass
更多Python示例可参考:https://github.com/aws-samples/amazon-textract-response-parser/tree/master/src-python#parse-json-response-from-textract
3. 持久化预测结果
在设计和构建NLP解决方案时,需要考虑预测结果的消费方式、对象和目的。根据不同的消费用例,有以下几种持久化预测结果的选项:
| 用例 | 操作 | 详情参考 |
| — | — | — |
| 实时访问推理结果 | 设置API Gateway和AWS Lambda函数来抽象Amazon Comprehend实时端点,将推理请求和响应持久化到Amazon S3存储桶或Amazon DynamoDB以供将来参考 | 使用API Gateway进行请求限流部分 |
| 结果发送到下游应用程序 | 将结果持久化到Amazon S3、Amazon RDS数据库或AWS中的任何专用数据存储。通过向Amazon SNS主题发布消息或使用数据存储中的事件触发器通知应用程序新结果可用 | https://docs.aws.amazon.com/lambda/latest/dg/services-rds-tutorial.html |
| 填充知识存储库或供用户搜索 | 将结果发送到Amazon Elasticsearch(现在称为OpenSearch)索引 | https://docs.aws.amazon.com/opensearch-service/latest/developerguide/search-example.html |
| 用于商业智能或可视化 | 将结果发送到Amazon S3存储桶,并使用Amazon QuickSight处理S3中的数据 | https://docs.aws.amazon.com/quicksight/latest/user/getting-started-create-analysis-s3.html |
| 转换结果后发送到数据存储 | 使用AWS Glue ETL作业 | 使用AWS Glue进行数据处理和转换部分 |
4. 使用AWS Step Function进行编排
设计批处理解决方案时,管理各个组件可能很困难。可以使用AWS Step Function(https://aws.amazon.com/step-functions/)来管理整个管道的编排。它是一种无服务器、事件驱动的编排服务,内置了错误处理功能,可以配置重试、分支和补偿逻辑。
开始使用时,你可以在AWS管理控制台的Step Function控制台中选择“运行示例项目”来运行示例编排,也可以尝试以下教程:https://aws.amazon.com/getting-started/hands-on/create-a-serverless-workflow-step-functions-lambda/
5. 使用AWS CloudFormation模板
AWS CloudFormation(https://aws.amazon.com/cloudformation/)是一种基础设施即代码服务,可帮助自动化和管理AWS中的资源供应任务。构建NLP解决方案时,使用AWS CloudFormation可以减少设置开销、简化变更管理并实现卓越运营。模板可以用JSON或YAML编写。
示例CloudFormation模板可参考:https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-lambda-state-machine-cloudformation.html
各种AWS服务的模板片段代码示例可参考:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/CHAP_TemplateQuickRef.html
以下是一个简单的mermaid流程图,展示了从Amazon Textract作业完成到结果持久化的流程:
graph LR
A[Amazon Textract作业完成] --> B[SNS主题接收消息]
B --> C[触发AWS Lambda函数]
C --> D[调用GetDocumentAnalysis API获取结果]
D --> E[使用TRP解析结果]
E --> F{持久化方式}
F -->|实时访问| G[API Gateway和Lambda抽象端点,持久化到S3或DynamoDB]
F -->|下游应用| H[持久化到S3、RDS等,通知应用]
F -->|知识存储库| I[发送到OpenSearch索引]
F -->|商业智能| J[发送到S3,使用QuickSight处理]
F -->|转换后存储| K[使用AWS Glue ETL作业]
构建安全、可靠且高效的NLP解决方案
6. 最佳实践总结
通过上述介绍,我们可以总结出设计和构建NLP解决方案的一些原则和最佳实践,这些实践有助于打造具有成本效益、弹性、可扩展性、安全性和高性能的解决方案:
-
使用AWS Well - Architected Framework
:该框架包含运营卓越、安全、可靠性、性能效率和成本优化五个支柱,能帮助我们构建更好、更高效的NLP解决方案。
-
简化结果解析
:使用Amazon Textract Response Parser库(TRP)简化从Amazon Textract JSON输出中提取所需内容的过程。具体操作步骤如下:
1. 安装TRP库:
!python -m pip install amazon-textract-response-parser
2. 导入库、调用Textract API分析文档并使用TRP解析结果:
from trp import Document
import boto3
textract = boto3.client('textract')
response = textract.analyze_document(Document={'Bytes': bytes_test}, FeatureTypes=['TABLES','FORMS'])
text = Document(response)
3. 遍历结果以提取页面、表格等数据:
for page in text.pages:
for table in page.tables:
for r, row in enumerate(table.rows):
for c, cell in enumerate(row.cells):
pass
- 合理持久化预测结果 :根据不同的消费用例,选择合适的持久化方式,如实时访问可使用API Gateway和Lambda抽象端点并持久化到S3或DynamoDB;下游应用可持久化到S3、RDS等并通知应用;知识存储库可发送到OpenSearch索引;商业智能可发送到S3并使用QuickSight处理;转换后存储可使用AWS Glue ETL作业。
- 使用AWS Step Function进行编排 :管理NLP解决方案的整个管道编排,内置错误处理,可配置重试、分支和补偿逻辑。操作步骤为在AWS管理控制台的Step Function控制台中选择“运行示例项目”运行示例编排,或参考教程:https://aws.amazon.com/getting-started/hands-on/create-a-serverless-workflow-step-functions-lambda/
- 使用AWS CloudFormation模板 :自动化和管理AWS中的资源供应任务,减少设置开销、简化变更管理。模板可用JSON或YAML编写,示例模板参考:https://docs.aws.amazon.com/step-functions/latest/dg/tutorial-lambda-state-machine-cloudformation.html ,各种AWS服务的模板片段代码示例参考:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/CHAP_TemplateQuickRef.html
7. 相关服务及操作参考
以下是一些在构建NLP解决方案中常用的AWS服务及其参考链接:
| 服务名称 | 参考链接 |
| — | — |
| Amazon Comprehend | 16, 211, 459 |
| Amazon Textract | 16 |
| Amazon Kendra | 292 |
| Amazon QuickSight | 427, 465 |
| Amazon Elasticsearch(OpenSearch) | 465 |
| AWS CloudFormation | 304, 467 |
| AWS StepFunctions | 465, 467 |
8. 代码示例总结
在构建NLP解决方案过程中,涉及到多个代码示例,以下为你总结:
-
获取Amazon Textract作业结果代码
:
textract_results = textract.get_document_analysis(
JobId='<上一步返回的JobID>',
NextToken='<分页令牌>'
)
- TRP库安装及使用代码 :
# 安装TRP库
!python -m pip install amazon-textract-response-parser
# 导入库、调用Textract API分析文档并使用TRP解析结果
from trp import Document
import boto3
textract = boto3.client('textract')
response = textract.analyze_document(Document={'Bytes': bytes_test}, FeatureTypes=['TABLES','FORMS'])
text = Document(response)
# 遍历结果提取数据
for page in text.pages:
for table in page.tables:
for r, row in enumerate(table.rows):
for c, cell in enumerate(row.cells):
pass
以下是一个mermaid流程图,展示了使用AWS服务构建NLP解决方案的整体流程:
graph LR
A[设计NLP解决方案] --> B[选择AWS服务]
B -->|Textract| C[处理文档,获取结果]
B -->|Comprehend| D[进行文本分析]
B -->|Kendra| E[设置企业搜索]
B -->|QuickSight| F[可视化分析结果]
C --> G[使用TRP解析结果]
G --> H[持久化结果]
D --> H
E --> H
F --> H
H --> I[使用StepFunction编排]
I --> J[使用CloudFormation部署]
通过遵循上述原则、最佳实践和操作步骤,你可以构建出安全、可靠且高效的NLP解决方案,满足不同的业务需求。
超级会员免费看

被折叠的 条评论
为什么被折叠?



