자연어처리를 위한 Padding


1. What is Padding

자연어처리에서 입력 대상인 문장은 길이가 다양합니다. 다양한 길이의 문장을 matrix 형태로 딥러닝 모델에 입력하기 위해서 길이를 같게 만들어줘야 합니다. 이렇게 길이를 맞춰주는 행위를 padding이라고 하며 이때 사용되는 특수 token을 [PAD] token이라 합니다.

padding-01.png

위 그림과 같은 두 개의 문장과 각 단어에 부여된 일련번호가 (1, 2, ..., 6)까지 있다고 가정해 보겠습니다. 위문장을 일련번호로 변경하면 다음과 같습니다.

padding-02.png

이제 위의 일련번호를 각각 딥러닝 모델에 입력해서 학습을 하거나 추론할 수 있습니다.

다음은 두 개의 문장을 한꺼번에 입력하는 상황을 가정해 보겠습니다. 딥러닝에서는 학습의 효율이나 성능 개선을 위해서 여러 데이터를 한꺼번에 학습하는 경우가 일반적입니다.

padding-03.png

위 그림과 같이 길이를 맞춰주기 위해서 특수 token [PAD]를 짧은 문장의 뒤에 추가해서 길이가 같게 만들어 줬습니다. 위문장을 일련번호로 변경하면 다음과 같습니다.

padding-04.png

이제 위의 일련번호를 한꺼번에 딥러닝 모델에 입력해서 학습을 하거나 추론할 수 있습니다.

padding-05.png

위 그림과 같이 필요에 따라서는 [PAD]를 짧은 문장의 앞에 추가해서 길이를 같게 만들어 줄 수도 있습니다. 문장을 앞에서부터 뒤로 순서대로 연산을 하는 경우에는 [PAD]가 앞에 있는 것이 더 유리합니다.


2. Padding Strategy

padding-06.png

위 그림과 같은 입력을 가정해 보겠습니다. 문장의 뒤쪽에 회색 부분은 [PAD]를 의미합니다. 길이가 가장 긴 문장의 길이와 같게 하기 위해서 짧은 문장들에 [PAD]를 추가하다 보니 [PAD] 개수가 전체 token의 50%가 넘습니다. 만일 긴 문장의 길이가 길어진다면 [PAD] 개수는 점점 더 많아질 것입니다.

그런데 [PAD]가 많아질수록 연산 시간도 많이 걸리고 딥러닝 모델의 성능이 떨어질 가능성이 높습니다.

2.1. Max length 제한

padding-07.png

위 그림과 같이 [PAD]를 줄이는 첫 번째 방법은 문장의 max length를 제한하고 그 이상의 길이는 버리는 것입니다. 이 방법은 길이 제한으로 인해 문장이 잘리더라도 문제가 없을 경우에 사용이 가능합니다.

Max length는 각 문장의 token 길이를 통계적으로 분석해서 잘 결정해야 합니다.

2.2. Batch 단위 Padding

padding-08.png

위 그림과 같이 [PAD]를 줄이는 두 번째 방법은 batch 단위로 최대 길이와 같게 [PAD]를 추가하는 방법입니다. batch 단위는 딥러닝 모델이 한 번에 처리하는 단위입니다.

이 방식에서 [PAD]를 효과적으로 줄이기 위해서는 길이가 비슷한 문장들이 한 batch에 들어가도록 하면 더 효과적입니다.