자연어처리/개념

3.텍스트 전처리의 중요성과 기법

m으스으m 2025. 2. 28. 14:32

텍스트 전처리의 중요성과 기법

자연어 처리는 원시 텍스트 데이터를 분석하기 전에 전처리 과정을 거쳐야 한다. 전처리는 텍스트 데이터를 정제하고, 불필요한 요소를 제거하여 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 프로젝트에서 필수적인 단계이다.

다음 글에서는 형태소 분석과 품사 태깅에 대해 다뤄보도록 하자! 😊