大家!我正在阅读有关Bert的文章,并希望对其词嵌入进行文本分类。我遇到了以下代码行:
pooled_output, sequence_output = self.bert_layer([input_word_ids, input_mask, segment_ids])
然后:
clf_output = sequence_output[:, 0, :]
out = Dense(1, activation='sigmoid')(clf_output)
但是我不明白合并输出的使用。 排序输出是否不包含所有信息,包括['CLS']的单词嵌入?如果是,为什么我们要合并输出?
谢谢!
答案 0 :(得分:1)
如果已指定序列,则“您正在StackOverflow”。 sequence_output将给出这四个单词的768个嵌入。但是,合并的输出只会给您768的一个嵌入,它将合并这四个单词的嵌入。
答案 1 :(得分:1)
序列输出是BERT模型最后一层输出处的隐藏状态(嵌入)序列。它包括[CLS]令牌的嵌入。因此,对于句子“ You are on Stackoverflow”,它提供5种嵌入:一个嵌入四个单词(假设单词“ Stackoverflow”被令牌化为单个令牌)中的每一个,以及[CLS]令牌的嵌入。 池输出是[CLS]令牌的嵌入(来自 Sequence output ),由线性层和Tanh激活函数进一步处理。在预训练期间,从下一个句子预测(分类)目标训练线性层权重。有关更多详细信息,请参阅BERT原始论文。