Cleaning & Normalization

김동한·2024년 7월 15일
0

자연어처리

목록 보기
4/21

말뭉치에서 용도에 맞게 token을 분류하는 것을 토큰화라고 하고, 토큰화 작업 전,후로 정제 (cleaning) 및 정규화 (normalization) 을 진행한다.

  • cleaning : 갖고 있는 corpus로부터 noise 데이터 제거
  • normalization : 표현 방법이 다른 단어들을 통합시켜 같은 단어로 만들어줌

cleaning은 토큰화에 방해되는 text를 배제하기 위해 토큰화 이전에 진행하거나, 토큰화 이후 남아있는 노이즈 제거시 진행되기도 한다. 어느정도 합의점을 찾을 때까지 cleaning 작업을 수행한다.

1. 규칙에 기반한 표기가 다른 단어 통합

같은 의미를 갖고 있어도, 표기가 다른 단어들을 하나의 단어로 정규화할 수 있다. 예시로, USA나 US는 같은 의미이다. 다른 단어도 마찬가지로 같은 의미를 가진 다른 단어를 하나로 정규화하는 것으로, 표기가 다른 두 단어를 함께 찾을 수 있다.

2. 대,소문자 통합

영어권 언어에서 대문자는 문장의 맨 앞과 특정 상황에 쓰이고, 대부분의 글은 소문자로 쓰인다. 따라서 보통 대문자를 소문자로 변환하게 된다. 문장의 첫단어가 Automobile이였다고 하면, 이를 소문자 변환으로 automobile로 변환할 수 있고, automobile을 찾는 query의 결과로 해당 부분을 찾을 수 있게 된다.

하지만, 무작정 통합을 하게 되면, 미국을 뜻하는 US와 우리를 뜻하는 us 사이의 구분이 불가능해질 수 있다. 그리고, 사람 이름은 대문자로 유지되는 것이 옳다.

3. 불필요한 단어 제거

cleaning 단계에서의 noise data는 특수문자와 같이 자연어가 아니고 의미를 갖지 않는 단어를 의미하지만, 수행하려는 목적에 맞지 않는 단어들을 noise data라고 하기도 한다.

cleaning 단계에서는 불용어를 제거하거나, 등장 빈도가 적은 단어, 길이가 짧은 단어들을 제거한다. 불용어는 문장 내에서 빈번하게 발생해 의미를 부여하기 어려운 단어들이다. 'a' , 'the'와 같은 관사는 단어 자체가 가지는 정보가 거의 없어 이와 같은 단어를 불용어라고한다. 유의미한 정보를 가진 토큰들을 선별해야하기 때문에, 불용어를 사전 처리해야한다.

한글에서는, 토큰화 이후에 조사,접속사 등을 제거하게 된다. nltk 라이브러리에서 제공한느 불용어 제외하고, 명사나 형용사, 수식어 중에서 불용어로 취급하고 싶은 단어가 있을 수 있다. 이는 추가적으로 데이터를 분석하며 불용어 사전에 단어들을 추가해야한다.

1) 등장 빈도가 적은 단어


100,000개의 메일을 토대로 정상적인 메일에서 주로 등장하는 단어들, 스팸 메일에서 주로 등장하는 단어를 가지고 분류기를 설계할때, total data에서 3,4번 등장한 단어는 분류에 도움이 되지 않는다. 따라서, 분류 task에서 빈도수가 너무 적은 단어는 도움이 되지 않기 때문에 제거할 수 있다.

2) 길이가 짧은 단어

영어의 경우, 대부분의 짧은 단어가 불용어에 해당한다. 한글은 한자어가 많고, 한글자만으로도 의미를 가진 경우가 많다. 단편적인 예시로 전설적인 동물 용(龍)이 있다. 한글로는 한개의 글자로 표현 가능하지만, 영어로는 dragon으로 총 6개의 글자가 필요하다.

2~3개 이하의 알파벳으로 이루어진 단어는 대부분 큰 의미를 가지지 못한 단어이고, 이를 제거하는 것만으로 많은 noise를 제거할 수 있다. 길이가 1인 단어로는 나를 의미하는 주어로 쓰인 'I'나 관사로 쓰인 'a'와 같은 단어가 있다. 길이가 2인 단어로는 'it', 'at', 'to', 'on', 'in' 등과 같이 대부분 불용어에 해당하는 단어들이다.

3) 정규표현식을 통한 Tag제거

HTML 문서로부터 가져온 corpus는 HTML 태그가 붙어있다. 뉴스 기사와 같은 글을 크롤링 하게되면, 기사마다 게재 시간이 적혀있을 수 있다. 정규 표현식은 이런 corpus 내에 등장하는 글자들을 규칙에 기반해 한번에 제거하는 방식으로 유용하다. 길이가 짧은 단어를 제거할 때도 정규표현식을 사용할 수 있다.

import re # 정규표현식을 사용하기 위한 파이썬 모듈 import
text="I was wondering if anyone out there could enlighten me on this car."

shortword=re.compile(r'\W*\b\w{1,2}\b')
print(shortword.sub('',text))

>> was wondering anyone out there could enlighten this car

정규표현식에 대한 자세한 내용은 추후 포스트에서 다뤄보겠다. 또한, 정규화 과정은 같은 의미를 가지는 서로 다른 표현을 합치는 방식으로 진행되는데 이때, 어간추출 (stemming)과 표제어 추출(lemmatization) 방법으로 진행된다. 이에 대해서 다음 포스트에서 다룰 예정이다.

Reference

https://wikidocs.net/21693

profile
(●'◡'●)

0개의 댓글

관련 채용 정보