안녕하세요, HELLO
오늘은 transformer를 사용하여 language 모델, LLM 모델을 추론 (inference) 시 input token size를 맞춰주기 위해 padding을 진행할 때, padding_side는 어떻게 설정하고, 왜 pad_token을 eos_token으로 설정하는지에 대해서 살펴보고자 합니다.
우선 토큰화(Tokenization)와 transformer의 input_id, attention_maks에 대해서 살펴보고, 본격적으로 padding_side와 pad_token에 대해서 살펴보겠습니다.
CHAPTER 1. '토큰화(Tokenization)' 선행 지식
CHAPTER 2. 'Transformer' 개념 정리
CHAPTER 3. ' Transformer Inference' padding의 궁금증
CHAPTER 1. '토큰화(Tokenization)' 선행 지식
■ 토큰화 (Tokenization)
토큰화는 자연어 처리에서 텍스트를 작은 단위로 나누는 과정을 말합니다. 이 과정은 보통 단어, 구두점, 형태소 등을 텍스트에서 추출하여 각각의 의미 단위로 분리하는 작업을 포함합니다. 이 과정은 모델이 텍스트를 이해하고 처리할 수 있도록 적절한 입력 형태로 변환하는 데 중요한 역할을 합니다.
■ 토크나이저 (Tokenizer)
Tokenizer는 텍스트를 토큰으로 분할하는 도구나 알고리즘을 말합니다. 이 도구는 주어진 텍스트를 토큰 단위로 쪼개고, 각각의 토큰을 해당하는 정수 ID로 변환하여 모델에 제공합니다. Tokenizer는 모델의 어휘 집합을 구성하고, 텍스트를 정수 ID로 변환하는 역할을 수행합니다.
여러 종류의 Tokenizer가 있으며, 그 종류는 사용되는 모델이나 언어, 특정한 텍스트 처리 요구 사항에 따라 다를 수 있습니다. 예를 들어, BERT 모델에는 WordPiece tokenizer가 사용되고, GPT 모델에는 Byte Pair Encoding(BPE) tokenizer가 사용됩니다. 이러한 Tokenizer들은 각각의 특징과 장단점을 가지고 있으며, 특정한 상황에 따라 선택되어 사용됩니다.
Tokenizer는 토큰화된 텍스트를 모델에 입력으로 전달하기 전에 또 다른 중요한 단계를 수행합니다. 이는 토큰에 대한 특수한 토큰들을 추가하거나 패딩을 적용하는 등의 전처리 작업을 포함합니다. 또한 Tokenizer는 어휘 집합을 구축하고 관리하는 역할도 수행합니다.
요약하자면, Tokenizer는 텍스트를 토큰으로 분할하고 정수 ID로 변환하여 모델에 입력으로 전달하는 역할을 합니다. 이를 통해 모델은 자연어 처리 과정에서 필요한 정보를 효율적으로 활용할 수 있게 됩니다.
CHAPTER 2. 'Transformer' 개념 정리
■ token_ids란 무엇인가
Transformer 모델에서 사용되는 "token_ids"는 입력 시퀀스를 구성하는 각 토큰에 대응하는 정수 값입니다. 이 값은 일반적으로 어휘 집합(vocabulary) 내에서 각 토큰에 할당된 고유한 인덱스를 나타냅니다. 각 토큰이 해당하는 정수 값으로 매핑되면 이를 이용해 모델은 텍스트 데이터를 처리하고 이해할 수 있습니다.
여기서 중요한 개념 중 하나는 "토큰화(tokenization)"입니다. 텍스트 데이터는 모델에 입력되기 전에 토큰화 과정을 거치게 됩니다. 이 과정에서 문장은 공백이나 구두점 등을 기준으로 단어나 부분 단어로 분할됩니다. 이때 분할된 각 부분은 모델의 어휘 집합 내의 토큰에 매핑됩니다. 그리고 각 토큰은 고유한 정수 ID로 변환됩니다.
예를 들어, "안녕하세요, 반가워요"라는 문장을 토큰화하면 "안녕하세요", ",", "반가워요"와 같은 토큰들이 생성될 수 있습니다. 각 토큰은 어휘 집합 내에서 고유한 인덱스에 대응되며, 이에 따라 각 토큰은 해당하는 정수 값으로 변환됩니다. 따라서 "안녕하세요"는 어휘 집합에서 index 0에 해당하는 정수 값으로 변환될 수 있고, 이는 "token_ids"로 사용됩니다.
이와 같은 과정을 거치면 모델은 텍스트를 숫자로 효율적으로 표현할 수 있게 되며, 이를 바탕으로 문장의 의미를 이해하고 처리할 수 있습니다.
여기서 유의해야 할 점은 모든 토큰이 어휘 집합에 존재하지 않을 수 있다는 것입니다. 이 경우에는 특수한 토큰으로 대체되거나 무시될 수 있습니다. 따라서 "token_ids"에는 텍스트의 모든 토큰이 정수로 표현되지 않을 수 있다는 점을 염두에 두어야 합니다.
■ attention_mask란 무엇인가
Attention mask는 주어진 시퀀스에서 각 토큰이 얼마나 중요한지를 결정하는 Attention mechanism을 보조하는 역할을 합니다. 특히 Transformer 모델에서, 입력 시퀀스의 각 토큰 간의 상호 작용을 나타내는 어텐션 가중치를 계산할 때, attention mask는 주목할만한 토큰과 무시할 부분을 나타내는 데 사용됩니다.
■ Attention Mask의 역할
□ 패딩된 부분 제외
Transformer 모델은 입력 시퀀스의 길이를 일정하게 유지하기 위해 패딩을 추가합니다. 패딩은 일반적으로 특정한 토큰(예: 0)을 사용하여 시퀀스의 길이를 맞춥니다. 이러한 패딩 된 부분은 실제 문장에 해당하지 않으며, 모델이 학습하거나 예측하는 데에 필요한 정보를 제공하지 않습니다. 따라서 attention mask는 이러한 패딩 된 부분을 모델이 무시하도록 지시합니다.
예를 들어, "나는 고양이를 좋아해"라는 문장과 "그녀는 개를 좋아해"라는 문장을 패딩하여 Transformer 모델에 입력한다고 가정해 봅시다. 두 번째 문장이 첫 번째 문장보다 짧기 때문에 "그녀는 개를 좋아해" 뒤에 패딩이 추가됩니다. Attention mask는 이러한 패딩 된 부분을 식별하여 모델이 "그녀는 개를 좋아해" 문장에 포함된 정보에만 집중하도록 유도합니다.
□ 다수의 시퀀스 처리
Transformer 모델은 일반적으로 여러 개의 입력 시퀀스를 동시에 처리할 수 있습니다. 이러한 다중 시퀀스 처리는 하나의 배치(batch)로 구성되어 모델에 동시에 입력됩니다. 그러나 각 시퀀스의 길이가 서로 다를 경우, 모델은 입력 시퀀스의 최대 길이에 맞추기 위해 패딩을 적용해야 합니다.
이때 attention mask는 각 시퀀스의 실제 길이를 고려하여 적절하게 패딩된 부분을 처리합니다. 즉, 각 시퀀스의 끝에 위치한 패딩 된 토큰을 식별하여 attention mask를 생성하고, 모델이 이를 무시하도록 합니다. 이렇게 함으로써 Transformer 모델은 다수의 시퀀스를 효율적으로 처리하고, 각 시퀀스의 실제 정보에만 집중하여 올바른 예측을 수행할 수 있습니다.
Attention mask는 패딩된패딩 된 부분을 제외하여 모델이 실제 정보에만 집중하도록 유도하고, 다중 시퀀스 처리 시 각 시퀀스의 실제 길이를 고려하여 패딩 된 부분을 적절히 처리합니다. 이를 통해 모델은 입력 데이터를 효율적으로 처리하고, 불필요한 정보를 무시함으로써 성능을 향상할 수 있습니다.
□ 예시
예를 들어, 다음과 같은 두 문장을 처리하는 경우를 생각해봅시다
- 문장 1 "나는 고양이를 좋아해"
- 문장 2 "그녀는 개를 좋아해"
두 문장을 토큰화하고 패딩을 적용한 후, 각 토큰에 대한 attention mask를 생성합니다. 이때, 패딩 된 부분은 0으로 표시하고 실제 단어가 있는 부분은 1로 표시합니다. 결과적으로, attention mask는 다음과 같이 생성될 수 있습니다
- 문장 1 [1, 1, 1, 1, 0]
- 문장 2 [1, 1, 1, 1, 1]
attention mask를 통해 모델은 각 토큰의 중요성을 판단할 때 패딩된 부분을 무시하고 실제 단어가 있는 부분에 집중할 수 있게 됩니다.
CHAPTER 3. ' Transformer Inference' padding의 궁금증
■ padding할 때는 padding_side가 left인가 right인가?
Transformer 모델에서 패딩은 주로 입력 시퀀스의 길이를 맞추기 위해 사용됩니다. 이때, 패딩이 왼쪽에 추가되는지 오른쪽에 추가되는지는 모델의 구현에 따라 다를 수 있습니다. 일반적으로는 padding_side가 right인 경우가 더 많지만, 구체적인 구현에 따라 다를 수 있습니다.
□ Padding Side
1. Right Padding (오른쪽 패딩)
- Transformer 모델에서 주로 사용되는 패딩 방식입니다.
- 입력 시퀀스의 끝에 패딩을 추가하여 시퀀스의 길이를 맞춥니다.
- 대부분의 토크나이저는 기본적으로 이 방식을 사용합니다.
- 이 방식을 사용하면 모델이 입력 시퀀스의 실제 내용을 끝에서부터 처리할 수 있습니다.
2. Left Padding (왼쪽 패딩)
- 드물지만, 특정한 상황에서 이 방식이 사용될 수 있습니다.
- 왼쪽에 패딩을 추가하면 모델이 입력 시퀀스의 실제 내용을 시작부터 처리할 수 있습니다.
- 오른쪽 패딩과 달리, 시작 부분부터 순차적으로 처리하므로 특정한 상황에서 유용할 수 있습니다.
패딩을 어느 쪽에 추가할지는 모델의 하이퍼파라미터 중 하나이며, 이는 토크나이저나 라이브러리에 따라 달라질 수 있습니다. 대부분의 경우, 토크나이저나 라이브러리의 기본 설정에 따라 오른쪽 패딩이 사용되므로 추가적인 설정이 필요하지 않습니다. 하지만 모델을 구현하거나 사용할 때 이러한 세부 사항을 확인하는 것이 중요합니다.
■ 왜 tokenizer.pad_token = tokenizer.eos_token을 많이 사용하는가?
패딩 토큰과 문장 종료 토큰을 동일하게 설정하는 이유에 대해 자세히 알아보겠습니다.
1. 패딩 토큰의 역할
- Transformer 모델에서는 입력 시퀀스의 길이를 일정하게 유지하기 위해 패딩을 추가합니다. 이를 통해 모든 입력 시퀀스가 동일한 길이를 갖게 됩니다.
- 패딩 토큰은 모델이 실제 문장의 내용을 처리하는 데 방해가 되지 않도록 도와줍니다. 즉, 모델이 패딩 토큰을 무시하도록 유도합니다.
2. 문장 종료 토큰의 역할
- 문장의 끝을 나타내는 토큰은 보통 "end of sentence" (EOS) 토큰으로 표시됩니다. 이 토큰은 모델에게 문장이 종료되었음을 알려줍니다.
- EOS 토큰을 사용하면 모델이 문장의 끝을 인식하고, 해당 위치에서의 처리를 종료할 수 있습니다.
3. 동일한 설정 사용의 이점
- 패딩 토큰과 EOS 토큰을 동일하게 설정하면, 모델이 패딩된패딩 된 부분을 문장의 끝으로 처리하도록 유도할 수 있습니다. 즉, 모델은 패딩 된 부분을 실제 문장의 끝으로 간주하고 무시할 수 있습니다.
- 이는 모델이 학습할 때 패딩된 부분에 주의를 기울이지 않고, 실제 문장에 집중하여 학습할 수 있도록 도와줍니다.
□ 예시
- 예를 들어, "나는 사과를 좋아합니다"라는 문장을 토큰화하고 패딩을 적용한 후 다음과 같이 될 수 있습니다
- 토큰화된 문장 ["나는", "사과를", "좋아합니다", tokenizer.pad_token, tokenizer.pad_token]
- 패딩 토큰과 EOS 토큰을 동일하게 설정한 경우, 위의 패딩 된 부분은 모델에 의해 무시됩니다.
많은 경우에 Transformer 모델은 입력 시퀀스의 길이를 일정하게 유지하기 위해 패딩을 추가합니다. 패딩 토큰과 EOS 토큰을 동일하게 설정하는 것은 모델이 패딩 된 부분을 문장의 끝으로 처리하도록 유도하여, 모델이 실제 문장의 내용에만 집중하도록 도와주는 효과적인 전략입니다. 이 둘을 동일하게 설정함으로써 모델이 패딩된 부분을 문장의 끝으로 처리하도록 유도할 수 있습니다. 이는 모델의 학습과 예측 성능을 향상하는 데 도움이 될 수 있습니다. 이는 모델이 패딩을 무시하고 문장의 실제 내용에만 집중하도록 도와줍니다.
■ REFERENCE
[Hugging Face Forums] Do automatically generated attention masks ignore padding?
https://discuss.huggingface.co/t/do-automatically-generated-attention-masks-ignore-padding/15479
[Hugging Face Forums] Why does the falcon QLoRA tutorial code use eos_token as pad_token?
■ 마무리
'padding_side (패딩 방향)과 pad_token'에 대해서 정리해 봤습니다.
그럼 오늘 하루도 즐거운 나날 되길 기도하겠습니다
좋아요와 댓글 부탁드립니다 )
감사합니다.
'DATA_SCIENCE > Deep Learning' 카테고리의 다른 글
[딥러닝] Model-Agnostic Method 해설, 정리, 요약 (0) | 2024.08.15 |
---|---|
[딥러닝] 규제 (Regularization) 해설, 정리, 요약 (0) | 2023.11.05 |
[딥러닝] 차원의 저주 (Curse of dimensionality) 해설, 정리, 요약 (4) | 2023.10.31 |
[딥러닝] 음성 신호 처리 (Audio Signal Processing) 기본 용어 해설, 정리, 요약 (0) | 2023.04.02 |
[딥러닝] 데이터 거버넌스 (Data Governance) 해설, 정리, 요약 (0) | 2023.03.27 |
댓글