본문 바로가기
NLP

Tokenization(토큰화)란 무엇일까?

by cuda 2022. 8. 20.

NLP에서의 Tokenization

NLP에서의 Tokenization은,

두 개 이상의 다른 token의 결합으로 이루어진 단어를 쪼개어, 단어의 숫자를 줄이고 희소성(sparseness)를 낮추기 위해 실행된다.

단어의 숫자를 줄이고 희소성을 낮춘다는 것은 과연 무슨 뜻일까? 다음 예제를 같이 살펴보자

 

희소성을 줄여주는 Tokenization

"배가 너무 고프다 저녁밥 뭐 먹어야하지"

"배는 별로 고프지 않아"

 

위와같은 두 개의 문장이 있다. 직관적으로 봤을 때, 여기서의 "배" 부분과 "고프다"  부분은 같은 의미이다.

하지만, 컴퓨터는 "배가"와 "배는" , "고픈데" 와 "고프지"를 다른 단어로 인식한다. 따라서, 같은 의미이지만 각각의 단어로 인식되는 것이다. 그만큼 희소성도 올라가게 된다.

그렇다면, 위의 예제를 mecab으로 tokenization한 결과를 같이 살펴보자

 

"배 가 너무 고프 다 저녁밥 뭐 먹 어야 하 지"

"배 는 별로 고프 지 않 아"

 

첫 번째로, "배"와 "가", 그리고 "는"이 분리되어 해당 부분에서 "배"라는 공통의 단어가 생성되었다.  뒷 부분에도 "고프"와 "다", "지"로 분리된 것을 볼 수 있다. 

이와 같이, 접사가 붙음으로써 다른 단어로 인식되던 것을 Tokenization을 통해 같은 단어로 묶어주어 희소성을 줄여주는 결과를 볼 수 있었다.

 

 

띄어쓰기 통일을 위한 Tokenization

"오늘저녁 뭐먹을거야"

"오늘 저녁 뭐 먹을 거야"

 

위와같은 두 개의 문장이 있다. 윗 문장과 밑 문장중에서 어떤 문장이 맞는 띄어쓰기로 작성된 문장일까?

당연하게도 밑의 문장이 맞는 띄어쓰기로 작성된 문장이다. 그러나 사실, "아버지가방에들어가신다" 와 같은 띄어쓰기의 중요성을 나타내는 대표적인 예시와는 다르게, 위의 문장들은 띄어쓰기가 다르게 쓰여도 의미의 전달에 큰 결함이 없다.

따라서, 이러한 특징은 언어 사용자마다 띄어쓰기를 다르게 하는 결과를 초래하고, 데이터를 수집해보면 같은 문장이지만 띄어쓰기가 제각각인 현상이 발생하고 만다.

 

"뭐먹을거야" 와 "뭐", "먹을", "거야"는 각각 다른 단어로 인식되기 때문에, 결과적으로 단어의 숫자가 늘어나고 희소성이 증가하는 결과가 발생한다. 이러한 문제를 해결하기 위해, Tokenization을 수행한다.

 

Tokenization with 형태소 분석기

위에서 열거한 문제들을 해결하기 위해 tokenization을 수행할 때, 형태소 분석기를 활용한다. 그렇다면, 형태소 분석기란 과연 무엇일까? 우선 형태소 분석이 무엇인지 알아보겠다.

 

형태소(Morpheme)

형태소란, 언어에서 의미를 가지는 가장 작은 단위이다. 이러한 형태소는 여러가지 기준으로 나뉘게 되는데, 글로만 나열하면 헷갈리니 시각 자료와 함께 살펴보겠다.

Mac 사용자분들 MindNode 써보세요 좋습니다

한국어는 다음과 같이 다양하게 나눌 수 있다. 이번 글에서는 여기서 형태소만 따로 분리해서 살펴보자

MindNode 최고

우선, 형태소는 의미의 유무로 실질 형태소와 형식 형태소로 나눌 수 있다.

