Development/AI

자연어 처리(NLP) 개념 잡기 (3) - 정제, 정규화, 불용어

고고마코드 2022. 1. 9. 01:14
반응형

자연어 처리(NLP)를 학습할 때 필요한 용어들을 기초적인 지식 수준에서 이해하기 쉽게 정리합니다.
예제 코드는 Google Colab 을 기반으로 작성했습니다.


자연어 처리(NLP) 개녀 잡기의 다른 포스팅도 참고하세요.

자연어 처리(NLP) 개념 잡기 (1) - 말뭉치, 토큰화

자연어 처리(NLP) 개념 잡기 (2) - 표제어, 어간


정제(Cleaning)

정제 및 정규화는 텍스트 데이터를 용도에 맞게 바꾸는 방법이다.

말뭉치로부터 노이즈 데이터를 제거한다.

토큰화 작업에 방해가 되는 부분을 제거한다.

보통 토큰화 작업 전에 정제 작업을 진행하지만 토큰화 작업 후에도 남아있는 노이즈 데이터를 지우는 데 활용하기도 한다.

정제 작업에서 제거할 노이즈 데이터라고 하면 의미가 없는 단어(특수문자, 공백 등)가 있을 것이고,

목적에 맞지 않는 불필요한 데이터를 노이즈 데이터라고 한다.

거의 등장하지 않는 데이터 제거

만약 영화 리뷰에 대한 긍정적인 리뷰인지, 부정적인 리뷰인지를 분류하기 위한 작업을 진행중이라면,

정말 많은 데이터를 분석해서 긍정,부정을 분류했는데 데이터에 몇 번 등장하지도 않은 데이터라면 이 데이터는 분류에 도움이 되지 않는 데이터라고 볼 수 있다.

길이가 짧은 데이터 제거

또한 영어 단어의 평균 길이는 6~7 정도라고 한다.

영어에서 길이가 짧은 단어의 데이터를 제거하는 것만으로도 정제의 효과를 볼 수 있다.

또한 길이가 짧은 데이터를 제거하면 의미 없는 특수문자, 공백들도 제거하는 효과를 볼 수 있다.

그러나 한국어는 한글자, 두글자로도 의미를 가지는 단어가 많기 때문에 한국어는 이 정제방법이 도움이 되지 않는다.

불용어(Stopword) 제거

여기서 불용어란 분석을 할 때 도움이 되지 않는 데이터를 뜻한다.

예를 들어 [I, my, me, 조사, 접미사] 같은 단어들은 문장에서는 자주 등장합니다.

그러나 실제로 의미 분석을 하는데는 거의 도움이 되지 않기에 이러한 단어들을 불용어로 지정하기도 합니다.

nltk 에서 미리 정의한 불용어를 확인할 수 있습니다.

import nltk
nltk.download('stopwords')

from nltk.corpus import stopwords
from nltk.tokenize import word_tokenize 

stop_words_list = stopwords.words('english')
print('불용어 개수 :', len(stop_words_list))
print('불용어 10개 출력 :',stop_words_list[:10])
불용어 개수 : 179
불용어 10개 출력 : ['i', 'me', 'my', 'myself', 'we', 'our', 'ours', 'ourselves', 'you', "you're"]

예제를 통해 실제로 한국어 불용어를 제거하는 작업을 진행해 보겠습니다.

!pip install konlpy
from konlpy.tag import Okt
okt = Okt()

str = "나는 사과를 정말 좋아해. 너도 사과를 좋아하니?"
stopwords = "사과 정말"

stopwords = set(stopwords.split(" "))
token = okt.morphs(str)

result = [word for word in token if not word in stopwords]

print('불용어 제거 전 :',token) 
print('불용어 제거 후 :',result)
불용어 제거 전 : ['나', '는', '사과', '를', '정말', '좋아해', '.', '너', '도', '사과', '를', '좋아하니', '?']
불용어 제거 후 : ['나', '는', '를', '좋아해', '.', '너', '도', '를', '좋아하니', '?']

실제로 사과, 정말을 불용어로 쓰지는 않지만 직관적인 확인을 위해 사과, 정말을 불용어로 정했습니다.

결과로 사과와 정말을 제거한 데이터를 확인할 수 있습니다.


정규화(Normalization)

표현 방법이 다른 단어들을 통합시켜 같은 단어로 만든다.

대, 소문자 통합

영어에서는 특정한 상황, 이름을 제외하면 모두 소문자로 작성한다.

이런 전제 조건을 활용해 대, 소문자 통합으로 전처리 작업을 진행할 수 있다.

뜻은 같지만 표기가 다른 단어 통합

예를 들어 US와 USA는 같은 의미를 가지는 단어이지만 표기가 다르다.

이런 단어들을 하나의 단어로 정규화 하는 방법을 사용할 수도 있다.

이전 포스팅에서 살펴본 표제어 추출이나 어간 추출이 정규화 방법 중 하나로 볼 수 있다.


참고자료

  1. 딥러닝을 이용한 자연어 처리 입문(지은이: 유원준 외1)

  2. 위키피디아


반응형