본문 바로가기

공부

[NLP] 모델 정확도 향상(keras.preprocessing vs nltk.tokenize)

반응형

토큰화 ?

주어진 코퍼스(corpus)에서 토큰(token)이라 불리는 단위로 나누는 작업을 토큰화(tokenization)라고 함.

 

 

문제상황

Keras로 다중 클래스 분류 문제에서 모델 정확도 향상에 전처리 단계를 검토하는 중

현 개발중인 모델에서는

from keras.preprocessing.text import Tokenizer

를 사용하고 있지만, keras.preprocessing과 nltk 두개의 tokenizers 둘 중에 어떤 토큰화가 좋을까? 의문에서 시작.

 

 

keras.preprocessing vs nltk.tokenize

기본적으로 둘 다 일부 정규식 기반 토큰화를 사용하고 있음. 차이점은 복잡성(complexity)에 있음.

  • Keras Tokenizer : 특정 구두점 문자를 대체하고 나머지 공백 문자를 분할.

keras-team/keras-preprocessing의 text_to_word_sequence 함수 일부분

  • NLTK tokenize : Treebank 토크나이저를 사용하여 Penn Treebank에서와 같이 정규식을 사용하여 텍스트를 토큰화함.
    분할 표준 수축(split standard contractions), ex) [don't -> do, n't] , [they'll -> they, 'll]
    대부분 구두점 문자는 별도의 토큰으로 취급
    공백이 뒤에 오는 경우 쉼표와 작은 따옴표 분리
    줄 끝에 나타나는 별도의 마침표

 

예제(nltk의 예제) 비교 분석

- nltk.tokenize

from nltk.tokenize import TreebankWordTokenizer
sentences = '''Good muffins cost $3.88\nin New York. Please buy me\ntwo of them.\nThanks.'''
TreebankWordTokenizer().tokenize(s)

결과값 :

['Good',
 'muffins',
 'cost',
 '$',
 '3.88',
 'in',
 'New',
 'York.',
 'Please',
 'buy',
 'me',
 'two',
 'of',
 'them.',
 'Thanks',
 '.']

 

- keras.preprocessing.text

from keras.preprocessing.text import Tokenizer
sentences = ['''Good muffins cost $3.88\nin New York. Please buy me\ntwo of them.\nThanks.''']
tokenizer = Tokenizer(num_words = 100)
tokenizer.fit_on_texts(sentences)
word_index = tokenizer.word_index
print(word_index)

결과값 :

{'good': 1, 'muffins': 2, 'cost': 3, '3': 4, '88': 5, 'in': 6, 'new': 7, 'york': 8, 'please': 9, 'buy': 10, 'me': 11, 'two': 12, 'of': 13, 'them': 14, 'thanks': 15}

 

둘 다 정규식 기반 토큰화를 사용하기에 실행은 매우 빠름.

느껴지는 가장 큰 차이점을 이야기하자면, " we've "를 nltk는 ' we ', " 've "로 분류한 반면, keras는 " we've "로 분류함.

nltk는 대소문자를 구별하는 반면, keras는 모두 소문자로 치환함.

 


숫자, 날짜 등을 올바르게 구문 분석하고 품사 태깅, 엔티티 인식을 수행할 수 있는 신경망 기반 신경망을 실제로 원한다면 다음을 고려해볼 수 있음.

  • 텍스트 처리, 종속성 찾기, 엔터티 인식 등을 위한 전체 파이프라인을 제공하는 Stanford CoreNLP
  • SpaCy 는 또한 유사한 결과를 제공할 뿐만 아니라 GloVe와 같은 해당 단어 벡터를 로드하는 완전한 Python NLP 파이프라인입니다.

위의 두 가지 방법은 정규식 기반 방법보다 느리지만 처리하려는 소스 텍스트에 따라 다름.

 

 

 

 

출처 : https://stackoverflow.com/questions/55492666/what-is-better-to-use-keras-preprocessing-tokenizer-or-nltk-tokenize

 

 

 

반응형

'공부' 카테고리의 다른 글

[NLP] 한글 임베딩  (0) 2022.12.28
머신러닝 강의 1편  (1) 2022.12.21
Voting, Bagging, Boosting  (0) 2022.10.28
[NLP] Text Vectorization (작성중)  (0) 2022.09.08
상관계수의 종류  (0) 2022.08.30