자연어 처리 기술

Azure AI 서비스
Azure Databricks
Azure HDInsight
Azure Synapse Analytics

NLP(자연어 처리)는 감성 분석, 토픽 감지, 언어 감지, 핵심 구 추출 및 문서 분류 등 다양한 용도로 사용됩니다.

특히 NLP를 사용하여 다음을 수행할 수 있습니다.

  • 문서를 분류합니다. 예를 들어 문서에 중요 또는 스팸으로 레이블을 지정할 수 있습니다.
  • 후속 처리 또는 검색을 수행합니다. 이러한 목적으로 NLP 출력을 사용할 수 있습니다.
  • 문서에 있는 엔터티를 식별하여 텍스트를 요약합니다.
  • 키워드를 사용하여 문서에 태그를 지정합니다. 키워드의 경우 NLP는 식별된 엔터티를 사용할 수 있습니다.
  • 콘텐츠 기반 검색을 수행합니다. 태그를 지정하면 이 기능을 사용할 수 있습니다.
  • 문서의 중요한 항목을 요약합니다. NLP는 식별된 엔터티를 토픽으로 결합할 수 있습니다.
  • 탐색을 위해 문서를 분류합니다. 이를 위해 NLP는 검색된 토픽을 사용합니다.
  • 선택한 토픽을 기반으로 관련 문서를 열거합니다. 이를 위해 NLP는 검색된 토픽을 사용합니다.
  • 감정에 대한 텍스트 점수 매기기 이 기능을 사용하면 문서의 긍정적 또는 부정적 어조를 평가할 수 있습니다.

Apache®, Apache Spark 및 불꽃 로고는 미국 및/또는 기타 국가에서 Apache Software Foundation의 등록 상표 또는 상표입니다. 이러한 표시는 Apache Software Foundation에 의해 묵시적으로 인증되지 않습니다.

잠재적인 사용 사례

사용자 지정 NLP를 활용할 수 있는 비즈니스 시나리오는 다음과 같습니다.

  • 금융, 의료, 소매, 정부 및 기타 부문에서 수기로 작성하거나 컴퓨터로 만든 문서에 대한 문서 인텔리전스.
  • NER(이름 엔터티 인식), 분류, 요약 및 관계 추출과 같은 텍스트 처리를 위한 업계에 구애받지 않는 NLP 작업. 이러한 작업은 텍스트 및 구조화되지 않은 데이터와 같은 문서 정보를 검색, 식별 및 분석하는 프로세스를 자동화합니다. 이러한 작업의 예로는 위험 계층화 모델, 온톨로지 분류 및 소매 요약이 있습니다.
  • 의미 체계 검색을 위한 정보 검색 및 지식 그래프 만들기 이 기능을 사용하면 약물 발견 및 임상 시험을 지원하는 의료 지식 그래프를 만들 수 있습니다.
  • 소매, 금융, 여행 및 기타 산업 전반의 고객 지향 애플리케이션에서 대화형 AI 시스템을 위한 텍스트 번역.

사용자 지정된 NLP 프레임워크로서의 Apache Spark

Apache Spark는 메모리 내 처리를 지원하여 빅 데이터 분석 애플리케이션의 성능을 향상하는 병렬 처리 프레임워크입니다. Azure Synapse Analytics, Azure HDInsightAzure Databricks는 Spark에 대한 액세스를 제공하고 그 처리 능력을 활용합니다.

사용자 지정된 NLP 워크로드의 경우 Spark NLP는 많은 양의 텍스트를 처리하기 위한 효율적인 프레임워크 역할을 합니다. 이 오픈 소스 NLP 라이브러리는 spaCy, NLTK, Stanford CoreNLP 및 Open NLP와 같은 기존 NLP 라이브러리의 전체 기능을 제공하는 Python, Java 및 Scala 라이브러리를 제공합니다. Spark NLP는 맞춤법 검사, 감정 분석 및 문서 분류와 같은 기능도 제공합니다. Spark NLP는 최첨단 정확도, 속도 및 확장성을 제공하여 이전의 노력을 개선합니다.

Diagram that shows areas of N L P functionality like entity recognition. Various boxes list N L P annotators, models, and supported languages.

최근 공개 벤치마크에서는 Spark NLP가 spaCy보다 38배, 80배 더 빠른 것으로 나타나며, 사용자 지정 모델 학습과 비교할 만한 정확도를 제공합니다. Spark NLP는 분산 Spark 클러스터를 사용할 수 있는 유일한 오픈 소스 라이브러리입니다. Spark NLP는 데이터 프레임에서 직접 작동하는 Spark ML의 네이티브 확장입니다. 결과적으로 클러스터의 속도 향상은 성능 향상으로 이어집니다. 모든 Spark NLP 파이프라인은 Spark ML 파이프라인이므로 Spark NLP는 문서 분류, 위험 예측 및 추천 파이프라인과 같은 통합 NLP 및 기계 학습 파이프라인을 빌드하는 데 적합합니다.

