■ [NLP] Tokenizer에 대해
Tokenizer에 대해 간단히 정리해보겠습니다.
● Tokenization
먼저 Tokenization이 무엇인가에 대해 알아야 할 것 같습니다.
간단하게 말하면 Tokenization이란 Text를 여러개의 Token으로 나누는 것을 말합니다.
보통 공백, 구두점, 특수문자 등으로 이를 나누는데요. 그 방법에 따라 다양한 Tokenizer가 있습니다.
● Tokenization
그리고 이런 Tokenization을 하는 것을 Tokenizer라고 합니다.
간단한 예로 2가지의 Tokenizer를 보겠습니다.
1. nltk.tokenize의 word_tokenize
from nltk.tokenize import WordPunctTokenizer
|
이 결과는 다음과 같습니다.
==> ['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
|
이 결과는 다음과 같습니다.
==> ['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
|
이 결과는 다음과 같습니다.
==> ["This is Mr.zamezzz's blog.", "Don't Thank you."]
이처럼 단어나 문장 모두 어떤 데이터를 쓰느냐에 따라 Tokenizer를 다르게 써야 합니다.
특히 문장을 Tokenization 하기 전 목적에 맞게 잘 정제하는 것이 중요한 것 같습니다.
감사합니다.
반응형