데이터 사이언스/머신러닝 & AI

[NLP] Character based tokenization

라니체 2022. 6. 13. 22:50
728x90

오늘은 NLP에서 Character based tokenization에 대해서 포스팅하겠다.

먼저 나오게된 계기는 띄어쓰기 기반의 토큰화가 Vocabulary 생성에 있어서 상당히 비효율성을 나타내기 때문이다.

예를 들어, "아버지가방에들어가신다" 처럼 띄어쓰기가 안되어있는 경우에는 사용자가 띄어쓰기를 수동적으로 해줘야할 수도 있고 "ㅋ", "ㅋㅋ", "ㅋㅋㅋ" 등 통신언어에서도 이 세개의 문장이 모두 같은 뜻임에도 불구하고 서로 다른 세개의 Vocabulary로 지정되게 된다.

 

Character based tokenization에 들어가기에 앞서 한국어의 문장 구성을 살펴보겠다.

한국어의 경우 하나의 문장이 음운, 음절, 형태소, 단어, 어절, 문장으로 이루어져 있게 된다.

여기서 음운이란, 말의 뜻을 구별해주는 소리의 단위, 즉 ㅎ, ㅏ, ㄴ, ㄱ, ㅡ,ㄹ  과 같은 모음,자음을 말한다.

음절이란, 음의 한 마디를 말하며 위의 예제에서는 "한", "글" 이 이에 해당한다.

형태소란 의미를 지닌 최소의 단위인데 예를 들어 먹었다 라는 문장이 있을때, "먹", "었", "다" 각각이 각자의 의미를

지니고 있음을 알 수 있다.

단어란 자립할 수 있는 최소의 단위를 말한다. 즉, 위의 예제에서 "먹었다" 는 자립할 수 있는 하나의 단위이다. 참고로 "먹", "었", "다" 와 같은 형태소는 독단으로 쓰였을 때에는 그 의미를 파악하기 어려우므로 자립할 수 없다.

어절이란 문장을 이루는 마디로, 문장 성분의 최소 단위로서 띄어쓰기의 단위가 된다.

참고로 영어에서는 어절=단어 가 되지만, 한국어에서는 어절과 단어는 다를 수 있다. 예를 들어, "나는 사과를 먹었다" 에서 "사과를" 은 어절인데 단어는 아니다. 반면, 영어에서는 "I ate apple." 에서는 "I", "ate", "apple" 모두 단어가 된다.

그리고 마침내, 어절이 모여서 하나의 문장이 된다.

 

그럼 이제 Character based tokenization에 대해 다뤄보겠다.

Character based tokenization이란, 쉽게 말해서 자모음이나 알파벳으로 Vocabulary를 구성하는 것이다.

이를 통해 Vocabulary에 해당 단어가 없는 OOV(Out of Vocabulary) 현상을 없앨 수 있으며, Vocabulary의 크기를 상당히 줄일 수 있어, 모델의 파라미터를 줄이고 추정의 efficiency를 높일 수 있다.

영어의 경우에는 알파벳을 vocabulary로 구성하면 되지만, 한국어의 경우에는 글자 하나하나가 자모음의 조합으로 이루어져 있으므로, 이에 대한 모든 경우의 수를 Vocabulary에 넣어주어야 한다. 즉, "갔", "다", "외", "왕" 등등과 같이 가능한 글자 하나하나를 모두 Vocabulary에 저장해주어야 하는것이다. 그리고 Vocabulary에 넣어줄 때에는 기계가 이를 이해하는 것에 대비해서 인덱싱을 같이 해준다.

예를 들어, Vocabulary에 "a"는 1, "b"는 2, "c"는 3, "갔" 은 4, "다" 는 5 와 같이 저장해두었다면

"abcabc" 라는 문장을 보고 기계는 숫자 123123 이라고 인식하고

"갔다" 라는 문장을 보고 숫자 45 라고 인식하는 것이다.

 

그렇다면 Character based tokenization 가 최선일까?

실제로 Character based tokenization은 표현법의 학습에 한계가 있다.

즉, 글자 하나하나는 사실상 아무런 의미도 같지 않으며 글자들이 연속하게 나열되면서 특정 의미를 갖게 되는데 단순히 글자나열만 주입해서는 기계가 이를 스스로 패턴화해서 학습하기 어렵다. 모델이 글자의 조합에 대한 정보나 의미를 파악하도록 해야하는데 이는 쉬운일이 아니다. 따라서 실제 사용할 때에는 글자보다는 의미를 가진 단위로 token화를 진행하고자 하며, 기존의 띄어쓰기 단위보다 좀 더 효과적인 단위를 찾고자 한다.

 

 

Reference

파이썬 딥러닝 파이토치, 이경택, 방성수, 안상준 저