이전 글들에서 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을 한 숫자로 패딩을 하는 것이랍니다.
'BLOG > 머신러닝' 카테고리의 다른 글
[자연어처리] Okt : 형태소 단위로 나누는 방법 (파이썬) (0) | 2021.03.23 |
---|---|
[자연어처리] 파이썬으로 원 핫 인코딩(One-Hot Encoding) 구현하기 (코드) (0) | 2021.03.23 |
[자연어처리] 패딩(Padding) : 길이 지정 방법 - maxlen (파이썬) (0) | 2021.03.23 |
[자연어처리] 패딩(Padding) : 0을 뒤에 채우는 방법 (파이썬) (0) | 2021.03.23 |
[자연어처리] 파이썬 코드로 패딩(Padding) 구현하기 - pad_sequences (0) | 2021.03.22 |