rueki
(NLP in TensorFlow) 3. Padding 본문
이전 시간에서 서로 다른 문장이 있을 때 문장의 길이를 맞춰줘야 한다는 것을 언급했었다.
이번 글에서는 문장의 길이를 맞추는 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 값으로는 후방에 붙게된다.
추가적으로 문장의 최대 길이도 설정할 수가 있다.
'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 |