inputs_embeds是否会绕过模型的位置编码步骤?

编程语言 2026-07-09

使用Hugging Face的 transformers库,我想将logits(即一个向量,如果对其应用softmax就会得到每个标记的概率)作为模型的输入。

目前,我用下面这段代码将logits转换为一个嵌入向量(embedding):

token_probabilities = F.softmax(logits,dim=-1)
embeddings = token_probabilities @ model.embed_tokens.weight
out = model(inputs_embed = embeddings, attention_mask=attention_mask, labels=labels)

然而,我担心这会把模型所需的位置编码抹去。输入的inputs_embed是否绕过模型中附加位置信息的部分?(例如,当RoPE被添加时。)

理想情况下,这个问题应该能通过Hugging Face模型所使用的一般接口来回答;但如果没有通用答案,我特别关心的是LlamaForCausalLM。

解决方案

通过阅读 LlamaModel 的源代码,似乎传入 inputs_embeds 并不会抑制位置嵌入步骤,因为 inputs_embeds 被赋值给 hidden_states,随后传递给 self.rotary_emb()。与传入 input_ids 的唯一区别在于 self.embed_tokens() 没有被调用。

推测,其他模型的实现也类似。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章