BLOG

영수증 처리부터 인사이트 도출까지 모두 자동화로 처리 가능, AWS AI 서비스
작성일: 2020-08-12

모든 산업의 조직에는 인보이스와 같은 처리할 물리적인 문서들이 많이 있습니다. 표, 양식, 문단 및 체크박스가 포함되어 있으면 스캔한 문서에서 정보를 추출하기가 어려워 조직은 수동 작업이나 사용자 지정 코드 또는 OCR 기술을 통해 이러한 문제를 해결해왔지만 이를 위해서는 양식 추출 및 사용자 지정 워크 플로우를 위한 템플릿이 필요합니다.

 

또한 문서에서 텍스트 또는 내용을 추출한 후 최종 사용자의 영수증 또는 인보이스에서 인사이트를 얻고자 하지만 이는 복잡한 NLP 모델 구축을 요하며 모델 교육에는 많은 양의 데이터와 계산 리소스가 필요합니다. 기계 학습 모델을 구축하고 교육하는 데 큰 비용과 시간이 소요될 수 있습니다.

 

또한 사람과 같이 엔드유저가 이러한 문서와 상호 작용할 수 있는 인터페이스를 제공하는 것은 어려울 수 있습니다. 이러한 최종 사용자는 지원센터에 연락하지만 시간이 경과하면 비용 부담이 증가될 수 밖에 없습니다.

 

이러한 이유로 오늘 블로그 포스팅으로는 AWS AI 서비스를 사용하여 텍스트 데이터 처리 및 통찰력 검색을 자동화하는 방법을 알려드리고자 합니다. Amazon TextractAmazon Comprehend 및 Amazon Lex와 같은 AWS AI 서비스를 사용하면 이 요구 사항을 해결하기 위해 자동화된 서버리스 솔루션을 설정할 수 있습니다. 다음 단계를 안내해 드리겠습니다.

 

  1. Amazon Textract를 사용하여 PDF 또는 이미지로 영수증 또는 인보이스에서 텍스트를 추출하세요.
  2. Amazon Comprehend로 통찰력을 얻으세요.
  3. Amazon Lex를 사용하여 이러한 통찰력을 자연어로 표현하세요.

 

다음으로 문제를 해결하기 위한 솔루션을 구축하기 위한 서비스와 아키텍처를 살펴 보겠습니다.

 

 

사용된 서비스

이 솔루션은 다음 AI 서비스, 서버리스 기술 및 관리 서비스를 사용하여 확장 가능하고 비용 효율적인 아키텍처를 구현합니다.

  • Amazon Cognito – 웹 및 모바일 앱에 사용자 가입, 로그인 및 액세스 제어를 빠르고 쉽게 추가할 수 있습니다.
  • AWS Lambda – 데이터 변경, 시스템 상태 변경 또는 사용자 작업과 같은 트리거에 대한 응답으로 코드를 실행합니다. Amazon S3는 Lambda 기능을 직접 트리거할 수 있으므로 다양한 실시간 서버리스 데이터 처리 시스템을 구축할 수 있습니다.
  • Amazon Lex – 대화형 챗봇을 생성하기 위한 인터페이스를 제공합니다.
  • Amazon Comprehend – 머신 러닝을 사용하여 텍스트에서 통찰력과 관계를 찾는 NLP 서비스입니다.
  • Amazon Textract – ML을 사용하여 PDF, JPEG 또는 PNG 형식으로 스캔한 문서에서 텍스트와 데이터를 추출합니다.
  • Amazon Simple Storage Service (Amazon S3) – 문서의 객체 저장소 역할을 하며 세부 조정된 액세스 제어를 통해 중앙 관리가 가능합니다.

 

 

아키텍처

다음 다이어그램은 솔루션의 아키텍처를 보여줍니다.

 

 

