Table of Contents
728x90
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
Cell In[14], line 31
26 sentence_encoded = tokenizer(instruction,
27 add_special_tokens=True,
28 return_tensors="pt") # Ensure tensors are returned for model input
30 # Generate the summary using the model
---> 31 summary_ids = model.generate(
32 sentence_encoded["input_ids"],
33 max_new_tokens=100
34 # max_length=max_target_length,
35 # min_length=40,
36 # num_beams=5, # Optional: control the generation strategy
37 # early_stopping=True, # Optional: stop early when all beams are finished
38 # no_repeat_ngram_size=2,
39 )
41 # Decode the encoded sentence, skipping special tokens
42 sentence_decoded = tokenizer.decode(
43 summary_ids[0], # Select the first (and usually only) sequence generated
44 skip_special_tokens=True # Skip special tokens in the final output
45 )
File /opt/conda/lib/python3.10/site-packages/torch/utils/_contextlib.py:115, in context_decorator.<locals>.decorate_context(*args, **kwargs)
112 @functools.wraps(func)
113 def decorate_context(*args, **kwargs):
114 with ctx_factory():
--> 115 return func(*args, **kwargs)
File /opt/conda/lib/python3.10/site-packages/transformers/generation/utils.py:1286, in GenerationMixin.generate(self, inputs, generation_config, logits_processor, stopping_criteria, prefix_allowed_tokens_fn, synced_gpus, streamer, **kwargs)
1278 logger.warning(
1279 "A decoder-only architecture is being used, but right-padding was detected! For correct "
1280 "generation results, please set padding_side='left' when initializing the tokenizer."
1281 )
1283 if self.config.is_encoder_decoder and "encoder_outputs" not in model_kwargs:
1284 # if model is encoder decoder encoder_outputs are created
1285 # and added to model_kwargs
-> 1286 model_kwargs = self._prepare_encoder_decoder_kwargs_for_generation(
1287 inputs_tensor, model_kwargs, model_input_name
1288 )
1290 # 5. Prepare input_ids which will be used for auto-regressive generation
1291 if self.config.is_encoder_decoder:
File /opt/conda/lib/python3.10/site-packages/transformers/generation/utils.py:638, in GenerationMixin._prepare_encoder_decoder_kwargs_for_generation(self, inputs_tensor, model_kwargs, model_input_name)
636 encoder_kwargs["return_dict"] = True
637 encoder_kwargs[model_input_name] = inputs_tensor
--> 638 model_kwargs["encoder_outputs"]: ModelOutput = encoder(**encoder_kwargs)
640 return model_kwargs
File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1518, in Module._wrapped_call_impl(self, *args, **kwargs)
1516 return self._compiled_call_impl(*args, **kwargs) # type: ignore[misc]
1517 else:
-> 1518 return self._call_impl(*args, **kwargs)
File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1527, in Module._call_impl(self, *args, **kwargs)
1522 # If we don't have any hooks, we want to skip the rest of the logic in
1523 # this function, and just call forward.
1524 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
1525 or _global_backward_pre_hooks or _global_backward_hooks
1526 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1527 return forward_call(*args, **kwargs)
1529 try:
1530 result = None
File /opt/conda/lib/python3.10/site-packages/transformers/models/t5/modeling_t5.py:985, in T5Stack.forward(self, input_ids, attention_mask, encoder_hidden_states, encoder_attention_mask, inputs_embeds, head_mask, cross_attn_head_mask, past_key_values, use_cache, output_attentions, output_hidden_states, return_dict)
983 if inputs_embeds is None:
984 assert self.embed_tokens is not None, "You have to initialize the model with valid token embeddings"
--> 985 inputs_embeds = self.embed_tokens(input_ids)
987 batch_size, seq_length = input_shape
989 # required mask seq length can be calculated via length of past
File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1518, in Module._wrapped_call_impl(self, *args, **kwargs)
1516 return self._compiled_call_impl(*args, **kwargs) # type: ignore[misc]
1517 else:
-> 1518 return self._call_impl(*args, **kwargs)
File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1527, in Module._call_impl(self, *args, **kwargs)
1522 # If we don't have any hooks, we want to skip the rest of the logic in
1523 # this function, and just call forward.
1524 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
1525 or _global_backward_pre_hooks or _global_backward_hooks
1526 or _global_forward_hooks or _global_forward_pre_hooks):
-> 1527 return forward_call(*args, **kwargs)
1529 try:
1530 result = None
File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/sparse.py:162, in Embedding.forward(self, input)
161 def forward(self, input: Tensor) -> Tensor:
--> 162 return F.embedding(
163 input, self.weight, self.padding_idx, self.max_norm,
164 self.norm_type, self.scale_grad_by_freq, self.sparse)
File /opt/conda/lib/python3.10/site-packages/torch/nn/functional.py:2233, in embedding(input, weight, padding_idx, max_norm, norm_type, scale_grad_by_freq, sparse)
2227 # Note [embedding_renorm set_grad_enabled]
2228 # XXX: equivalent to
2229 # with torch.no_grad():
2230 # torch.embedding_renorm_
2231 # remove once script supports set_grad_enabled
2232 _no_grad_embedding_renorm_(weight, input, max_norm, norm_type)
-> 2233 return torch.embedding(weight, input, padding_idx, scale_grad_by_freq, sparse)
IndexError: index out of range in self
입력된 ID가 어휘 크기(vocab size)를 초과한다는 것은, 모델이 사용하는 토크나이저가 생성한 토큰 ID가 모델의 어휘 범위 내에 있지 않다는 것을 의미합니다. 이를 이해하려면, 토크나이저와 어휘(vocabulary)의 관계를 먼저 설명해야 합니다.
어휘 크기 (Vocabulary Size)
모든 언어 모델에는 사전처럼 동작하는 **어휘집(vocabulary)**이 있습니다. 이 어휘집에는 모델이 처리할 수 있는 토큰(token) 들이 포함되어 있으며, 각 토큰은 고유한 숫자 ID로 매핑됩니다. 이 숫자 ID는 모델의 입력으로 사용됩니다.
예를 들어:
- "Hello"라는 단어는 어휘에서 ID 1234로 매핑될 수 있습니다.
- "world"는 ID 5678로 매핑될 수 있습니다.
모델이 처리할 수 있는 어휘의 크기는 한정되어 있습니다. 즉, 모델이 지원하는 어휘 크기만큼의 ID가 존재하며, 이 ID 범위를 벗어난 값이 입력되면 모델은 이를 처리할 수 없습니다.
문제의 원인
**"입력된 ID가 어휘 크기를 초과한다"**는 것은 토크나이저가 어떤 이유로든 어휘집에 없는 토큰을 생성했거나, 해당 토큰이 어휘집에서 유효한 범위 내의 ID로 매핑되지 않았다는 뜻입니다.
예를 들어:
- 모델의 어휘 크기가 32,000이면, 모델이 처리할 수 있는 ID는 0에서 31,999까지입니다.
- 하지만 만약 토크나이저가 32,000 이상의 ID를 생성했다면, 그 ID는 모델의 어휘 범위에 속하지 않기 때문에 모델이 처리할 수 없습니다.
이 문제가 발생하는 이유
- 특수 토큰 추가: 새로운 특수 토큰(예: #Person1#)을 추가했지만 모델이 그 토큰에 대한 임베딩을 학습하지 않았거나 모델의 어휘집이 이 추가된 토큰을 반영하지 않았을 수 있습니다. 모델의 임베딩 크기를 업데이트하지 않으면, 토크나이저는 새로운 토큰을 생성하지만 모델은 그 토큰에 대한 정보를 갖고 있지 않습니다.
- 잘못된 토크나이저 사용: 모델에 맞지 않는 토크나이저를 사용할 경우, 토크나이저가 모델의 어휘 크기를 넘어서는 토큰을 생성할 수 있습니다. 예를 들어, 잘못된 버전의 토크나이저를 사용하거나 모델과 일치하지 않는 토크나이저를 사용할 때 이러한 오류가 발생할 수 있습니다.
해결 방법
- 토크나이저에 특수 토큰 추가 후, 모델의 임베딩 테이블 크기 업데이트: 새로운 토큰을 추가할 경우, 모델의 임베딩 테이블 크기를 반드시 토크나이저의 어휘 크기에 맞춰 조정해야 합니다. 이 작업은 model.resize_token_embeddings(len(tokenizer))로 수행됩니다.
- 토크나이저와 모델의 일치 여부 확인: 토크나이저와 모델이 동일한 어휘집을 사용하고 있는지 확인합니다. 토크나이저와 모델이 일치하지 않으면 모델이 입력을 제대로 처리할 수 없습니다.
결론적으로, 입력된 ID가 어휘 크기를 초과한다는 것은 모델이 처리할 수 있는 토큰 범위를 벗어난 ID가 입력으로 사용되었다는 뜻이며, 이를 해결하려면 토크나이저와 모델의 어휘 크기와 설정을 일치시켜야 합니다.
'DeepLearning > NLP' 카테고리의 다른 글
LoRA(Low-Rank Adaptation)와 같은 PEFT(Parameterized Efficient Fine-Tuning) 기술 적용 (0) | 2024.09.09 |
---|---|
Tokenizer 만드는 방법 (0) | 2024.09.04 |
[LLM] embed_tokens 임베딩 크기 수정하면? (0) | 2024.09.04 |
[LLM][Google/T5] T5ForConditionalGeneration 모델의 구조 (0) | 2024.09.04 |
LLM(Large Language Models, LLMs)의 발전과 계보 (0) | 2024.09.03 |
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Numpy
- PEFT
- 티스토리챌린지
- 해시
- #패스트캠퍼스 #패스트캠퍼스AI부트캠프 #업스테이지패스트캠퍼스 #UpstageAILab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- #패스트캠퍼스 #UpstageAILab #Upstage #부트캠프 #AI #데이터분석 #데이터사이언스 #무료교육 #국비지원 #국비지원취업 #데이터분석취업 등
- 손실함수
- 코딩테스트
- git
- Transformer
- LLM
- t5
- speaking
- nlp
- clustering
- Lora
- Python
- 리스트
- cnn
- LIST
- #패스트캠퍼스 #패스트캠퍼스ai부트캠프 #업스테이지패스트캠퍼스 #upstageailab#국비지원 #패스트캠퍼스업스테이지에이아이랩#패스트캠퍼스업스테이지부트캠프
- 파이썬
- classification
- Hugging Face
- English
- 오블완
- RAG
- Array
- recursion #재귀 #자료구조 # 알고리즘
- Github
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
글 보관함