Oracle Cloud Free Tier

자연어 처리를 무료로 적용하여 애플리케이션을 구축, 테스트, 배포할 수 있습니다.

자연어 처리란?

자연어 처리(NLP)의 정의

자연어 처리(NLP)는 컴퓨터가 인간의 언어를 이해, 생성, 조작할 수 있도록 해주는 인공 지능(AI)의 한 분야입니다. 자연어 처리는 자연어 텍스트 또는 음성으로 데이터를 상호 연결하는 것으로 '언어 입력(language in)'이라고도 합니다. 대부분의 소비자는 자신도 모르는 사이에 NLP와 상호 작용을 하고 있습니다. 예를 들어, NLP는 Oracle Digital Assistant(ODA)나 Siri, Cortana, Alexa와 같은 가상 도우미의 핵심 기술입니다. 이러한 가상 도우미에게 질문을 하면 NLP를 통해 사용자의 요청을 이해할 수 있을 뿐만 아니라 자연어로 응답할 수 있습니다. NLP는 서면 텍스트와 음성 모두에 적용되며 모든 인간 언어에 적용될 수 있습니다. NLP 기반 툴의 또다른 예로는 웹 검색, 스팸 메일 필터링, 텍스트 또는 음성 자동 번역, 문서 요약, 감정 분석, 문법/철자 검사 등이 있습니다. 예를 들어 일부 이메일 프로그램은 메시지 내용을 바탕으로 해당 메시지에 대한 적절한 회신 내용을 자동으로 제안할 수 있는데, 바로 NLP를 사용하여 메시지를 읽고, 분석하고, 응답하는 것입니다.

NLP와 거의 유사하게 쓰이는 몇 가지 용어들도 있습니다. 자연어 이해(NLU)와 자연어 생성(NLG)은 각각 컴퓨터를 사용하여 인간의 언어를 이해하고 생성하는 것을 의미합니다. NLG의 경우 일어난 일에 대한 구두 설명을 제공할 수 있는데 이는 '그래픽 문법'이라는 개념을 사용하여 의미 있는 정보를 텍스트로 요약하는 것으로 '언어 출력(language out)'이라고도 합니다.

NLU는 사실상 NLP를 의미하며 컴퓨터가 모든 인간 언어의 구조와 의미를 이해하여 개발자와 사용자가 자연스러운 문장을 사용하여 컴퓨터와 상호 작용하고 소통할 수 있도록 합니다. 전산언어학(CL)은 인간 언어의 전산적 측면을 연구하는 과학 분야이며, NLP는 인간 언어를 이해, 생성 또는 조작하는 전산적 인공물 구축과 관련된 공학 분야입니다.

NLP에 대한 연구는 1950년대 디지털 컴퓨터가 발명된 직후부터 시작되었으며 NLP는 언어학과 인공 지능(AI)을 모두 활용합니다. 그러나 최근 몇 년간 NLP 연구에서 이루어진 중대한 발전의 원동력은 데이터로부터 배우고 일반화하는 시스템을 개발하는 AI의 한 분야인 머신러닝이었습니다. 딥 러닝은 대규모 데이터 세트에서 매우 복잡한 패턴을 학습할 수 있는 일종의 머신러닝으로 웹에서 가져온 데이터 세트에서 자연어의 복잡성을 학습하는데 매우 적합니다.

자연어 처리의 활용

반복 업무 자동화: NLP로 구동되는 챗봇은 오늘날 사람이 하는 수많은 반복 작업을 처리할 수 있으며, 이를 통해 직원들이 보다 도전적이고 흥미로운 작업을 수행할 수 있도록 해줍니다. 예를 들어, 챗봇과 디지털 도우미는 다양한 사용자 요청을 인식한 다음 이를 기업 데이터베이스의 적절한 항목과 매칭하여 사용자에 대한 적절한 응답을 공식화할 수 있습니다.

검색 효율 향상: NLP는 문맥에 기반하여 단어 의미를 명확히 하고(예: '캐리어'는 생체의학과 산업 분야의 문맥에서 다른 의미를 가짐), 동의어를 매칭시키고(예: 'automobile' 검색 시 'car'가 언급된 문서 검색), 형태학적 변형을 고려(영어가 아닌 언어 질의와 관련하여 중요함)하여 문서에 대한 키워드 일치 검색 및 FAQ 검색 효율을 개선할 수 있습니다. 또한 효과적인 NLP 기반 학술 검색 시스템은 의사, 변호사 및 기타 전문가의 관련 최첨단 연구에 대한 접근성을 크게 향상시킬 수 있습니다.

