본문 바로가기
AWS

[실습] Amazon Comprehend로 리뷰 검토

by 권미정 2023. 3. 25.

<Data Engineering with AWS> 13장 '인공 지능 및 머신 러닝 활성화'를 실습한 내용입니다.


지난 글에서는 여러 AI용 AWS 서비스 및  ML용 AWS 서비스를 알아보았습니다. 이번에는 AI 서비스 중 하나인 Amazon Comprehand를 직접 사용해 보는 실습을 진행하려고 합니다!

 

0. 실습 목적

대형 호텔 체인에서 근무하며 웹 사이트에 게시된 부정적인 리뷰를 식별하는 프로세스를 개발하는 임무를 맡았다고 상상해 봅시다. 매일 수백 건의 리뷰가 달릴 텐데, 새로운 리뷰가 게시될 때마다 하나하나 읽도록 하는 것은 시간이 많이 걸리겠죠? 저희는 Amazon Comprehend라는 서비스를 사용해서 작은 개념 증명(PoC) 테스트를 개발해 볼 것입니다.

PoC가 성공적이라면, 게시된 리뷰를 Amazon Comprehend에 불러와 리뷰의 감성을 분석한 후 리뷰가 부정적이거나 혼합된 경우 후속 조치를 취하는 분리된 프로세스를 원할 것입니다. 따라서 검토를 받기 위해 아마존 SQS(Simple Queue Service)를 사용하여 동일한 방법으로 PoC를 구축하고 이를 통해 람다 함수를 트리거하여 Comprehend로 분석을 수행하도록 결정합니다.

 

1. 새 Amazon SQS 메시지 대기열 설정

  1. AWS Management Console에 로그인 하고 Amazon SQS 서비스로 이동합니다.
  2. 대기열 생성을 클릭합니다.
  3. 표준 대기열 의 기본값을 그대로 두고 대기열 이름 (예: website-reviews-queue )을 입력합니다.
  4. 다른 모든 옵션은 기본값으로 두고 맨 아래에 있는 대기열 생성을 클릭합니다.

 

2. Amazon Comprehend를 호출하기 위한 Lambda 함수 생성

2단계는 SQS 대기열에서 전달된 텍스트를 분석하기 위해 Amazon Comprehend를 호출하는 새 Lambda 함수를 생성합니다.

 

  1. Amazon Management Console에서 AWS Lambda 서비스로 이동합니다.
  2. 함수 생성을 클릭합니다.
  3. 새로 작성 옵션을 선택합니다.
  4. 함수 이름 값(예: website-reviews-analysis-function )을 입력고 런타임은 Python의 최신 버전을 선택합니다.
  5. 실행 역할 에서 AWS 정책 템플릿에서 새 역할 생성을 선택합니다.
  6. 역할 이름 값 (예: website-reviews-analysis-role )을 입력합니다.
  7. 정책 템플릿 에서 SQS를 검색하고 Amazon SQS Poller 권한을 추가합니다.
  8. 다른 모든 항목은 기본값으로 두고 함수생성을 클릭합니다. 함수를 만들었으면 SQS 메시지를 수신하고 메시지에서 검토 텍스트를 추출한 다음 감성 및 엔터티 분석을 위해 Amazon Comprehend로 보낼 사용자 지정 코드를 추가할 수 있습니다.
  9. Lambda의 코드 소스를 아래 코드 블록으로 바꾸고, deploy를 클릭해 코드를 배포합니다.
import boto3

import json

comprehend = boto3.client(service_name='comprehend',

                          region_name='us-east-2')

def lambda_handler(event, context):

    for record in event['Records']:

        payload = record["body"]

        print(str(payload))
        
        print('Calling DetectSentiment')

        response = comprehend.detect_sentiment(

            Text=payload, LanguageCode='en')

        sentiment = response['Sentiment']

        sentiment_score = response['SentimentScore']

        print(f'SENTIMENT: {sentiment}')

        print(f'SENTIMENT SCORE: {sentiment_score}')
        
        print('Calling DetectEntities')

        response = comprehend.detect_entities(

            Text=payload, LanguageCode='en')

        print(response['Entities'])

        for entity in response['Entities']:

            entity_text = entity['Text']

            entity_type = entity['Type']

            To the PD: Please add this to the next line in p-regular style
            
             print(f'ENTITY: {entity_text},'

                f'ENTITY TYPE: {entity_type}')

                  ENTITY TYPE: {entity_type}')

    return

위 코드는 감정 감지를 위한 Comprehend API를 호출하고 검토 텍스트( payload )를 전달했으며 텍스트가 영어임을 지정했습니다. Comprehend로부터 받은 응답에서 Sentiment 속성(긍정적, 혼합적 또는 부정적)과 SentimentScore 속성을 추출했습니다.

 

3. IAM 역할에 대한 Comprehend 권한 추가

