邻近年底大家都忙,而公司的财务人员尤为繁忙。各种工作须要解决,尤其是发票相干的那些。尽管很多中央曾经能够提供电子版发票,但纸质发票在很多时候仍然是惟一的抉择。如果只是整顿在一起进行归档,那还好说;但如果你须要从一大堆纸质发票中找出某些信息,这时候该怎么办?
===
各行各业的组织都须要解决大量纸质文件,其中又以发票类票据居多。以往,对于蕴含表格、表单、段落以及复选框的各类扫描文档,咱们往往很难从中提取出无效信息。尽管目前不少组织曾经通过人工、自定义代码或者光学字符识别(OCR)等技术解决了信息提取难题,但其中依然须要借助欠缺的表单提取与自定义工作流模板。
此外,在从文档中提取到文本或其余模式的内容之后,用户还心愿从收据或发票中帮忙最终用户整顿出更多深层洞见。但这又须要构建起简单的自然语言解决(NLP)模型,模型的训练又要占用大量训练数据与计算资源。机器学习模型的构建与训练往往既低廉、又极为耗时。
并且对于最终用户来说,提供相似于人的界面来与这些文档交互是很麻烦的。尽管最终用户能够通过给服务台打电话的形式失去不少帮忙,但随着工夫的推移,组织老本总会因而而一直晋升。
本文将向大家介绍如何应用 AWS AI 服务主动实现文本数据处理与洞见发现。借助 AWS AI 服务(包含 Amazon Textract、Amazon Comprehend 以及 Amazon Lex),咱们能够设置自动化无服务器解决方案以满足上述要求。咱们将分步疏导您实现以下操作流程:
- 应用 Amazon Textract 从收据或发票扫描件(PDF 或图片格式)中提取文本。
- 通过 Amazon Comprehend 得出洞见。
- 应用 Amazon Lex 以自然语言模式实现与这些洞见的交互。
接下来,咱们将介绍用于构建这样一套解决方案的具体服务与架构选项。
相干服务
这套解决方案将应用以下 AI 服务、无服务器技术以及托管服务建设起一套可扩大且具备老本效益的架构:
- Amazon Cognito—— 帮忙咱们疾速在 Web 与挪动利用中增加用户注册、登录与访问控制等性能。
- AWS Lambda—— 执行代码以响应触发器,执行数据更改、零碎状态变动或用户操作等。因为 Amazon S3 可能间接触发 Lambda 函数,因而咱们能够借此构建起各类实时无服务器数据处理系统。
- Amazon Lex—— 提供用于创立会话式聊天机器人的接口。
- Amazon Comprehend——NLP 服务,应用机器学习技术从文本中提取洞见与关系。
- Amazon Textract—— 应用机器学习技术从 PDF、JPEG 或者 PNG 格局的扫描文档中提取文本与数据。
- Amazon Simple Storage Service(Amazon S3)—— 为文档提供对象存储反对,并容许用户通过细粒度访问控制机制实现集中管理。
架构
下图所示,为这套解决方案的根本架构。
此架构蕴含以下操作步骤:
- 后端用户或管理员应用 AWS 治理控制台或 AWS 命令行界面(AWS CLI)将 PDF 文档或图像上传至 S3 存储桶。
- Amazon S3 上传动作触发 AWS Lambda 函数。
- Lambda 函数调用 Amazon Textract StartDocumentTextDetection API,后者设置一项异步作业以检测上传的 PDF 中的文本内容。
- 当文本处理结束之后,Amazon Textract 向 Amazon Simple Notification Service(Amazon SNS)发出通知。
- 当作业实现文本检测工作之后,由另一项 Lambda 函数从 SNS 主题处获取告诉。
- 当 Lambda 收到 Amazon SNS 发来的作业实现告诉后,调用 Amazon Textract GetDocumentTextDetection API 以接管异步操作后果,并将后果加载至 S3 存储桶内。
- 要应用 Amazon Lex 实现用意整顿与剖析,咱们还须要应用另外一项 Lambda 函数。对于更详尽的交互序列,请参阅「应用 CloudFormation 部署架构」局部中的「构建聊天机器人」内容。
- Amazon Comprehend 应用机器学习技术从文本中提取洞见与关系。Lambda 函数应用由 Amazon Comprehend 提供的 boto3 API 执行实体与要害短语检测。
* 在聊天机器人显示欢送致辞之后,用户输出「Show me the invoice summary(显示发票摘要)」即可调用 GetInvoiceSummary Lex 用意,并由 Lambda 函数调用 Amazon Comprehend DetectEntities API 以检测要实现的实体。
* 当用户输出「Get me the invoice details(获取发票明细)」时,即可调用 GetInvoiceDetails 用意,Amazon Lex 会提醒用户输出发票编号,并由 Lambda 函数调用 Amazon Comprehend DetectEntities API 以返回发票的详细信息。
* 在用户输出「Can you show me the invoice notes for <invoice number>(是否显示〈发票编号〉发票正文)」时,即可调用 GetInvoiceNotes 用意,由 Lambda 函数调用 Amazon Comprehend DetectKeyPhrases API 以返回与发票相干的正文内容。
* 应用现有 CloudFormation 栈作为嵌套栈,大家能够将 Lexbot Web UI 部署在 AWS CloudFormation 模板中。要下载该栈,请参阅为聊天机器人部署 Web UI。该嵌套栈将部署一套 Lex Web UI,并将此网页作为 S3 存储桶的动态网站。Web UI 应用 Amazon Cognito 生成用于身份验证的拜访令牌,并应用 AWS CodeStar 设置交付管道。最终用户将通过 Web UI 与该聊天机器人进行交互。
应用 AWS CloudFormation部署此架构
咱们须要部署一套 CloudFormation 模板,用于置备必要的 AWS 身份与拜访治理(AWS Indentity and Access Management,简称 IAM)角色、服务,并提供解决方案所必须的 Amazon S3、Lambda、Amazon Textract、Amazon Comprehend 以及 Amazon Lex 聊天机器人等组件。
- 在美国东部(北弗吉尼亚州)区域启动以下 CloudFormation 模板:
- 请不要批改栈名称或者参数 botname InvoiceBot。
- 在 Capabilities and transforms 局部,勾选全副三个复选项,确认由 AWS CloudFormation 创立 IAM 资源并扩大模板。
对于上述资源的更多详细信息,请参阅 AWS IAM 资源。
此模板应用 AWS 无服务器应用程序模式(AWS Serverless Application Model,AWS SAM)以简化面向无服务器应用程序的函数与 API 定义流程,同时为各项服务提供环境变量等性能反对。
- 抉择 Create stack。
以下截屏所示,为 Stack Detail 页面中显示的栈状态,目前为 CREATE_IN_PROGRESS。在 20 分钟之内,该状态将转换为 CREATE_COMPLETE,代表栈创立实现。
- 在 Outputs 选项卡中,复制 LexLambaFunctionArn、AssetsUploadBucket、ExtractedTextfilesBucket 以及 LexUIWebAppUrl 的值。
将文档上传至 S3存储桶
要将文档上传至新的 S3 存储桶,请抉择与之前复制的 AssetsUploadBucket 绝对应的 S3 存储桶 URL。上传 PDF 或图像,即可开始文本提取流程。
咱们也能够从 GitHub repo 下载本文中应用的发票数据,并将其上传至 AssetsUploadBucket S3 URL。倡议在发票模板中应用自定义解决方案。对于上传文件的更多详细信息,请参阅如何向 S3 存储桶上传文件与文件夹?
在上传实现之后,能够在 Amazon S3 控制台的 Overview 选项卡中看到该文件。
在文件上传完毕后,即可开始文档文本提取流程。要查看待提取的文档,请关上存储桶并抉择之前复制的 URL。
在 Overview 选项卡中,能够下载该文件并查看内容,审核其是否与上传的文档完全相同。
构建聊天机器人
咱们将应用以下会话对机器人进行建模:
Bot: Welcome to InvoiceBot. You can ask me to provide your invoice summary, or details of your invoices, or your invoice notes__(欢送拜访 InvoiceBot__。您能够要求我提供发票摘要、发票明细或发票正文)
用户:Show me the invoice summary(显示发票摘要)
Bot: I reviewed your input documents and found 1 invoice with invoice numbers 35678-9 totaling $2100.0. I can get you invoice details or invoice notes. Simply type your request__(我查看了您的输出文件,发现其中蕴含 1__张发票,发票编号为 35678-9__,金额总计 2100__美元。我能够为您提供发票详细信息或发票正文。请输入您的要求)
用户:Get me the invoice details(获取发票明细)
Bot: Please enter the invoice number__(请输出发票编号)
用户:35678-9
Bot: Invoice Details for 35678-9: On 5/10/2019 for the item One there is a charge of 1500.00. On 5/11/2019 for the item Merchant Two there is a charge of 100.00. On 5/12/2019 for the item Merchant Three there is a charge of 300.00. On 5/13/2019 for the item Merchant Three there is a charge of 200.00. You can request me for invoice notes or simply close this chat.__(35678-9__发票明细:2019/5/10__,费用项一金额为 1500__美元。2019/1/11__,费用项二为 100__美元。2019/5/12__,费用项三为 300__美元。20195/13__,费用项四为 200__美元。您能够要求我提供发票记录,也能够间接敞开本次聊天。)
用户:Can you show me the invoice notes for 35678-9(显示 35678- 9 号发票正文)
Bot: Invoice Notes for 35678-9: 5/13/2019 Merchant Three 200.00 Merchant Three 300.00 Laptop Office Supplies Merchant Two 100.00 Team Dinner Food 5/12/2019 5/11/2019 Desks and Office Supplies 5/10/1019 Merchant One 1500.00 Chairs . Feel free to try the options again or you can simply close this chat__(35678-9__号发票正文:2019/5/13__,购入三项计 200__美元。购入三项计 300__美元,为电脑办公桌。2019/5/12__购入两项 100__美元,为团队晚餐。2019/5/11__,为办公桌与办公服务器。2019/5/10 _购入一项计 1500__美元,为椅子。_
咱们还能够应用以下用意构建其余 Amazon Lex 机器人(InvoiceBot):
- GetInvoiceSummary – 用户申请查看发票摘要时所调用的用意。由 Lambda 函数实现,可返回以后可用发票的数量与发票总金额
- GetInvoiceDetails – 用户申请查看发票明细时所调用的用意。可通过 Lambda 函数实现,用于提供发票各条目明细,包含日期、数量与条目明细。
- GetInvoiceNotes – 用户申请查看发票正文时所调用的用意。通过 Lambda 函数实现,提供带有日期与我的项目形容的发票正文信息。
公布聊天机器人
之前的解决方案概述中所提到,咱们能够应用 Amazon Lex 聊天机器人(InvoiceBot)与 Amazon Comprehend 提取自 Amazon Textract 文本中的洞见进行交互。
要公布聊天机器人,请实现以下操作步骤:
- 在 Amazon Lex 管制台上,抉择 Bots。
- 抉择所创立的聊天机器人。
- 在 Intents 下,抉择 GetInvoiceSummary。
- 在 Fulfilment 下,抉择 Lambda 函数。
- 输出 LexLambdaFunction 以搜寻该函数,并选定正确后果。
这时零碎会呈现显示弹框。
- 抉择 OK。
- 抉择 Save intent。
- 在另外两项用意 GetInvoiceDetails 与 GetInvoiceNotes 中,反复上述步骤。
- 抉择 Build。
- 在构建实现后,抉择 Publish。
- 在 Create an alias 局部,输出 Latest。咱们也能够应用其余名称,例如测试、开发、beta 或者生产等皆可,用于代指机器人的运行环境。
- 抉择 Publish。
在机器人公布实现后,零碎将关上以下页面。
- 抉择 Close。
应用聊天机器人
咱们的聊天机器人当初曾经就绪并可供使用。导航至复制自 AWS CloudFormation Outputs 选项卡处的 URL LexUIWebAppUrl。以下截屏所示,为用户与该机器人的对话后果(从左至右浏览):
总结
本文介绍了如何在 Amazon Lex 中创立一款会话式聊天机器人,应用 Amazon Textract 从图像或 PDF 文档中提取文本,应用 Amazon Comprehend 从文本中提取洞见,并通过机器人实现与洞见的交互。本文中所应用的代码皆公布在 GitHub repo 当中,供大家随便应用及扩大。