700개 이상의 실습 및 과정 이용하기

Natural Language API를 사용하여 구조화되지 않은 텍스트 분류하기

실습 1시간 universal_currency_alt 크레딧 5개 show_chart 고급
info 이 실습에는 학습을 지원하는 AI 도구가 통합되어 있을 수 있습니다.
700개 이상의 실습 및 과정 이용하기

개요

Cloud Natural Language API를 사용하면 텍스트에서 항목을 추출하고 감정 및 구문 분석을 수행하며 텍스트를 카테고리로 분류할 수 있습니다. 이번 실습에서는 텍스트 분류를 중점적으로 알아봅니다. 700개 이상의 카테고리 데이터베이스를 사용하는 이 API 기능을 통해 대규모 텍스트 데이터 세트를 쉽게 분류할 수 있습니다.

학습할 내용

  • Natural Language API 요청 만들기 및 curl로 API 호출하기
  • NL API의 텍스트 분류 특성 사용하기
  • 텍스트 분류를 사용하여 뉴스 기사 데이터 세트 이해하기

필요한 사항

  • Google Cloud Platform 프로젝트
  • 브라우저(Chrome 또는 Firefox)

설정 및 요건

실습 설정

각 실습에서는 정해진 기간 동안 새 Google Cloud 프로젝트와 리소스 집합이 무료로 제공됩니다.

  1. 시크릿 창을 사용하여 Qwiklabs에 로그인합니다.

  2. 실습 사용 가능 시간(예: 1:15:00)을 참고하여 해당 시간 내에 완료합니다.
    일시중지 기능은 없습니다. 필요한 경우 다시 시작할 수 있지만 처음부터 시작해야 합니다.

  3. 준비가 되면 실습 시작을 클릭합니다.

  4. 실습 사용자 인증 정보(사용자 이름비밀번호)를 기록해 두세요. Google Cloud Console에 로그인합니다.

  5. Google Console 열기를 클릭합니다.

  6. 다른 계정 사용을 클릭한 다음, 안내 메시지에 실습에 대한 사용자 인증 정보를 복사하여 붙여넣습니다.
    다른 사용자 인증 정보를 사용하는 경우 오류가 발생하거나 요금이 부과됩니다.

  7. 약관에 동의하고 리소스 복구 페이지를 건너뜁니다.

Google Cloud Shell 활성화하기

Google Cloud Shell은 다양한 개발 도구가 탑재된 가상 머신으로, 5GB의 영구 홈 디렉터리를 제공하며 Google Cloud에서 실행됩니다.

Google Cloud Shell을 사용하면 명령줄을 통해 Google Cloud 리소스에 액세스할 수 있습니다.

  1. Cloud 콘솔의 오른쪽 상단 툴바에서 'Cloud Shell 열기' 버튼을 클릭합니다.

    강조 표시된 Cloud Shell 아이콘

  2. 계속을 클릭합니다.

환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 연결되면 사용자가 미리 인증되어 프로젝트가 PROJECT_ID로 설정됩니다. 예:

Cloud Shell 터미널에 강조 표시된 프로젝트 ID

gcloud는 Google Cloud의 명령줄 도구입니다. Cloud Shell에 사전 설치되어 있으며 명령줄 자동 완성을 지원합니다.

  • 다음 명령어를 사용하여 사용 중인 계정 이름을 나열할 수 있습니다.
gcloud auth list

출력:

Credentialed accounts: - @.com (active)

출력 예시:

Credentialed accounts: - google1623327_student@qwiklabs.net
  • 다음 명령어를 사용하여 프로젝트 ID를 나열할 수 있습니다.
gcloud config list project

출력:

[core] project =

출력 예시:

[core] project = qwiklabs-gcp-44776a13dea667a6 참고: gcloud 전체 문서는 gcloud CLI 개요 가이드를 참조하세요.

작업 1. Cloud Natural Language API가 사용 설정되어 있는지 확인하기

  1. 화면 상단 왼쪽에 있는 탐색 메뉴 아이콘(탐색 메뉴 아이콘)을 클릭합니다.

  2. API 및 서비스 > 사용 설정된 API 및 서비스를 선택합니다.

  3. + API 및 서비스 사용 설정을 클릭합니다.

  4. 그런 다음 검색창에서 language를 검색합니다. Cloud Natural Language API를 클릭합니다.

  5. API가 사용 설정되지 않은 경우 사용 설정 버튼이 표시됩니다. 사용 설정을 클릭하여 Cloud Natural Language API를 사용 설정합니다.