실질 형태소는 실질적인 의미를 가지는 형태소이고, 명사, 동사, 형용사 부사가 이에 해당한다.

형식 형태소는 실질적인 의미는 없고, 문법적인 기능을 하는 형태소이다. 조사와 어미가 이에 해당한다.

 

예시를 하나 들어보자, "나는 음악이 좋아" 라는 문장이 있다고 가정해봤을때,

"나", "음악" "좋" 은 실질 형태소이다. "는" "이" "아" 는 형식 형태소이다.

 

문장에서 홀로 쓰일 수 있는지를 나타내는 자립성의 유무에 따라서 자립 형태소와 의존 형태소로 나눌 수 있다.

자립 형태소는 말 그대로 문장에서 혼자 쓰일 수 있지만, 

의존 형태소는 혼자 쓰이지 못하고 다른 형태소와 결합하여 쓰일 수 있다.

명사, 대명사, 수사, 관형사, 부사, 감탄사와 같은 친구들이 자립형태소에 해당된다.

 

"나는 음악이 좋아" 문장에서는 "나", "음악" 이 자립 형태소에 해당하며, "는", "이", "좋", "아" 가 의존 형태소에 해당된다.

 

형태소들 중에서는 특정한 형태소와만 결합하여 사용되는 종류도 있는데, 이를 유일 형태소라고 한다.

이때 주의할 점은, 유일 형태소라고 해서 무조건 하나의 형태소와만 결합하는게 아니라, 제한된 형태소와 결합된다는 것이다.

 

예를 들어, "화토" 라는 형태소는 "화톳불"의 "화토"로, "불"이라는 형태소와만 결합하고, "오솔길"의 "오솔"은 "길"이라는 형태소와만 결합한다.

 

이제 형태소를 알아봤으니, 형태소 분석을 살펴볼 차례이다.

 

형태소 분석이란?

형태소 분석이란, 형태소를 사용하여 언어적 속성의 구조를 파악하는 것이며, 이를 통해 문장을 이루는 각 단어에 품사를 부여하는 작업을 품사 태깅(Part of Speech Tagging, POS)라고 한다.

 

언어별로 다양한 형태소 분석기가 있다. 한국어의 경우 Mecab, Komoran, Kkma 등이 있으며 카카오에서 딥러닝을 이용하여 개발한 khaiii라는 형태소 분석기도 존재한다. 아래에 링크를 걸어둘테니 한번씩 보면 좋을것같다. 물론 나부터 써봐야겠다.

(TMI : Mecab은 원래 일본어 형태소 분석기였는데, 한국어를 wrapping하여 만든게 우리가 쓰는 Mecab-ko-dic이다. 그래서 터미널 상에서 Mecab을 실행하다 보면, 몇몇 명령어들은 일본어로 되어있는것을 볼 수 있다. Ex) Mecab -O wakati)

wakati = わかち 로 구분, 구별 이라는 뜻을 가지고 있어요. 그래서인지 wakati option을 적용하면 품사 태깅 없이 띄어쓰기만 나옵니다

https://github.com/kakao/khaiii

 

GitHub - kakao/khaiii: Kakao Hangul Analyzer III

Kakao Hangul Analyzer III. Contribute to kakao/khaiii development by creating an account on GitHub.

github.com

형태소 분석기를 이용하면 어떻게 출력이 될까? 위에서 이야기한 형태소 분석기 중, mecab을 이용하여 같이 살펴보겠다.

"안녕하세요 만나서 반갑습니다" 라는 문장을 mecab-ko-dic에 넣어보았다. 옆에 NNG와 같은 영어 대문자들이 각 품사를 나타낸다.

아래에 mecab-ko-dic의 품사 태그 설명표가 있는 주소를 넣어놨다.

http://openuiz.blogspot.com/2016/07/mecab-ko-dic.html

 

mecab-ko-dic 품사 태그 설명

C언어, 빅데이터, 검색엔진, 인공지능, 데이터마이닝

openuiz.blogspot.com

 

 

 

댓글