Transformers代码笔记系列2(GenerationMixin生成模块)

应用实例

(添加transformers代码)

参数介绍

  • input_ids:对于encoder-decoder模型(例如:T5),input_ids用于encoder输入,生成encoder_outputs特征;对于decoder模型(例如:GPT3),input_ids用于提示词,如果input_ids为None,则初始化为bos_token_id
  • decoder_input_ids:用于encoder-decoder模型中decoder模块的输入
  • logits_processor:used to modify the prediction scores of the language modeling head applied at each generation step
  • max_new_tokens:最大可以生成的新词,和max_length作用一致,不同时使用
  • max_length
  • do_sample:bool, 是否使用采样策略,默认使用贪婪搜索
  • early_stopping:
  • num_beam
  • temperature
  • top_k
  • top_p
  • repetition_penalty: 重复度惩罚参数,1表示没有惩罚,详见:https://arxiv.org/pdf/1909.05858.pdf
  • length_penalty:Exponential penalty to the length. 1.0 means no penalty. Set to values < 1.0 in order to encourage the model to generate shorter sequences, to a value > 1.0 in order to encourage the model to produce longer sequences.
  • no_repeat_ngram_size:不能重复出现的ngram长度
  • encoder_no_repeat_ngram_size:出现在encoder_input_ids中的n-gram不能出现在decoder_input_ids中
  • bad_words_ids: 不被允许生成的词的list
  • use_cache:Whether or not the model should use the past last key/values attentions to speed up decoding
  • num_beam_groups: https://arxiv.org/pdf/1610.02424.pdf
  • diversity_penalty
  • output_scores:是否返回预测序列的打分
  • synced_gpus
  • model_kwargs:将被加到forward函数,如果是encoder-decoder model,则encoder参数不需要加前缀,而decoder参数需要加前缀‘decoder_’
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 PaddleNLP 模块建立 GPT-2 文本生成模型的代码示例: ```python import paddle import paddle.nn.functional as F from paddlenlp.transformers import GPT2Model, GPT2ForPretraining # 加载 GPT-2 预训练模型 model = GPT2Model.from_pretrained('gpt2-medium-en') # 定义文本生成模型 class GPT2Generator(paddle.nn.Layer): def __init__(self, decoder): super().__init__() self.decoder = decoder def forward(self, input_ids, position_ids=None, attention_mask=None): # 使用 GPT-2 的 decoder 生成文本 output = self.decoder(input_ids, position_ids=position_ids, attention_mask=attention_mask) return output # 加载 GPT-2 预训练模型的 decoder 部分作为文本生成模型的主体部分 decoder = model.transformer generator = GPT2Generator(decoder) # 定义生成文本的方法 def generate_text(model, prompt, max_len=50, temperature=1.0): model.eval() # 将 prompt 转换为 token_ids token_ids = model.tokenizer.encode(prompt) token_ids = paddle.to_tensor(token_ids).unsqueeze(0) # 生成文本 for i in range(max_len): output = model(token_ids) logits = output.logits[:, -1, :] / temperature probs = F.softmax(logits, axis=-1) next_token = paddle.multinomial(probs, num_samples=1) token_ids = paddle.concat([token_ids, next_token], axis=-1) # 将生成的 token_ids 转换为文本 generated_text = model.tokenizer.decode(token_ids.numpy().squeeze().tolist()) return generated_text # 测试文本生成模型 generated_text = generate_text(model=generator, prompt='PaddlePaddle is', max_len=20, temperature=0.7) print(generated_text) ``` 代码中使用了 PaddleNLP 模块中的 `GPT2Model` 和 `GPT2ForPretraining` 类,分别表示 GPT-2 预训练模型和 GPT-2 文本生成模型。首先加载 GPT-2 预训练模型,然后使用其 decoder 部分作为文本生成模型的主体部分。代码中还定义了一个 `generate_text` 方法,用于生成文本。在方法中,首先将 prompt 转换为 token_ids,然后使用文本生成模型生成文本,最后将生成的 token_ids 转换为文本。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值