BLOG

Amazon Lex 와 Amazon Elasticsearch 서비스 사용하여 자료 서치 봇 구축하기
작성일: 2018-08-23

사람들은 문서를 검색하는 데 많은 시간을 소비합니다. 먼저 문서 저장소로 이동한 다음 관련 문서를 검색하는데 그 후에 문서 안의 텍스트를 찾으려면 또 다른 검색을 해야합니다.

이 글에서는 음성 또는 텍스트를 사용하여 문서를 검색하는 방법을 설명합니다. 검색 결과에는 검색된 문서의 일치하는 단락의 처음 몇 개의 문자도 표시됩니다. 나중에 저희는 봇과 웹 응용프로그램을 통합할 것입니다. 많은 실제 시나리오에서 이 검색 기능을 사용할 수 있습니다. 예를 들어, 기술자가 고객의 비즈니스에서 결함이 있는 시스템에서 작업하는 경우, 챗봇을 사용하여 필요한 문서를 검색 할 수 있습니다. 저희는 QnA 봇 글에서 챗봇에 대해 논의했지만, 이 글에서는 인텐트(intent) 끌어내기 및 가져오기/ 내보내기 기능을 사용하여 대화 관리를 보여 드리고자 합니다. 또한 Amazon S3를 사용하여 문서 저장소를 만들고 Amazon ES (Amazon Elasticsearch Service)에서 문서의 색인을 생성하고 전체 프로세스를 자동화하는 방법을 설명합니다. 최종 봇은 다음 스크린 샷과 유사하게 보입니다.

아키텍처

이 아키텍처에는 Amazon S3를 사용하여 개발된 문서 저장소가 있으며 문서는 Amazon ES를 사용하여 색인화됩니다. 인덱싱은 Amazon S3 객체 생성 이벤트에 가입된 AWS Lambda 함수에 의해 수행됩니다. 다른 AWS Lambda 함수는 Amazon Lex 인텐트를 수행하는 데 사용됩니다. 마지막으로, 웹 응용프로그램은 Amazon Lex와 통합됩니다. Amazon Cognito 서비스는 웹 응용프로그램에서 Amazon Lex 서비스에 대한 호출을 인증하고 권한을 부여합니다.

사용된 구성 요소

  • Amazon Lex– 검색봇 대화식 인터페이스를 구축합니다.
  • AWS Lambda – Amazon Lex 서비스가 제공한 인텐트를 충족하기 위해 이 기능을 이행에 사용합니다.
  • Amazon Elasticsearch Service– 제품 FAQ 및 설치 문서의 색인을 생성합니다.
  • Amazon S3 – 문서를 저장합니다. 제품 관리자 또는 소유자는 이 문서 저장소에서 문서를 업로드 할 수 있습니다.
  • AWS Lambda – 문서의 색인을 생성합니다. 색인 생성 기능은 문서가 Amazon S3에 업로드 될 때 실행됩니다. 통합은 Amazon S3 알림을 통해 수행됩니다.
  • Amazon CloudWatch– 전체 솔루션을 모니터링 합니다.
  • Amazon S3 – 봇이 나타날 웹 사이트를 호스팅합니다.
  • Amazon Cognito– 사용자 인증에 사용됩니다.
  • AWS ID 및 액세스 관리 (IAM) – AWS 리소스에 대한 액세스를 허용 또는 거부합니다.

그럼 이제 봇 구축을 시작합시다.

 

검색 봇 구축

3 단계로 봇을 구축할 것입니다.

 

1 단계 – 문서 업로드 흐름 자동화

이 솔루션은 Amazon S3를 모든 제품 문서의 문서 저장소로 사용합니다. 사용자가 Amazon S3에 문서를 업로드하면 AWS Lambda 기능이 실행되어 Amazon ES에서 문서의 색인을 생성합니다.

AWS CloudFormation 템플릿을 사용하여 1 단계를 설정할 수 있습니다. US-East-1에서이 템플릿을 시작하려면 Launch Stack 버튼을 클릭하십시오.

 

 

CloudFormation 스택은 Amazon Elasticsearch 및 S3 버킷에 액세스하기 위해 Amazon S3 버킷, Amazon Elasticsearch 클러스터, 2 개의 AWS Lambda 기능 및 모든 관련 IAM 역할을 생성합니다. 이름이 S3 버킷을 만드는 데 사용되므로 CloudFormation 스택에 모든 소문자를 사용하여 이름을 지정하십시오.

AWS CloudFormation 스택을 실행하면 생성된 모든 리소스가 AWS CloudFormation 콘솔의 출력 탭에 표시됩니다.

여기에서 샘플 PDF 문서를 다운로드하고 문서를 DocumentStoreS3bucket S3 버킷에 업로드하십시오. Word 문서 또는 PowerPoint 프레젠테이션을 업로드 할 수도 있습니다. S3 버킷의 객체 생성 이벤트는 IndexDocumentLambda 함수에 알리고, Amazon ES 6.2에서 내장된 Tika 라이브러리를 사용하여 문서를 base64 인코딩으로 변환하고 Amazon ES에서 인덱싱합니다. IndexDocument Lambda 함수를 자세히 살펴볼 때. http 요청이 Amazon ES 도메인에서 문서를 색인하기 위해 준비하는 방법을 볼 수 있습니다.

다음 코드 snippet은 putDocumentToES 방식에 있습니다.

var req = new AWS.HttpRequest(endpoint);

var attachKey = key + ‘?pipeline=attachment’;

 

var bodyString = JSON.stringify({

“data”: doc,

“filePath” : objURL

});

 

req.method = ‘PUT’;

req.path = path.join(‘/’, esDomain.index, esDomain.doctype, attachKey);