뛰어난 성능 외에도 Spark NLP는 점점 더 많은 NLP 작업에 대한 최첨단 정확도를 제공합니다. Spark NLP 팀은 최신 관련 학술 논문을 정기적으로 읽고 최첨단 모델을 구현합니다. 지난 2~3년 동안 최고의 성능을 발휘하는 모델은 딥 러닝을 사용했습니다. 라이브러리에는 명명된 엔터티 인식, 문서 분류, 감정 및 감정 감지 및 문장 감지를 위한 미리 빌드된 딥 러닝 모델이 함께 제공됩니다. 라이브러리에는 단어, 청크, 문장 및 문서 포함에 대한 지원이 포함된 수십 개의 미리 학습된 언어 모델도 포함되어 있습니다.

라이브러리는 CPU, GPUS 및 최신 Intel Xeon 칩에 대한 빌드를 최적화했습니다. Spark 클러스터를 활용하도록 학습 및 유추 프로세스를 확장할 수 있습니다. 이러한 프로세스는 모든 인기 있는 분석 플랫폼의 프로덕션 환경에서 실행할 수 있습니다.

과제

  • 자유 형식 텍스트 문서 컬렉션을 처리하려면 상당한 양의 계산 리소스가 필요합니다. 처리도 시간이 많이 걸립니다. 이러한 프로세스에는 GPU 컴퓨팅 배포가 포함되는 경우가 많습니다.
  • 표준화된 문서 형식이 없는 경우, 자유 형식 텍스트 처리를 사용하여 문서에서 특정 팩트를 추출할 때 일관되게 정확한 결과를 얻는 것이 어려울 수 있습니다. 예를 들어, 청구서에 표시되는 텍스트를 생각해 보세요. 다양한 공급업체로부터의 송장 번호 및 날짜를 올바르게 추출하는 프로세스를 빌드하는 것은 어려울 수 있습니다.

주요 선택 조건

Azure에서 Azure Databricks, Azure Synapse Analytics 및 Azure HDInsight와 같은 Spark 서비스는 Spark NLP와 함께 사용할 때 NLP 기능을 제공합니다. Azure Cognitive Services는 NLP 기능의 또 다른 옵션입니다. 사용할 서비스를 결정하려면 다음 질문을 고려합니다.

  • 미리 작성된 모델 또는 미리 트레이닝된 모델을 사용하려고 하십니까? 그렇다면 Azure Cognitive Services에서 제공하는 API를 사용하는 것이 좋습니다. 또는 Spark NLP를 통해 선택한 모델을 다운로드합니다.

  • 대량의 텍스트 데이터에 대해 사용자 지정 모델을 학습해야 하나요? 그렇다면 Spark NLP에서 Azure Databricks, Azure Synapse Analytics 또는 Azure HDInsight를 사용하는 것이 좋습니다.

  • 토큰화, 형태소 분석, 기본형 찾기 및 TF/IDF(용어 빈도/역 문서 빈도) 같은 기본적인 NLP 기능이 필요한가요? 그렇다면 Spark NLP에서 Azure Databricks, Azure Synapse Analytics 또는 Azure HDInsight를 사용하는 것이 좋습니다. 또는 선택한 처리 도구에서 오픈 소스 소프트웨어 라이브러리를 사용합니다.

  • 엔터티 및 의도 식별, 토픽 감지, 맞춤법 검사 또는 감성 분석 같은 간단한 고급 NLP 기능이 필요한가요? 그렇다면 Cognitive Services에서 제공하는 API를 사용하는 것이 좋습니다. 또는 Spark NLP를 통해 선택한 모델을 다운로드합니다.

기능 매트릭스

다음 표에서는 NLP 서비스의 기능에서 주요 차이점을 요약합니다.

일반 기능

기능 Spark NLP를 사용하는 Spark 서비스(Azure Databricks, Azure Synapse Analytics, Azure HDInsight) Azure Cognitive Services
미리 학습된 모델을 서비스로 제공합니다.
REST API
프로그래밍 기능 Python, Scala 지원되는 언어는 추가 리소스를 참조하세요.
빅 데이터 집합 및 대형 문서의 처리를 지원합니다.

하위 수준 NLP 기능

주석의 기능 Spark NLP를 사용하는 Spark 서비스(Azure Databricks, Azure Synapse Analytics, Azure HDInsight) Azure Cognitive Services
문장 감지기
심층 문장 감지기
토크나이저
N-gram 생성기
단어 구분
형태소 분석기 아니요
기본형 분석기
음성 부분 태그 지정
종속성 파서
Translation
중지 단어 클리너
맞춤법 수정
노멀라이저
텍스트 검사기
TF/IDF
정규식 검사기 LUIS(Language Understanding Service)에 포함됩니다. LUIS를 대체하는 CLU(Conversational Language Understanding)에서는 지원되지 않습니다.
날짜 일치자 DateTime 인식기를 통해 LUIS 및 CLU에서 가능
청커(Chunker)

높은 수준의 NLP 기능