API가 사용 설정되면 Cloud Natural Language API 타일에 관리 버튼이 표시됩니다.

작업 2. API 키 만들기

Natural Language API로 요청을 전송하기 위해 curl을 사용하므로, 요청 URL에 전달할 API 키를 만들어야 합니다.

  1. API 키를 생성하려면 콘솔에서 탐색 메뉴 > API 및 서비스 > 사용자 인증 정보를 클릭합니다.

  2. 그런 다음 + 사용자 인증 정보 만들기를 클릭합니다.

  3. 드롭다운 메뉴에서 API 키를 선택합니다.

  4. 방금 만든 키를 복사합니다. 그런 후 닫기를 클릭합니다.

이제 API 키가 있으므로 각 요청에 API 키의 값을 삽입하지 않도록 환경 변수에 저장하겠습니다.

  1. Cloud Shell에서 다음을 실행합니다. <your_api_key>를 방금 복사한 키로 대체해야 합니다.
export API_KEY=<YOUR_API_KEY>

작업 3. 뉴스 기사 분류하기

Natural Language API의 classifyText 메서드를 사용하면 API 호출 하나로 텍스트 데이터를 카테고리로 정렬할 수 있습니다. 이 메서드는 텍스트 문서에 적용되는 콘텐츠 카테고리를 반환합니다. 이러한 카테고리는 /Computers & Electronics와 같은 광범위한 카테고리부터 /Computers & Electronics/Programming/Java (Programming Language)와 같이 매우 구체적인 카테고리까지 다양한 구체성으로 존재합니다. 700개가 넘는 사용 가능한 카테고리의 전체 목록은 콘텐츠 카테고리 가이드에 나와 있습니다.

기사 한 개를 분류하는 것부터 시작하겠습니다. 그런 다음 이 메서드를 사용하여 대규모 뉴스 코퍼스를 이해하는 방법을 알아보겠습니다. 먼저 New York Times의 음식 섹션 기사에서 다음 헤드라인과 설명을 살펴보겠습니다.

A Smoky Lobster Salad With a Tapa Twist. This spin on the Spanish pulpo a la gallega skips the octopus, but keeps the sea salt, olive oil, pimentón and boiled potatoes.

  1. Cloud Shell 환경에서 아래 코드를 사용하여 request.json 파일을 생성합니다. nano, vim, emacs와 같이 원하는 명령줄 편집기를 사용하거나 Cloud Shell 코드 편집기를 사용할 수있습니다.

Cloud Shell 편집기 열기 버튼

  1. request.json이라는 새 파일을 만들고 다음을 추가합니다.
{ "document":{ "type":"PLAIN_TEXT", "content":"A Smoky Lobster Salad With a Tapa Twist. This spin on the Spanish pulpo a la gallega skips the octopus, but keeps the sea salt, olive oil, pimentón and boiled potatoes." } }
  1. 이제 다음 curl 명령어를 사용하여 이 텍스트를 Natural Language API의 classifyText 메서드로 보낼 수 있습니다.
curl "https://language.googleapis.com/v1/documents:classifyText?key=${API_KEY}" \ -s -X POST -H "Content-Type: application/json" --data-binary @request.json

응답을 살펴봅니다.

출력:

{ categories: [ { name: '/Food & Drink/Cooking & Recipes', confidence: 0.85 }, { name: '/Food & Drink/Food/Meat & Seafood', confidence: 0.63 } ] }

API는 이 텍스트에 대해 2개의 카테고리를 반환했습니다.

  • /Food & Drink/Cooking & Recipes
  • /Food & Drink/Food/Meat & Seafood

텍스트에는 이 기사가 레시피라는 내용이나 해산물이 포함되어 있다는 사실이 명시적으로 언급되어 있지 않지만 API는 이를 분류할 수 있습니다. 하나의 기사를 분류하는 것도 좋지만 이 기능의 강력함을 실제로 확인하기 위해 아주 많은 텍스트 데이터를 분류해 보겠습니다.

작업 4. 대규모 텍스트 데이터 세트 분류하기

