【学习记录】关于向量模型中CLS pooling的思考

最近在研究embedding模型,发现向量模型大多是通过[CLS]来进行语义表征,比较好奇为什么[CLS]能表征单个句子的语义,比如bge是使用CLS作为sentence embedding

bge:BAAI/bge-large-zh · HF Mirror

With the transformers package, you can use the model like this: First, you pass your input through the transformer model, then you select the last hidden state of the first token (i.e., [CLS]) as the sentence embedding.

向量模型通常是基于BERT架构 ,Input会在句首加上一个[CLS]标签, CLS是classification的缩写,而CLS的输出能表征整个句子的含义,用于文本分类等下游任务。

选择CLS标签是因为其本来不具备语义,但是经过self-Attention层(Self-Attention 的核心是用文本中的其它词来增强目标词的语义表示)后,CLS很好地融合了整个句子的语义信息,可以理解为,将整个句子的语义信息都“平均”到了CLS上,因此CLS能够比较好地表征整个句子的语义。

除了CLS外,也有pooling方法是通过直接average整个最后一层的embedding实现的

另外收集信息时发现知乎上一个比较有趣的问题:

bert最后输出的字表示是使用固定的分类层进行分类的,为什么能区分一字多义?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值