首页 > 解决方案 > 为什么 Bert 转换器使用 [CLS] 令牌进行分类,而不是对所有令牌进行平均?

问题描述

我正在对 bert 架构进行实验,发现大多数微调任务都将最终的隐藏层作为文本表示,然后将其传递给其他模型以进行进一步的下游任务。

Bert 的最后一层是这样的:

在此处输入图像描述

我们在哪里获取每个句子的 [CLS] 标记:

在此处输入图像描述

图片来源

我对这个拥抱脸问题、数据科学论坛问题、github问题进行了很多讨论大多数数据 科学家都 给出了这样的解释:

BERT 是双向的,[CLS] 通过多层编码过程被编码,包括所有令牌的所有代表信息。[CLS] 的表示在不同的句子中是个体的。

我的问题是,为什么作者忽略了其他信息(每个令牌的向量)并采用平均值、max_pool 或其他方法来利用所有信息而不是使用 [CLS] 令牌进行分类?

这个 [CLS] 令牌与所有令牌向量的平均值相比有何帮助?

标签: tensorflowmachine-learningkerasdeep-learningbert-language-model

解决方案


BERT 主要设计用于迁移学习,即对特定任务数据集进行微调。如果对状态进行平均,则每个状态的平均权重相同:包括停用词或其他与任务无关的内容。该[CLS]向量是使用自注意力计算的(就像 BERT 中的所有内容一样),因此它只能从其余隐藏状态中收集相关信息。因此,从某种意义上说,[CLS]向量也是令牌向量的平均值,只是计算得更巧妙,特别是针对您微调的任务。

另外,我的经验是,当我保持权重固定且不对 BERT 进行微调时,使用令牌平均值会产生更好的结果。


推荐阅读