검색 엔진 최적화: NLP는 검색을 분석하여 콘텐츠를 최적화함으로써 기업의 온라인 검색 순위를 높이는데 유용한 도구입니다. 검색 엔진은 NLP를 사용하여 결과의 ​​순위를 매기기 때문에 이러한 기술을 효과적으로 사용하는 방법을 알면 경쟁업체보다 쉽게 ​​순위에 들 수 있으며 궁극적으로 비즈니스에 대한 가시성이 향상됩니다.

대규모 문서 컬렉션 분석 및 정리: 문서 클러스터링 및 주제 모델링과 같은 NLP 기술은 기업 보고서나 뉴스 기사 또는 과학 문서와 같은 대규모 문서 컬렉션의 콘텐츠 다양성 파악 작업을 단순화시켜 줍니다. 이러한 기술은 법적 증거 수집 목적으로 자주 사용됩니다.

소셜 미디어 분석: NLP는 고객의 리뷰와 소셜 미디어 댓글을 분석하여 방대한 양의 정보를 더 잘 파악할 수 있도록 해줍니다. 감정 분석 기술은 소셜 미디어의 댓글 스트림에서 긍정적인 댓글과 부정적인 댓글을 식별하여 고객의 감정을 실시간으로 직접 측정하는 것으로 고객 만족도와 매출 증가와 같은 막대한 수익으로 이어질 수 있습니다.

시장 통찰력: NLP를 통해 비즈니스 고객의 언어를 분석하면 고객이 원하는 것을 보다 잘 파악하고 고객과의 소통 방법에 대한 더 나은 아이디어를 얻을 수 있습니다. 속성 중심(Aspect-oriented) 감정 분석은 소셜 미디어에서 특정 속성이나 제품과 관련된 감정(예: '키보드는 훌륭하지만 화면이 너무 어둡다')을 감지하여 제품 디자인과 마케팅을 위한 직접 실행 가능한 정보를 제공합니다.

콘텐츠 조정t: 사용자 또는 고객 의견이 대량으로 접수되는 비즈니스의 경우 NLP를 사용하여 단어뿐만 아니라 어조와 의도까지 분석함으로써 기업이 전하는 메시지의 품질과 정중함이 유지될 수 있도록 내용을 조정할 수 있습니다.

자연어 처리 기술이 사용되는 분야

NLP는 광범위한 비즈니스 프로세스 중에서도 특히 이메일, 설문조사, 소셜 미디어 대화 등과 같은 대량의 비정형 텍스트를 포함하는 프로세스를 단순화하고 자동화합니다. 기업은 NLP를 통해 데이터를 보다 잘 분석하여 올바른 결정을 내릴 수 있습니다. 다음은 실제 NLP가 활용되는 몇 가지 예입니다.

  • 의료 서비스: 전 세계의 의료 시스템이 전자의무기록(electronic medical records)으로 전환됨에 따라 방대한 양의 비정형 데이터에 직면하게 되었습니다. 이러한 상황에서 NLP를 사용하여 의료 기록을 분석하고 새로운 통찰력을 얻을 수 있습니다.
  • 법률: 변호사들은 사건 준비를 위해 많은 양의 문서를 검토하고 특정 사건 관련 자료를 찾는데 몇 시간을 소비해야 하는 경우가 많습니다. NLP 기술은 법적 증거 수집 프로세스를 자동화하여 대량의 문서를 검색함으로써 시간을 단축하고 인적 오류를 줄일 수 있습니다.
  • 금융: 금융계는 매우 급박하게 움직이며 경쟁 우위를 선점하는 것이 중요합니다. 금융 분야의 거래자는 NLP 기술을 사용하여 기업 문서 및 보도 자료에서 정보를 자동으로 마이닝하여 포트폴리오 및 거래 결정과 관련된 정보를 추출할 수 있습니다.
  • 고객 서비스: 많은 대기업들이 기본적인 고객 문의와 정보 요청(예: FAQ)에 대한 답변은 가상 도우미나 챗봇의 도움을 받고 필요한 경우 복잡한 질문만 사람에게 전달하도록 하고 있습니다.
  • 보험: 대형 보험사들은 보험 청구 문서 및 보고서 검토에 NLP를 활용하여 업무 수행 방식을 간소화하고 있습니다.

NLP 기술 개요

