BLOG
모든 산업의 조직에는 인보이스와 같은 처리할 물리적인 문서들이 많이 있습니다. 표, 양식, 문단 및 체크박스가 포함되어 있으면 스캔한 문서에서 정보를 추출하기가 어려워 조직은 수동 작업이나 사용자 지정 코드 또는 OCR 기술을 통해 이러한 문제를 해결해왔지만 이를 위해서는 양식 추출 및 사용자 지정 워크 플로우를 위한 템플릿이 필요합니다.
또한 문서에서 텍스트 또는 내용을 추출한 후 최종 사용자의 영수증 또는 인보이스에서 인사이트를 얻고자 하지만 이는 복잡한 NLP 모델 구축을 요하며 모델 교육에는 많은 양의 데이터와 계산 리소스가 필요합니다. 기계 학습 모델을 구축하고 교육하는 데 큰 비용과 시간이 소요될 수 있습니다.
또한 사람과 같이 엔드유저가 이러한 문서와 상호 작용할 수 있는 인터페이스를 제공하는 것은 어려울 수 있습니다. 이러한 최종 사용자는 지원센터에 연락하지만 시간이 경과하면 비용 부담이 증가될 수 밖에 없습니다.
이러한 이유로 오늘 블로그 포스팅으로는 AWS AI 서비스를 사용하여 텍스트 데이터 처리 및 통찰력 검색을 자동화하는 방법을 알려드리고자 합니다. Amazon Textract, Amazon Comprehend 및 Amazon Lex와 같은 AWS AI 서비스를 사용하면 이 요구 사항을 해결하기 위해 자동화된 서버리스 솔루션을 설정할 수 있습니다. 다음 단계를 안내해 드리겠습니다.
- Amazon Textract를 사용하여 PDF 또는 이미지로 영수증 또는 인보이스에서 텍스트를 추출하세요.
- Amazon Comprehend로 통찰력을 얻으세요.
- 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) – 문서의 객체 저장소 역할을 하며 세부 조정된 액세스 제어를 통해 중앙 관리가 가능합니다.
아키텍처
다음 다이어그램은 솔루션의 아키텍처를 보여줍니다.

아키텍처에는 다음 단계가 포함됩니다.
- 백엔드 사용자 또는 관리자는 AWS Management Console 또는 AWS Command Line Interface (AWS CLI)를 사용하여 PDF 문서 또는 이미지를 S3 버킷에 업로드합니다.
- Amazon S3 업로드는 AWS Lambda 함수를 트리거합니다.
- Lambda 함수는 업로드 한 PDF에서 텍스트를 감지하는 비동기 작업을 설정하는 Amazon Textract StartDocumentTextDetection API를 호출합니다.
- 텍스트 처리가 완료되면 Amazon Textract가 Amazon Simple Notification Service (Amazon SNS)에 알립니다.
- 텍스트를 감지하기 위해 작업이 완료되면 두 번째 Lambda 함수가 SNS 주제에서 알림을 받습니다.
- 람다가 Amazon SNS로부터 작업 완료를 통지하면 Amazon Textract GetDocumentTextDetection API를 호출하여 비동기 작업의 결과를 수신하고 결과를 S3 버킷으로 로드합니다.
- Lambda 함수는 Amazon Lex 의도를 달성하는 데 사용됩니다. 상호 작용에 대한 자세한 순서는 “Cloudformation을 사용하여 아키텍처 배포” 섹션에서 챗봇 구축 단계를 참고하세요.
- Amazon Comprehend는 ML을 사용하여 텍스트에서 통찰력과 관계를 찾습니다. 람다 함수는 Amazon Comprehend가 엔티티 및 주요 구문 탐지를 위해 제공하는 boto3 API를 사용합니다.
- Bot의 환영 메시지에 사용자가 “인보이스 요약 표시”를 입력하면 GetInvoiceSummary Lex intent가 호출되고 Lambda 함수는 Amazon Comprehend DetectEntities API를 호출하여 이행 대상 엔티티를 감지합니다.
- 사용자가 “인보이스 세부 정보 가져 오기”를 입력하면 GetInvoiceDetails 인 텐트가 호출되고 Amazon Lex는 사용자에게 인보이스 번호를 입력하라는 메시지를 표시하고 Lambda 함수는 Amazon Comprehend DetectEntities API를 호출하여 인보이스 세부 정보 메시지를 반환합니다.
- 사용자가 “<인보이스 번호>에 대한 인보이스 메모를 보여주세요”를 입력하면 GetInvoiceNotes 인텐트가 호출되고 Lambda 함수는 Amazon Comprehend DetectKeyPhrases API를 호출하여 인보이스과 관련된 메모를 반환합니다.
- 기존 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가 얻은 인사이트와 상호 작용합니다.
챗봇을 게시하려면 다음 단계를 완료하세요.
- Amazon Lex 콘솔에서 봇을 선택하세요.
- 만든 챗봇을 선택하세요.

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 리포지토리에서 사용하고 확장할 수 있습니다. 해당 페이지의 댓글을 통해 여러분의 솔루션 활용 후기와 의견을 자유롭게 남겨 주시기 바랍니다.
** 메가존 클라우드 TechBlog는 AWS BLOG 영문 게재 글 중에서 한국 사용자들에게 유용한 정보 및 콘텐츠를 우선적으로 번역하여 내부 엔지니어 검수를 받아서, 정기적으로 게재하고 있습니다. 추가로 번역 및 게재를 희망하는 글에 대해서 관리자에게 메일 또는 SNS 페이지에 댓글을 남겨주시면, 우선적으로 번역해서 전달해드리도록 하겠습니다.




