BLOG

Amazon Comprehend와 Amazon Relational Database 서비스 사용하여 텍스트 분석 솔루션 구축하기
작성일: 2018-05-03

현재까지 대량의 비정형 또는 반구조화된 콘텐츠로부터 가치의 추출은 어려운 점이 많았으며 기계 학습 (ML)에 대한 배경지식을 필요로 했습니다. Amazon Comprehend는 진입 장벽을 없애고 데이터 엔지니어 및 개발자가 풍부하고 지속적으로 훈련된 자연스러운 언어 처리 서비스에 쉽게 액세스 할 수 있게 해줍니다. 관계형 비즈니스 정보와 Amazon Comprehend의 분석을 결합하여 완벽한 분석 솔루션을 구축하여 중요한 경향 분석을 구축 할 수 있습니다. 예를 들어 브랜드, 제품 또는 서비스에 대해 논의하는 기사에서 가장 많이 언급되는 경쟁 제품을 이해할 수 있습니다. 고객은 또한 고객 피드백 정보를 결합하여 신제품을 출시할 때 어떤 유형의 고객이 특정 방식에 반응하는지 더 잘 이해할 수 있습니다.

 

소셜 미디어 게시물, 뉴스 기사 및 일상적인 고객 피드백과 같은 구조화되지 않은, 또는 반 구조화 된 콘텐츠의 급속한 성장은 S3에서 수집 및 저장되므로 귀중한 통찰력을 분석할 때 얻을 수 있는 좋은 기회를 제공합니다. Amazon Comprehend는 Amazon Relational Database Service (RDS)와 원활하게 작동합니다. 이 블로그 게시물에서는 자연스러운 언어 처리 모델에 대한 기계 학습에 관련된 내용을 배울 필요 없이 데이터베이스에서 텍스트 분석 뷰를 작성하는 방법을 보여줍니다.

 

Amazon Aurora-MySQL 및 AWS Lambda와 결합된 Amazon Comprehend를 활용하여 이를 수행 할 것입니다. 이들은 Aurora의 트리거 세트와 통합되어 데이터가 삽입됨에 따라 발동되어 감정을 결정하고 다시 데이터베이스에 저장합니다. 그런 다음 데이터베이스의 추가 데이터와 결합하여 더 빨리 통찰력을 높일 수 있습니다. 이와 동일한 패턴을 사용하여 Amazon Translate과 같은 다른 응용 프로그램 수준 ML 서비스를 통합하여 컨텐트 자체를 번역할 수도 있습니다.

 

중요 –이 패턴을 사용하지 않는 경우 : 패턴은 초고속 insert call (초당 수십 개의 삽입된 행 이상)이 있는 작업 부하를 위한 것이 아닙니다. 이러한 트리거는 비동기적이지 않으므로 Ad-Hoc 작업에만 사용하는 것이 좋습니다. Lamda 기능 호출을 insert 문장 뒤에 배치하면 각 명령문에 수십 밀리 초가 추가됩니다. 트래픽이 많은 트래픽 소스의 경우 기본 집계 작성 경로에서 람다 호출을 제거하기 위해 폴 – 집계 – 푸시 방식을 사용해야 합니다.

 

 

Architecture

 

아래의 도표는 우리가 이 블로그에서 셋팅할 플로우를 보여줍니다.

 

 

다이어그램의 화살표는 다음 단계를 보여줍니다.

1. MySQL용 웹 기반 관리 도구인 phpMyAdmin에 연결하십시오.

중요 : 우리는 독자의 편의를 위해 phpMyAdmin을 사용합니다. 아파치에서 SSL / TLS를 활성화하지 않았다면 phpMyAdmin을 사용하지 않는 것이 좋습니다. 그렇지 않으면 데이터베이스 관리자 암호 및 기타 데이터가 인터넷을 통해 안전하지 않게 전송됩니다.

2. Aurora MySQL 데이터베이스에 새로운 레코드를 삽입하십시오.

3. INSERT에서 실행되도록 설정된 트리거는 Lambda 함수를 호출합니다.

4. Lambda 함수는 텍스트의 센티먼트를 결정하기 위해 Amazon Comprehend를 호출합니다.

5. Sentiment는 표의 행과 함께 저장됩니다.

 

셋업하기

AWS 관리 콘솔에서 CloudFormation 템플릿을 런칭하세요.

 

 

 

