如何从微调后的Roberta模型选取正确的隐藏状态作为输出嵌入?
选择RobertaForMaskedLM微调后的正确隐藏状态输出嵌入
你对隐藏状态的理解完全正确!咱们来拆解清楚这个问题:
当你启用output_hidden_states=True后,model(sentence)返回的output[-1]就是所有隐藏状态的元组,它的元素顺序是按模型的计算流程排列的:
output[-1][0]:这是初始嵌入层的输出,也就是输入token经过Roberta的embedding层(包含token embedding、position embedding、token type embedding)后的结果,还没进入任何Transformer编码器层处理output[-1][-1]:这才是最后一层Transformer编码器的输出,是输入文本经过所有编码器层的语义编码后的最终隐藏状态
所以在微调完成后,如果你需要获取模型对输入文本的最终语义嵌入,毫无疑问应该用output[-1][-1]:
- 如果是序列级任务(比如NER、文本生成),可以直接用整个序列的隐藏状态张量
- 如果是句子级任务(比如文本分类),通常会取这个张量中
<[BOS_never_used_51bce0c785ca2f68081bfa7d91973934]>(Roberta的句子起始标记)对应的token嵌入作为整个句子的表征
内容的提问来源于stack exchange,提问作者Gene Xu
相关产品推荐
相关产品推荐