텍스트가 많은 데이터 집합을 이해하는 데classifyText 메서드가 어떤 도움이 되는지 알아보기 위해 BBC 뉴스 기사의 공개 데이터 세트를 사용하겠습니다. 이 데이터 세트는 2004년부터 2005년까지 5개 주제 영역(비즈니스, 엔터테인먼트, 정치, 스포츠, 기술)의 기사 2,225개로 구성되어 있습니다. 이 기사의 하위 집합은 공개 Google Cloud Storage 버킷에 포함되어 있습니다. 각 기사는 .txt 파일로 존재합니다.

데이터를 살펴보고 Natural Language API로 보내기 위해 Cloud Storage에서 각 텍스트 파일을 읽고, classifyText 엔드포인트로 보내고, 결과를 BigQuery 테이블에 저장하는 Python 스크립트를 작성합니다. BigQuery는 Google Cloud의 빅데이터 웨어하우스 도구입니다. BigQuery를 사용하여 대규모 데이터 세트를 쉽게 저장하고 분석할 수 있습니다.

  • 작업할 텍스트의 유형을 알아보기 위해 다음 명령어를 실행하여 하나의 기사를 확인합니다.

    gcloud storage cat gs://cloud-training-demos-text/bbc_dataset/entertainment/001.txt

다음으로 데이터에 대한 BigQuery 테이블을 만듭니다.

작업 5. 분류한 텍스트 데이터에 대한 BigQuery 테이블 만들기

텍스트를 Natural Language API로 보내기 전에 각 기사의 텍스트 및 카테고리를 저장할 장소가 필요합니다.

  1. Google Cloud 콘솔에서 탐색 메뉴(탐색 메뉴 아이콘) > BigQuery를 클릭합니다.

  2. BigQuery를 시작할 때 환영 알림이 표시되면 완료를 클릭합니다.

  3. 왼쪽 창에서 프로젝트 이름 옆의 작업 보기 아이콘(작업 보기 아이콘)을 클릭하고 데이터 세트 만들기를 클릭합니다.

  4. 데이터 세트 IDnews_classification_dataset를 입력합니다.

  5. 데이터 세트 만들기를 클릭합니다.

  6. 데이터 세트 이름 옆에 있는 작업 보기 아이콘을 클릭하고 테이블 만들기를 클릭합니다. 새 테이블에 다음 설정을 사용합니다.

  • 빈 테이블에서 테이블을 만듭니다.
  • 테이블 이름을 article_data로 지정합니다.
  • 스키마 아래에서 필드 추가(+)를 클릭하고, 문자열 유형의 article_text, 문자열 유형의 카테고리부동 소수점 수 유형의 신뢰도의 3개 필드를 추가합니다.
  1. 테이블 만들기를 클릭합니다.

지금은 테이블이 비어 있습니다. 다음 단계에서는 Cloud Storage에서 기사를 읽고, Natural Language API로 보내 기사를 분류하고, 분류 결과를 BigQuery에 저장합니다.

작업 6. 뉴스 데이터를 분류하고 BigQuery에 결과 저장하기

뉴스 데이터를 Natural Language API로 보내는 스크립트를 작성하기 전에 서비스 계정을 만들어야 합니다. 서비스 계정은 Python 스크립트를 통해 Natural Language API 및 BigQuery에 인증하는 데 사용됩니다.

  1. 먼저 Cloud Shell로 돌아가 클라우드 프로젝트의 이름을 환경 변수로 내보냅니다. <your_project_name>를 실습의 실습 세부정보 패널에 있는 GCP 프로젝트 ID로 바꿉니다.
export PROJECT=<your_project_name>
  1. 그런 다음 Cloud Shell에서 다음 명령어를 실행하여 서비스 계정을 만듭니다.
gcloud iam service-accounts create my-account --display-name my-account gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:my-account@$PROJECT.iam.gserviceaccount.com --role=roles/bigquery.admin gcloud projects add-iam-policy-binding $PROJECT --member=serviceAccount:my-account@$PROJECT.iam.gserviceaccount.com --role=roles/serviceusage.serviceUsageConsumer gcloud iam service-accounts keys create key.json --iam-account=my-account@$PROJECT.iam.gserviceaccount.com export GOOGLE_APPLICATION_CREDENTIALS=key.json

