전처리와 정수 인코딩으로 각 문장들을 수치화 한 후에 각 문장들을 하나의 행렬로 보고 가장 긴 문장의 길이로 모든 문장들의 길이를 맞춰주는 것을 패딩(Padding) 이라 한다. 빠른 병렬 연산을 위해 필요한 기능이며, 보통 숫자 0으로 채워넣는 제로 패딩(zero padding) 을 사용한다. 패딩 길이를 지정해서 긴 문장을 자를 수도 있다.
Numpy 패딩
import numpy as np encoded = [[1, 5], [1, 8, 5], [1, 3, 5], [9, 2], [2, 4, 3, 2], [3, 2], [1, 4, 6], [1, 4, 6], [1, 4, 2], [7, 7, 3, 2, 10, 1, 11], [1, 12, 3, 13]] max_len = max(len(item) for item in encoded) # 정수 인코딩 된 각 문장의 가장 많은 요소 개수 for item in encoded: while len(item) < max_len: item.append(0) # 제로 패딩 print(np.array(encoded)) ''' 출력 [[ 1 5 0 0 0 0 0] [ 1 8 5 0 0 0 0] [ 1 3 5 0 0 0 0] [ 9 2 0 0 0 0 0] [ 2 4 3 2 0 0 0] [ 3 2 0 0 0 0 0] [ 1 4 6 0 0 0 0] [ 1 4 6 0 0 0 0] [ 1 4 2 0 0 0 0] [ 7 7 3 2 10 1 11] [ 1 12 3 13 0 0 0]] ''' | cs |
Keras 패딩
from tensorflow.keras.preprocessing.sequence import pad_sequences encoded = [[1, 5], [1, 8, 5], [1, 3, 5], [9, 2], [2, 4, 3, 2], [3, 2], [1, 4, 6], [1, 4, 6], [1, 4, 2], [7, 7, 3, 2, 10, 1, 11], [1, 12, 3, 13]] print(pad_sequences(encoded, padding='post', maxlen=7, value=0)) | cs |
pad_sequences 한 줄로 위와 동일한 결과를 출력한다.
WRITTEN BY
- 손가락귀신
정신 못차리면, 벌 받는다.