아키텍처에는 다음 단계가 포함됩니다.

  1. 백엔드 사용자 또는 관리자는 AWS Management Console 또는 AWS Command Line Interface (AWS CLI)를 사용하여 PDF 문서 또는 이미지를 S3 버킷에 업로드합니다.
  2. Amazon S3 업로드는 AWS Lambda 함수를 트리거합니다.
  3. Lambda 함수는 업로드 한 PDF에서 텍스트를 감지하는 비동기 작업을 설정하는 Amazon Textract StartDocumentTextDetection API를 호출합니다.
  4. 텍스트 처리가 완료되면 Amazon Textract가 Amazon Simple Notification Service (Amazon SNS)에 알립니다.
  5. 텍스트를 감지하기 위해 작업이 완료되면 두 번째 Lambda 함수가 SNS 주제에서 알림을 받습니다.
  6. 람다가 Amazon SNS로부터 작업 완료를 통지하면 Amazon Textract GetDocumentTextDetection API를 호출하여 비동기 작업의 결과를 수신하고 결과를 S3 버킷으로 로드합니다.
  7. Lambda 함수는 Amazon Lex 의도를 달성하는 데 사용됩니다. 상호 작용에 대한 자세한 순서는 “Cloudformation을 사용하여 아키텍처 배포” 섹션에서 챗봇 구축 단계를 참고하세요.
  8. Amazon Comprehend는 ML을 사용하여 텍스트에서 통찰력과 관계를 찾습니다. 람다 함수는 Amazon Comprehend가 엔티티 및 주요 구문 탐지를 위해 제공하는 boto3 API를 사용합니다.
    1. Bot의 환영 메시지에 사용자가 “인보이스 요약 표시”를 입력하면 GetInvoiceSummary Lex intent가 호출되고 Lambda 함수는 Amazon Comprehend DetectEntities API를 호출하여 이행 대상 엔티티를 감지합니다.
    2. 사용자가 “인보이스 세부 정보 가져 오기”를 입력하면 GetInvoiceDetails 인 텐트가 호출되고 Amazon Lex는 사용자에게 인보이스 번호를 입력하라는 메시지를 표시하고 Lambda 함수는 Amazon Comprehend DetectEntities API를 호출하여 인보이스 세부 정보 메시지를 반환합니다.
    3. 사용자가 “<인보이스 번호>에 대한 인보이스 메모를 보여주세요”를 입력하면 GetInvoiceNotes 인텐트가 호출되고 Lambda 함수는 Amazon Comprehend DetectKeyPhrases API를 호출하여 인보이스과 관련된 메모를 반환합니다.
  9. 기존 CloudFormation 스택을 중첩 스택으로 사용하여 AWS Cloudformation 템플릿에 Lexbot 웹 UI를 배포합니다. 스택을 다운로드하려면 Chatbot에 웹 UI 배포를 참고하세요. 이 중첩 스택은 Lex 웹 UI를 배포하고 웹 페이지는 S3 버킷의 정적 웹 사이트로 제공됩니다. 웹 UI는 Amazon Cognito를 사용하여 인증을 위한 액세스 토큰을 생성하고 AWS CodeStar를 사용하여 전송 파이프 라인을 설정합니다. 최종 사용자는 이 챗봇 웹 UI와 상호 작용합니다.

 

 

AWS CloudFormation 사용한 아키텍처 배포

Amazon S3, Lambda, Amazon Textract, Amazon Comprehend 및 Amazon Lex 챗봇을 포함한 솔루션의 필수 AWS Identity and Access Management (IAM) 역할, 서비스 및 구성 요소를 프로비저닝하기 위해 CloudFormation 템플릿을 배포합니다.

 

1. 미국 동부 (버지니아 북부) 리전에서 다음 CloudFormation 템플릿과 런칭하세요.

2. 스택 이름 또는 매개 변수 InvoiceBot botname을 변경하지 마세요.

3. 기능 변환 섹션에서 템플릿을 확장하고 IAM 자원을 작성하기 위해 확장 AWS CloudFormation을 확인 제공하기 위해 세 개의 체크 박스를 선택합니다.

이러한 리소스에 대한 자세한 내용은 AWS IAM 리소스를 참고하세요.

 

이 템플릿은 AWS SAM( AWS Serverless Application Model )을 사용하여 서버리스 애플리케이션에 대한 함수 및 API를 정의하는 방법을 단순화하고 환경 변수와 같은 이러한 서비스에 대한 기능도 제공합니다.

 

4. 스택 생성을 선택합니다.

 

스택 세부 사항 페이지의 다음 스크린 샷은 스택의 상태를 CREATE_IN_PROGRESS로 표시합니다. 상태를 CREATE_COMPLETE로 변경하는 데 최대 20분이 소요될 수 있습니다.

 

5. 출력 탭의 값 LexLambaFunctionArn, AssetsUploadBucket, ExtractedTextfilesBucket LexUIWebAppUrl 값을 복사하세요.

 

 

S3 버킷에 문서 업로드

새 S3 버킷에 문서를 업로드하려면 AssetsUploadBucket앞에서 복사한 S3 버킷 URL을 선택하세요. 텍스트 추출 흐름을 시작하려면 PDF 또는 이미지를 업로드하세요.

 

이 블로그에 사용된 인보스는 GitHub 저장소에서 다운로드하여 AssetsUploadBucketS3 URL에 업로드할 수 있습니다. 인보이스 템플릿에 맞게 이 솔루션을 수정하실 것을 권장 드립니다. 파일 업로드에 대한 자세한 내용은 S3 버킷에 파일 및 폴더 업로드를 참고하세요.

 

업로드가 완료되면 Amazon S3 콘솔의 Overview 탭에 있는 파일을 볼 수 있습니다.

 

파일을 업로드하면 문서에서 텍스트가 추출됩니다. 텍스트가 있는 추출된 파일을 보려면 앞에서 복사한 URL을 선택하여 버킷을 여세요.

 

Overview 탭에서 업로드된 파일의 텍스트와 동일한지 확인하기 위해 내용을 파일을 다운로드하고 검사할 수 있습니다.

 

 