기능 Spark NLP를 사용하는 Spark 서비스(Azure Databricks, Azure Synapse Analytics, Azure HDInsight) Azure Cognitive Services
맞춤법 검사
요약
질문 답변
감정 감지
감정 감지 오피니언 마이닝 지원
토큰 분류 예, 사용자 지정 모델을 통해
텍스트 분류 예, 사용자 지정 모델을 통해
텍스트 표현
NER 예- 텍스트 분석은 NER 집합을 제공하고 사용자 지정 모델은 엔터티 인식에 있습니다.
엔터티 인식 예, 사용자 지정 모델을 통해
언어 감지
영어 이외의 다국어 지원 예, 200개 이상의 언어를 지원합니다. 예, 97개 이상의 언어를 지원합니다.

Azure에서 Spark NLP 설정

Spark NLP를 설치하려면 다음 코드를 사용하되 <version>을 최신 버전 번호로 바꾸세요. 자세한 내용은 Spark NLP 설명서를 참조하세요.

# Install Spark NLP from PyPI.
pip install spark-nlp==<version>

# Install Spark NLP from Anacodna or Conda.
conda install -c johnsnowlabs spark-nlp

# Load Spark NLP with Spark Shell.
spark-shell --packages com.johnsnowlabs.nlp:spark-nlp_<version>

# Load Spark NLP with PySpark.
pyspark --packages com.johnsnowlabs.nlp:spark-nlp_<version>

# Load Spark NLP with Spark Submit.
spark-submit --packages com.johnsnowlabs.nlp:spark-nlp_<version>

# Load Spark NLP as an external JAR after compiling and building Spark NLP by using sbt assembly.
spark-shell --jars spark-nlp-assembly-3 <version>.jar

NLP 파이프라인 개발

NLP 파이프라인의 실행 순서에 대해 Spark NLP는 기존 Spark ML 기계 학습 모델과 동일한 개발 개념을 따릅니다. 그러나 Spark NLP는 NLP 기술을 적용합니다.

Diagram that shows N L P pipeline stages, such as document assembly, sentence detection, tokenization, normalization, and word embedding.

Spark NLP 파이프라인의 핵심 구성 요소는 다음과 같습니다.

  • DocumentAssembler: Spark NLP에서 처리할 수 있는 형식으로 변경하여 데이터를 준비하는 변환기입니다. 이 단계는 모든 Spark NLP 파이프라인의 진입점입니다. DocumentAssembler는 String 열 또는 Array[String]을 읽을 수 있습니다. setCleanupMode를 사용하여 텍스트를 전처리할 수 있습니다. 기본적으로 이 특성은 해제되어 있습니다.

  • SentenceDetector: 지정된 접근 방식을 사용하여 문장 경계를 검색하는 주석입니다. 이 주석은 Array에서 추출된 각 문장을 반환할 수 있습니다. explodeSentences를 true로 설정한 경우 각 문장을 다른 행으로 반환할 수도 있습니다.

  • Tokenizer: 원시 텍스트를 토큰 또는 단어, 숫자 및 기호와 같은 단위로 구분하고 TokenizedSentence 구조체에서 토큰을 반환하는 주석입니다. 이 클래스는 맞춤되지 않습니다. Tokenizer에 맞는 경우 내부 RuleFactory는 입력 구성을 사용하여 토큰화 규칙을 설정합니다. Tokenizer는 개방형 표준을 사용하여 토큰을 식별합니다. 기본 설정이 요구 사항을 충족하지 않는 경우 Tokenizer를 사용자 지정하는 규칙을 추가할 수 있습니다.

  • Normalizer: 토큰을 정리하는 주석입니다. Normalizer에는 스템이 필요합니다. Normalizer는 정규식과 사전을 사용하여 텍스트를 변환하고 지저분한 문자를 제거합니다.

  • WordEmbeddings: 토큰을 벡터에 매핑하는 조회 주석입니다. setStoragePath를 사용하여 포함에 대한 사용자 지정 토큰 조회 사전을 지정할 수 있습니다. 사전의 각 줄에는 공백으로 구분된 토큰과 해당 벡터 표현이 포함되어야 합니다. 사전에서 토큰을 찾을 수 없는 경우 결과는 동일한 차원의 0 벡터입니다.

Spark NLP는 MLflow가 기본적으로 지원하는 Spark MLlib 파이프라인을 사용합니다. MLflow는 기계 학습 수명 주기를 위한 오픈 소스 플랫폼입니다. 해당 구성 요소는 다음과 같습니다.

  • Mlflow 추적: 실험을 기록하고 결과를 쿼리하는 방법을 제공합니다.
  • MLflow 프로젝트: 모든 플랫폼에서 데이터 과학 코드를 실행할 수 있습니다.
  • MLflow 모델: 다양한 환경에 모델을 배포합니다.
  • 모델 레지스트리: 중앙 리포지토리에 저장하는 모델을 관리합니다.

MLflow는 Azure Databricks에 통합됩니다. 다른 Spark 기반 환경에 MLflow를 설치하여 실험을 추적하고 관리할 수 있습니다. MLflow 모델 레지스트리를 사용하여 프로덕션 목적으로 모델을 사용 가능하게 만들 수도 있습니다.

참가자

Microsoft에서 이 문서를 유지 관리합니다. 원래 다음 기여자가 작성했습니다.

주요 작성자:

다음 단계