본문 바로가기

[NLP]

[NLP] Tokenization 토큰화

자연어 처리에서 크롤링 등으로 얻어낸 코퍼스 데이터가 필요에 맞게 전처리되지 않은 상태라면,

해당 데이터를 사용하고자 하는 용도에 맞게 토큰화&정제&정규화하는 일을 하게 됩니다.

 

주어진 코퍼스에서 토큰이라 불리는 단위로 나누는 작업을 토큰화라고 합니다.

 

1. 단어 토큰화(Word Tokenization)


토큰의 기준을 단어(word)로 하는 경우, 
단어 토큰화(word tokenization)라고 합니다. 
다만, 여기서 단어(word)는 단어 단위 외에도 단어구, 의미를 갖는 문자열로도 간주되기도 합니다.

 

보통 토큰화 작업은 
단순히 구두점이나 특수문자를 전부 제거하는 정제(cleaning) 작업을 수행하는 것만으로 해결되지 않습니다. 
구두점이나 특수문자를 전부 제거하면 토큰이 의미를 잃어버리는 경우가 발생하기도 합니다. 

심지어 띄어쓰기 단위로 자르면 사실상 단어 토큰이 구분되는 영어와 달리, 
한국어는 띄어쓰기만으로는 단어 토큰을 구분하기 어렵습니다. 

 

2. 토큰화의 기준

 

해당 데이터를 가지고 어떤 용도를 사용할 것인지에 따라 그 용도에 영향이 없는 기준으로 정해야한다

예를 들어, 영어의 아포스트로피는 어떻게 분류해야하는지에 대한 선택의 문제가 있는데 밑에 패키지들이 있습니다.

 

from nltk.tokenize import word_tokenize
from nltk.tokenize import WordPunctTokenizer
from tensorflow.keras.preprocessing.text import text_to_word_sequence

import nltk
nltk.download('punkt')

 

3. 토큰화에서 고려해야할 사항

 

1) 구두점이나 특수 문자를 단순 제외해서는 안 된다.

 

m.p.h나 Ph.D나 AT&T 같은 경우

마침표(.)를 제외하지 않는 경우

$45.55, 01/02/06,123,456,789원 경우 등

 

2) 줄임말과 단어 내에 띄어쓰기가 있는 경우.

 

we're는 we are의 줄임말입니다. 

rock 'n' roll이라는 단어

사용 용도에 따라, 하나의 단어 사이에 띄어쓰기가 있는 경우에도 하나의 토큰으로 봐야합니다.

토큰화 작업은 이런 단어를 하나로 인식할 수 있는 능력도 가져야합니다.

 

3) 표준 토큰화 예제

 

표준으로 쓰이고 있는 토큰화 방법 중 하나인 Penn Treebank Tokenization

from nltk.tokenize import TreebankWordTokenizer

규칙 1. 하이푼으로 구성된 단어는 하나로 유지한다.
규칙 2. doesn't와 같이 아포스트로피로 '접어'가 함께하는 단어는 분리해준다.

 

4. 문장 토큰화(Sentence Tokenization)

 

from nltk.tokenize import sent_tokenize

text에 저장된 여러개의 문장들로부터 문장을 구분하는 코드입니다.

 

한국어의 경우 박상길님이 개발한 KSS(Korean Sentence Splitter)이 있습니다

!pip install kss

kss.split_sentences(text)

 

5. 한국어에서의 토큰화 어려움

 

영어는 띄어쓰기를 기준으로 하는 띄어쓰기 토큰화를 수행해도 단어 토큰화가 잘 작동하지만,

한국어는 영어와 달리 띄어쓰기만으로 트큰화를 하기에는 부족합니다.

띄어쓰기 단위를 어절 이라고 하는데 한국어 NLP에서는 어절 토큰화를 지양합니다.

어절 토큰화와 단어 토큰화는 다릅니다.

 

한국어는 교착어가 특징인데 조사, 어미 등을 붙여서 말을 만드는 언어를 말합니다.

 

1) 교착어의 특성

한국어 토큰화에서는 형태소(morpheme) 란 개념을 반드시 이해해야 합니다. 형태소(morpheme)란 뜻을 가진 가장 작은 말의 단위를 말합니다. 이 형태소에는 두 가지 형태소가 있는데 자립 형태소와 의존 형태소입니다.

자립 형태소 : 접사, 어미, 조사와 상관없이 자립하여 사용할 수 있는 형태소. 그 자체로 단어가 된다. 체언(명사, 대명사, 수사), 수식언(관형사, 부사), 감탄사 등이 있다.
의존 형태소 : 다른 형태소와 결합하여 사용되는 형태소. 접사, 어미, 조사, 어간을 말한다

 

문장 : 에디가 책을 읽었다

자립 형태소 : 에디, 책
의존 형태소 : -가, -을, 읽-, -었, -다

 

2) 한국어는 띄어쓰기가 영어보다 잘 지켜지지 않는다.

한국어는 영어권과 비교해 띄어쓰기가 어렵고 잘 지켜지지 않는 경향이 있습니다.

하지만, 영어권에 비교해 한국어는 띄어쓰기가 잘 지켜지지 않으면 알아보기 어려운 경우가 많습니다.

결론적으로, 한국어는 띄어쓰기가 무시되는 경우가 많아 자연어 처리가 어려워졌습니다.

 

6. 품사 태깅(Part-of-speech tagging)

단어의 의미를 제대로 파악하기 위해서는 
해당 단어가 어떤 품사로 쓰였는지 보는 것이 주요 지표가 될 수도 있습니다. 
그에 따라 단어 토큰화 과정에서 각 단어가 어떤 품사로 쓰였는지를 구분해놓기도 하는데, 
이 작업을 품사 태깅(part-of-speech tagging)이라고 합니다. 

 

 

 

 

'[NLP]' 카테고리의 다른 글

[NLP] 정수 인코딩  (0) 2023.03.27
[NLP] 정규 표현식(Regular Expression)  (0) 2023.03.27
[NLP] 표제어 추출 and 어간 추출  (0) 2023.03.27
[NLP] 불용어(Stopword)  (0) 2023.03.27
[NLP] 정제 및 정규화  (0) 2023.03.27