Resize tokenizer and embedding. Note: This is the unoptimized version that may make your embedding size not be divisible by 64.
(special_tokens_dict: Dict, tokenizer,
model)
| 30 | |
| 31 | |
| 32 | def smart_tokenizer_and_embedding_resize(special_tokens_dict: Dict, tokenizer, |
| 33 | model): |
| 34 | """Resize tokenizer and embedding. |
| 35 | |
| 36 | Note: This is the unoptimized version that may make your embedding size not be divisible by 64. |
| 37 | """ |
| 38 | num_new_tokens = tokenizer.add_special_tokens(special_tokens_dict) |
| 39 | model.resize_token_embeddings(len(tokenizer)) |
| 40 | |
| 41 | if num_new_tokens > 0: |
| 42 | input_embeddings = model.get_input_embeddings().weight.data |
| 43 | output_embeddings = model.get_output_embeddings().weight.data |
| 44 | |
| 45 | input_embeddings_avg = input_embeddings[:-num_new_tokens].mean( |
| 46 | dim=0, keepdim=True) |
| 47 | output_embeddings_avg = output_embeddings[:-num_new_tokens].mean( |
| 48 | dim=0, keepdim=True) |
| 49 | |
| 50 | input_embeddings[-num_new_tokens:] = input_embeddings_avg |
| 51 | output_embeddings[-num_new_tokens:] = output_embeddings_avg |
| 52 | |
| 53 | |
| 54 | def make_same_shape(model_raw: Model, model_convert: Model, tokenizer_raw, |
no test coverage detected
searching dependent graphs…