Bert-Transformer:为什么 Bert 转换器使用 [CLS] 令牌进行分类,而不是对所有令牌进行平均?

数据挖掘 机器学习 深度学习 张量流 伯特 变压器
2022-03-06 16:22:34

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

Bert 的最后一层是这样的:

在此处输入图像描述

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

在此处输入图像描述

图片来源

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

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

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

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

3个回答

这是因为无论如何您都需要针对您的特定任务微调 BERT。您可以训练它根据 cls 标记或标记输出的平均值等进行分类。

本质上,最后一层的 CLS 令牌与前一层的所有其他令牌都有连接。那么,手动平均有意义吗?

CLS 令牌有助于训练 BERT 的 NSP 任务(除了 MLM)。作者发现在句子开头创建一个新的隐藏状态很方便,而不是取句子平均值或其他类型的池化。然而,这并不意味着 BERT 作者推荐使用 CLS 令牌作为句子嵌入。它“可以”用于分类或其他任务,但您可能希望使用单个单词的嵌入来编写其他池化器。根据我的经验,最大池可用于情绪分析。对于其他 NLU 类型的任务,意味着池化效果更好。在其他情况下,额外的注意力和微调可以带来出色的结果。每个问题域都可以有一个特定的解决方案。

不知道是什么意思->rather than using [CLS] token for classification?

作者确实[CLS]用于分类任务。

BERT:用于语言理解的深度双向转换器的预训练

每个序列的第一个标记始终是一个特殊的分类标记 ([CLS])。与该标记对应的最终隐藏状态用作分类任务的聚合序列表示。

例如