Google Cloud Natural Language API를 사용한 NLP
게시 됨: 2022-03-11기계 학습과 언어학의 결합인 자연어 처리(NLP)는 인공 지능 분야에서 가장 많이 연구되는 주제 중 하나가 되었습니다. 지난 몇 년 동안 많은 새로운 이정표에 도달했습니다. 가장 최신 모델은 OpenAI의 GPT-2 모델로, 짧은 입력으로 모든 주제에 대해 현실적이고 일관된 기사를 생성할 수 있습니다.
이러한 관심은 최근 몇 년 동안 시장에 출시된 많은 상용 응용 프로그램에 의해 주도됩니다. 우리는 NLP를 사용하여 오디오 데이터를 기록하고 질문과 명령을 이해하는 홈 어시스턴트와 이야기합니다. 점점 더 많은 기업이 고객 커뮤니케이션 노력의 상당 부분을 자동화된 챗봇으로 전환하고 있습니다. 온라인 마켓플레이스는 가짜 리뷰를 식별하기 위해 이를 사용하고, 미디어 회사는 NLP에 의존하여 뉴스 기사를 작성하고, 채용 회사는 이력서를 직위와 일치시키고, 소셜 미디어 거물은 자동으로 증오성 콘텐츠를 필터링하고, 법률 회사는 NLP를 사용하여 계약을 분석합니다.
이와 같은 작업을 위한 기계 학습 모델을 교육하고 배포하는 것은 과거에 복잡한 프로세스였으므로 전문가 팀과 값비싼 인프라가 필요했습니다. 그러나 이러한 응용 프로그램에 대한 높은 수요로 인해 대규모 공급자는 NLP 관련 서비스를 개발하여 작업 부하와 인프라 비용을 크게 줄였습니다. 클라우드 서비스의 평균 비용은 수년간 하락해 왔으며 이러한 추세는 계속될 것으로 예상됩니다.
이 기사에서 소개할 제품은 Google Cloud Services의 일부로 "Google Natural Language API" 및 "Google AutoML Natural Language"라고 합니다.
Google 자연어 API
Google Natural Language API는 다양한 작업을 수행하기 위해 Google에서 사전 훈련된 강력한 NLP 모델 세트에 대한 사용하기 쉬운 인터페이스입니다. 이러한 모델은 엄청나게 큰 문서 말뭉치에서 훈련되었기 때문에 매우 독특한 언어를 사용하지 않는 데이터 세트에서 사용되는 한 일반적으로 성능이 상당히 좋습니다.
API를 통해 이러한 사전 훈련된 모델을 사용할 때의 가장 큰 이점은 훈련 데이터 세트가 필요하지 않다는 것입니다. API를 사용하면 사용자가 즉시 예측을 시작할 수 있으므로 레이블이 지정된 데이터가 거의 없는 상황에서 매우 유용할 수 있습니다.
Natural Language API는 다섯 가지 서비스로 구성됩니다.
- 구문 분석
- 감정 분석
- 엔티티 분석
- 엔티티 감정 분석
- 텍스트 분류
구문 분석
주어진 텍스트에 대해 Google의 구문 분석은 각 토큰에 대한 풍부한 언어 정보 세트와 함께 모든 단어의 분석을 반환합니다. 정보는 두 부분으로 나눌 수 있습니다.
품사: 이 부분에는 각 토큰의 형태에 대한 정보가 포함되어 있습니다. 각 단어에 대해 유형(명사, 동사 등), 성별, 문법적 대소문자, 시제, 문법적 분위기, 문법적 음성 등을 포함하는 세분화된 분석이 반환됩니다.
예를 들어, "한 번 컴퓨터가 체스에서 나를 이겼지만 킥복싱에서는 나에게 맞지 않았습니다."라는 입력 문장의 경우. (Emo Philips) 품사 분석은 다음과 같습니다.
ㅏ | 태그: DET |
'컴퓨터' | 태그: 명사 번호: 단수 |
'한번' | 태그: ADV |
'이기다' | 태그: 동사 분위기: 직설 시제: 과거 |
'나' | 태그: PRON 케이스: 대소문자: 단수인물: FIRST |
~에 | 태그: ADP |
'체스' | 태그: 명사 번호: 단수 |
',' | 태그: PUNCT |
'하지만' | 태그: CONJ |
'그것' | 태그: PRON 사례: NOMINATIVE 성별: NEUTER 번호: SINGULAR 사람: THIRD |
'였다' | 태그: 동사 분위기: 직설적 숫자: 단수 인칭: 세 번째 시제: 과거 |
'아니요' | 태그: DET |
'성냥' | 태그: 명사 번호: 단수 |
'을위한' | 태그: ADP |
'발 차기' | 태그: 명사 번호: 단수 |
'권투' | 태그: 명사 번호: 단수 |
'.' | 태그: PUNCT |
종속성 트리: 반환의 두 번째 부분은 종속성 트리라고 하며 각 문장의 구문 구조를 설명합니다. 유명한 Kennedy 인용의 다음 다이어그램은 그러한 종속성 트리를 보여줍니다. 각 단어에 대해 화살표는 해당 단어에 의해 수정된 단어를 나타냅니다.
일반적으로 사용되는 Python 라이브러리 nltk 및 spaCy에는 유사한 기능이 포함되어 있습니다. 분석 품질은 세 가지 옵션 모두에서 일관되게 높지만 Google Natural Language API를 사용하는 것이 더 쉽습니다. 위의 분석은 몇 줄의 코드로 얻을 수 있습니다(아래 예제 참조). 그러나 spaCy 및 nltk는 오픈 소스이므로 무료이지만 Google Natural Language API를 사용하면 일정 수의 무료 요청 후에 비용이 발생합니다(비용 섹션 참조).
영어 외에도 구문 분석은 중국어(간체), 중국어(번체), 프랑스어, 독일어, 이탈리아어, 일본어, 한국어, 포르투갈어, 러시아어 및 스페인어의 10가지 추가 언어를 지원합니다.
감정 분석
구문 분석 서비스는 나중에 기계 학습 모델에 제공되는 기능을 생성하기 위해 파이프라인 초기에 주로 사용됩니다. 반대로 감정 분석 서비스는 즉시 사용할 수 있습니다.
Google의 감정 분석은 제공된 텍스트 내에서 지배적인 감정적 의견을 제공합니다. API는 두 가지 값을 반환합니다. "점수"는 -1(음수)에서 +1(양수)까지 텍스트의 감정적 성향을 나타내며 0은 중립입니다.
"크기"는 감정의 강도를 측정합니다.
몇 가지 예를 살펴보겠습니다.
문장 입력 | 감정 결과 | 해석 |
런던행 기차는 4시에 출발합니다. | 점수: 0.0 규모: 0.0 | 감정을 전혀 포함하지 않는 완전히 중립적인 진술. |
이 블로그 게시물이 좋습니다. | 점수: 0.7 규모: 0.7 | 긍정적인 감정이지만 그다지 강하게 표현되지는 않는다. |
이 블로그 게시물이 좋습니다. 매우 도움이 되었습니다. 저자는 놀랍습니다. | 점수: 0.7 규모: 2.3 | 같은 감정이지만 훨씬 더 강하게 표현되었습니다. |
이 블로그 게시물은 매우 좋습니다. 이 작가는 평소에는 못된 작가인데 여기서 운이 좋았다. | 점수: 0.0 규모: 1.6 | 크기는 이 텍스트에 표현된 감정이 있음을 보여주지만 감정은 그것들이 혼합되어 있고 명확하게 긍정적이거나 부정적이지 않다는 것을 보여줍니다. |
Google의 감정 분석 모델은 매우 큰 데이터 세트에서 학습됩니다. 불행히도 자세한 구조에 대한 정보는 없습니다. 실제 성능이 궁금해서 2011년 스탠포드 대학의 과학자들이 만든 Large Movie Review Dataset의 일부에서 테스트했습니다.
테스트 세트에서 500개의 긍정적인 영화 리뷰와 500개의 부정적인 영화 리뷰를 무작위로 선택하고 예상 감정을 실제 리뷰 레이블과 비교했습니다. 혼동 행렬은 다음과 같습니다.
긍정적인 감정 | 부정적인 감정 | |
좋은 리뷰 | 470 | 30 |
나쁜 리뷰 | 29 | 471 |
표에서 알 수 있듯이 이 모델은 좋은 영화 리뷰와 나쁜 영화 리뷰의 경우 약 94%가 맞습니다. 이것은 주어진 문제를 미세 조정하지 않고 즉시 사용 가능한 솔루션에 대한 나쁜 성능이 아닙니다.
참고: 감정 분석은 러시아어를 제외하고 구문 분석과 동일한 언어에 대해 사용할 수 있습니다.
엔티티 분석
엔터티 분석은 주어진 텍스트에서 공인이나 랜드마크와 같은 알려진 엔터티를 감지하는 프로세스입니다. 엔티티 감지는 분류 및 주제 모델링 작업의 종류에 매우 유용합니다.
Google Natural Language API는 감지된 각 개체에 대한 몇 가지 기본 정보를 제공하고 해당 Wikipedia 문서가 있는 경우 해당 문서에 대한 링크도 제공합니다. 또한, 현저성 점수가 계산됩니다. 엔터티에 대한 이 점수는 전체 문서 텍스트에 대한 해당 엔터티의 중요성 또는 중심성에 대한 정보를 제공합니다. 0에 가까울수록 중요도가 낮고 1.0에 가까울수록 중요합니다.
다음 예제 문장으로 API에 요청을 보낼 때: "Robert DeNiro는 2011년 12월 크리스마스 이브에 Hollywood에서 Martin Scorsese와 이야기했습니다." 다음과 같은 결과가 나타납니다.
감지된 개체 | 추가 정보 |
로버트 드니로 | 유형: PERSON 돌출: 0.5869118 wikipedia_url: https://en.wikipedia.org/wiki/Robert_De_Niro |
할리우드 | 유형: LOCATION 돌출: 0.17918482 wikipedia_url: https://en.wikipedia.org/wiki/Hollywood |
마틴 스콜세지 | 유형: LOCATION 돌출: 0.17712952 wikipedia_url: https://en.wikipedia.org/wiki/Martin_Scorsese |
크리스마스 이브 | 유형 : PERSON 돌출 : 0.056773853 wikipedia_url : https://en.wikipedia.org/wiki/Christmas |
2011년 12월 | 유형: DATE 연도: 2011 월: 12 중요도: 0.0 wikipedia_url: - |
2011년 | 유형 : NUMBER 돌출 : 0.0 wikipedia_url : - |
보시다시피 2011년이 두 번 나타나는 것을 제외하고 모든 엔터티가 올바르게 식별되고 분류됩니다. 예제 출력의 필드 외에도 엔터티 분석 API는 조직, 예술 작품, 소비재, 전화 번호, 주소 및 가격도 감지합니다.
엔티티 감정 분석
엔터티 감지 및 감정 분석을 위한 모델이 있는 경우 한 단계 더 나아가 이를 결합하여 텍스트의 다른 엔터티에 대한 일반적인 감정을 감지하는 것은 당연합니다.
Sentiment Analysis API가 문서에서 감정의 모든 표시를 찾아 집계하는 동안, Entity Sentiment Analysis는 문서의 다른 부분과 식별된 엔터티 간의 종속성을 찾은 다음 이러한 텍스트 세그먼트의 감정을 해당 엔터티에 귀속시킵니다.
예를 들어 독단적인 텍스트: “저자는 끔찍한 작가입니다. 반면에 독자는 매우 지능적입니다.” 결과로 이어집니다:
실재 | 감정 |
작가 | 돌출부: 0.8773350715637207 감정: 규모: 1.899999976158142 점수: -0.8999999761581421 |
리더 | 돌출부: 0.08653714507818222 감정: 크기: 0.8999999761581421 점수: 0.8999999761581421 |
지금까지 엔터티 감정 분석은 영어, 일본어 및 스페인어에 대해서만 작동합니다.
텍스트 분류
마지막으로 Google Natural Language API는 플러그 앤 플레이 텍스트 분류 모델과 함께 제공됩니다.
모델은 입력 문서를 큰 범주 세트로 분류하도록 훈련되었습니다. 범주는 계층 구조로 되어 있습니다. 예를 들어 "취미 및 레저" 범주에는 여러 하위 범주가 있으며, 그 중 하나는 "취미 및 레저/야외" 이고 "취미 및 레저/야외/낚시"와 같은 하위 범주가 있습니다.

