무효 클릭 IP 추적 중...
머신러닝,딥러닝/NLP

[Keras] Tokenizer 사용 방법 / 예제

꼬예 2023. 1. 4.

[ic]Tokenizer[/ic]는 토큰화와 정수인코딩을 할 때 사용되는 모듈이다.

 

Tokenization(토큰화) 란?
텍스트 뭉치를 단어, 구 등 의미있는 element로 잘게 나누는 작업을 의미한다.

정수인코딩 이란?
딥러닝 모델이 읽을 수 있도록 토큰화된 문자를 숫자로 변경해주는 작업이다.

 

1. 준비 사항

1) 데이터 준비

data_list = [
    
    '오늘 내 주식 올랐다', 
    '오늘도 수고했어', 
    '너는 할 수 있어', 
    '오늘 날씨가 좋다', 
    '지금처럼만 하면 잘될거야',
    '넌 너를 좋아해', 
    '지금 정말 잘하고 있어', 
    '사랑해', 
    '오늘 점심 맛있다', 
]

 

2) 모듈 import

from tensorflow.keras.preprocessing.text import Tokenizer

 

2. [ic]Tokenizer()[/ic]  사용방법

 

1) default 세팅

 

[ic]Tokenizer()[/ic] 객체 생성

tokenizer = Tokenizer()

 

[ic].fit_on_texts[/ic] 함수를 적용하면 글자(character)와 숫자 정보를 맵핑하는 작업을 한다.

tokenizer.fit_on_texts(texts=data_list) # 인자로 list 타입을 받음

 

어떤 숫자와 맵핑되었는지는 [ic].word_index[/ic] 프러퍼티를 통해 확인가능하다.

tokenizer.word_index # 어떤 숫자로 맵핑되었는지 확인

# output
'''
{'오늘': 1,
 '있어': 2,
 '내': 3,
 '주식': 4,
 '올랐다': 5,
 '오늘도': 6,
 '수고했어': 7,
 '너는': 8,
 '할': 9,
 '수': 10,
 '날씨가': 11,
 '좋다': 12,
 '지금처럼만': 13,
 '하면': 14,
 '잘될거야': 15,
 '넌': 16,
 '너를': 17,
 '좋아해': 18,
 '지금': 19,
 '정말': 20,
 '잘하고': 21,
 '사랑해': 22,
 '점심': 23,
 '맛있다': 24}
'''

 

[ic].texts_to_sequences[/ic]를 통해 정수인코딩된 문장을 출력해 보았다.

seqs = tokenizer.texts_to_sequences(texts=data_list) # 인자로 리스트 타입을 받는다.
for seq in seqs:
    print(seq)

# output
'''
[1, 3, 4, 5]
[6, 7]
[8, 9, 10, 2]
[1, 11, 12]
[13, 14, 15]
[16, 17, 18]
[19, 20, 21, 2]
[22]
[1, 23, 24]
'''

 

2) 글자 단위로 인코딩하기

tokenizer = Tokenizer(char_level=True)
tokenizer.fit_on_texts(texts=data_list) # 위정보로 fit시켜 숫자와 맵핑

[ic]char_level=True[/ic]는 한 글자 단위로 토큰화 적용을 의미한다.

default는 [ic]char_level=False[/ic]다. False는 단어 단위 인코딩이다.

 

[ic].word_index[/ic]를 통해 각 글자가 숫자로 맵핑된 것을 확인해 보자.

tokenizer.word_index # 어떤 숫자로 맵핑되었는지 확인
# output
'''
{' ': 1,
 '오': 2,
 '늘': 3,
 '다': 4,
 '어': 5,
 '있': 6,
 '수': 7,
 '고': 8,
 '너': 9,
 '좋': 10,
 '지': 11,
 '금': 12,
 '하': 13,
 '잘': 14,
 '해': 15,
 '내': 16,
 '주': 17,
 '식': 18,
 '올': 19,
 '랐': 20,
 '도': 21,
 '했': 22,
 '는': 23,
 '할': 24,
 '날': 25,
 '씨': 26,
 '가': 27,
 '처': 28,
 '럼': 29,
 '만': 30,
 '면': 31,
 '될': 32,
 '거': 33,
 '야': 34,
 '넌': 35,
 '를': 36,
 '아': 37,
 '정': 38,
 '말': 39,
 '사': 40,
 '랑': 41,
 '점': 42,
 '심': 43,
 '맛': 44}
'''

 

seqs = tokenizer.texts_to_sequences(texts=data_list) # 각문장이 숫자로 변환(정수인코딩) 확인
for seq in seqs:
    print(seq)


# output
'''
[2, 3, 1, 16, 1, 17, 18, 1, 19, 20, 4]
[2, 3, 21, 1, 7, 8, 22, 5]
[9, 23, 1, 24, 1, 7, 1, 6, 5]
[2, 3, 1, 25, 26, 27, 1, 10, 4]
[11, 12, 28, 29, 30, 1, 13, 31, 1, 14, 32, 33, 34]
[35, 1, 9, 36, 1, 10, 37, 15]
[11, 12, 1, 38, 39, 1, 14, 13, 8, 1, 6, 5]
[40, 41, 15]
[2, 3, 1, 42, 43, 1, 44, 6, 4]
'''

 

토큰화와 정수인코딩 후에는 어떤 작업을 해야 할까?

 

다음작업은 해당 포스팅에서 이어진다.

 

  • 트위터 공유하기
  • 페이스북 공유하기
  • 카카오톡 공유하기
이 컨텐츠가 마음에 드셨다면 커피 한잔(후원) ☕

댓글