위 내용을 참고하여 정리
1) Numpy로 패딩하기
import numpy as np
from tensorflow.keras.preprocessing.text import Tokenizer
preprocessed_sentences = [['barber', 'person'], ['barber', 'good', 'person'],
['barber', 'huge', 'person'], ['knew', 'secret'], ['secret', 'kept', 'huge', 'secret'],
['huge', 'secret'], ['barber', 'kept', 'word'], ['barber', 'kept', 'word'],
['barber', 'kept', 'secret'], ['keeping', 'keeping', 'huge', 'secret', 'driving', 'barber', 'crazy'],
['barber', 'went', 'huge', 'mountain']]
// 단어 집합을 만들고, 정수 인코딩을 수행
tokenizer = Tokenizer()
tokenizer.fit_on_texts(preprocessed_sentences)
encoded = tokenizer.texts_to_sequences(preprocessed_sentences)
print(encoded)
- 모두 동일한 길이로 맞춰주기 위해 가장 길이가 긴 문장의 길이를 계산한다.
max_len = max(len(item) for item in encoded)
print('최대 길이 :',max_len)
최대 길이 : 7
- 가장 길이가 긴 문장의 길이는 7이므로 모든 문장의 길이를 7로 맞춘다. 데이터에 특정 값을 채워 데이터 크기를 조정하는 것을 패딩이라고 한다. 숫자 0을 사용하고 있다면 제로 패딩이라고 한다.
for sentence in encoded:
while len(sentence) < max_len:
sentence.append(0)
padded_np = np.array(encoded)
padded_np
2) 케라스 전처리 도구로 패딩하기
케라스에서는 패딩을 위한 pad_sequences()를 제공하고 있다.
padded = pad_sequences(encoded)
padded
- pad_sequences는 기본적으로 문서의 앞에 0으로 채우기 때문에 Numpy와의 패딩 결과가 다르다. 뒤에 0을 채우고 싶다면 인자로 padding='post'를 해주면 된다.
padded = pad_sequences(encoded, padding='post')
padded
- 꼭 가장 긴 문서의 길이를 기준으로 해야하는 것은 아니다. 길이에 제한을 두고 패딩할 수 있다. maxlen의 인자로 정수를 주면, 해당 정수로 모든 문서의 길이를 동일하게 한다. 길이가 maxlen보다 짧은 문서들은 0으로 패딩되고, 긴 문서는 데이터가 손실된다.
padded = pad_sequences(encoded, padding='post', maxlen=5)
padded
- 기본적으로 앞쪽의 데이터가 손실되는데 뒤의 단어가 삭제되도록 하려면 truncating='post' 를 주면 된다.
'ML & DL & Data Science' 카테고리의 다른 글
[워드 임베딩] FastText (패스트텍스트) (0) | 2022.08.08 |
---|---|
[워드 임베딩] 워드 임베딩 (0) | 2022.08.08 |
[데이터마이닝] Pandas 기본 사용법 (0) | 2022.06.22 |
[데이터마이닝] Numpy 기본 사용법 (0) | 2022.06.22 |
[딥러닝] MNIST 손글씨 예측 (0) | 2022.06.22 |