자연어 처리(NLP): 텍스트 전처리와 한국어 NLP의 특수성

토큰화·형태소분석·어간추출·표제어추출·품사태깅·불용어처리 등 NLP 텍스트 전처리 기법과 한국어 NLP의 특수성, 실전 프로젝트 단계를 정리한다.

2026-08-14 · 최초 발행 2025-05-23

자연어 처리(NLP)는 인간이 쓰는 언어를 컴퓨터가 이해하고 처리하도록 만드는 인공지능의 한 분야로, 언어학·컴퓨터 과학·통계학이 만나는 학제 간 영역이다. 검색 엔진, 챗봇, 감성 분석, 문서 분류처럼 일상에서 접하는 서비스 상당수가 이 기술 위에서 돌아간다. 이 모든 응용의 출발점은 원시 텍스트를 분석 가능한 형태로 바꾸는 전처리다 — 구두점 제거, 빈도수 낮은 단어 필터링, 불용어 제거, 어간·표제어 추출 같은 작업을 거치며 단어집합(vocabulary)의 크기를 줄이고 정규화한다. 데이터 품질이 모델 성능에 직접 영향을 미치는 만큼, 전처리는 NLP 파이프라인에서 가장 먼저 공들여야 하는 단계다.

원시 텍스트 데이터텍스트 정제토큰화정규화불용어 제거처리된 데이터구두점 제거특수문자 처리단어 토큰화문장 토큰화형태소 토큰화대소문자 통일어간 추출표제어 추출

토큰화: 영어와 한국어가 갈라지는 지점

단어 토큰화는 텍스트를 개별 단어 단위로 분리하는 과정이다. 영어는 공백과 구두점을 기준으로 비교적 단순하게 분리할 수 있다 — "I love NLP." → ["I", "love", "NLP", "."]. 다만 복합어·합성어·축약형에는 추가적인 규칙이나 알고리즘이 필요하다. 문장 토큰화는 텍스트를 문장 단위로 나누는 과정으로, 마침표·물음표·느낌표를 기준으로 삼지만 약어(Dr., Mr. 등)나 숫자 표기(3.14) 같은 예외를 처리해야 하며 뉴스 기사·책·논문 같은 긴 텍스트에서 특히 중요하다.

한국어는 조사·어미 등을 붙여 말을 만드는 교착어라서 영어와는 다른 토큰화 접근이 필요하다. 어절(띄어쓰기 단위)이 아니라 형태소 단위로 토큰화하는 쪽이 의미 분석에 더 효과적이다 — "나는 자연어 처리를 공부한다." → ["나", "는", "자연어", "처리", "를", "공부", "한다"]. 조사('가', '에게', '를'), 어미('-다', '-었') 등을 적절히 분리하는 처리가 중요하다.

형태소로 쪼개기: 자립 형태소와 의존 형태소

형태소(morpheme)는 의미를 가진 가장 작은 말의 단위로, 더 이상 분리할 수 없는 언어적 요소다. 한국어 NLP에서 형태소 분석은 텍스트 처리의 핵심 단계다.

자립 형태소는 접사·어미·조사와 상관없이 독립적으로 쓰일 수 있는 형태소로, 그 자체로 단어가 되며 체언(명사·대명사·수사)·수식언(관형사·부사)·감탄사 등이 해당한다. '책', '사람', '깊이', '빨리', '아', '세 개' 등이 예다. 의존 형태소는 단독으로 쓰일 수 없고 다른 형태소와 결합해야 의미가 완성되는 형태소로, 접사·어미·조사·어간 등이 해당한다. '-가', '-을', '읽-', '-었', '-다' 등이 예다.

어간과 표제어, 그 차이

어간 추출(Stemming)은 단어에서 접사 등을 제거하고 어간(stem)만 남기는 과정이다. 단순한 규칙 기반으로 작동하기 때문에 때로는 실제 사전에 없는 형태가 결과로 나오기도 한다. 영어에서는 "running", "runs", "runner" 모두 "run"으로 줄어들며, Porter Stemmer·Lancaster Stemmer 같은 알고리즘이 널리 쓰인다.

표제어 추출(Lemmatization)은 단어의 형태학적 분석을 통해 기본 사전형(표제어, lemma)을 찾아내는 과정이다. 형태소 분석과 품사 태깅을 활용해 더 정확하게 어근을 추출하며, 어간 추출보다 정교하고 항상 실제 단어 형태를 유지한다. 영어에서는 "better" → "good", "was"·"were" → "be"로 처리된다.

입력 텍스트토큰화단어 정규화어간 추출Stemming표제어 추출Lemmatization단순 규칙 적용(runs run)형태소 분석 & 사전 참조(better good)처리된 텍스트

품사 태깅이 하는 역할

품사 태깅(Part-of-Speech Tagging)은 텍스트의 각 단어에 해당하는 품사를 태깅하는 과정으로, 문장의 구조·의미 분석을 위한 기본 단계이자 구문 분석·개체명 인식 같은 고급 NLP 작업의 기반이다. 통계적 방법, 규칙 기반 방법, 머신러닝 기법 등 다양한 접근법이 쓰인다. 영어에서는 "I love NLP" → [("I", "PRP"), ("love", "VBP"), ("NLP", "NNP")]처럼, 한국어에서는 "나는 밥을 먹었다" → [("나", "NP"), ("는", "JX"), ("밥", "NNG"), ("을", "JKO"), ("먹", "VV"), ("었다", "EP+EF")]처럼 태깅된다.