다음은 Nikon 카메라 광고의 예시 텍스트입니다.
“D3500의 대형 2420만 DX 형식 센서는 어두운 곳에서 촬영할 때도 매우 상세한 사진과 Full HD 동영상을 캡처합니다. NIKKOR 렌즈의 렌더링 능력과 결합하여 부드러운 배경 흐림 효과로 예술적인 인물 사진을 만들 수 있습니다. 편하게.”
Google API는 다음 결과를 반환합니다.
범주 | 신뢰 |
예술 및 엔터테인먼트/시각 예술 및 디자인/사진 및 디지털 예술 | 0.95 |
취미 및 여가 | 0.94 |
컴퓨터 및 전자 제품/소비자 전자 제품/카메라 및 사진 장비 | 0.85 |
직관적으로 세 번째 항목의 순위를 두 번째 항목보다 높게 지정하더라도 이 세 가지 범주 모두 의미가 있습니다. 그러나 이 입력 세그먼트는 전체 카메라 광고 문서의 일부일 뿐이며 분류 모델의 성능은 텍스트 길이에 따라 향상된다는 점을 고려해야 합니다.
많은 문서로 시도해 본 결과 대부분의 경우 분류 모델의 결과가 의미 있는 것으로 나타났습니다. 그러나 Google Natural Language API의 다른 모든 모델과 마찬가지로 분류기는 API 사용자가 수정하거나 미세 조정할 수 없는 블랙박스 솔루션으로 제공됩니다. 특히 텍스트 분류의 경우 대부분의 회사는 Google 모델의 카테고리와 다른 자체 텍스트 카테고리를 가지므로 대부분의 사용자에게 Natural Language API 텍스트 분류 서비스가 적용되지 않을 수 있습니다.
분류 모델의 또 다른 한계는 영어 텍스트에만 작동한다는 것입니다.
자연어 API를 사용하는 방법
Google Natural Language API의 가장 큰 장점은 사용이 간편하다는 것입니다. 기계 학습 기술이 필요하지 않으며 코딩 기술도 거의 없습니다. Google Cloud 웹사이트에서 다양한 언어로 API를 호출하기 위한 코드 스니펫을 찾을 수 있습니다.
예를 들어 감정 분석 API를 호출하는 Python 코드는 다음과 같이 짧습니다.
from google.cloud import language_v1 from google.cloud.language_v1 import enums import six def sample_analyze_sentiment(content): client = language_v1.LanguageServiceClient() if isinstance(content, six.binary_type): content = content.decode('utf-8') type_ = enums.Document.Type.PLAIN_TEXT document = {'type': type_, 'content': content} response = client.analyze_sentiment(document) sentiment = response.document_sentiment print('Score: {}'.format(sentiment.score)) print('Magnitude: {}'.format(sentiment.magnitude))
다른 API 기능은 client.analyze_sentiment
를 적절한 기능으로 변경하여 유사한 방식으로 호출됩니다.
Google Natural Language API의 전체 비용
Google은 Natural Language API의 모든 서비스에 대해 요청별로 사용자에게 요금을 청구합니다. 이는 배포 서버에 대한 고정 비용이 없다는 장점이 있습니다. 단점은 매우 큰 데이터 세트의 경우 비용이 많이 들 수 있다는 것입니다.
다음 표는 월별 요청 수에 따른 가격(요청 1,000건당)을 보여줍니다.
문서가 1,000자를 초과하는 경우 여러 요청으로 계산됩니다. 예를 들어 각각 1,500자의 문자가 포함된 10,000개의 문서에 대한 감정을 분석하려는 경우 20,000개의 요청에 대한 요금이 부과됩니다. 처음 5,000개는 무료이므로 총 비용은 $15입니다. 같은 크기의 문서 100만 개를 분석하는 데는 1,995달러가 소요됩니다.
편리하지만 융통성이 없음
Google Natural Language API는 즉시 사용 가능한 빠른 솔루션을 위한 매우 편리한 옵션입니다. 기술 지식이 거의 없고 기본 기계 학습 모델에 대한 이해가 필요하지 않습니다.
주요 단점은 유연성이 없고 모델에 액세스할 수 없다는 것입니다. 모델은 특정 작업이나 데이터세트로 조정할 수 없습니다.
실제 환경에서 대부분의 작업에는 표준화된 Natural Language API 기능이 제공할 수 있는 것보다 더 맞춤화된 솔루션이 필요할 것입니다.
이 시나리오에서는 Google AutoML Natural Language가 더 적합합니다.
Google AutoML 자연어
Natural Language API가 비즈니스 목적에 충분히 유연하지 않다면 AutoML Natural Language가 적합한 서비스일 수 있습니다. AutoML은 사용자가 맞춤형 기계 학습 모델을 만들 수 있게 해주는 새로운 Google Cloud Service(아직 베타 버전)입니다. Natural Language API와 달리 AutoML 모델은 사용자 데이터에 대해 학습되므로 특정 작업에 적합합니다.
콘텐츠 분류를 위한 사용자 지정 기계 학습 모델은 Natural Language API에서 사용할 수 있는 미리 정의된 범주가 너무 일반적이거나 특정 사용 사례 또는 지식 영역에 적용할 수 없는 경우에 유용합니다.
AutoML 서비스는 주로 모델을 훈련하기 위해 데이터 세트를 제공해야 하기 때문에 사용자에게 조금 더 많은 노력이 필요합니다. 그러나 완전히 자동화된 모델의 교육 및 평가는 기계 학습 지식이 필요하지 않습니다. 전체 프로세스는 Google Cloud 콘솔을 사용하여 코드를 작성하지 않고 수행할 수 있습니다. 물론 이러한 단계를 자동화하려는 경우 모든 공통 프로그래밍 언어가 지원됩니다.
Google AutoML Natural Language로 무엇을 할 수 있습니까?
AutoML 서비스는 세 가지 사용 사례를 다룹니다. 이러한 모든 사용 사례는 현재 영어만 지원합니다.
1. AutoML 텍스트 분류
Natural Language API의 텍스트 분류기는 사전 학습되어 고정된 텍스트 카테고리 세트가 있지만 AutoML 텍스트 분류는 학습 데이터 세트에서 제공하는 카테고리를 사용하여 맞춤형 기계 학습 모델을 빌드합니다.
2. AutoML 감정 분석
우리가 보았듯이 Natural Language API의 감정 분석은 영화 리뷰와 같은 일반적인 사용 사례에서 훌륭하게 작동합니다. 감정 모델은 매우 일반적인 말뭉치에서 훈련되기 때문에 도메인별 언어를 많이 사용하는 문서의 경우 성능이 저하될 수 있습니다. 이러한 상황에서 AutoML 감정 분석을 사용하면 도메인에 맞춤화된 감정 모델을 훈련할 수 있습니다.
3. AutoML 항목 추출
많은 비즈니스 컨텍스트에서 Natural Language API가 식별할 수 없는 도메인 특정 엔티티(법적 계약, 의료 문서)가 있습니다. 항목이 표시된 데이터 세트가 있는 경우 AutoML을 사용하여 사용자 지정 모델 항목 추출기를 훈련할 수 있습니다. 데이터 세트가 충분히 크면 훈련된 엔터티 추출 모델은 이전에 보지 못한 엔터티도 감지할 수 있습니다.
AutoML 자연어를 사용하는 방법
세 가지 AutoML을 사용하는 것은 4단계 프로세스이며 세 가지 방법론 모두에서 매우 유사합니다.
데이터세트 준비
데이터 세트는 특정 형식(CSV 또는 JSON)이어야 하며 스토리지 버킷에 저장해야 합니다. 분류 및 감정 모델의 경우 데이터 세트에는 텍스트와 레이블이라는 두 개의 열만 포함됩니다. 엔티티 추출 모델의 경우 데이터 세트에는 텍스트와 텍스트에 있는 모든 엔티티의 위치가 필요합니다.모델 교육
모델 훈련은 완전히 자동입니다. 다른 지침이 제공되지 않으면 AutoML은 훈련 세트를 자동으로 훈련, 테스트 및 검증 세트로 분할합니다. 이 분할은 사용자가 결정할 수도 있지만 이것이 모델 훈련에 영향을 미치는 유일한 방법입니다. 나머지 교육은 블랙박스 방식으로 완전히 자동화됩니다.평가
훈련이 완료되면 AutoML은 정밀도 및 재현율 점수와 혼동 행렬을 표시합니다. 안타깝게도 모델 자체에 대한 정보가 전혀 없어 성능이 좋지 않은 모델의 원인을 파악하기 어렵습니다.예측
모델의 성능에 만족하면 몇 번의 클릭으로 모델을 편리하게 배포할 수 있습니다. 배포 프로세스는 몇 분 밖에 걸리지 않습니다.
AutoML 모델 성능
기본 모델이 매우 크기 때문에 훈련 프로세스가 상당히 느립니다. 나는 15,000개의 샘플과 10개의 카테고리로 소규모 테스트 분류 작업을 훈련했으며 훈련에는 몇 시간이 걸렸습니다. 훨씬 더 큰 데이터 세트가 있는 실제 예를 보려면 며칠이 걸렸습니다.
Google은 사용된 모델에 대한 세부 정보를 공개하지 않았지만 Google의 BERT 모델은 각 작업에 대해 약간의 조정으로 사용되는 것 같습니다. BERT와 같은 큰 모델을 미세 조정하는 것은 특히 많은 교차 검증이 수행될 때 계산 비용이 많이 드는 프로세스입니다.
BERT를 기반으로 내가 직접 개발한 모델에 대해 실제 예제에서 AutoML 분류 모델을 테스트했습니다. 놀랍게도 AutoML 모델은 동일한 데이터로 훈련되었을 때 내 모델보다 훨씬 더 나쁜 성능을 보였습니다. AutoML은 84%의 정확도를 달성한 반면 내 모델은 89%를 달성했습니다.
즉, AutoML을 사용하는 것이 매우 편리할 수 있지만 성능이 중요한 작업의 경우 시간을 투자하고 직접 모델을 개발하는 것이 좋습니다.
AutoML 가격 책정
1,000개 텍스트 레코드당 5달러의 예측에 대한 AutoML 가격은 Natural Language API보다 훨씬 비쌉니다. 또한 모델 학습에 대해 AutoML은 시간당 3달러를 청구합니다. 이것은 처음에는 무시할 수 있지만 빈번한 재교육이 필요한 사용 사례의 경우 특히 교육이 상당히 느린 것처럼 보이기 때문에 상당한 양을 추가할 수 있습니다.
Natural Language API와 동일한 예를 사용하겠습니다.
각각 1,500자의 문자가 포함된 10,000개의 문서에 대한 감정을 분석하려고 하므로 20,000개의 요청이 청구됩니다. 모델을 학습시키는 데 20시간이 걸리고 비용은 $48라고 가정해 보겠습니다. 처음 30,000개의 요청은 무료이므로 예측에는 비용이 들지 않습니다. 이와 같은 소규모 데이터세트의 경우 AutoML은 매우 경제적입니다.
그러나 데이터 세트가 더 크고 동일한 크기의 백만 명의 감정을 예측해야 하는 경우 $9,850의 비용이 들며 이는 상당히 비쌉니다. 이와 같은 대규모 데이터 세트의 경우 AutoML을 사용하지 않고 자체 모델을 개발하여 배포하는 것이 좋습니다.
Google Natural Language API와 AutoML Natural Language
Google AutoML Natural Language는 사용자가 특정 데이터세트 및 도메인에 맞게 맞춤설정된 모델을 훈련할 수 있도록 해주기 때문에 Natural Language API보다 훨씬 강력합니다.
사용하기 쉽고 기계 학습 지식이 필요하지 않습니다. 두 가지 단점은 더 높은 비용과 잘 수행되는 모델을 훈련하는 데 필요한 고품질 데이터 세트를 제공해야 한다는 것입니다.
AutoML 베타는 현재 세 가지 NLP 작업(분류, 감정 분석, 엔터티 추출)만 지원하며 영어 문서만 지원합니다. 이 서비스가 완전히 출시되면 시간이 지남에 따라 다른 언어 및 NLP 작업이 추가될 것으로 예상합니다.