rueki

(NLP in TensorFlow) 3. Padding 본문

DL/NLP

(NLP in TensorFlow) 3. Padding

륵기 2020. 3. 25. 21:18
728x90
반응형

이전 시간에서 서로 다른 문장이 있을 때 문장의 길이를 맞춰줘야 한다는 것을 언급했었다.

이번 글에서는 문장의 길이를 맞추는 Padding에 대해서 알아보도록 하자.

 

1 2 3 4 5 6 7
I Love My Dog      
I Love My Cat      
You Love My dog!      
Do you think my dog is amazing?

위의 표에 4개의 문장을 예시로 들겠다.

1번, 2번, 3번 문장의 길이는 4로 같지만 마지막 문장의 길이는 7이다. 위의 표에서 1 ~ 3번 문장의 5,6,7 번 칸은 어떻게 처리해야 될까?

이론적 개념으로는 0으로 채우면된다. 인코딩을 하고, 저 뒤의 빈칸을 0으로 채우면 어떻게 될까?

그렇게 되면, 4개의 문장 길이는 일단 통일이 될 것이다. 이 과정을 코드로 살펴보자.

 

from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences

sentences = [
    'I love my dog',
    'I love my cat',
    'You love my dog!',
    'Do you think my dog is amazing?'
]


tokenizer = Tokenizer(num_words=100 , oov_token='<OOV>') # 문장 토큰화
tokenizer.fit_on_texts(sentences) # 인코딩 진행
word_index = tokenizer.word_index
seq = tokenizer.texts_to_sequences(sentences)

#패딩 진행
padded = pad_sequences(seq,maxlen=5, padding='post') # seq to pad seq
padded1 = pad_sequences(seq) 

print(word_index)
print(seq)
print(padded)
print(padded1)

- word index

{'<OOV>': 1, 'my': 2, 'love': 3, 'dog': 4, 'i': 5, 'you': 6, 'cat': 7, 'do': 8, 'think': 9, 'is': 10, 'amazing': 11}

 

- seq

[[5, 3, 2, 4], [5, 3, 2, 7], [6, 3, 2, 4], [8, 6, 9, 2, 4, 10, 11]]

 

- padded

[[ 5 3 2 4 0]

[ 5 3 2 7 0]

[ 6 3 2 4 0]

[ 9 2 4 10 11]]

 

- padded1

[[ 0 0 0 5 3 2 4]

[ 0 0 0 5 3 2 7]

[ 0 0 0 6 3 2 4]

[ 8 6 9 2 4 10 11]]

 

 

pad_sequences를 통해서 패딩을 진행할 수 있는데, 이전에 Sequence 형태로 꼭 만들어줘야 한다.

패딩 결과를 보면 서로 다른 문장의 길이가 같아진 것을 볼 수가 있다.

pad_sequences에서 post로 설정 시, 인코딩 된 숫자들이 앞으로 붙고, default 값으로는 후방에 붙게된다.

추가적으로 문장의 최대 길이도 설정할 수가 있다.

728x90
반응형

'DL > NLP' 카테고리의 다른 글

어텐션 메커니즘 (Attention)  (0) 2020.04.18
(NLP in TensorFlow) 2. Text to Sequence  (0) 2020.03.24
(NLP in TensorFlow) 1. 단어 기반 인코딩  (0) 2020.03.24
글로브(Glove)  (0) 2019.07.04
패스트텍스트(FastText)  (0) 2019.07.04
Comments