챗봇 구축

다음 대화를 사용하여 봇을 모델링합니다.

InvoiceBot 오신 것을 환영합니다인보이스 요약, 인보이스 세부 정보 또는 인보이스 메모를 제공하도록 요청할 있습니다.
사용자: 인보이스 요약 표시
입력 문서를 검토 결과 송장 번호가 35678-9 송장 $ 2100.0 1 발견되었습니다송장 정보 또는 송장 메모를 받을 있습니다귀하의 요청을 간단히 입력하세요.
사용자: 인보이스 세부 사항을 알려 주세요.
 : 인보이스 번호를 입력하세요.
사용자: 35678-9
:35678-9 대한 송장 세부 사항 : 항목 1 대해 5/10/1019에서 1500.00 청구가 있습니다. 2019 5 11일에 상품 판매자 2 대해 100.00 요금이 부과됩니다. 2019 5 12 일에 Merchant Three 품목에 대해 300.00 요금이 부과됩니다. 2019 5 13 일에 판매자 3 아이템에 대해 200.00 요금이 부과됩니다인보이스 메모를 요청하거나 채팅을 닫을 있습니다.
사용자: 35678-9
Bot 대한 송장 메모를 표시할 수 있습니다: 35678-9에 대한 송장 메모5/13/2019 판매자 3 200.00 판매자 3 300.00 노트북 사무용품 판매자 2 100.00 디너 푸드 5/12/2019 5/11 / 2019 책상 사무용품 5/10/1019 Merchant One 1500.00 의자옵션을 다시 시도하거나 채팅을 닫을 있습니다

다음과 같은 의도로 Amazon Lex 봇(InvoiceBot)을 구축합니다.

  • GetInvoiceSummary – 사용자가 청구서 요약보기를 요청할 때 호출되는 의도입니다. 이는 Lambda 함수로 수행되며 사용 가능한 인보이스 수와 총 인보이스 수를 반환합니다.
  • GetInvoiceDetails – 사용자가 청구서 세부 사항보기를 요청할 때 호출되는 의도입니다. 이는 Lambda 기능으로 수행되며 날짜, 수량 및 품목 세부 사항을 포함하여 송장의 품목 레벨 분류를 제공합니다.
  • GetInvoiceNotes – 사용자가 인보이스 메모보기를 요청할 때 호출되는 의도입니다. 이는 Lambda 기능으로 수행되며 날짜 및 항목 설명과 함께 업로드된 송장의 메모를 제공합니다.

 

 

챗봇 게시

이전 솔루션 개요에서 설명한대로 Amazon Lex 챗봇(InvoiceBot)을 사용하여 Amazon Tretract 텍스트에서 Amazon Comprehend가 얻은 인사이트와 상호 작용합니다.

챗봇을 게시하려면 다음 단계를 완료하세요.

  1. Amazon Lex 콘솔에서 봇을 선택하세요.
  2. 만든 챗봇을 선택하세요.

3. 인텐트에서 GetInvoiceSummary 선택하세요.

4. 실행에서 Lambda 함수를 선택하세요.

5. LexLambdaFunction를 입력해 기능을 검색하고 결과를 선택하세요.

팝업 상자가 나타납니다.

6. 확인을 선택하세요.

7. 인텐트 저장을 선택하세요.

8. 나머지 두 인텐트 GetInvoiceDetails와 GetInvoiceNotes에 대해 이러한 단계를 반복하세요.

9. 빌드를 선택하세요.

10. 빌드가 완료되면 공개를 선택하세요.

 

11. 별칭을 만들려면 Latest를 입력하세요. 다른 이름으로 지정하셔도 됩니다. test, dev, beta 또는 prod와 같은 이름은 주로 봇의 환경을 나타냅니다.

12. 공개를 선택하세요.

봇이 게시된 후 다음 페이지가 열립니다.

 

 

14. 닫기를 선택하세요.

 

 

챗봇 사용

이제 챗봇을 사용할 준비가 되었습니다. AWS CloudFormation Outputs 탭에서 복사한 URLLexUIWebAppUrl로 이동하세요. 다음 스크린 샷은 봇과의 사용자 대화를 보여줍니다.

 

 

 

 

결론

본 게시물에서는 이미지나 PDF 문서의 텍스트에서 Amazon Comprehend 및 Amazon Textract를 사용하여 얻은 인사이트와 상호 작용할 수 있도록 Amazon Lex에서 대화형 챗봇을 만드는 방법을 설명해 드렸습니다. 여기서 보여드린 코드는 GitHub 리포지토리에서 사용하고 확장할 수 있습니다. 해당 페이지의 댓글을 통해 여러분의 솔루션 활용 후기와 의견을 자유롭게 남겨 주시기 바랍니다.

 

 

원문URL: https://aws.amazon.com/ko/blogs/machine-learning/deriving-conversational-insights-from-invoices-with-amazon-textract-amazon-comprehend-and-amazon-lex/

** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.