NLP를 위한 머신러닝 모델: 앞서 언급했듯이 현재의 NLP는 머신러닝이라는 AI 접근 방식에 크게 의존하고 있습니다. 머신러닝은 데이터 세트에 있는 예들을 일반화하여 예측을 수행하는데 이러한 데이터 세트를 학습 데이터라고 하며, 머신러닝 알고리즘은 이 학습 데이터에 대한 훈련을 통해 목표 작업을 수행하는 머신러닝 모델을 생성합니다.

예를 들어 감정 분석 훈련 데이터는 문장과 그 문장이 지닌 감정(예: 긍정적,부정적 또는 중립적 감정)으로 구성됩니다. 머신러닝 알고리즘은 이러한 데이터 세트를 읽고 문장이 입력되면 그 문장의 감정을 반환하는 모델을 생성합니다. 이렇게 문장이나 문서가 입력되면 해당 입력값 대한 레이블을 반환하는 종류의 모델을 문서 분류 모델이라고 합니다. 또한 문서 분류기를 사용하여 언급된 주제(예: 스포츠, 금융, 정치 등)별로 문서를 분류할 수도 있습니다.

문서의 개체(entity)를 인식하고 분류하는데 사용되는 또 다른 모델도 있습니다. 이 모델은 문서의 각 단어에 대해 해당 단어가 개체 언급의 일부인지 여부와 그렇다면 어떤 개체가 관련되어 있는지를 예측합니다. 예를 들어, '어제 28달러에 거래된 XYZ사의 주식'이라는 문장에서 'XYZ사'는 회사 개체, '28달러'는 통화 금액, '어제'는 날짜입니다. 개체 인식을 위한 훈련 데이터는 텍스트의 모음이며 각 단어에는 해당 단어가 참조하는 개체의 종류가 표시됩니다. 이렇게 입력값의 각 단어에 대해 레이블을 생성하는 유형의 모델을 시퀀스 레이블링(Sequence Labeling Model)이라고 합니다.

시퀀스 투 시퀀스(Sequence-to-sequence) 모델은 NLP에서 사용되는 모델 제품군에 가장 최근에 추가되었습니다. 시퀀스 투 시퀀스(또는 seq2seq) 모델은 전체 문장이나 문서를 입력값으로 사용하지만 (문서 분류기에서와 같이) 문장이나 다른 시퀀스(예: 컴퓨터 프로그램)를 출력값으로 생성합니다. (문서 분류기는 단일 기호만 출력값으로 생성) seq2seq 모델의 활용 사례에는 기계 번역도 포함되는데 영어 문장을 입력값으로 사용하고 프랑스어 문장을 출력값으로 반환하는 경우, 문서 요약(이 경우 출력값은 입력값의 요약), 의미 구문 분석(입력값은 영어로 된 질의 또는 요청, 출력값은 해당 요청을 실행하는 컴퓨터 프로그램) 경우 등이 그 예입니다.

딥 러닝, 사전 학습 모델, 전이 학습: 딥 러닝은 NLP에서 가장 널리 사용되는 유형의 머신러닝입니다. 1980년대에 연구자들은 수많은 원시 머신러닝 모델을 하나의 네트워크로 결합한 신경망을 개발했는데 단순 머신러닝 모델을 뇌에 비유하여 '뉴런'이라고 부르곤 합니다. 이러한 뉴런은 계층적으로 배열되어 있으며 다층으로 구성된 네트워크를 심층 신경망이라고 합니다. 딥 러닝은 심층 신경망을 사용하는 머신러닝입니다.

일반적으로 심층 신경망은 그 복잡성으로 인해 훈련에 많은 학습 데이터가 필요하고 이를 처리하기 위한 높은 컴퓨팅 성능과 많은 시간이 필요합니다. 최신 심층 신경망 NLP 모델은 위키피디아의 모든 내용과 웹에서 스크랩한 데이터와 같은 다양한 소스에서 훈련됩니다. 훈련 데이터의 크기는 10GB 이상일 수 있으며 고성능 클러스터에서 심층 신경망을 훈련하려면 일주일 이상이 소요될 수 있습니다. (연구 결과 큰 데이터 세트에서 더 심층적인 모델을 훈련할수록 성능이 훨씬 더 높아진다는 사실이 확인됐으며, 이에 최근에는 점점 더 방대한 데이터셋에서 더 큰 모델을 훈련하려는 경쟁이 벌어지고 있습니다.)

