221004

AIVILLAIN·2022년 10월 4일
0

오공완

목록 보기
16/25

텍스트 분석

실습 코드

NLP는 머신이 인간의 언어를 이해하고 해석하는 데 중점을 두고 기술이 발전
텍스트 마이닝이라고도 불리는 텍스트 분석은 비정형 텍스트에서 의미 있는 정보를 추출하는 것에 중점을 두고 기술이 발전

NLP 영역에는 기계 번역, 질의응답 시스템 등
NLP는 텍스트 분석을 향상하게 하는 기반 기술이라고 볼 수 있음
NLP 기술 발전에 따라 텍스트 분석도 정교하게 발전할 수 있었음
NLP와 텍스트 분석 발전 근간에는 머신러닝이 있음
과거 텍스트를 구성하는 언어적인 룰이나 업무의 룰에 따라 텍스트를 분석하는 룰 기반 시스템에서 머신러닝의 텍스트 데이터를 기반으로 모델 학습, 예측하는 기반으로 변경되면서 많은 기술적 발전이 가능해짐

텍스트 분석은 머신러닝, 언어 이해, 통계 등을 활용하여 모델을 수립하고 정보를 추출하여 비즈니스 인텔리전스나 예측 분석 등 분석 작업을 주로 수행

  • 텍스트 분류
    문서가 특정 분류 또는 카테고리에 속하는 것을 예측하는 기법
    지도학습
  • 감성 분석
    텍스트에서 나타나는 감정/판단/믿음/의견/기분 등 주관적인 요소 분석
    지도학습 뿐만 아니라 비지도학습을 이용하여 적용할 수 있음
  • 텍스트 요약
    중요한 주제나 중심 사상 추출
    토픽 모델링
  • 텍스트 군집화와 유사도 측정
    비슷한 유형의 문서에 대해 군집화를 수행하는 기법
    텍스트 분류를 비지도학습으로 수행하는 방법의 일환

텍스트 분석

비정형 데이터인 텍스트를 분석하는 것
이전 적용해본 ML 모델은 주어진 정형 데이터 기반에서 모델을 수립하고 예측
머신러닝 알고리즘은 숫자형의 피처 기반 데이터만 입력받을 수 있기 때문에 비정형 텍스트를 어떻게 피처 형태로 추출하고 추출된 피처에 의미있는 값을 부여하는 것이 중요

텍스트를 word(혹은 word 일부분) 기반의 다수 피처로 추출하고 이 피처에 단어 빈도수와 같은 숫자 값을 부여하면 텍스트는 단어의 조합인 벡터값으로 표현될 수 있음 (피처 벡터화, 피처 추출) (Feature Vectorization, Extraction)

대표적인 텍스트를 피처 벡터화해서 변환하는 방법은 BOW, Word2Vec 등이 있음

텍스트 분석 프로세스

  1. 텍스트 사전 준비작업(텍스트 전처리)
    텍스트를 피처로 만들기 전 클렌징, 대/소문자 변경, 특수문자 삭제 등 클렌징
    단어 등의 토큰화
    의미 없는 단어(stopword) 제거
    어근 추출(Stemming/Lemmatization) 등의 텍스트 정규화
  2. 피처 벡터화/추출
    사전 준비로 가공된 텍스트에서 피처 추출 및 벡터값 할당
    BOW, Word2Vec
    BOW에는 Count 기반, TF-IDF 기반 벡터화가 있음
  3. ML 모델 수립 및 학습/예측/평가

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

텍스트 분석을 위해 쉽고 편하게 텍스트 사전 정제 작업, 피처 벡터화/추출, ML 모델 지원하는 라이브러리들이 있음 (대부분 영어 기반)

  • NLTK(National Language Toolkit for Python)
    파이썬의 가장 대표적인 NLP 패키지
    방대한 데이터 세트와 서브 모듈을 가지고 있으며 NLP의 거의 모든 영역 커버
    수행 속도 측면에 아쉬움이 있어 대량 데이터 기반에서는 제대로 활용되지 못하고 있음
  • Gensim
    토픽 모델링 분야에서 두각을 나타냄
    Word2Vec 구현 등 제공
    SpaCy와 함께 가장 많이 사용되는 NLP 패키지
  • SpaCy

