我正在阅读Jay Alammar 的这篇关于如何使用 BERT的文章,直到:
对于句子分类,我们只对 BERT 的 [CLS] 标记输出感兴趣,因此我们选择立方体的那个切片并丢弃其他所有内容。
我已阅读此主题,但仍有一些问题:
[CLS] 标记不是在每个句子的开头吗?为什么“我们只对 [CLS] 令牌的 BERT 输出感兴趣”?谁能帮我解决这个问题?谢谢!
我正在阅读Jay Alammar 的这篇关于如何使用 BERT的文章,直到:
对于句子分类,我们只对 BERT 的 [CLS] 标记输出感兴趣,因此我们选择立方体的那个切片并丢弃其他所有内容。
我已阅读此主题,但仍有一些问题:
[CLS] 标记不是在每个句子的开头吗?为什么“我们只对 [CLS] 令牌的 BERT 输出感兴趣”?谁能帮我解决这个问题?谢谢!
CLS 代表分类,它代表句子级别的分类。
简而言之,为了使 BERT 的池化方案正常工作,引入了这个标签。我建议阅读此博客,其中也对此进行了详细介绍。
[CLS] 代表分类。因为这里的训练任务是句子分类,所以在开头加上。而且因为他们需要一个可以代表整个句子含义的输入,所以他们引入了一个新的标签。
他们不能从输入序列中获取任何其他单词,因为它的输出是单词表示。所以他们添加了一个标签,除了作为分类的句子级表示之外没有其他目的。
为了更好地理解 [CLS] 的作用,让我们回顾一下 BERT 模型已经在 2 个主要任务上进行了训练:
现在您可能会问这个问题:我们能否不使用 [CLS] 的输出而只输出一个数字(作为概率)?是的,如果预测下一个句子的任务是一个单独的任务,我们可以这样做。然而,BERT 已经同时接受了这两个任务的训练。以这种格式(同时使用 [MASK] 和 [CLS])组织输入和输出将有助于 BERT 同时学习这两个任务并提高其性能。
当涉及到分类任务(例如情感分类)时,正如其他答案中提到的,[CLS] 的输出可能会有所帮助,因为它包含 BERT 在句子级别的理解。
以下是我的理解:
(1)[CLS]出现在每个句子的最开始,它有一个固定的embedding和一个fixed positional embedding,因此这个token本身不包含任何信息。(2)但是,[CLS]的输出是由这句话中的所有其他词推断出来的,所以[CLS]包含了所有其他词的信息。
这使得 [CLS] 成为句子级分类的良好表示。
当然,您可以使用平均向量,这也很有意义。