패딩(Padding)이란?
예를 들어서, 아래와 같은 문장들이 있다고 가정해 보겠습니다.
- I love you
- You are so lovely
- I am loving you now
각 문장을 전처리 한 후에, 단어들을 등장 빈도로 정수 인코딩을 하게 되면 어떻게 될까요?
각 문장들은 길이와 토큰의 수가 다 다르기 때문에 인코딩된 정수의 개수도 서로 다르겠죠. 'I love you'는 3개, 'You are so lovely'는 4개, 'I am loving you now'에는 5개의 정수 인덱스가 포함될 겁니다.
그런데 만약에, 각 문장의 토큰 수가 모두 같다면 정수 인코딩 결과는 하나의 행렬로 만들 수 있을 겁니다. 위의 예시와 다르게 3개의 문장 전부 단어 토큰 수가 5개였다면 3*5 행렬이 만들어지겠죠.
그리고 데이터를 행렬로 만들면, 컴퓨터는 많은 데이터를 한 번에 묶어서 처리할 수 있습니다. 그러면 좀 더 복잡한 연산을 쉽게 처리하는게 가능해집니다. 때문에 각기 다른 문장의 길이를 서로 맞춰서 행렬 형태로 만드는게 필요한데요. 그 과정을 패딩이라고 합니다.
제로 패딩(Zero Padding)
패딩을 하는 방법은 여러가지인데요. 대표적으로 제로 패딩이 있습니다. 제로 패딩은 정수 인코딩을 한 문장 중 가장 긴 문장의 길이를 구하고, 길이가 짧은 문장에 숫자 0을 채워서 가장 긴 문장과 길이를 맞추는 방법입니다.
앞에서 정수 인코딩 작업을 할 때 빈도수에 따라 정수 인덱스를 1부터 부여했었죠? 때문에 정수 0은 아무 의미를 갖고 있지 않고, 컴퓨터는 해당 인덱스를 무시하게 됩니다.
앞에서 정수 인코딩을 했던 df['integer_encoded']를 활용해 제로 패딩을 한번 해 보겠습니다. 먼저 토큰을 가장 많이 가지고 있는 코퍼스에 몇개의 토큰이 있는지를 확인해 볼게요
max_len = max(len(item) for item in df['integer_encoded'])
print('토큰의 최대 개수:', max_len)
토큰이 가장 많은 코퍼스는 200개의 토큰으로 구성되어 있습니다. 이제, 다른 모든 코퍼스들의 길이가 200이 되도록 0을 채워 넣어 주겠습니다.
for tokens in df['integer_encoded']:
while len(tokens) < max_len:
tokens.append(0)
df[['integer_encoded']]
길이가 짧은 코퍼스의 토큰에 0으로 값이 채워진 것이 확인됩니다. 이제 위의 결과는 10 * 200 행렬로 표현할 수 있게 됐습니다.
'Data Analysis > Natural Language Processing(NLP)' 카테고리의 다른 글
WordNet (0) | 2023.07.04 |
---|---|
감성 분석이란? (0) | 2023.06.18 |
정수 인코딩 실습 (0) | 2023.06.15 |
정수 인코딩(Integer Encoding) (0) | 2023.06.15 |
자연어 전처리 후 통합하기 (0) | 2023.06.14 |