AWS Comprehend를 사용하여 뉴스에서 회사 이름 추출

경쟁업체 조사, 신규 고객 또는 파트너 찾기와 같은 많은 비즈니스 사용 사례에는 특정 분야에서 운영 중인 회사 목록이 필요합니다.

제 경우에는 청정 기술 분야에서 일하는 스타트업과 투자자 목록이 필요했습니다. 데이터 사이언스 작업에 좋은 환경이고 모든 AWS 리소스에 쉽게 액세스할 수 있는 Sagemaker 노트북에서 이 작업을 수행하기로 결정했습니다.

회사를 추출하는 데 사용한 AWS Comprehend는 명명된 엔터티 인식, 텍스트 분류 및 주제 모델링을 수행할 수 있는 즉시 사용 가능한 자연어 처리 서비스입니다.

1. IAM 역할 권한 설정



AWS는 IAM 역할을 사용하여 서비스에 대한 액세스를 제어합니다. Sagemaker에서 AWS Comprehend를 사용하려면 이 서비스에 대한 액세스 권한을 역할에 할당해야 합니다.

Sagemaker 세션에서 현재 역할을 얻을 수 있습니다.

sagemaker_session = sagemaker.Session()
role = sagemaker.get_execution_role()


어떤 역할이 사용되는지 알게 되면 여기에 AWS Comprehend 권한을 연결할 수 있습니다.



2. S3 버킷에서 데이터 가져오기



이 분석을 위해서는 boto3, sagemaker, pandas 및 seaborn과 같은 몇 가지 라이브러리만 필요합니다.

import boto3
import pandas as pd
import sagemaker

from tqdm.notebook import tqdm
tqdm.pandas()

import seaborn as sns
sns.set_theme(style="whitegrid")


분석을 위한 소스 데이터는 2012년부터 2021년까지의 TechCrunch 기사이며 기계 학습을 통해 청정 기술 범주로 필터링되었습니다. s3 버킷에서 데이터를 가져오겠습니다. 기사의 정리된 본문을 포함하는 clean_text 필드에 특히 관심이 있습니다.

# Load the dataset
s3 = boto3.client('s3')
obj = s3.get_object(Bucket = 'mysustinero',Key = 'cleantechs_predicted.csv')

techcrunch_data = pd.read_csv(obj['Body'])




3. AWS Comprehend 실행 및 응답 조사



단일 기사에 대해 AWS Comprehend를 실행하고 결과를 조사해 보겠습니다.

# launch comprehend client 
client = boto3.client('comprehend')

response = client.batch_detect_entities(
    TextList=[
       techcrunch_data['clean_text'][819],
    ],
    LanguageCode='en'
)


Response는 정확도와 오프셋이 있는 추출된 엔터티를 포함하는 JSON 개체입니다. ORGANIZATION , EVENT , PERSONLOCATION 를 포함하여 많은 엔티티 available 가 있습니다.

response['ResultList'][0]['Entities']




4. 전체 데이터셋에 엔터티 추출 적용



응답의 구조를 이해하고 나면 텍스트에서 회사 목록을 추출하는 함수를 작성하는 것이 매우 쉬웠습니다.

def get_organizations(text):
    response = client.batch_detect_entities(TextList=[text[0:4900]],LanguageCode='en')
    # getting all entities
    data = response['ResultList'][0]['Entities']

    # get all dictionaries that contain orgs
    orgs = [d for d in data if d['Type'] == 'ORGANIZATION']

    # extract unique orgs, using set comprehension
    unique_orgs = {d['Text'] for d in orgs}

    return unique_orgs


그런 다음 전체 데이터 세트에 적용할 차례입니다.

df['orgs_list'] = df['clean_text'].progress_apply(get_organizations)


기사 URL과 회사 이름 사이에 링크가 있도록 데이터 세트를 정규화하기 위해 pandasexplode() 함수를 사용합니다.

# reshape a dataset
result_final = result.explode('orgs_list')




이 방법을 사용하여 얼마나 많은 고유한 회사를 추출했는지 계산해 봅시다.

orgs = result_final['orgs_list'].unique()
len(orgs)
# 5507


5. Techcrunch가 작성한 Clean Tech 회사의 내용을 분석합니다.



회사 이름을 추출한 후 다양한 종류의 분석을 실행할 수 있습니다. TechCrunch가 가장 많이 쓰는 이 분야의 회사에 대한 데이터를 추출하고 싶었습니다.

#calculate companies mentioned
dff = result_final.groupby(['orgs_list']).size().reset_index()
dff = dff.rename(columns= {0: 'count', 'orgs': 'company'})




# Generating most popular cleantech companies
dff_chart=dff[dff['count']>15]
categories_chart = sns.barplot(
    y="company", 
    x="count", 
    data= dff_chart, 
    order=dff_chart
    .sort_values('count', ascending=False).company).set(title='Most Mentioned Companies in TechCrunch CleanTech articles')


우리는 테슬라가 다른 회사들 사이에서 청정 기술에 관한 기사에서 꽤 많은 시간을 언급한 것을 봅니다. 흥미롭게도 몬산토는 청정 기술 스타트업과 비교할 때 꽤 많이 언급됩니다.


AWS Comprehend를 사용하여 청정 기술 생태계에서 회사 목록을 빠르게 생성할 수 있었습니다. 이는 분석가가 이러한 데이터 세트를 수동으로 생성할 때 기존 방법에 비해 많은 시간을 절약합니다.

목록은 기계 학습에 의해 생성되므로 기사에 언급된 실수와 청정 기술 분야가 아닌 회사가 있을 수 있습니다. 그러나 생성된 목록의 품질 검사는 여전히 훨씬 더 간단하고 빠릅니다.

좋은 웹페이지 즐겨찾기