주의: key pair 를 선택하는 것을 잊지 마시고 DB 비밀번호도 기억해 놓으세요.

 

 

 

스크립트가 끝날 때까지 기다리십시오. 일반적으로 스택 전체를 세우는데 약 15 분이 걸립니다. AWS CloudFormation 스크립트에는 키 페어 경로가 올바른 것으로 가정하고 SSH 명령의 모양을 나타내는 출력이 있습니다.

 

 

Database 구성을 셋업하기

우리가 로컬 http 포트에 SSH 를 통해서 연결할 수 있도록 포트를 셋업해야합니다.

더 자세항 정보는 다음 링크에서 찾을 수 있습니다.

https://aws.amazon.com/premiumsupport/knowledge-center/connect-ec2-linux-windows/

  1. 포트를 앞으로 설정 한 후 phpMyAdmin에 연결하십시오. : http://localhost:8080/phpMyAdmin/
  2. 다음은 phpMyAdmin 에 로그인하시고 CloudFormation script config에서 DB용의 로그인 정보를 사용하십시오.

  1. 네비게이션 윈도우 상단의 SQL를 선택하세요.
  2. 리뷰 테이블을 만드십시오. 아래를 붙여 넣고 Go 를 선택하세요.


이것은 관계형 데이터베이스의 검토 정보를 나타내기 위한 것이지만 NLP를 수행해야 하는 다른 텍스트 필드가 될 수도 있습니다.

  1. 이제 새로운 데이터가 들어올 때 저장된 절차를 호출하는 트리거를 생성합니다. 상단의 SQL을 다시 선택하고 다음을 붙여 넣고 Go를 선택하십시오.
  2. 마지막으로 저장 절차를 만듭니다. 다음에 오는  Lambda 함수 이름을 바꾸십시오:

참고 : CloudFormation 스크립트의 OUTPUT에서 Lambda ARN을 찾을 수 있습니다. “ComprehendLambdaArn”이라고 표시된 출력입니다.

클러스터용의 IAM 셋업하기

CloudFormation 스크립트는 DB 클러스터 매개 변수 그룹에 매개 변수를 자동으로 설정하지만 이번에는 수동 단계로 클러스터에 대한 IAM 권한을 부여하기 시작했습니다.

  1. RDS 콘솔에서 클러스터로 가세요:

https://console.aws.amazon.com/rds/home?region=us-east-1#dbclusters

  1. 클러스터(CloudFormation 스크립트와 이름이 다를 수 있습니다)를 선택하고 Cluster actions 하단의 Manage IAM roles을 선택하세요.
  2. CloudFormation 이 생성한 IAM role 을 선택하고 클러스터에 적용하십시오.

 

Integration 테스트하기

  1. MyAdmin 창으로 돌아가서 SQL 옵션을 다시 선택하고 다음과 같이 붙여 넣습니다:
  2. 이제 comprehend _demo.Tables.ReviewInfo에서 테이블을 선택하십시오. 우리는 sentiment를 입력하지 않았는데 채워진 것을 알게 될 것입니다. 그러나 이것은 Amazon Comprehend를 통해 자동으로 결정됩니다.

이제 SQL 윈도우에서 아래 명령어를 운영하고 붙여넣기 한 다음 Go 를 선택하세요.


여기서 AWS Lambda 와 트리거를 사용하여 Aurora Dataset 에 Amazon Comprehend 를 통합하였습니다.

 

Looking under Covers

이 섹션에서는 Lambda 함수가 무엇을 하는지 살펴보겠습니다. 우선 알아두어야 할 것은 모든 import 문을 포함하여 16 줄의 코드 밖에 없다는 것입니다.

Lambda 함수는 위에 작성한 저장 절차의 Aurora database에서 호출됩니다. 특히, 다음 행은 이 행을 호출하게 합니다.

해당 절차에서는 ID와 텍스트를 가져 와서 AWS Lambda로 전달되는 간단한 JSON 객체를 생성합니다. 우리가 lambda_sync보다는 lambda_async method를 사용하기 때문에 비동기 호출입니다.

 

참고 : Amazon Aurora 버전 1.16부터는 저장 절차 mysql.lambda_async가 적용되지 않습니다.  Aurora  버전 1.16 이상을 사용하는 경우, 대신 네이티브 Lambda 함수로 작업하는 것이 좋습니다. 자세한 내용은  Working with Native Functions to Invoke a Lambda Function 을 참고하세요.

