3.텍스트 전처리의 중요성과 기법
텍스트 전처리의 중요성과 기법
자연어 처리는 원시 텍스트 데이터를 분석하기 전에 전처리 과정을 거쳐야 한다. 전처리는 텍스트 데이터를 정제하고, 불필요한 요소를 제거하여 NLP 모델이 더 정확한 결과를 내도록 돕는다.
텍스트 전처리 과정은 크게 텍스트 정제, 토큰화, 불용어 제거 및 표제어 추출로 나눌 수 있다.
1. 텍스트 정제 (Text Cleaning)
텍스트 정제는 원시 데이터를 분석 가능한 형태로 변환하는 과정이다.
1.1 정규화 (Normalization)
정규화는 같은 의미를 가진 단어들을 일관된 형식으로 변환하는 과정이다.
예시:
- "컴퓨터" → "콤퓨타" (다양한 표기법을 하나로 통일)
- "I'm" → "I am" (줄임말 복원)
Python 코드 예시:
import re
def normalize_text(text):
text = text.lower() # 소문자 변환
text = re.sub(r"\'m", " am", text) # I'm -> I am
text = re.sub(r"\'s", " is", text) # He's -> He is
return text
text = "I'm happy! He's good."
print(normalize_text(text))
# "i am happy! he is good."
1.2 소문자 변환 (Lowercasing)
소문자 변환은 대소문자를 통일하여 모델이 불필요한 변수를 학습하지 않도록 한다.
예시:
- "Apple"과 "apple"을 같은 단어로 인식하기 위해 "apple"로 변환
1.3 특수 문자 및 숫자 제거
텍스트에서 의미 없는 특수 문자나 숫자를 제거하여 분석을 용이하게 한다.
Python 코드 예시:
text = "Hello, World! 123"
clean_text = re.sub(r"[^a-zA-Z가-힣 ]", "", text)
print(clean_text)
# "Hello World"
2. 토큰화 (Tokenization)
토큰화는 문장을 단어 또는 형태소 단위로 나누는 과정이다. 한국어의 경우 형태소 단위로 토큰화하는 것이 더 적절할 수 있다.
2.1 단어 단위 토큰화 (Word Tokenization)
단어 단위로 문장을 분할하는 방법이다.
예시 (영어):
from nltk.tokenize import word_tokenize
text = "Natural Language Processing is fun!"
tokens = word_tokenize(text)
print(tokens)
# ['Natural', 'Language', 'Processing', 'is', 'fun', '!']
2.2 형태소 단위 토큰화 (Morphological Tokenization)
한국어는 조사와 어미가 존재하므로 형태소 단위로 나누는 것이 효과적이다.
예시 (한국어):
from konlpy.tag import Okt
okt = Okt()
sentence = "자연어 처리는 어렵지만 재미있다."
tokens = okt.morphs(sentence)
print(tokens)
# ['자연어', '처리', '는', '어렵', '지만', '재미있', '다', '.']
2.3 서브워드 토큰화 (BPE, WordPiece)
서브워드 토큰화는 단어를 더 작은 단위로 나누어 희귀 단어 문제를 해결하는 방법이다.
- BPE(Byte Pair Encoding): 자주 등장하는 글자 쌍을 병합하여 단어를 구성
- WordPiece: BERT 모델에서 사용하는 토큰화 방식
예시:
- "unhappiness" → ["un", "happiness"]
- "이상하다" → ["이", "상", "하다"]
3. 불용어 제거 및 표제어 추출
3.1 불용어 제거 (Stopword Removal)
불용어는 의미 전달에 큰 영향을 미치지 않는 단어들을 제거하는 과정이다.
불용어 예시:
- 한국어: "은", "는", "이", "가"
- 영어: "is", "the", "and"
Python 코드 예시:
stopwords = ["은", "는", "이", "가"]
tokens = [word for word in tokens if word not in stopwords]
print(tokens)
# ['자연어', '처리', '어렵', '지만', '재미있', '.']
3.2 표제어 추출 (Lemmatization)
표제어 추출은 단어를 기본형으로 변환하는 과정이다. (예: "갔다" → "가다")
예시 (영어):
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize("running", pos="v"))
# "run"
예시 (한국어):
from konlpy.tag import Okt
okt = Okt()
print(okt.morphs("나는 학교에 갔다"))
# ['나', '는', '학교', '에', '가', '았다']
4. 결론
텍스트 전처리는 NLP에서 매우 중요한 과정으로, 데이터의 품질을 높이고 모델의 성능을 향상시킨다. 특히 텍스트 정제, 토큰화, 불용어 제거 및 표제어 추출은 NLP 프로젝트에서 필수적인 단계이다.
다음 글에서는 형태소 분석과 품사 태깅에 대해 다뤄보도록 하자! 😊