✓ 서론 : 언어모델은 가장 높은 확률의 토큰을 내뱉는다는 것은 너무나도 자명하다. 하지만 이를 Huggingface에서는 어떻게 제공 하는지 간략하게 설명을 해보겠다.
✓ GenerationMixin : auto-regressive text 생성시 필요한 기능(메소드)을 담고 있는 클래스 → 그 중에서도 generate메소드가 중요하게 사용된다.
- auto-regressive 방식(디코더 전용방식) : GPT, LLaMA, LLaVA 등등
- Masked Language Model 방식 (인코더 전용방식): BERT, RoBERTa 등등
✓ generate() : Generates sequences of token ids for models with a language modeling head.
- (language modeling head = autoclassforcasallm 을 말하는것으로, 트랜스포머의 마지막계층에서 nn.Linear(hidden_dim, vocab_size) 을 추가함으로써 토큰을 예측하게 한다는 것임)
- 어텐션 마스크가 제공되지 않아도 추론하지만, 최상의 성능을 위해서는 어텐션 마스크를 전달해야함
from transformers import AutoTokenizer
import torch
tokenizer = AutoTokenizer.from_pretrained("mistralai/Mistral-7B-v0.1")
device = "cuda" if torch.cuda.is_available() else "cpu"
model_inputs = tokenizer(["A list of colors: red, blue"], return_tensors="pt").to(device)
# 여기서 model_inputs은 아래와 같은 형태로 구성되어 있다
'''
{
'input_ids': tensor(...),
'attention_mask': tensor(...)
}
'''
generated_ids = model.generate(**model_inputs)
tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
- generate 메소드는 아래와 같이 인자값을 넘겨줌으로 생성방식을 정할수 있다.
# beam sarch알고리즘 사용 (탐색후보 4개)
output = model.generate(inputs, num_beams=4, do_sample=True)
✓ GenerationConfig : 텍스트 생성(generation)과 관련된 다양한 파라미터와 기본값을 모아 놓은 설정 객체.
- bos_token_id : 1( Begin of sentence)
- EOS_token_id : 2 (2토큰을 출력하면 종료조건임)
- 생성되는 최대 길이는 : 4096 ( GenerationConfig가 없다면 최대 20개의 토큰만 반환)
- pad_token_id : 0 ( Train 수행 시 상이한 text의 길이(batch 가 2이상일 때)를 맞추기 위한 토큰)
- 참고로 일반적으로 패딩은 문장의 좌측에 추가한다.
'인공지능 (VLM, MLLM) > MLLM (Multimodal Large Language Model)' 카테고리의 다른 글
[Multimodal Large Language Model - Part 4] Autoclass (0) | 2025.02.27 |
---|---|
[Multimodal Large Language Model - Part 3] 모델구조 (1) | 2024.11.10 |
[Multimodal Large Language Model - Part 2] LOSS 계산 (0) | 2024.11.09 |
[Multimodal Large Language Model - Part 1] 서막 (3) | 2024.11.08 |
[Huggingface Trainer, SFTTrainer, TrainingArguments 설명 및 코드] (0) | 2024.10.23 |