본문 바로가기

BLOG/머신러닝

[자연어처리] 패딩(Padding) : 다른 숫자로 패딩하는 방법 (파이썬)

이전 글들에서 pad_sequences() 함수를 사용하여 패딩을 구현하고, 길이 지정 등 다양하게 패딩하는 방법에 대해서 계속 살펴보았는데요, 이번 글에서는 0이 아닌 다른 값으로 패딩하는 방법에 대해서 살펴보겠습니다.

 

 

먼저, pad_sequences() 함수를 이용하여 길이 10의 제로패딩을 하는 코드를 작성해보겠습니다.

 

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

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

#정수 인코딩
tokenizer= Tokenizer()
tokenizer.fit_on_texts(sentences)
encoded = tokenizer.texts_to_sequences(sentences)

#패딩
from keras.preprocessing import sequence
padded = sequence.pad_sequences(encoded, maxlen = 10)

print(padded)

 

[[0 0 0 0 0 0 0 0 3 1]
 [0 0 0 0 0 0 0 1 2 4]
 [0 0 0 0 0 0 2 5 6 1]
 [0 0 0 0 0 0 0 0 7 1]]

 

패딩된 결과를 보면 길이가 10만큼 제로 패딩이 된 것을 확인할 수 있습니다.

 

 

하지만, 만약 0이 아닌 다른 숫자로 패딩을 하려면 어떻게 해야 할까요?

바로, pad_sequences() 함수 안에 value라는 값을 지정해주면 되는데요, 만약, 8이라는 숫자로 채우고 싶다면 다음과 같이 코드를 작성하면 됩니다.

 

padded = sequence.pad_sequences(encoded, maxlen = 10, value = 8)

 

이렇게 입력한 뒤 실행하고 패딩된 결과를 출력하면 다음과 같이 출력됩니다.

 

[[8 8 8 8 8 8 8 8 3 1]
 [8 8 8 8 8 8 8 1 2 4]
 [8 8 8 8 8 8 2 5 6 1]
 [8 8 8 8 8 8 8 8 7 1]]

 

출력된 결과를 보면, 8로 패딩이 된 것을 확인할 수 있습니다.

 

 

이렇게 0이 아닌 다른 값으로 패딩하는 방법에 대해 살펴보았는데요, 주로 0이 아니라면 단어 집합의 크기에 +1을 한 숫자를 사용합니다. 현재 정수 인코딩이 된 값들과 겹치지 않아야 하기 때문에 +1을 한 숫자로 패딩을 하는 것이랍니다.