본문 바로가기

BLOG/머신러닝

[자연어처리] 패딩(Padding) : 길이 지정 방법 - maxlen (파이썬)

이전 글들에서 패딩을 하는 기본적인 방법과, 제로 패딩을 할 때 0을 뒤로 채우는 방법 등에 대해서 살펴보았는데요, 이번에는 패딩을 할 때, 길이를 지정하는 방법에 대해서 살펴보도록 하겠습니다.

 

 

먼저, 기본적으로 패딩을 하는 코드를 작성하고, 그 결과를 보겠습니다.

 

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)

 

print(padded)

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

 

pad_sequences() 함수를 이용하여 ['place', 'tree'], ['tree', 'nice', 'green'], ['nice', 'sky', 'and', 'tree'], ['bird', 'tree'] 라는 단어에 대해 패딩을 한 결과, 최대 단어가 4개인 것에 따라 패딩의 길이도 최대 길이인 4로 지정이 되었습니다.

 

하지만, 패딩의 길이를 더 늘리고 싶거나, 단어의 나열 수가 너무 많아 길이를 짧게 하고 싶을 수 있는데요, 이러한 경우 pad_sequences() 함수 안에 maxlen의 값을 입력해서 그 값을 지정해주면 됩니다.

 

따라서 만약 최대 길이를 10으로 지정하고 싶다면 아래와 같이 코드를 작성하면 됩니다.

 

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

 

이렇게 입력한 뒤, 패딩된 값을 출력하면 다음과 같이 길이가 10으로 패딩된 결과가 나옵니다.

 

[[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]]

 

길이를 지정하는 것은 은근히 많이 사용되는데요, 주로 길이를 줄이기 위해 사용됩니다. 패딩된 길이가 너무 길어지면 그만큼 빈도수가 낮은 데이터가 포함이 되기 때문입니다. 따라서 빈도수가 높은 데이터만 갖고 분석을 하기 위해 길이를 짧게 지정해 주는게 좋습니다.