如何解决bert层中提取的输出和序列输出之间有什么区别?
大家!我正在阅读有关Bert的文章,并希望对其词嵌入进行文本分类。我遇到了以下代码行:
pooled_output,sequence_output = self.bert_layer([input_word_ids,input_mask,segment_ids])
然后:
clf_output = sequence_output[:,:]
out = Dense(1,activation='sigmoid')(clf_output)
但是我不明白合并输出的使用。 排序输出是否不包含所有信息,包括['CLS']的单词嵌入?如果是,为什么我们要合并输出?
谢谢!
解决方法
如果已指定序列,则“您正在StackOverflow”。 sequence_output将给出这四个单词的768个嵌入。但是,合并的输出只会给您768的一个嵌入,它将合并这四个单词的嵌入。
,序列输出是BERT模型最后一层输出处的隐藏状态(嵌入)序列。它包括[CLS]令牌的嵌入。因此,对于句子“ You are on Stackoverflow”,它提供5种嵌入:一个嵌入四个单词(假设单词“ Stackoverflow”被令牌化为单个令牌)中的每一个,以及[CLS]令牌的嵌入。 池输出是[CLS]令牌的嵌入(来自 Sequence output ),由线性层和Tanh激活函数进一步处理。在预训练期间,从下一个句子预测(分类)目标训练线性层权重。有关更多详细信息,请参阅BERT原始论文。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。