【Day 7】BERT的[CLS]真的能代表句义吗?

恭喜,BERT模型的基础部分已经讲解到昨日为止了,接下来我们来谈一些质疑、检讨、改进基础BERT的内容。今天我们来讲解一个颇有争议的问题:[CLS]是否真的能代表句义或文义?

[CLS]为什麽能被用来代表句义?

要理解这个问题,最重要的是先知道[CLS]所对应的Embedding被使用来代表句义的原理。为什麽选择它而不是其他任何一个Token来代表文义?在Google的用法中,其实是因为这个Token本身不带有任何具体意义。所以,一张白纸的[CLS]可以被用来更「公平」地表示整句话的意思。

https://ithelp.ithome.com.tw/upload/images/20210910/20127672ogSPq7de1o.jpg
取自进击的 BERT:NLP 界的巨人之力与迁移学习

按照这样的原理,在下游任务的Fine-tune过程中,[CLS]不断被使用来进行文本分类,从而也慢慢学习到去Attention整句话中最适合进行分类的那些Token(如上图所示)。等Fine-tune完成的时候,[CLS]就会成为一个句义地良好表示。

但是要注意了,上述原理有一个大前提,就是一定要进行Fine-tune,[CLS]才能被充分训练到可以表示句义。而另一个问题则是,上述假设中「[CLS]本身不带有任何具体意义」是有问题的。因为在预训练阶段的NSP(下一句预测)任务中,[CLS]也是被拿来进行句子是否相接续的预测,所以即使未进行Fine-tune,[CLS]本身就已经包含了原有的语料中的基於下一句预测的句义表达。

上述部分,在大多数应用情境中不会出现问题。[CLS]可以进行良好的句义表示,但这不代表[CLS]的效果是最佳的。而且,如果Fine-tune阶段资料量太少,或甚至无法进行Fine-tune的应用情境,用[CLS]来当作句义就有很大问题了。

除了[CLS],我们还有其他方式表达句义吗?

当然有。每一个Token的Embedding其实都是用来进行句义表示的好资源。但问题是我们如何将每个Token的Embedding来转化成整个序列的Embedding,这个过程称为聚合(Aggregation)。

简单的方法包括取每个维度(在同一个模型的情况下,各Embedding的维度数量是一致的)的平均值或最大值。复杂一点的方法,你可以加一个CNN或LSTM在这些Embedding之後专门用於聚合。这些方法的效果如何呢?已经有人做过相应的实验了。

Hyunjin Choi等韩国三星的研究者在文本相似的任务上进行过一系列实验,他们尝试了未Fine-tune和Fine-tune情况下使用[CLS]、平均Token Embedding的表现以及後接CNN进行聚合的表现。在此之外,他们额外还使用了一个名为Siamese network structure的方式来进行模型训练,此方式与我们一般将两个句子中间加[SEP]进行连接一起送入句子进行训练的方式不同,是同时让两个句子分别进入模型得出Embedding後再采用平均Token Embedding或接CNN的方式计算空间距离。下面是该结构的示意图。

https://ithelp.ithome.com.tw/upload/images/20210910/20127672IucNfZ31LC.jpg

而结果如何呢?简单地说,[CLS]是效果最差的那位,平均Token Embedding效果还不错,Siamese BERT情况下的平均Token Embedding效果第二名,第一是Siamese BERT + CNN的组合。

https://ithelp.ithome.com.tw/upload/images/20210910/20127672qmzsNoe5rl.jpg

虽然我有点怀疑,[CLS]的效果是否真的有这麽差(尤其是Fine-tune之後),会不会是实验者并没有给使用[CLS]的方式一个适当的超参数呢?但无论如何,关於[CLS]的使用的确已经引起了许多讨论,以後你在进行有关句义表达的任务时,不妨尝试看看上面说的其他方法。

参考论文

Choi, H., Kim, J., Joe, S., & Gwon, Y. (2021, January). Evaluation of BERT and ALBERT Sentence Embedding Performance on Downstream NLP Tasks. In 2020 25th International Conference on Pattern Recognition (ICPR) (pp. 5482-5487). IEEE.


<<:  React Native 的动画好帮手:Lottie

>>:  铁人赛 Day10-- PHP SQL基本语法(五) -- 帐密登入验证 & mysqli_query

如何把Jcenter或macenCenter等网路开源依赖库搬迁至本地依赖

缘由: 因Jcenter将不再对一般客户端提供服务,官方建议将远程仓库迁移至mavenCenter,...

【Day28】React Query 简易说明及使用 (´∀`)

What's React Query !? React Query 是一个适合用於React Hoo...

成员 9 人:在办公室内,建立时空虫洞

根据相对论,如果一对挛生兄弟, 哥哥搭乘宇宙飞船,以接近光速,飞离地球,在宇宙间航行; 当回到地球的...

【在厨房想30天的演算法】Day 19 演算法 : 图形搜寻 graph search 广度搜寻、深度搜寻

Aloha!又是我少女人妻 Uerica!今天真是个秋高气爽的日子,下午想说跟老公去公园浪漫野餐,还...

Day25 订单 -- 重新付款1

再做订单的时候,常常会遇到重新付款的需求, 情境通常发生在使用者购物车加入一拖拉库的项目之後, 因为...