自定义TFPreTrainedModel模型如何调用Hugging Face的.generate()方法?
解决自定义TFPreTrainedModel使用.generate()的问题
核心原因
Hugging Face的生成模块会通过GENERATION_TF_MODEL_MAPPING映射表检查模型类是否兼容生成功能,你的自定义NextCateModel不在默认列表中,所以即使实现了get_lm_head()也会触发报错。
具体解决步骤
将自定义模型注册到生成兼容映射表
导入生成工具模块,把你的模型类添加到GENERATION_TF_MODEL_MAPPING中,绑定到基础的生成混合类:from transformers.generation.tf_utils import GENERATION_TF_MODEL_MAPPING from transformers import TFGenerationMixin # 注册自定义模型 GENERATION_TF_MODEL_MAPPING[NextCateModel] = TFGenerationMixin补全生成必需的模型方法
除了已有的get_lm_head(),还需要在NextCateModel类中实现两个关键方法:prepare_inputs_for_generation():处理生成阶段的输入格式,返回模型前向传播所需的参数_reorder_cache()(可选,但使用beam search时必需):重排beam search过程中的key/value缓存
示例代码:
class NextCateModel(TFPreTrainedModel): # 你的现有模型定义(自定义transformer层、隐藏层、最终全连接层等) def __init__(self, config): super().__init__(config) self.custom_transformer = CustomTransformerLayer(config) self.hidden_layers = tf.keras.layers.Dense(512, activation="relu") self.final_fc_layer = tf.keras.layers.Dense(config.vocab_size) def get_lm_head(self): # 返回语言模型头(你的最终全连接层) return self.final_fc_layer def prepare_inputs_for_generation(self, input_ids, attention_mask=None, **kwargs): # 适配生成时的输入格式,返回模型需要的参数 return { "input_ids": input_ids, "attention_mask": attention_mask, # 若模型需要其他参数(如token_type_ids),在此添加 } def _reorder_cache(self, past, beam_idx): # 处理beam search时的缓存重排,若不需要beam search可省略 reordered_past = [] for layer_past in past: # 假设你的transformer层的past是(key, value)元组 reordered_past.append( tuple(tf.gather(past_state, beam_idx) for past_state in layer_past) ) return tuple(reordered_past) # 你的模型前向传播方法 def call(self, input_ids, attention_mask=None, **kwargs): # 现有前向逻辑 outputs = self.custom_transformer(input_ids, attention_mask=attention_mask) hidden_output = self.hidden_layers(outputs.last_hidden_state[:, -1, :]) logits = self.final_fc_layer(hidden_output) return logits调用.generate()方法
注册并补全方法后,就可以正常调用生成功能了:model = NextCateModel.from_pretrained("your_model_path") outputs = model.generate(input_ids=input_tensor, max_length=50, num_beams=5)
内容的提问来源于stack exchange,提问作者Avani Gupta
相关产品推荐
相关产品推荐

