【发布时间】:2021-11-26 17:28:04
【问题描述】:
有没有办法限制 Huggingface BERT 编码器-解码器模型中解码器的词汇量?我想强制解码器在生成文本时从一个小词汇表中进行选择,而不是 BERT 的整个约 30k 词汇表。
【问题讨论】:
标签: nlp huggingface-transformers bert-language-model seq2seq sentence-transformers
有没有办法限制 Huggingface BERT 编码器-解码器模型中解码器的词汇量?我想强制解码器在生成文本时从一个小词汇表中进行选择,而不是 BERT 的整个约 30k 词汇表。
【问题讨论】:
标签: nlp huggingface-transformers bert-language-model seq2seq sentence-transformers
generate 方法有一个 bad_words_ids 属性,您可以在其中提供不想在输出中包含的令牌 ID 的列表。
如果您只想降低某些令牌生成的概率,您可以尝试在模型的输出层中操纵偏差参数。如果你的模型是基于 BERT 的,你会发现解码器的最后一层是BertLMPredictionHead。假设您的 seq2seq 模型在变量 model 中,您可以通过 model.decoder.cls.predictions.decoder.bias 访问偏差并减少您希望以较低概率出现的令牌 ID 的偏差。
另请注意,如果您使用 BERT 初始化 seq2seq 模型(如the example in the Huggingface Transformer documentation),则需要对模型进行大量微调,因为交叉注意力是随机初始化的,并且解码器部分需要适应左右一代。
【讨论】:
bad_words_ids 可能最适合我。是的,我正在微调 BERT!