lambda 내에서는 아래와 같은 내용이 전달됩니다.

 

 

우리는 Boto3 라이브러리를 사용하여 Amazon Comprehend를 호출하는 Python을 사용하여 Lambda 함수를 구현했습니다.

 

이 네 줄은 Amazon Comprehend를 호출하고 텍스트에서 NLP를 수행하며  sentiment를 풀어내는 데 필요한 모든 것입니다.

 

 

함수가 Amazon Comprehend 서비스에서 sentiment을 되찾은 후, 이 함수는 정보를 가져 와서 데이터베이스에 다시 저장합니다. 이것은 몇 가지 추가 행에서 수행할 수 있습니다.

 

db = pymysql.connect(host=os.environ[‘host’],user=os.environ[‘user’],passwd=os.environ[‘password’],db=os.environ[‘db’], autocommit=True)

add_order = (“UPDATE ReviewInfo SET Sentiment=%s WHERE ReviewId=%s;”)

db.cursor().execute(add_order, (sentiment,event[‘ReviewId’]))

 

 

기타 옵션

 

트리거를 사용하여 Lambda를 호출하는 것은 초고속 삽입 작업 부하 (초당 12 개 이상의 삽입 작업)를 위한 것이 아닙니다. 트리거는 비동기적이지 않으므로 일반적으로 Ad-Hoc 작업을 위해 AWS Lambda 통합을 권장합니다. Lambda 호출을 INSERT 문장 뒤에 배치하면 각 명령문에 수십 밀리초가 추가됩니다. 트래픽이 많은 트래픽 소스의 경우 기본 INSERT 쓰기 경로에서 Lambda 호출을 제거하기 위해 폴 – 집계 – 푸시 방식을 사용해야 합니다.

 

 

Cleanup

 

솔루션 테스트를 완료 한 후 CloudFormation 스택을 삭제하면 요금이 부과되지 않도록 할 수 있습니다. 이 블로그 게시물에서 생성 된 모든 것을 정리하기 위해 CloudFormation 스택을 삭제하기만하면 됩니다.

 

CloudFormation 스택을 삭제하는 방법에 대한 자세한 지침은 다음 지침을 참조하십시오.

 

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-console-delete-stack.html

 

 

ENI가 여전히 Lambda 기능에 할당되고 삭제 시간이 초과되면 VPC 삭제 실패되는 경우도 있습니다. 이럴 경우 약 15 분 정도 기다렸다가 다시 삭제하기만 하면됩니다. 이에 비용이 발생하는 모든 항목도 삭제됩니다.

 

 

비용은 얼마나 들까?

 

이 예제를 us-east-1 AWS 지역에서 한 시간 동안 실행하면 $ 0.50 달러 미만의 비용이 발생합니다. 대부분의 서비스는 실제로 Free Tier에 속하지만 최악의 경우를 가정하면 다음과 같은 계산이 제공됩니다.

 

Item Unit Cost
EC2 for phpMyAdmin t2.medium 1 hour @ 0.0464 per Hour

 

$0.0464
EBS for phpMyAdmin 8 GB gp2 @ $0.10 per GB-month of provisioned storage (billed per second) $0.00109589041

 

Aurora MySQL compute db.t2.small @ $0.041 hour $0.041
Aurora MySQL storage $0.10 per GB-month $0.10
Aurora MySQL IOs $0.20 per 1 million requests $0.20
Lambda Requests 8 requests @ $0.0000002 per request. $0.0000016
Lambda Compute Time 1 sec * 8 invokes @ 0.000000208 per 100 ms $0.00001664
Total Estimate: ~$0.38

 

 

결론

 

이 간단한 접근 방식을 사용하면 텍스트로 저장된 피드백을 고급 Amazon AI 서비스에서 자동으로 번역 또는 강화할 수 있습니다. 우리는 sentiment 한 콜을 활용하여 이를 증명했지만, 쉽게 주제, 핵심 구절, 번역본 및 기타 많은 기능의 확장이 가능합니다.

 

 

샘플 코드의 제한사항

 

JSON 메시지를 작성할 때 블로그 게시물의 저장 절차가 문자열 값의 예약된 문자를 escape 처리하지 않습니다. 콜 중에 필요한 경우가 있다면 수정할 수 있습니다.

 

 

원문 URL: https://aws.amazon.com/ko/blogs/machine-learning/building-text-analytics-solutions-with-amazon-comprehend-and-amazon-relational-database-service/

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