gpt4 book ai didi

tensorflow - 为什么 Bert 转换器使用 [CLS] token 进行分类而不是对所有 token 进行平均?

转载 作者:行者123 更新时间:2023-12-03 15:37:45 24 4
gpt4 key购买 nike

我正在对 bert 架构进行实验,发现大部分微调任务都将最终隐藏层作为文本表示,然后将其传递给其他模型以进行进一步的下游任务。
伯特的最后一层看起来像这样:
enter image description here
我们取每个句子的 [CLS] 标记:
enter image description here
Image source
我对此进行了多次讨论 huggingface issue , datascience forum question , github issue大多数数据科学家给出了这样的解释:

BERT is bidirectional, the [CLS] is encoded including allrepresentative information of all tokens through the multi-layerencoding procedure. The representation of [CLS] is individual indifferent sentences.


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

最佳答案

[CLS]的使用代表整个句子的标记来自 original BERT paper ,第 3 节:

The first token of every sequence is always a special classification token ([CLS]). The final hidden state corresponding to this token is used as the aggregate sequence representation for classification tasks.


您的直觉是正确的,平均所有标记的向量可能会产生更好的结果。事实上,这正是 BertModel 的 Huggingface 文档中提到的内容。 :

Returns

pooler_output (torch.FloatTensor: of shape (batch_size, hidden_size)):

Last layer hidden-state of the first token of the sequence (classification token) further processed by a Linear layer and a Tanh activation function. The Linear layer weights are trained from the next sentence prediction (classification) objective during pre-training.

This output is usually not a good summary of the semantic content of the input, you’re often better with averaging or pooling the sequence of hidden-states for the whole input sequence.


更新 :Huggingface 在 v3.1.0 中删除了该语句(“此输出通常不是语义内容的良好摘要......”)。你得问他们为什么。

关于tensorflow - 为什么 Bert 转换器使用 [CLS] token 进行分类而不是对所有 token 进行平均?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62705268/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com