본문 바로가기

BLOG/머신러닝

[자연어처리] 정수 인코딩 하기 - fit_on_texts()

단어에 정수를 부여하는 것을 정수 인코딩이라고 하는데요,

자주 사용되는 정수 인코딩 방법은 단어를 빈도수 순으로 정렬한 뒤, 빈도수가 높은 순서대로 차례대로 낮은 숫자부터 부여하는 방법입니다.

 

한편, 케라스에서 fit_on_texts() 라는 함수를 제공하는데요, 이 함수를 이용하면 문자열 데이터(코퍼스)를 빈도수 기준으로 단어 집합을 생성해 줍니다. 그리고나서 맵핑을 위해 texts_to_sequences() 함수를 사용하면 되는데요, 아래 코드를 보면서 살펴보도록 하겠습니다.

 

 

1. 필요한 라이브러리 설치

먼저 필요한 라이브러리를 설치해줍니다.

 

import numpy as np
from tensorflow.keras.preprocessing.text import Tokenizer

 

 

2. fit_on_texts() : 빈도수 기준으로 단어 집합 생성

그리고나서, 사용할 문자열 데이터(코퍼스)를 fit_on_texts()를 이용하여 단어 집합으로 생성해줍니다.

 

sentences = [['place', 'tree'], ['tree', 'nice', 'green'], ['nice', 'sky', 'and', 'tree'], ['bird', 'tree']]

tokenizer= Tokenizer()
tokenizer.fit_on_texts(sentences)

 

만약 각 단어에 대한 빈도수를 알고 싶다면 다음과 입력해서 알 수 있습니다.

 

print(tokenizer.word_counts.items())

#output :
odict_items([('place', 2), ('tree', 8), ('nice', 4), ('green', 2), ('sky', 2), ('and', 2), ('bird', 2)])

 

각 숫자는 빈도수 순위를 나타내며, 가장 빈도가 많았던 'tree'가 1로 인코딩 된 것을 확인할 수 있습니다.

 

 

3. texts_to_sequences() : 맵핑하기

마지막으로, texts_to_sequensces() 함수를 이용하여 맵핑을 해줍니다.

 

word_encoded = tokenizer.texts_to_sequences(sentences)
print(word_encoded)

 

#output :
[[3, 1], [1, 2, 4], [2, 5, 6, 1], [7, 1]]

 

맵핑한 결과를 출력한 결과, 위와 같이 sentences 변수에 있던 단어가 모두 정수로 인코딩 된 것을 확인할 수 있습니다.