코퍼스에서 용도에 맞게 토큰을 분류하는 작업을 토큰화라고 하며, 토큰화 작업 하기 전 후에 용도에 맞게 데이터를 정제 및 정규화해야 한다.
- 정제(cleaning) : 노이즈 데이터 제거
- 정규화(normalization) : 표현 방법이 다른 단어들을 통합시켜서 같은 단어로 만듦
정제(cleaning) 작업은 토큰화 작업에 방해가 되는 부분들을 배제시키고 토큰화 작업을 수행하기 위해서 토큰화 작업 전에 이루어지기도 하지만, 토큰화 작업 이후에도 여전히 남아있는 노이즈들을 제거하기 위해 지속적으로 이루어지기도 한다. 사실 완벽한 정제 작업은 어려운 편이라서, 대부분의 경우 이 정도면 됐다.라는 일종의 합의점을 찾기도 한다.
1. 표기가 다른 단어들의 통합
같은 의미를 갖고있음에도, 표기가 다른 단어들을 하나의 단어로 정규화하는 방법을 사용할 수 있다. 예를 들어, USA와 US는 같은 의미를 가지므로 하나의 단어로 정규화해 볼 수 있다. 이러한 정규화를 거침으로서 US를 찾으면 USA도 함께 찾을 수 있을 것이다.
** 표기가 다른 단어들을 통합하는 방법 : 어간 추출(stemming), 표제어 추출(lemmatizaiton)
2. 대, 소문자 통합
영어에서 대문자는 문장의 맨 앞 등과 같은 특정 상황에서만 쓰이고, 대부분의 글은 소문자로 작성되기 때문에 대, 소문자 통합 작업은 대부분 대문자를 소문자로 변환하는 소문자 변환작업으로 이루어지게 된다.
예를 들어, Automobile이라는 단어가 문장의 첫 단어였기 때문에 A가 대문자였다고 생각해보자. 여기에 소문자 변환을 사용하면 automobile을 찾는 질의의 결과로써 Automobile도 찾을 수 있게 된다.
물론 대문자와 소문자를 무작정 통합해서는 안된다. 대문자와 소문자가 구분되어야 하는 경우도 있다. 가령 미국을 뜻하는 단어 US와 우리를 뜻하는 us는 구분되어야 한다. 또 회사 이름이나 사람이름 등 은 대문자로 유지되는 것이 옳다.
모든 토큰을 소문자로 만드는 것이 문제를 가져온다면, 또 다른 대안은 일부만 소문자로 변환시키는 방법도 있다. 하지만 이러한 방법 또한 그다지 도움이 되지 않을 수 있다. 결국에는 예외 사항을 크게 고려하지 않고, 모든 코퍼스를 소문자로 바꾸는 것이 종종 더 실용적인 해결책이 되기도 한다.
3.불필요한 단어의 제거
정제 작업에서 제거해야 하는 노이즈 데이터는 자연어가 아니면서 아무 의미도 갖지 않는 글자들(특수 문자 등)을 의미하기도 하지만, 분석하고자 하는 목적에 맞지 않는 불필요 단어들을 노이즈 데이터라고 하기도 한다.
** 불필요 단어들을 제거하는 방법 : 불용어 제거, 등장 빈도가 적은 단어 제거, 길이가 짧은 단어 제거 (불용어 제거는 다른 챕터에서 배움)
(1) 등장 빈도가 적은 단어
너무 적게 등장해서 자연어 처리에 도움이 되지 않는 단어들이 존재한다. 예를 들면 총 100,000개의 메일을 가지고 정상 메일인지 스팸 메일인지를 분류할 경우, 100,000 개의 메일 데이터에서 총 합 5번밖에 등장하지 않은 단어가 있다면 이 단어는 직관적으로 분류에 거이 도움이 되지 않을 것이다.
(2) 길이가 짧은 단어
영어권 언어에서는 길이가 짧은 단어를 삭제하는 것이 크게 의미가 없는 단어들을 제거하는 효과를 볼 수 있다고 알려져 있다. 즉, 길이가 짦은 단어들은 대부분 불용어에 해당된다. 사실 길이가 짧은 단어를 제거하는 2차적인 이유는 길이를 조건으로 텍스트를 삭제하면서 단어가 아닌 구두점들까지도 한꺼번에 제거하기 위함도 있다.
하지만 한국에서는 길이가 짧은 단어라고 삭제하는 이런 방법이 크게 유효하지 않을 수 있다.(영어 평균 길이 6-7 한국어 평균 길이 2-3 이기 때문임) 이는 영어 단어와 한국어 단어에서 각 한 글자가 가진 의미의 크기가 다르다는 점에서 기인한다.
한국어는 한자어가 많고, 한 글자만으로도 이미 의미를 가진 경우가 많다. 예를 들어 '학교'라는 한국어 단어를 생각해 보면, 배울 학(學)과 학교 교(校)로 글자 하나, 하나가 이미 함축적인 의미를 갖고 있어 두 글자만으로 학교라는 단어를 표현한다.
하지만 영어의 경우에는 학교라는 글자를 표현하기 위해서는 s, c, h, o, o, l이라는 총 6개의 글자가 필요하다.
이러한 특성으로 인해 영어는 길이가 2~3 이하인 단어를 제거하는 것만으로도 크게 의미를 갖지 못하는 단어를 줄이는 효과를 갖고 있다. 예를 들어 갖고 있는 텍스트 데이터에서 길이가 1인 단어를 제거하는 코드를 수행하면 대부분의 자연어 처리에서 의미를 갖지 못하는 단어인 관사 'a'와 주어로 쓰이는 'I'가 제거된다. 마찬가지로 길이가 2인 단어를 제거한다고 하면 it, at, to, on, in, by 등과 같은 대부분 불용어에 해당되는 단어들이 제거된다. 필요에 따라서는 길이가 3인 단어도 제거할 수 있지만, 이 경우 fox, dog, car 등 길이가 3인 명사들이 제거거 되므로 사용하고자 하는 데이터에서 해당 방법을 사용해도 되는지에 대한 고민이 필요하다.
4. 정규 표현식(Regular Expression)
얻어낸 코퍼스에서 노이즈 데이터의 특징을 잡아낼 수 있다면, 정규 표현식을 통해서 이를 제거할 수 있는 경우가 많다. 가령, HTML 문서로부터 가져온 코퍼스라면 문서 여기저기에 HTML 태그가 있을 것이고, 뉴스 기사를 크롤링했다면 기사마다 게재 시간이 적혀 있을 것이다. 정규 표현식은 이러한 코퍼스 내에 계속해서 등장하는 글자들을 규칙에 기반하여 한 번에 제거하는 방식으로서 매우 유용하다다.
https://wikidocs.net/book/2155
*이 글은 위키독스를 읽고 정리한 글입니다.
'Deep learning' 카테고리의 다른 글
[pytorch] 학습의 가속화를 위한 배치 정규화(Batch Normalization) (0) | 2024.05.09 |
---|---|
[Deep Learning] 인공지능의 기초: 퍼셉트론부터 인공 신경망까지 (2) | 2024.02.06 |
[Deep learning] 가중치 초기화(weight initialization) (feat. Xavier, He,normal, uniform) (1) | 2023.09.06 |
[Deep learning] Callback 함수 (0) | 2023.02.06 |