이제 텍스트 데이터를 Natural Language API로 보낼 준비를 마쳤습니다.

텍스트 데이터를 보내려면 Google Cloud용 Python 모듈을 사용하여 Python 스크립트를 작성합니다. 어떤 언어로든 동일한 작업을 수행할 수 있으며 다양한 클라우드 클라이언트 라이브러리가 있습니다.

  1. classify-text.py라는 파일을 만들고 다음을 복사해서 붙여넣습니다. YOUR_PROJECTGCP 프로젝트 ID로 바꿉니다.
참고: 프로젝트 ID 값 주위에 있는 작은따옴표를 그대로 두어야 합니다. from google.cloud import storage, language_v1, bigquery # Set up our GCS, NL, and BigQuery clients storage_client = storage.Client() nl_client = language_v1.LanguageServiceClient() # TODO: replace YOUR_PROJECT with your project id below bq_client = bigquery.Client(project='YOUR_PROJECT') dataset_ref = bq_client.dataset('news_classification_dataset') dataset = bigquery.Dataset(dataset_ref) table_ref = dataset.table('article_data') # Update this if you used a different table name table = bq_client.get_table(table_ref) # Send article text to the NL API's classifyText method def classify_text(article): response = nl_client.classify_text( document=language_v1.types.Document( content=article, type_='PLAIN_TEXT' ) ) return response rows_for_bq = [] files = storage_client.bucket('cloud-training-demos-text').list_blobs() print("Got article files from GCS, sending them to the NL API (this will take ~2 minutes)...") # Send files to the NL API and save the result to send to BigQuery for file in files: if file.name.endswith('txt'): article_text = file.download_as_bytes() nl_response = classify_text(article_text) if len(nl_response.categories) > 0: rows_for_bq.append((str(article_text), str(nl_response.categories[0].name), nl_response.categories[0].confidence)) print("Writing NL API article data to BigQuery...") # Write article text + category data to BQ errors = bq_client.insert_rows(table, rows_for_bq) assert errors == []

이제 기사를 분류하고 BigQuery로 가져올 준비를 마쳤습니다.

  1. 다음 스크립트를 실행합니다.
python3 classify-text.py

스크립트를 완료하는 데 2분 정도 걸립니다. 실행되는 동안 무슨 일이 일어나고 있는지 설명하겠습니다.

참고: python3 classify-text.py를 실행하는 동안 오류가 발생하면 Cloud Shell 연결이 끊어질 수 있습니다. 이 문제를 해결하려면 아래 명령어를 실행하여 환경 변수를 내보낸 다음 python3 classify-text.py 명령어를 다시 실행하세요.

  • export PROJECT= (GCP PROJECT ID)
  • export GOOGLE_APPLICATION_CREDENTIALS=key.json

Google Cloud Python 클라이언트 라이브러리를 사용하여 Cloud Storage, Natural Language API, BigQuery에 액세스하고 있습니다. 먼저 각 서비스에 대해 클라이언트가 생성된 다음 BigQuery 테이블에 대한 참조가 생성됩니다. files은 공개 버킷에 있는 각 BBC 데이터 세트 파일에 대한 참조입니다. 이러한 파일을 반복하고, 기사를 문자열로 다운로드한 다음 각각을 classify_text 함수의 Natural Language API로 보냅니다. Natural Language API가 카테고리를 반환하는 모든 기사에 대해 해당 기사 및 카테고리 데이터가 rows_for_bq 목록에 저장됩니다. 각 기사의 분류가 완료되면 insert_rows()를 사용하여 데이터가 BigQuery에 삽입됩니다.

참고: Natural Language API는 하나의 문서에 대해 두 개 이상의 카테고리를 반환할 수 있지만, 이 실습에서는 간소화를 위해 반환된 첫 번째 카테고리만 저장합니다.

스크립트 실행이 완료되면 기사 데이터가 BigQuery에 저장되었는지 확인할 차례입니다.

  1. BigQuery의 BigQuery 탭에서 article_data 테이블로 이동한 다음 쿼리 > 새 탭을 클릭합니다.

article_data 테이블

  1. SELECT와 FROM 사이에 별표를 추가하여 제목 없음 상자에서 결과를 편집합니다.
