[CLS] 令牌的用途是什么,为什么它的编码输出很重要?

数据挖掘 nlp 情绪分析 伯特 语言模型 文本分类
2021-09-18 22:00:42

我正在阅读Jay Alammar 的这篇关于如何使用 BERT的文章,直到:

对于句子分类,我们只对 BERT 的 [CLS] 标记输出感兴趣,因此我们选择立方体的那个切片并丢弃其他所有内容。

我已阅读此主题,但仍有一些问题:

[CLS] 标记不是在每个句子的开头吗?为什么“我们只对 [CLS] 令牌的 BERT 输出感兴趣”?谁能帮我解决这个问题?谢谢!

4个回答

CLS 代表分类,它代表句子级别的分类。

简而言之,为了使 BERT 的池化方案正常工作,引入了这个标签我建议阅读此博客,其中也对此进行了详细介绍。

[CLS] 代表分类。因为这里的训练任务是句子分类,所以在开头加上。而且因为他们需要一个可以代表整个句子含义的输入,所以他们引入了一个新的标签。

他们不能从输入序列中获取任何其他单词,因为它的输出是单词表示。所以他们添加了一个标签,除了作为分类的句子级表示之外没有其他目的。

为了更好地理解 [CLS] 的作用,让我们回顾一下 BERT 模型已经在 2 个主要任务上进行了训练:

  1. 掩码语言建模:一些随机词被 [MASK] 标记掩码,模型在训练期间学习预测这些词。对于该任务,我们需要 [MASK] 令牌。
  2. 下一句预测:给定 2 个句子,模型学习预测第二个句子是否是真正的句子,它跟在第一个句子之后。对于这个任务,我们需要另一个标记,它的输出将告诉我们当前句子是第一个句子的下一个句子的可能性有多大。[CLS] 来了。您可以将 [CLS] 的输出视为概率。

现在您可能会问这个问题:我们能否不使用 [CLS] 的输出而只输出一个数字(作为概率)?是的,如果预测下一个句子的任务是一个单独的任务,我们可以这样做。然而,BERT 已经同时接受了这两个任务的训练。以这种格式(同时使用 [MASK] 和 [CLS])组织输入和输出将有助于 BERT 同时学习这两个任务并提高其性能。

当涉及到分类任务(例如情感分类)时,正如其他答案中提到的,[CLS] 的输出可能会有所帮助,因为它包含 BERT 在句子级别的理解。

以下是我的理解:

(1)[CLS]出现在每个句子的最开始,它有一个固定的embedding和一个fixed positional embedding,因此这个token本身不包含任何信息。(2)但是,[CLS]的输出是由这句话中的所有其他词推断出来的,所以[CLS]包含了所有其他词的信息。

这使得 [CLS] 成为句子级分类的良好表示。

当然,您可以使用平均向量,这也很有意义。