불용어를 걸러낼 때 생각해야 할 것

불용어는 분석에 큰 의미가 없는 고빈도 단어(a, the, is, in 등)를 말한다. 텍스트 분석 시 이를 제거하면 분석 효율성이 높아지고 노이즈가 줄어들지만, 불용어 리스트는 도메인이나 분석 목적에 따라 커스터마이징이 필요하다. 불용어 제거가 항상 최선은 아니라는 점도 유의해야 한다 — 감성 분석 등에서는 불용어가 오히려 중요한 역할을 할 수 있다.

정규표현식으로 텍스트 정제하기

정규 표현식(Regular Expression)은 복잡한 패턴의 문자열을 검색·추출·대체하는 도구로, 전처리 과정에서 특수문자 제거, 이메일·URL 추출, 숫자 패턴 인식 등에 쓰인다. 이메일 패턴 매칭은 [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}처럼 간결한 표현으로 복잡한 문자열 처리 로직을 구현할 수 있어, 모든 NLP 엔지니어가 숙지해야 할 기본 도구로 꼽힌다.

한국어 NLP 도구들이 이 문제를 푸는 방식

한국어는 교착어라서 영어 같은 굴절어와는 다른 접근이 필요하다. KoNLPy, Mecab, Hannanum, KOMORAN 같은 한국어 형태소 분석기가 이 역할을 맡으며, 어절 단위가 아닌 형태소 단위 토큰화로 더 효과적인 분석을 가능하게 한다. 높임말, 반말, 방언, 신조어 처리도 한국어 NLP에서 함께 고려해야 할 부분이다.

# KoNLPy를 활용한 한국어 형태소 분석 예시
from konlpy.tag import Okt

okt = Okt()
text = "자연어 처리는 인공지능의 중요한 분야입니다."
morphs = okt.morphs(text)  # 형태소 추출
pos = okt.pos(text)        # 품사 태깅
nouns = okt.nouns(text)    # 명사 추출

print("형태소:", morphs)
print("품사 태깅:", pos)
print("명사:", nouns)

# 결과
# 형태소: ['자연어', '처리', '는', '인공지능', '의', '중요한', '분야', '입니다', '.']
# 품사 태깅: [('자연어', 'Noun'), ('처리', 'Noun'), ('는', 'Josa'), ('인공지능', 'Noun'), ('의', 'Josa'), ('중요한', 'Adjective'), ('분야', 'Noun'), ('입니다', 'Adjective'), ('.', 'Punctuation')]
# 명사: ['자연어', '처리', '인공지능', '분야']

데이터를 나누고 말뭉치를 고르는 기준

NLP 모델을 개발할 때는 데이터를 학습용(training), 검증용(validation), 테스트용(test) 세트로 분할하는 것이 필수다. 일반적으로 8:1:1 또는 7:1:2 비율을 쓰며 데이터 특성에 따라 조정하고, 층화 추출(stratified sampling)로 각 세트가 원본 데이터의 분포를 유지하도록 구성한다. 시계열 데이터라면 시간적 순서를 고려한 분할 방식을 적용해야 한다.

접어(clitic)는 독립된 단어는 아니지만 다른 단어에 붙어 문법적 기능을 하는 요소다. 영어의 "I'm" → "I" + "'m", "She's" → "She" + "'s"가 예이며, 한국어에서는 조사가 비슷한 역할을 해 형태소 분석 시 적절한 처리가 필요하다.

말뭉치(corpus)는 언어 연구나 NLP 모델 학습을 위해 수집된 텍스트 집합이다. 의학·법률·금융처럼 도메인에 특화된 말뭉치는 해당 분야 NLP 애플리케이션 개발에 필수적이며, 대표적인 영어 말뭉치로는 Brown Corpus·Reuters Corpus·Penn Treebank가, 한국어 말뭉치로는 세종 말뭉치·KAIST 말뭉치·나라말뭉치가 있다. 말뭉치의 크기·다양성·품질은 모델 성능에 직접 영향을 미친다.

실제 프로젝트에서 이 단계들이 이어지는 순서

  1. 문제 정의: 해결하고자 하는 NLP 문제 명확화(분류, 요약, 생성 등)
  2. 데이터 수집: 목적에 맞는 텍스트 데이터 확보
  3. 텍스트 전처리: 토큰화, 정규화, 불용어 제거 등
  4. 특성 추출: 단어 임베딩, TF-IDF, BoW 등의 방법으로 텍스트 수치화
  5. 모델 선택 및 학습: 목적에 적합한 알고리즘 선택 및 모델 학습
  6. 평가 및 튜닝: 성능 지표 기반 평가 및 하이퍼파라미터 최적화
  7. 배포 및 모니터링: 실제 환경에서 모델 운영 및 성능 모니터링

최근 NLP는 BERT·GPT 같은 딥러닝 기반 대규모 언어 모델이 주도하고 있다. 자기지도학습(self-supervised learning)으로 방대한 텍스트에서 언어 패턴을 학습하고, 다국어 모델의 등장으로 언어 간 장벽과 저자원 언어 지원 문제가 줄어들고 있으며, 특정 도메인 적응(domain adaptation)과 전이학습(transfer learning)의 중요성이 커지고 있다. 경량화·증류를 통한 효율적인 모델과 해석 가능한 AI에 대한 관심도 함께 늘고 있다.

자연어처리텍스트전처리토큰화형태소분석한국어NLP