자연어처리/개념

4.형태소 분석과 품사 태깅

m으스으m 2025. 2. 28. 15:58

형태소 분석과 품사 태깅

자연어 처리는 단순한 단어 분리만으로는 충분하지 않다. 특히 한국어와 같은 언어는 문장의 의미를 정확하게 이해하기 위해 단어의 형태와 문법적 역할을 분석하는 과정이 필수적이다. 이러한 과정을 **형태소 분석(Morphological Analysis)**과 **품사 태깅(Part-of-Speech Tagging, POS 태깅)**이라고 한다.


1. 형태소 분석이란?

**형태소(Morpheme)**란 의미를 가지는 가장 작은 단위의 언어 요소를 뜻한다. 형태소 분석은 문장을 형태소 단위로 분리하고 각 형태소의 문법적 역할을 분석하는 과정이다.

예시

입력 문장: "나는 학교에 간다."

형태소 분석 결과:

  • 나 (명사) + 는 (조사)
  • 학교 (명사) + 에 (조사)
  • 가 (동사) + ㄴ다 (어미)

추가 예시

입력 문장: "그는 빨리 달렸다."

형태소 분석 결과:

  • 그 (대명사) + 는 (조사)
  • 빨리 (부사)
  • 달리 (동사) + 었다 (어미)

입력 문장: "사과를 먹고 싶다."

형태소 분석 결과:

  • 사과 (명사) + 를 (조사)
  • 먹 (동사) + 고 (연결 어미)
  • 싶 (형용사) + 다 (어미)

2. 한국어에서 형태소 분석이 중요한 이유

2.1 조사와 어미 변형이 많음

한국어는 교착어로서 단어 자체의 변화보다 조사가 붙어서 문법적 의미를 결정한다. 따라서 형태소 분석을 통해 문장에서 조사와 어미를 제대로 처리해야 문장을 올바르게 이해할 수 있다.

예시:

  • "나는 학교에 간다." (나는 = 주어, 학교에 = 장소, 간다 = 동작)
  • "나는 학교를 좋아한다." (나는 = 주어, 학교를 = 목적어, 좋아한다 = 동작)

같은 "나는 학교"라는 표현이지만 뒤에 붙는 조사에 따라 문장의 의미가 달라진다.

2.2 띄어쓰기의 애매모호성

한국어는 띄어쓰기가 자주 생략되거나 잘못 사용될 수 있어, 단순한 단어 분리만으로 정확한 의미 분석이 어렵다.

예시:

  • "서울대학교" vs "서울 대학교" (하나는 특정 대학의 이름, 하나는 서울에 있는 대학교를 의미)
  • "아버지가방에들어가신다" → "아버지가 방에 들어가신다" vs "아버지 가방에 들어가신다"

이러한 경우, 형태소 분석을 통해 올바른 의미를 구분해야 한다.

2.3 동형이의어 처리 필요

같은 철자를 가지지만 문맥에 따라 품사가 달라지는 단어가 많다.

예시:

  • "나는 배를 먹었다." (배 = 과일, 명사)
  • "나는 배를 탔다." (배 = 교통수단, 명사)

형태소 분석을 통해 단어의 문맥적 의미를 파악해야 한다.


3. 주요 형태소 분석기

형태소 분석을 수행하는 여러 NLP 라이브러리가 존재하며, 한국어에서는 대표적으로 KoNLPy, MeCab, Okt 등이 많이 사용된다.

3.1 KoNLPy (파이썬 기반 한국어 NLP 라이브러리)

KoNLPy는 한국어 자연어 처리를 쉽게 사용할 수 있도록 제공되는 Python 라이브러리로, 여러 형태소 분석기를 포함하고 있다.

설치 방법:

pip install konlpy

예제 코드 (Okt 사용)

from konlpy.tag import Okt

okt = Okt()
sentence = "나는 자연어 처리를 공부한다."
print(okt.morphs(sentence))  # 형태소 분리
print(okt.pos(sentence))  # 품사 태깅
print(okt.nouns(sentence))  # 명사 추출

3.2 MeCab (고성능 형태소 분석기)

MeCab은 일본어 NLP에서 개발된 분석기이지만, 한국어 버전(MeCab-Ko)이 제공되며 속도가 빠르고 정확도가 높다.

설치 방법: (Ubuntu 기준)

sudo apt-get install curl
bash <(curl -s https://raw.githubusercontent.com/konlpy/konlpy/master/scripts/mecab.sh)

예제 코드

from konlpy.tag import Mecab

mecab = Mecab()
sentence = "나는 자연어 처리를 공부한다."
print(mecab.morphs(sentence))  # 형태소 분리
print(mecab.pos(sentence))  # 품사 태깅
print(mecab.nouns(sentence))  # 명사 추출

3.3 Okt (Twitter 한국어 처리기)

Okt(구 Twitter 형태소 분석기)는 KoNLPy에서 제공하며, 특히 SNS 데이터 분석에 적합하다.

예제 코드:

from konlpy.tag import Okt

okt = Okt()
sentence = "형태소 분석을 공부하는 것은 재미있다."
print(okt.nouns(sentence))  # 명사 추출
print(okt.pos(sentence))  # 품사 태깅
print(okt.morphs(sentence))  # 형태소 분리

4. 결론

형태소 분석과 품사 태깅은 한국어 자연어 처리에서 매우 중요한 역할을 한다. 한국어는 문법적 구조가 복잡하고, 같은 단어가 여러 의미를 가질 수 있기 때문에 이를 정밀하게 분석할 필요가 있다.

  • 형태소 분석을 통해 문장을 단어 단위로 나누고 문법적 역할을 파악할 수 있다.
  • 품사 태깅을 활용하여 문맥을 해석하고 자연어 처리 성능을 향상시킬 수 있다.
  • KoNLPy, MeCab, Okt 등 다양한 분석기를 활용하여 효율적인 NLP 파이프라인을 구축할 수 있다.

다음 글에서는 NLP에서 사용하는 벡터화 기법에 대해 다룰 예정이다. 😊