相关疑难解决方法(0)

在微调期间如何正确设置 pad token(不是 eos)以避免模型无法预测 EOS?

**太长了;我真正想知道的是设置 pad token 进行微调的官方方法是什么,它在原始训练期间没有设置,这样它就不会学习预测 EOS。**

colab:https://colab.research.google.com/drive/1poFdFYmkR_rDM5U5Z2WWjTepMQ8h ​​vzNc?usp=sharing


HF falcon 教程有以下行:

tokenizer.pad_token = tokenizer.eos_token
Run Code Online (Sandbox Code Playgroud)

我觉得很奇怪。pad 和 eos 是相同的,但为什么首先要在它们之间做出区分呢?

请注意,这样做 pad = eos. 这意味着在微调期间,模型永远不会被训练为输出 eos(最有可能),因为 eos 被视为填充令牌并且不会反向传播:

I just observed that when I set tokenizer.pad_token = tokenizer.eos_token during training, the model won't stop generating during inference, since it was trained to not output the eos token (per discussions above).
Run Code Online (Sandbox Code Playgroud)

我看到了这个(这里https://github.com/huggingface/transformers/issues/22794):

tokenizer.add_special_tokens({'pad_token': '[PAD]'})
Run Code Online (Sandbox Code Playgroud)

但这假设模型有 pad_token。我认为必须进行额外的检查,确保它确实具有 pad_token 的嵌入,以便不存在运行时错误(〜从嵌入“表”/矩阵提取矩阵中的类型错误)。

但如果这样做,可能需要注意初始化新令牌,以便它主导生成: https: //nlp.stanford.edu/~johnhew/vocab-expansion.html


代码:

tokenizer.pad_token = tokenizer.eos_token
Run Code Online (Sandbox Code Playgroud)

修改模型会出现问题

该死的,这仍然不起作用:

 UserWarning: You …
Run Code Online (Sandbox Code Playgroud)

machine-learning pytorch huggingface-transformers huggingface-tokenizers huggingface

7
推荐指数
1
解决办法
4274
查看次数