[ML] 자연어 처리, National Language Processing (1) – 데이터 전처리

NLP(Nationial Processing), 텍스트 분석(Text Analytics)

머신러닝이 보편화되며 NLP와 텍스트 분석를 비교하는 것이 무의미해지고 있지만, 굳이 비교하자면 다음과 같습니다. 

  • NLP는 머신이 인간의 언어를 이해하고 해석하는데 중점을 두고 발전된 기술
    • 기계 번역, 질의응답 시스템 등에 사용됨
  • 텍스트 분석은 텍스트 마이닝(Text Mining) 이라고도 불리며 비정형 텍스트에서 의미 있는 정보를 추출하는데 중점을 두고 발전된 기술

주요 기술 영역

  • 텍스트 분류 (Text Classification)
    • 문서가 특정 분류 또는 카테고리에 속하는 지 예측
    • 지도 학습을 사용하며, 기사 카테고리 분류 및 스팸 메일 검출 프로그램에 활용
  • 감정 분석 (Sentiment Analysis)
    • 텍스트에서 나타나는 감정을 분석하는 기법
    • 소셜 미디어 감정 분석, 영화나 제품의 리뷰 긍정, 부정 분석등에 사용되는 기법
    • 텍스트 분석에서 가장 활발하게 사용되는 분야
  • 텍스트 요약 (Summarization)
    • 텍스트 내 주요 주제나 중심 사상을 추출하는 기법
    • 토픽 모델링(Topic Modeling)에 사용
  • 텍스트 군집화(Clustering)와 유사도 측정
    • 비슷한 유형의 문서를 모아 군집화를 수행하는 기법

텍스트 분석 프로세스


텍스트 전처리 -> 피처 추출 및 벡터화 -> ML 모델 수립 및 학습


  • 텍스트 전처리 : 대/소문자 변경, 특수문자 삭제 등의 클렌징 작업
  • 피처 추출 및 벡터화 : 전처리된 텍스트에서 피처 추출 및 벡터 값 할당 ( 대표적으로 BOW, Word2Vec 방법 사용)

파이썬 기반 NLP, 텍스트 분석 패키지


  • NLTK(National Language Toolkit for Python)
    • 파이썬의 가장 대표적인 NLP 패키지
    • NLP의 거의 모든 영역 커버
    • 많은 NLP 패키지가 NLTK의 영향을 받아 작성
    • 수행 속도 측면에서 아쉬운 부분이 있어 대량 데이터셋에서 제대로 활용되지 못함
  • Gensim
    • 토픽 모델링 분야에서 가장 두각을 나타내는 패키지
  • SpaCy
    • 뛰어난 수행 성능으로 최근 주목받는 패키지

텍스트 전처리


분석하고자 하는 데이터를 사용 용도에 맞춰 토큰화, 클렌징, 정제하는 작업이 필요하며 이러한 작업은 텍스트 분석에서 매우 중요합니다.

클렌징 (Cleansing)

텍스트 분석에 방해가 되는 불필요한 문자, 기호 등을 사전에 제거하는 작업

  • HTML, XML 태그나 특정 기호 삭제

토큰화 (Tokenization)

토큰화는 문서에서 문장을 분리하는 문장 토큰화와 문장에서 단어를 분리하는 단어 토큰화로 나눌 수 있습니다.

  • 문장 토큰화
    • 일반적으로 문장의 마침표(.), 개행문자 등 문장의 마지막을 뜻하는 기호에 따라 분리
  • 단어 토큰화
    • 기본적으로 공백, 콤마(,), 마침표(.) 등으로 토큰화 수행

입력 : What makes us different is making the connections that digital Innovation demands!

예를 들면, 위의 입력에 따른 토큰화 작업의 결과는 다음과 같습니다.

출력 : “What”, “makes”, “us” “different”, “is”, “making”, “the”, “connections”, “that”, “digital”, “Innovation”, “demands”

위 예제의 경우 공백을 기준으로 토큰화를 진행하고 특수문자(‘!’)를 제거한 가장 간단한 토큰화 및 클렌징 작업입니다.

영어의 경우 띄어쓰기(공백) 토큰화를 수행하면 대부분 단어로 분리가 되지만, 한국어의 경우 띄어쓰기를 통한 단어 분리가 쉽지 않기 때문에 한국어 NLP는 영어에 비해 어려움이 많이 존재하며, 자세한 내용은 다음 글에서 다루도록 하겠습니다.

토큰화의  고려 사항

토큰화는 간단하게 특수문자를 제거하고 공백으로 분류하는 작업만으로 끝나지 않습니다. 토큰화를 진행하다보면 예상하지 못한 경우가 발생하기때문에 토큰화의 기준을 잘 정해야합니다.

  • 특수문자 처리
    • 모든 특수문자를 삭제하는 방법을 좋지 않습니다.
    • $‘의 경우 가격을 표시하는데 사용되고, ‘/‘의 경우 20/2/16 과 같은 날짜 구분하는 의미를 가지고 있기 때문에 단순 삭제하는  방식은 좋지 않습니다.

사용 용도에 따라 결과에 영향이 없는 기준으로 토큰화를 진행하는 것이 중요합니다.

  • 줄임말 및 단어 내 띄어쓰기
    • apostrophe(‘)의 경우 단어를 줄이는데 사용됩니다. we’re의 경우 we are의 줄임말로 표현됩니다.
    • 띄어쓰기를 기준으로 토큰화를 진행 할 때 New York은 하나의 단어이지만 “New”, “York”으로 분리될 것입니다. 토큰화 작업 시 New York을 한 단어로 인식할 수 있는 토큰화 능력이 필요합니다.

스톱 워드(Stop Word) 제거

  • 분석에 큰 의미가 없는 단어를 지칭 (is, the ,a will 등 문장을 구성하는 필수 문법이지만 문맥적으로 큰 의미가 없는 단어)
  • 스톱 워드를 사전에 제거하지 않으면 그 빈번함으로 인해 중요한 단어로 인지될 수 있습니다.

언어 별로 이러한 스톱 워드가 목록화 되어 있습니다.

NLTK의 경우 파이썬 환경에서 아래와 같은 코드로 확인 가능합니다.


import nltk

nltk.download(‘stopwords’)

print(‘영어 stop word 개수 :’, len(nltk.corpus.stopwords.words(‘english’)))

print(nltk.corpus.stopwords.words(‘english’)

출력 결과

영어 stop words 개수 : 179

[‘i’, ‘me’, ‘my’, ‘myself’, ‘we’, ‘our’ ‘ours ……. ]


텍스트 전처리 과정은 전체 NLP 성능에 큰 영향을 미치기 때문에 사용 용도에 맞는 기준을 정하는 것이 중요하며, 해당 기준에 맞는 라이브러리를 활용하거나, 직접 전처리 도구를 개발 할 수 있는 능력이 필요합니다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다