NLP/AI/Statistics

Tokenization: 어절, 형태소, 음절, 자모 단위 토큰화 본문

NLP

Tokenization: 어절, 형태소, 음절, 자모 단위 토큰화

Danbi Cho 2020. 9. 22. 20:49

텍스트를 처리하기 이전에, 처리하고자 하는 토큰의 단위를 정의하는 것은 중요하다.

 

텍스트를 어떤 토큰의 단위로 분할하냐에 따라 단어 집합의 크기, 단어 집합이 표현하는 토큰의 형태가 다르게 나타나며

 

이는 모델의 성능을 좌지우지하기도 한다. 

 

이처럼 텍스트를 토큰의 단위로 분할하는 작업을 토큰화(tokenization)라고 한다.

 

> 어절(단어)

 

기본적으로 자연어처리에서는 어절(단어) 단위로 구분한다.

 

예를 들어, "나는 학교에 간다" 라는 문장을 어절 단위로 토큰화하면,

 

[나는, 학교에, 간다]와 같이 띄어쓰기 기준으로 문장이 분할된다. 

 

이를 어절 단위 토큰화라고 한다.

 

> 형태소 (KoNLPy, KLT2000)

(형태소: 의미가 있는 가장 작은 말의 단위)

 

한국어는 교착어의 특성으로, 하나의 단어가 여러개의 형태소로 이루어져있다.

 

예를 들어, "학교에"는 '학교(명사)'+'에(조사)'와 같이 명사와 조사의 조합으로 이루어진다.

 

이를 형태소 단위 토큰화라고 하며, 형태소 토큰화를 위한 형태소 분석기가 존재한다.

 

특히, python에서는 형태소 분석기 툴을 이용하여 쉽게 형태소 토큰화 작업을 할 수 있다.

 

KoNLPy는 python에서의 형태소 분석기 모듈을 제공하며, 

 

이 안에는 Hannanum, Kkma, Komoran, Mecab, Okt의 형태소 분석기가 있다.

 

konlpy-ko.readthedocs.io/ko/v0.4.3/

 

KoNLPy: 파이썬 한국어 NLP — KoNLPy 0.4.3 documentation

KoNLPy: 파이썬 한국어 NLP KoNLPy(“코엔엘파이”라고 읽습니다)는 한국어 정보처리를 위한 파이썬 패키지입니다. 설치법은 이 곳을 참고해주세요. NLP를 처음 시작하시는 분들은 시작하기 에서 가

konlpy-ko.readthedocs.io

KoNLPy에서는 토큰화된 형태소 토큰과 형태소 태깅을 함께 출력하는 pos 함수와

 

토큰화된 형태소만을 출력하는 morphs 함수, 명사만 추출하는 nouns 함수 등이 제공된다.

 

KoNLPy에서 제공하는 형태소 분석기 중 Okt와 Mecab이 가장 빠른 실행시간을 보였다.

 

 

각각의 형태소 분석기들은 형태소를 분할하는 기준이 해당 알고리즘에 따라 다르게 나타나기 때문에

 

토큰화를 통해 구성되는 단어 집합과 단어 집합의 크기 등이 다르게 표현된다.

 

KoNLPy 이외에 C기반의 형태소 분석기인 KLT2000이 공개되어 있다.

 

cafe.naver.com/nlpkang/3

 

KLT2000 한국어 형태소 분석기 -- 딥러닝(토큰화), 색인어/키워드 추출, 사용자 매뉴얼 등

아래 파일들이 첨부되어 있습니다.- KLT2000-TestVersion.zip -- 형태소 분석기(윈도용: cmd창에서 실행) (또는 http://nlp.kookmin.ac....

cafe.naver.com

KLT2000은 C 기반의 형태소 분석기이며 KoNLPy보다 빠른 실행시간으로 형태소 토큰화가 가능하다.

 

KLT2000에는 색인어 추출 기반의 명사를 추출하는 index2018과 모든 어절에 대한 형태소 분석 결과를 추출하는 kma가 존재한다.

 

해당 형태소 분석기는 EUC-KR 기반의 텍스트를 처리하는 것을 기본으로 하기 때문에

 

기본 입력 파일이 EUC-KR의 텍스트로 작성되어 있어야하는 점을 주의해야한다.

 

> 음절

 

한국어는 하나의 단어가 형태소의 조합으로 구성되어 있지만, 

 

이는 또다른 표현으로는 음절의 조합으로 구성되어 있다.

 

즉, 어절 혹은 형태소는 결국 음절 간의 조합으로 표현되어 있다.

 

예를 들어, "학교에"라는 어절은 [학, 교, 에]와 같이 음절 간의 조합으로 표현이 가능하다.

 

뿐만 아니라, "나는 학교에 간다"는 [나, 는, 학, 교, 에, 간, 다]와 같이 하나의 음절 단위로 표현이 가능하다.

 

이처럼 텍스트를 어절과 형태소가 아닌 음절로 표현이 가능하다.

 

텍스트를 음절로 표현할 때,

 

단어 사이에 존재하는 띄어쓰기(공백)을 음절에 포함할 것인지, 아닌지를 고려해야하며,

 

띄어쓰기(공백)을 음절에 포함할 경우, 단어 집합에도 띄어쓰기(공백)에 대한 토큰이 존재하게 된다.

 

> 자모

 

한국어는 자음과 모음의 체계로 구성되어 있으며, (초성, 중성, 종성)으로 하나의 음절을 표현한다.

 

자모는 텍스트로 표현할 수 있는 작은 단위이며, 한국어의 특성이 나타난다.

 

영어의 경우, 자음과 모음이 하나의 음절을 구성하는 것이 아닌 각각이 하나의 음절(char)를 표현하기 때문에

 

'자모' 단위 토큰에 대한 개념이 한국어와 다르게 나타난다.

 

이러한 점에서 자모 단위 토큰화는 한국어의 특성에서 나타난다.

 

예를 들어, "학교에"라는 어절은 [ㅎ,ㅏ,ㄱ,ㄱ,ㅛ,ㅇ,ㅔ]와 같이 자음과 모음으로 표현이 가능하다.

 

#. 한국어의 초성, 중성, 종성은 다음과 같이 존재한다.

 

- 초성(19)

: ㄱ, ㄲ, ㄴ, ㄷ, ㄸ, ㄹ, ㅁ, ㅂ, ㅃ, ㅅ, ㅆ, ㅇ, ㅈ, ㅉ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ

 

- 중성(21)

: ㅏ, ㅐ, ㅑ, ㅒ, ㅓ, ㅔ, ㅕ, ㅖ, ㅗ, ㅘ, ㅙ, ㅚ, ㅛ, ㅜ, ㅝ, ㅞ, ㅟ, ㅠ, ㅡ, ㅢ, ㅣ

 

- 종성(28)

: (없음), ㄱ, ㄲ, ㄳ, ㄴ, ㄵ, ㄶ, ㄷ, ㄹ, ㄺ, ㄻ, ㄼ, ㄽ, ㄾ, ㄿ, ㅀ, ㅁ, ㅂ, ㅄ, ㅅ, ㅆ, ㅇ, ㅈ, ㅊ, ㅋ, ㅌ, ㅍ, ㅎ

 

 

위에서 설명한 각 토큰의 단위(어절, 형태소, 음절, 자모)에 따라 텍스트의 분할이 가능하며,

 

텍스트를 처리하기 이전에 어떠한 토큰 단위로 텍스트를 처리하느냐가 중요한 요인으로 작용할 수 있다.

 

Comments