AI/NLP

[NLP] Tokenizer에 대해

zamezzz 2020. 12. 1. 16:04

■ [NLP] Tokenizer에 대해 

Tokenizer에 대해 간단히 정리해보겠습니다.

 

 

 

 

● Tokenization

 

먼저 Tokenization이 무엇인가에 대해 알아야 할 것 같습니다.

 

간단하게 말하면 Tokenization이란 Text를 여러개의 Token으로 나누는 것을 말합니다.

 

보통 공백, 구두점, 특수문자 등으로 이를 나누는데요. 그 방법에 따라 다양한 Tokenizer가 있습니다.

 

 

● Tokenization

 

그리고 이런 Tokenization을 하는 것을 Tokenizer라고 합니다.


간단한 예로 2가지의 Tokenizer를 보겠습니다.

 

1. nltk.tokenize의 word_tokenize

from nltk.tokenize import WordPunctTokenizer
target_sentence = "This is zamezzz's blog. Thank you."
print(WordPunctTokenizer().tokenize(target_sentence))

이 결과는 다음과 같습니다.

==> ['This', 'is', 'zamezzz', "'", 's', 'blog', '.', 'Thank', 'you', '.']

 

2. keras.preprocessing.text의 text_to_word_sequence

from tensorflow.keras.preprocessing.text import text_to_word_sequence
target_sentence = "This is zamezzz's blog. Don't Thank you."
print(text_to_word_sequence(target_sentence))

이 결과는 다음과 같습니다.

==> ['this', 'is', "zamezzz's", 'blog', 'thank', 'you']

 

차이가차이가 보이시나요 ? 


첫 번째 Tokenizer는 문장을 잘게 잘게 쪼개는 모습을 볼 수 있습니다.


두 번째 Tokenizer는 문장의 각 token을 모두 소문자로 바꾸고, 구두점 또한 제외하였습니다.

이 처럼 Tokenizer 별로 Token을 생성하는 방식이 다르기 때문에 어떤 데이터를 다루냐에 따라 다른 Tokenizer를 사용해야 합니다.

 

● Sentence Tokenization

 

앞서 보신 문장을 단어로 나누는 Tokenizer 외 문장별로 나눠주는 Tokenizer 또한 있습니다.


마침표나 느낌표, 물음표 등으로 구분을 한다고 보시면 됩니다. 

 

하지만 마침표의 경우 항상 문장의 마지막이 아니라 Mr. / Dr. 등등 문장 중간에도 들어갈 수 있는데요.

 

영어 문장의 경우 이러한 케이스도 잘 잡아주고 있는 것을 확인할 수 있습니다.

from nltk.tokenize import sent_tokenize
target_sentence = "This is Mr.zamezzz's blog. Don't Thank you."
print(sent_tokenize(target_sentence))

이 결과는 다음과 같습니다.

==> ["This is Mr.zamezzz's blog.", "Don't Thank you."]

 

 

이처럼 단어나 문장 모두 어떤 데이터를 쓰느냐에 따라 Tokenizer를 다르게 써야 합니다.


특히 문장을 Tokenization 하기 전 목적에 맞게 잘 정제하는 것이 중요한 것 같습니다.

 

감사합니다.

반응형