Lambda 함수를 생성할 때 사전 설정된 공통 권한 목록에서 선택하여 Lambda 함수가 SQS 메시지 대기열을 폴링할 수 있는 권한을 추가할 수 있었습니다. 그러나 함수는 Comprehend API도 호출해야 하므로 이에 대한 권한도 추가해 보겠습니다.

 

  1. AWS Lambda 콘솔에서 website-reviews-analysis-function을 연 상태에서 상단의 구성 탭을 클릭한 다음 왼쪽의 권한 ​​탭을 클릭합니다.
  2. Lambda 함수를 생성할 때 지정한 역할의 이름이 링크로 표시됩니다. 권한을 편집할 수 있도록 역할 이름 (예: website-reviews-analysis-role )을 클릭하여 IAM 콘솔을 엽니다.
  3. IAM 콘솔에서 정책 추가 > 정책 연결을 클릭합니다.
  4. Lambda 함수에서 Comprehend API를 호출할 수 있는 충분한 권한이 있는 ComprehendReadOnly 라는 정책을 검색합니다.
  5. ComprehendReadOnly 에 대한 확인란을 선택한 다음 정책 연결을 클릭합니다.

 

4. SQS 메시지 대기열에 대한 트리거로 Lambda 함수 추가

이번 단계는 처리를 위해 SQS 메시지 대기열에 추가된 새 메시지를 픽업할 수 있도록 Lambda 함수를 구성합니다.

 

  1. Amazon SQS 메시지 대기열 콘솔로 다시 이동합니다.
  2. 이전에 생성한 SQS 대기열의 이름(예: website-reviews-queue )을 클릭합니다.
  3. Lambda 트리거 탭을 클릭한 다음 Lambda 함수 트리거 구성을 클릭합니다.
  4. 리이 이번 실에 사용했던 지역으로 설정되었는지 확인한 다음 드롭다운 목록에서 Lambda 함수를 선택합니다.
  5. 저장을 ​​클릭하면 SQS 대기열과 Lambda 함수를 연결됩니다.

이제 솔루션을 테스트하고 Amazon Comprehend의 성능을 확인할 준비가 되었네요!

 

5. Amazon Comprehend로 솔루션 테스트

마지막입니다! 솔루션을 테스트하고 Amazon Comprehend에서 정서 및 엔터티 감지를 위해 제공한 텍스트를 분석하도록 해 봅시다.

 

  1. 아직 Amazon SQS 콘솔에 있고 SQS 대기열이 열려 있는지 확인합니다.
  2. 오른쪽 상단에서 메시지 전송 및 수신을 클릭합니다.
  3. 메시지 전송의 메시지 본문 섹션 에 다음 텍스트(또는 자신의 유사한 텍스트)를 붙여넣고, 메시지 전송을 클릭합니다.
"I recently stayed at the Kensington Hotel in downtown Cape Town and was very impressed. The hotel is beautiful, the service from the staff is amazing, and the sea views cannot be beaten. If you have the time, stop by Mary's Kitchen, a coffee shop not far from the hotel, to get a coffee and try some of their delicious cakes and baked goods."

  4. Comprehend 분석 결과를 보기 위해 CloudWatch Logs에서 Lambda 함수의 출력을 검토할 수 있습니다. 별도의 브라우저 탭에서 아직 열려 있지 않은 경우 새 브라우저 탭을 열고 Lambda 함수로 다시 이동합니다. 클릭모니터 탭을 클릭한 다음 CloudWatch에서 로그 보기를 클릭합니다. 그러면 새 브라우저 탭에서 CloudWatch 콘솔이 열립니다. CloudWatch 콘솔은 Lambda 함수의 로그 그룹(예: /aws/lambda/website-reviews-analysis-functions 로그 그룹 )에서 열렸어야 합니다. 최신 로그 스트림을 클릭하여 로그를 엽니다.

  5. CloudWatch 로그에서 Lambda 함수의 출력을 볼 수 있습니다. 여기에는 분석된 텍스트, 정서( POSITIVE ), 정서 점수 및 Comprehend가 텍스트에서 감지한 세 가지 엔터티(호텔 및 커피숍 이름, 도시 위치)가 포함됩니다.

  6. SQS 콘솔의 브라우저 탭으로 돌아가서 부정적인 리뷰로 리뷰 텍스트를 수정합니다. 가상의 부정적인 리뷰를 작성하거나 Google을 통해 찾은 부정적인 리뷰를 복사하여 붙여넣을 수 있습니다. SQS를 통해 메시지를 보내고 CloudWatch에서 분석 결과를 검토하여 Comprehend가 부정적인 감정을 감지하는 방법과 Comprehend가 감지할 수 있는 다른 엔터티를 확인합니다.

 

테스트 후 Amazon Comprehend가 게시된 리뷰에서 감정을 안정적으로 감지할 수 있는지 확인하면, 프로덕션에서 이 솔루션을 구현하기로 결정할 수 있습니다. 

 

이번에는 책과 실습을 똑같이 진행했는데 에러가 발생했습니다. 어째서인지 실습이 제대로 끝나는 일이 없네요...

 

책의 결과를 빌려오면 결과가 잘 나온 것을 확인할 수 있습니다.


이렇게 13장에서는 많은 AWS ML 및 AI 서비스에 대해 알아보고 작성된 텍스트에서 통찰력을 추출하는 AI 서비스인 Amazon Comprehend를 직접 사용해 볼 수 있었습니다.

 

이제 책의 주요 내용이 모두 끝났습니다! 실습이 모두 마무리되었으니, 다음 글에서는 비용이 더이상 청구되지 않도록 AWS 계정을 정리하는 과정을 블로깅하겠습니다.

댓글