사이킷런은 머신러닝 위주 라이브러리로 NLP 패키지에 특화된 라이브러리는 가지고 있지 않음

텍스트 전처리 (정규화)

텍스트 자체를 바로 피처로 변경할 순 없음
이를 위해 사전에 텍스트를 가공하는 준비 작업 필요

  • 클렌징
  • 토큰화
  • 필터링/스톱워드제거/철자수정
  • Stemming
  • Lemmatization

클렌징

불필요한 문자, 기호 등 사전에 제거
HTML, XML 태그, 특정 기호 등

텍스트 토큰화

문장을 분리하는 문장 토큰화, 문장에서 단어를 토큰으로 분리하는 단어 토큰화로 나눌 수 있음

문장 토큰화

문장의 마침표, 개행문자 등 문장의 마지막을 뜻하는 기호에 따라 분리
정규 표현식에 따른 문장 토큰화도 가능
NLTK에서 자주 사용되는 sent_tokenizer

단어 토큰화

공백, 콤마, 마침표, 개행문자 등으로 단어를 분리하지만, 정규 표현식을 이용해 다양한 유형으로 토큰화 수행 가능
마침표나 개행문자 같이 문장을 분리하는 구분자를 이용해 단어를 토큰화할 수 있으므로 Bag of Word와 같이 단어의 순서가 중요하지 않은 경우 문장 토큰화를 사용하지 않고 단어 토큰화만 사용해도 충분
문장 토큰화는 각 문장이 가지는 시맨틱적인 의미가 중요한 요소로 사용될 때 사용

문장을 단어별로 하나씩 토큰화 할 경우 문맥적인 의미는 무시될 수 밖에 없음
이런 문제를 조금이라도 해결해 보고자 도입된 것이 n-gram
연속된 n개의 단어를 하나의 토큰 단위로 분리하는 것

스톱 워드 제거

분석에 큰 의미가 없는 단어를 지칭
문장을 구성하는 필수 문법 요소이나 문맥적으로 큰 의미가 없는 단어
빈번하게 텍스트에 나타나므로 이것들을 사전에 제거하지 않으면 그 빈번함으로 인해 오히려 중요한 단어로 인지될 수 있음
언어별 스톱워드 목록이 있으며 NLTK의 경우 가장 다양한 언어의 스톱 워드 제공
NLTK의 스톱 워드에는 어떤 것이 있는지 확인

Stemming과 Lemmatization

많은 언어에서 문법적인 요소에 따라 단어가 다양하게 변함
영어의 경우 과거/현재, 3인칭 단수 여부, 진행형 등 매우 많은 조건에 따라 원래 단어가 변함
문법적 또는 의미적으로 변화하는 단어의 원형을 찾는 것

두 기능 모두 원형 단어를 찾는다는 목적은 유사하나 Lemmatization이 Stemming보다 정교하며 의미론적인 기반에서 단어의 원형을 찾음
Stemming은 원형 단어로 변환 시 일반적인 방법을 적용하거나 더 단순화된 방법을 적용하여 원래 단어에서 일부 철자가 훼손된 어근 단어를 추출하는 경향이 있음
Lemmatization은 품사와 같은 문법적인 요소와 더 의미적인 부분을 감안해 정확한 철자로 된 어근 단어를 찾아줌
Lemmatization이 Stemming보다 변환에 더 오랜 시간을 필요로 함
Lemmatization은 보다 정확한 원형 단어 추출을 위해 품사를 인자로 입력해야 함

profile
소신있는 오픈마인드

0개의 댓글