심층 신경망에 요구되는 방대한 데이터와 컴퓨팅 성능은 그 유용성을 심각하게 제한하는 듯 합니다. 그러나 전이 학습을 통해 기존에 훈련된 심층 신경망을 추가적으로 훈련시키면 훨씬 더 적은 훈련 데이터와 컴퓨팅 성능으로도 새로운 작업을 수행하도록 할 수 있습니다. 가장 간단한 유형의 전이 학습을 미세 조정이라고 하는데 먼저 대규모의 일반 데이터 세트(예: 위키백과)에서 모델을 교육한 다음 실제 대상 작업으로 레이블이 지정된 훨씬 작은 작업별 데이터 세트에서 모델을 추가로 교육("미세 조정")하는 방식으로 구성됩니다. 놀랍게도 미세 조정 데이터 세트는 수백 또는 수십 개의 학습 사례만 포함된 매우 작은 규모일 수 있으며, 단일 CPU에서 미세 조정 훈련 시 몇 분밖에 걸리지 않습니다. 따라서 전이 학습을 사용하면 기업 전체에 딥 러닝 모델을 쉽게 배포할 수 있습니다.

현재는 다양한 언어와 데이터 세트, 사전 훈련 작업의 조합으로 훈련된 사전 학습 딥 러닝 모델을 제공하는 공급업체의 에코시스템이 구축되어 있으며 이러한 사전 학습 모델을 다운로드하여 다양한 목표 작업에 맞게 미세 조정할 수 있습니다.

NLP 전처리 기술의 예

토큰화: 토큰화는 원시 텍스트(예: 문장 또는 문서)를 단어 또는 하위 단어 조각과 같은 토큰 시퀀스로 분할하는 것을 말하며 NLP 처리 파이프라인의 첫 번째 단계인 경우가 많습니다. 토큰은 일반적으로 이후의 처리 과정에서 원자 단위로 처리되는 반복 텍스트 시퀀스로 단어, 형태소(예: 영어의 'un-'과 같은 접두사 또는 '-ing'과 같은 접미사)라고 하는 하위 단어 또는 개별 문자일 수 있습니다.

단어 주머니 모델(Bag-of-words models): 단어 주머니 모델은 문서를 정렬되지 않은 토큰 또는 단어 모음으로 취급합니다.(주머니는 각 요소가 출현하는 횟수를 추적한다는 점을 제외하면 세트와 같음) 단어 주머니 모델은 단어의 순서를 완전히 무시하기 때문에 '개가 사람을 문다(dog bites man)'와 '사람이 개를 문다(man bites dog)' 같은 문장을 혼동하지만 검색 엔진과 같은 대규모 정보 검색 작업에서 효율성을 위해 종종 사용됩니다. 긴 문서를 사용하면 최첨단에 가까운 결과를 얻을 수 있습니다.

불용어(Stop word) 제거: A '불용어'는 이후 처리 과정에서는 무시되는 토큰을 말하며, 일반적으로 'a'이나 'an' 또는 'an'과 같이 짧고 자주 사용되는 단어입니다. 단어 주머니 모델과 검색 엔진은 데이터베이스 내의 처리 시간과 저장 공간을 줄이기 위해 불용어를 무시하는 경우가 많습니다. 한편 심층 신경망은 일반적으로 단어 순서를 고려하며(즉, 단어 주머니 모델이 아님) 불용어가 미묘한 의미의 차이를 전달할 수 있기 때문에 제거하지 않습니다(예: 'the package was lost'와 'a package is lost'는 불용어를 제거하면 남는 단어는 동일하지만 문장의 의미는 다름)

어간 추출(Stemming) 및 표제어 추출(Lemmatization): 형태소는 뜻을 가진 가장 작은 말의 단위이며 일반적으로 단어보다 작습니다. 예를 들어, 'revisited'는 접두사 're-', 어간 'visit', 과거형 접미사 '-ed'로 구성됩니다. 어간 추출 및 표제어 추출은 단어를 어간 형태(예: 'revisit' + 과거형).로 매핑하는 것을 말하는데 사전 딥 러닝 모델에서는 중요한 단계이지만 딥 러닝 모델은 일반적으로 훈련 데이터에서 이러한 규칙성을 학습하므로 명시적인 어간 또는 형태소 추출 단계는 필요하지 않습니다.

