수영장의 수영_데이터 분석 블로그

[NLP] 08. Preprocessing(전처리) 본문

Goorm 자연어처리 전문가 양성 과정 2기/NLP

[NLP] 08. Preprocessing(전처리)

슈빔멘 2022. 1. 12. 22:16

언어를 AI 모델로 분석하는 것에 앞서, input 텍스트를 모델이 학습할 수 있는 형태로 전처리하는 것이 중요하다

 

raw data => preprocessed data => tokenized data하여 모델에 입력한다.

 

Preprocessing이 분석의 80% 시간을 잡아먹는다고 하던데, 그만큼 시간과 에너지가 많이 드는 작업인듯하다

 

 

Normalization 정규화

raw 상태의 데이터를 덜 무작위적으로, 더 깨끗하게 만드는 작업이다

 

1) Cleaning 

- 코퍼스에서 노이즈가 너무 심한 문장(단어 등)을 제거한다 

- 예를 들어 특수문자가 너무 많으면 적절히 remove 한다

 

2) Stemming 어간 추출, Lemmatization 표제어 추출

- ex) 먹는다 -> '먹다', studies -> 'study' 

- 다양한 변형으로 쓰인 단어들을 원형으로 변환해 저장하는 것이다

-> 다만, 특별한 이유가 있지 않으면 잘 하지 않는 작업이라고 한다

-> 최대한 input 그대로를 받아들여야 모델의 신뢰성이 높기 때문에

 

3) cased/uncased 대소문자 구분

- cased의 경우 대소문자를 구분하여 입력 데이터셋을 만들고, uncased는 대소문자를 통칭해서 저장한다

- uncased가 더 많이 쓰이는 추세이다

-> 이유는 1) 모델을 최대한 경량화하기 위해, 2) 대소문자를 구분한 것과 구분하지 않은 것의 차이가 눈에 띄게 나지 않는다고 한다 (물론 케바케)

 

4) removing unnecessary words 불필요한 단어 제거

- 마찬가지로 단어를 제거하는 경우는 거의 없지만, 정말 불필요한 경우엔 제거해준다

 

5) Regular Expression 정규표현식

Regular Expression

- 문자열에서 특정한 규칙을 갖고 있는 문자열 집합을 뽑아내기 위한 검색 패턴이다

- 파이썬의 re package, NLTK를 사용한다

 

 

정규표현식 문법

 

 

re package

re.complile() : 정규표현식을 컴파일한다. 찾으려는 패턴이 빈번하면 미리 컴파일해놓고 반복해 사용하면 편리함.

re.search() : 문자열 전체에 대해 정규표현식과 매치하는지 검색

re.split() : 정규표현식 기준으로 문자열을 split해 리스트로 반환

re.findall() : 정규표현식과 매치되는 모든 부분을 찾아서 리스트로 반환

re.finditer() : 정규표현식과 매치되는 모든 부분에 대한 이터레이터 객체 반환

re.sub() : 정규표현식과 매치되는 모든 부분을 다른 문자열로 대체

 

RegexpTokenizer in NLTK

import nltk
from nltk.tokenize import RegexpTokenizer

tok = RegexpTokenizer("정규표현식")

tok.tokenize("입력할 문자열")

 

 

Pre-tokenization 

- 문장, 문헌 단위의 문자열을 더 작은 'word'단위로 쪼개는 과정

- 토큰화 이전 단계

 

[영어]

1) 특수문자를 제거한다

2) whitespace 기준으로 분리한다

-> 특수상황에 대한 예외처리가 필요할 수 있다 (aren't, don't 등)

 

[한국어]

- 주로 형태소(morpheme) 분석으로 문자열을 쪼갠다

- 한국어의 경우 띄어쓰기가 잘 지켜지지도 않고, 딱딱 나누어떨어지지도 않기 때문

- 지도학습기반 : KoNLPy, Khaiii

- 비지도학습기반 : soynlp

 

KoNLPy

- Korean NLP in Python

- Hannanum, Kkma, Komoran, Mecab, Okt 다섯가지가 지원된다

 

# Parse phrase to morphemes
tokenizer.morphs(text) 

# Noun extractors
tokenizer.nouns(text)

# POS tagger
tokenizer.pos(text)

 

 

 

(힘들다.... 수업)

어텐션은 주말에 더 공부해서 완벽 이해하고 올려야지..