초보 개발자의 일기
정제(Cleaning) and 정규화(Normalization) 본문
Cleaning and Normalization
코퍼스에서 용도에 맞게 토큰을 분류하는 작업이 앞서 포스팅 했던 '토큰화'이고, 토큰화 작업 전 후에는 데이터를 용도에 맞게 정리해주는 일이 함께한다.
정제는 코퍼스로부터 노이즈 데이터를 제거하는 것이고, 정규화는 표현방법이 다른 단어들을 통합시켜 같은 단어로 만들어 준다.
'정규 분포'라는 단어와 '가우시안 분포'라는 단어가 있다. 이 둘은 같은 의미를 갖고 있으면서 표기가 다른다. KOR과 Korea 또한 표기가 다르지만 여전히 같은 의미를 지니고 있다. 정규화를 거치게 되면 둘 중 하나를 찾아도 함께 찾을 수 있게 된다.
영어권에서 대, 소문자를 통합하면 단어의 개수를 줄일 수 있다. 'Tea'와 'tea'가 있다. 이 둘은 다른 언어로 받아들여지는데, 대,소문자를 통합하면 같은 언어로 통합할 수 있다. 하지만 무작정 대,소문자를 통합해서는 안 된다. 대문자와 소문자의 차이가 단어의 차이를 만들거나, 고유명사인 경우 대문자는 대문자대로, 소문자는 소문자대로 유지되는 것이 좋다.
정제 작업에서 제거해야 하는 노이즈(noise)는 '자연어가 아니면서 아무 의미도 갖지 않는 글자들'을 의미하기도 하지만, 분석하고자 하는 목적에 불필요한 단어를 노이즈라고 말한다. 등장빈도가 적은 단어는 노이즈로 처리해도 분류에 영향이 거의 없으며, 영어권에서는 길이가 짧은(1~2자) 단어를 삭제해도 문제가 없다. 그 이유는 영어는 짧은 단어가 가지는 의미가 크지 않기 때문이다. 대부분 관사거나 마침표등이 삭제되기 때문인데, 한국어에서는 짧은 단어를 삭제하면 문제가 생길 수 있다. 영어로 '과일'은 'fruit'으로 5글자인 것에 반해 한국어 '과일'은 두 글자로 짧게 나타낸다. 그리고 영어에서도 'the'를 삭제하기 위해 3글자 이하를 삭제하는 순간 'car', 'tea', 'box'등의 단어들이 함께 삭제되기 때문에 삭제하는 글자의 길이를 신중하게 고려해야 한다.
# 길이가 1~2인 단어들을 정규 표현식을 이용하여 삭제
import re
text = "If you want to know what a man's like, take a good look at how he treats his inferiors not his equals."
shortword = re.compile(r'\W*\b\w{1,2}\b')
print(shortword.sub('', text))
you want know what man like, take good look how treats his inferiors not his equals.
데이터를 정제할 때 정규 표현식을 많이 사용하는데, 정규 표현식은 노이즈 데이터의 특징을 찾는다면 쉽게 제거할 수 있기 때문이다. 글자를 규칙에 기반하여 한 번에 제거하는 방식으로서 많이 쓰인다. 물론 정규표현식을 사용하지 않아도 글자를 삭제할 수 있지만, 정규식을 사용하면 코드 자체가 간결하게 나오기 때문에 가독성이 좋아진다.
※ Wikidocs의 '딥 러닝을 이용한 자연어 처리 입문'을 바탕으로 한 학습 기록입니다 ※
'소소한 공부 일기 > NLP' 카테고리의 다른 글
토큰화 (Tokenization) (0) | 2021.07.14 |
---|