품사 태깅 및 구문 분석: 품사(PoS, Part-of-speech) 태깅은 각 단어에 해당하는 품사(예: 명사, 동사, 형용사 등)로 레이블을 지정하는 프로세스입니다. 구문 분석기는 단어가 어떻게 결합되어 구와 절 그리고 전체 문장을 형성하는지 식별합니다. PoS 태깅은 시퀀스 레이블링 작업이고, 구문 분석은 확장된 종류의 시퀀스 레이블링 작업이며, 심층 신경망은 PoS 태깅과 구문 분석 모두를 위한 최첨단 기술입니다. 딥 러닝 이전에는 PoS 태깅과 구문 분석이 문장 이해에 필수적인 단계였지만 현재의 딥 러닝 NLP 모델은 일반적으로 PoS 또는 구문 정보에서 얻을 수 있는 이익(있는 경우)이 미미하므로 딥 러닝 NLP에서는 PoS 태깅이나 구문 분석이 널리 사용되지 않습니다.

NLP 프로그래밍 언어

파이썬(Python):

일반적으로 NLP 라이브러리 및 툴킷은 Python에서 사용할 수 있으며, 이러한 이유로 대부분의 NLP 프로젝트는 Python에서 개발되었습니다. Python의 대화형 개발 환경은 새로운 코드를 쉽게 개발하고 테스트할 수 있도록 해줍니다.

자바(Java) 및 C++:

다량의 데이터를 처리하는 경우 이러한 작업을 위한 보다 효율적인 코드를 지원할 수 있는 C++와 Java가 선호되는 경우가 많습니다.

NLP 라이브러리 및 개발 환경

다음은 몇 가지 인기 있는 NLP 라이브러리의 예입니다.

텐서플로(TensorFlow)와 파이토치(PyTorch): 가장 인기 있는 두 가지 딥 러닝 툴킷으로 연구 및 상업적 목적으로 자유롭게 사용할 수 있습니다. 다양한 언어를 지원하지만 기본 언어는 Python입니다. 대규모의 사전 구축된 구성 요소 라이브러리가 함께 제공되므로 매우 정교한 딥 러닝 NLP 모델도 이러한 구성 요소를 함께 연결하기만 하면 되는 경우가 많습니다. 또한 그래픽 처리 장치(GPU) 가속기가 장착된 시스템 클러스터 같은 고성능 컴퓨팅 인프라를 지원하며 훌륭한 설명서와 튜토리얼을 포함하고 있습니다.

앨런NLP(AllenNLP): PyTorch 및 Python으로 구현된 고급 NLP 구성 요소(예: 단순 챗봇)의 라이브러리로 훌륭한 설명서를 갖추고 있습니다.

허깅페이스(HuggingFace): 이 회사는 수백 가지의 사전 학습 딥 러닝 NLP 모델과 TensorFlow 및 PyTorch의 '플러그 앤드 플레이(plug-and-play)' 소프트웨어 툴킷을 배포하여 다양한 사전 학습 모델이 특정 작업에서 얼마나 잘 수행되는지 개발자가 빠르게 평가할 수 있도록 합니다.

스파크 NLP(Spark NLP): Spark NLP는 Python, Java, Scala 프로그래밍 언어를 위한 고급 NLP용 오픈 소스 텍스트 처리 라이브러리입니다. 자연어 처리 파이프라인을 위한 응용 프로그래밍 인터페이스(API)를 제공하는 것을 목표로 하며, 사전 학습 신경망 모델과 파이프라인, 임베딩을 제공할 뿐만 아니라 맞춤형 모델 학습을 지원합니다.

스페이시 NLP(SpaCy NLP): SpaCy는 Python의 고급 NLP를 위한 무료 오픈 소스 라이브러리이로 대량의 텍스트를 처리 및 이해할 수 있는 애플리케이션의 구축에 도움을 줄 수 있도록 특별히 설계되었습니다. SpaCy는 매우 직관적인 것으로 알려져 있으며 일반적인 NLP 프로젝트에 필요한 많은 작업을 처리할 수 있습니다.

한마디로 자연어 처리는 검색 엔진, 챗봇, 추천 시스템, 음성 텍스트 변환(speech-to-text) 시스템과 같은 광범위한 분야의 새로운 제품에 연료를 공급하는 인공 지능 개발의 흥미로운 영역입니다. 컴퓨터의 휴먼 인터페이스가 버튼, 양식, 도메인별 언어로부터 계속 멀어짐에 따라 자연어 처리 개발에 대한 수요는 계속 증가할 것이며, 이에 Oracle Cloud Infrastructure는 NLP용으로 성능 최적화된 컴퓨팅 형태와 도구를 통해 온프레미스 성능을 제공하기 위해 노력하고 있습니다. Oracle Cloud Infrastructure는몇 분 안에 배포하여 NLP 실험을 실시할 수 있는 GPU 형태의 배열을 제공합니다.