req.region = esDomain.region;

req.body = bodyString;

req.headers[‘presigned-expires’] = false;

req.headers[‘Host’] = endpoint.host;

req.headers[‘content-type’] = ‘application/json’;

 

2단계 – 검색 봇 구축

Amazon Lex 콘솔로 이동하여 여기에서 사용할 수있는 zip 파일을 사용하여 봇을 가져옵니다.

가져온 후에는 두 개의 인텐트가 있음을 알 수 있습니다. “Welcome” 및 “DocumentSearch”. 첫 번째 인텐트는 사용자를 맞이하고 두 번째 인텐트는 문서를 검색하는 데 사용됩니다. 우리는 가져오기 메소드를 사용하여 시간을 절약하고 시작할 기본 템플릿을 제공하기 위해 봇을 생성했습니다. 인텐트를 수동으로 추가하려면 여기에 있는 문서를 따라 수행하고 압축된 파일에서 말을 복사하면 됩니다. 이제 봇의 WelcomeIntent 및 DocumentSearch 인텐트 모두에 대해 1 단계의 일부로 만들어진 DocumentSearch AWS Lambda 함수를 구성하십시오. 왼쪽 메뉴에서 ‘WelcomeIntent’ 인텐트를 선택하고 그 아래의 이행 섹션으로 이동하여 AWS Lambda 함수 옵션을 선택한 다음 이행 lambda 함수를 선택해야합니다. 함수 이름은 ‘<your CloudFormation Stackname>-DocumentSearchBotFullfillment’처럼 보이고 인텐트를 저장하십시오. 마찬가지로 ‘DocumentSearch’ 인텐트를 위한 <your CloudFormation Stackname>-DocumentSearchBotFullfillment와 동일한 lambda 함수를 구성하고 인텐트를 저장하십시오.

이제 구축을 클릭하셔서 봇을 구축하세요. 모델이 구축되기까지 단 몇 초 정도만 걸릴 것입니다. 성공적으로 완료되면 다음과 같은 메시지를 보게될 것입니다.

당신은 모두 봇을 테스트 할 준비가 되어 있습니다. 화면 오른쪽의 테스트 봇 섹션으로 가서 ‘hi’를 입력하십시오. 변환은 다음 스크린 샷과 같습니다. 봇은 문서 안의 텍스트를 검색하고 단락의 첫 번째 문장을 제공합니다. 또한 이 경우 Amazon S3 링크인 전체 문서 링크를 보냅니다.

LexFullfillmentLambda 함수에서 queryES 메소드를 보면 검색이 어떻게 수행되는지 확인할 수 있습니다. 또한 Amazon ES는 사용자에게 표시할 관련 결과를 결정할 때 사용할 수 있는 검색 스코어를 보냅니다.

축하합니다!! Amazon Lex 및 Amazon ES를 사용하여 문서 검색 봇을 만들었습니다.

 

3 단계 – 웹 UI와 통합

이제 봇은 배포될 준비가 되었습니다. 이 링크의 지침을 사용하여 모바일 응용프로그램이나 Facebook, Slack 및 Twilio와 같은 메시징 플랫폼에 배포하도록 선택할 수 있습니다. Amazon Lex 봇과 웹 응용 프로그램을 통합하는 방법을 보여주는 이 블로그를 사용할 수도 있습니다. 봇을 배포하기 위한 AWS CloudFormation 템플릿을 제공합니다.

 

다음 레벨로 올라가는 방법

봇과 Amazon Connect를 통합 할 수 있습니다. Amazon Connect는 클라우드 기반 컨택 센터를 쉽고 빠르게 구축하는 데 도움을 줍니다. Amazon Lex와 같은 AWS 서비스와 직접 통합 할 수 있습니다. 이렇게 하면 모든 사용자가 지정된 전화 번호로 전화를 걸 수 있고 전체 통신을 봇에 연결할 수 있습니다. 이것은 사용자가 이제 전화를 걸고 음성을 사용하여 문서를 검색하고 봇이 이메일을 통해 문서를 보낼 수 있는 흥미로운 유스 케이스를 만듭니다. 통합 단계를 보려면 여기를 살펴보십시오.

 

고려 사항

우리는 Amazon Lex AWS Lambda의 파워를 보여주기 위해 이 솔루션을 만들었지만, 이와 같은 것을 제작하기 전에 고려해야 할 사항들이 몇 가지 있습니다.

  • 텍스트 기반 검색을 위해 여러 문서를 출력하고 이에 따라 출력을 표시 할 수 있는 시나리오를 고려하십시오.
  • 솔루션에 보안을 추가하여 익명 액세스를 차단하고 규정 준수 요구 사항을 충족시킵니다.
  • 베스트 프랙티스를 따라 대규모 문서를 색인화하십시오.

 

정리

AWS CloudFormation 콘솔에서 스택을 선택하고 동작(Actions) 메뉴에서 스택 삭제 옵션을 선택하여 CloudFormation 스택 전체를 삭제할 수 있습니다. 이 블로그의 일부로 생성된 모든 리소스가 삭제됩니다.

 

추가로 읽을 거리


결론

오늘은 Amazon ES를 Amazon Lex와 통합하여 강력한 문서 검색 챗봇을 구축하는 방법을 보여드렸습니다. 또한 Amazon S3 및 Amazon ES를 사용하여 문서 저장소를 구축하는 방법과 여러 가지 인텐트로 대화 관리를 수행하는 방법을 설명했습니다.

 

원문 URL: https://aws.amazon.com/ko/blogs/machine-learning/build-a-document-search-bot-using-amazon-lex-and-amazon-elasticsearch-service/

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