Moonie

02. 텍스트 전처리(Text preprocessing) - 02)정제(Cleaning) and 정규화(Normalization) 본문

AI/딥러닝을 이용한 자연어처리

02. 텍스트 전처리(Text preprocessing) - 02)정제(Cleaning) and 정규화(Normalization)

Moonie' 2022. 3. 11. 20:04
반응형

https://wikidocs.net/21693 를 기반으로 작성되었습니다. 문제시 삭제하도록 하겠습니다.

코드들은 위의 홈페이지에서 기본적인 라이브러리를 설치되어 있다는 가정하게 진행됩니다.

 

코퍼스에서 용도에 맞게 토큰을 분류한는 작업을 토큰화(tokenization)라고 하며, 토큰화 작업 전, 후에는 텍스트 데이터를 용도에 맞게 정제(cleaning) 및 정규화(normalization)하는 일이 항상 함께한다.

 

  • 정제(cleaning) : 갖고 있는 코퍼스로부터 노이즈 데이터를 제거한다.
  • 정규화(normalization) : 표현 방법이 다른 단어들을 통합시켜서 같은 단어로 만들어준다.

정제 작업은 토큰화 작업에 방해가 되는 부분들을 배제시키고 토큰화 작업을 수행하기 위해서 토큰화 작업보다 앞서 이루어지기도 하지만, 토큰화 작업 이후에도 여전히 남아 있는 노이즈들을 제거하기위해 지속적으로 이루어지기도 한다.

 

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

필요에 따라 직접 코딩을 통해 정의할 수 있는 정규화 규칙의 예로서 같은 의미를 갖고 있음에도, 표기가 다른 단어들을 단어로 정규화하는 방법을 사용할 수 있다.

 ex) USA 와 US 는 같은 의미를 지니므로 하나의 단어로 졍교화 가능

뒤에서 표기가 다른 단어들을 통합하는 방법인 어간 추출(stemming)과 표제어 추출(lemmatization)에 대해 알아본다.

 

2. 대, 소문자 통합

영어권 언어에서 대, 소문자를 통합하는 것은 단어의 개수를 줄일 수 있는 또다른 정규화 방법이다.

 

예시

- Automobile = automobile

- 검색엔진에서 a Ferrari car  -> ferrari  로 검색가능

 

물론 무지성 대소문자 통합을 하면 안된다. ex) US 와 us / 회사 이름 General Motors /사람 이름 (Bush)

 

모든 토큰을 소문자로 만드는 것이 문제를 가져온다면, 또 다른 대안은 일부만 소문자로 변환시키는 방법도 있다.

또 다른 대안은 일부만 소문자로 변환시키는 방법도 있다.  ex) 문장의 매앞에 나오는 단어의 대문자만 소문자로 변경

 

이러한 작업은 더 많은 변수를 사용해서 소문자 변환을 언제 사용할지 결정하는 머신러닝 시퀀스 모델로 더 정확하게 진행시킬 수 있다. 하지만 만약 올바른 대문자 단어를 얻고 싶은 상황에서 훈련에 사용하는 코퍼스가 사용자들이 단어의 대문자, 소문자의 올바른 사용 방법과 상관없이 소문자를 사용하는 사람들로부터 나온 데이터라면 이러한 방법 또한 도움이 되지 않을수 있다.

결국에는 예외 사항을 크게 고려하지 않고, 모든 코퍼스를 소문자로 바구는 것이 종종 더 실용적인 해결책이 되기도 한다.

 

P.S 개인적인 생각으론 결국 정답은 없고 때에 맞춰 잘, 알맞게 사용하여야 한다는 것 같다.

 

3. 불필요한 단어의 제거

노이즈데이터(noise data)란 ? - 자연어가 아니면서 아무 의미도 갖지 않는 글자들(특수 문자 등)을 의미하기도 하지만, 분석하고자 하는 목적에 맞지 않는 불필요 단어들

 

(1) 등장 빈도가 적은 단어

때로는 텍스트 데이터에서 너무 적게 등장해서 자연어 처리에 도움이 되지 않는 단어들이 존재

Ex) 스팸 메일 100,000개의 메일 데이터에서 총 합 5개 등장하면 직관적으로 

 

(2) 길이가 짧은 단어

영어권 언어에서는 길이가 짧은 단어를 삭제하는 것만으로도 어느정도 자연어 처리에서 크게 의미가 없는 단어들을 제거하는 효과를볼 수 있다고 한다. 즉 영어권 언어에서 길이가 짧은 단어들은 대부분 불용어에 해당된다.

※ 불용어 :  인터넷 검색 시 검색 용어로 사용하지 않는 단어. 관사, 전치사, 조사, 접속사 등 검색 색인 단어로 의미가 없는 단어이다. 다만 각 검색 엔진마다 동일하지 않기 때문에 다를 수도 있다.

 

하지만 한국어에서는 길이가 짧은 단어라고 삭제하는 이런 방법이 크게 유효하지 않을 수 있다. 한국어 단어는 한자어가 많고, 한 글자만으로도 이미 의미를 가진 경우가 많다. ex)  학(學)과 학교 교(校) 학교 2글자 <-> s,c,h,o,o,l 6글자

 

영어는 2~3 이하인 단어를 제거하는 것만으로도 크게 의미를 갖지 못하는 단어를 줄이는 효과를 가진다ex) 자연어 처리에서 의미를 갖지 못하는 단어인 관사 'a', 'I' 가 제거

import re
text = "I was wondering if anyone out there could enlighten me on this car."

# 길이가 1~2인 단어들을 정규 표현식을 이용하여 삭제
shortword = re.compile(r'\W*\b\w{1,2}\b')
print(shortword.sub('', text))

 

4. 정규 표현식(Regular Expression)

얻어낸 코퍼스에서 노이즈 데이터의 특징을 잡아낼 수 있다면, 정규 표현식을 통해서 이를 제거할 수 있는 경우가 많다.

ex) HTML 문서로부터 가져온 코퍼스라면 문서 여기저기에 HTML 태그 존재, 뉴스기사 크롤링시 기사마다 게재시간

 

 

반응형
Comments