SELECT * FROM `news_classification_dataset.article_data`
  1. 이제 실행을 클릭합니다.

쿼리가 완료되면 데이터가 표시됩니다. 카테고리 열을 보려면 오른쪽으로 스크롤합니다.

카테고리 열에는 기사에 대해 Natural Language API가 반환한 첫 번째 카테고리의 이름이 표시됩니다. 신뢰도는 0에서 1 사이의 값으로 API가 기사를 올바르게 분류하는 데 얼마나 확신하는지를 나타냅니다. 다음 단계에서는 데이터에 대해 더 복잡한 쿼리를 수행하는 방법을 배웁니다.

작업 7. BigQuery에서 분류한 뉴스 데이터 분석하기

먼저 데이터 세트에서 가장 일반적인 카테고리가 무엇인지 확인합니다.

  1. BigQuery 콘솔에서 + 새 쿼리 작성을 클릭합니다.

  2. 다음 쿼리를 입력합니다.

SELECT category, COUNT(*) c FROM `news_classification_dataset.article_data` GROUP BY category ORDER BY c DESC
  1. 이제 실행을 클릭합니다.

쿼리 결과에 다음과 같은 내용이 표시됩니다.

BQ query results.png

  1. /Arts & Entertainment/Music & Audio/Classical Music과 같이 보다 불분명한 카테고리에 대해 반환된 기사를 찾으려면 다음 쿼리를 실행하면 됩니다.
SELECT * FROM `news_classification_dataset.article_data` WHERE category = "/Arts & Entertainment/Music & Audio/Classical Music"
  1. Natural Language API가 90%가 넘는 신뢰도 점수를 반환한 기사만 가져오려면 다음 쿼리를 실행합니다.
SELECT article_text, category FROM `news_classification_dataset.article_data` WHERE cast(confidence as float64) > 0.9

데이터에 대해 더 많은 쿼리를 수행하려면 BigQuery 문서를 살펴보세요. BigQuery는 다양한 시각화 도구와도 통합됩니다. 분류된 뉴스 데이터의 시각화를 만들려면 BigQuery용 데이터 스튜디오 빠른 시작을 참조하세요.

수고하셨습니다

지금까지 Natural Language API 텍스트 분류 메서드를 사용하여 뉴스 기사를 분류하는 방법을 알아보았습니다. 하나의 기사를 분류하는 것부터 시작해서 BigQuery와 함께 NL API를 사용하여 대규모 뉴스 데이터 세트를 분류하고 분석하는 방법을 배웠습니다.

학습한 내용

  • Natural Language API classifyText 요청 만들기 및 curl로 API 호출하기
  • Google Cloud Python 모듈을 사용하여 대규모 뉴스 데이터 세트 분석하기
  • BigQuery에서 데이터 가져오기 및 분석하기

Copyright 2020 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.

시작하기 전에

  1. 실습에서는 정해진 기간 동안 Google Cloud 프로젝트와 리소스를 만듭니다.
  2. 실습에는 시간 제한이 있으며 일시중지 기능이 없습니다. 실습을 종료하면 처음부터 다시 시작해야 합니다.
  3. 화면 왼쪽 상단에서 실습 시작을 클릭하여 시작합니다.

시크릿 브라우징 사용

  1. 실습에 입력한 사용자 이름비밀번호를 복사합니다.
  2. 비공개 모드에서 콘솔 열기를 클릭합니다.

콘솔에 로그인

    실습 사용자 인증 정보를 사용하여
  1. 로그인합니다. 다른 사용자 인증 정보를 사용하면 오류가 발생하거나 요금이 부과될 수 있습니다.
  2. 약관에 동의하고 리소스 복구 페이지를 건너뜁니다.
  3. 실습을 완료했거나 다시 시작하려고 하는 경우가 아니면 실습 종료를 클릭하지 마세요. 이 버튼을 클릭하면 작업 내용이 지워지고 프로젝트가 삭제됩니다.

현재 이 콘텐츠를 이용할 수 없습니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

감사합니다

이용할 수 있게 되면 이메일로 알려드리겠습니다.

한 번에 실습 1개만 가능

모든 기존 실습을 종료하고 이 실습을 시작할지 확인하세요.

시크릿 브라우징을 사용하여 실습 실행하기

이 실습을 실행하려면 시크릿 모드 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학생 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.