直接使用 [CLS] token 的嵌入通常会比 Sentence Transformers 中的池化策略产生更差的结果,因为 [CLS] token 的预训练目标和固有限制使其不太适合没有进一步优化的通用语义任务。虽然像 BERT 这样的模型中的 [CLS] token 旨在捕获句子级别的分类任务信息,但其有效性很大程度上取决于具体的训练目标。例如,BERT 的预训练包括下一句预测 (NSP) 任务,该任务训练 [CLS] token 以区分两个句子是否相关。然而,这种狭隘的关注点可能会使 [CLS] 嵌入对于语义相似性或检索等任务的效果较差,在这些任务中,捕获句子之间细微的关联关系至关重要。相比之下,池化策略聚合来自所有 token 嵌入的信息,这通常能提供更强大的完整句子上下文表示。
池化策略,例如平均池化或最大池化,通过组合来自整个序列的信息来缓解依赖于单个 token 的限制。例如,平均池化对序列中的所有 token 嵌入进行平均,有效地将语义权重分布在整个句子中,而不是依赖于一个潜在的噪声或有偏差的 token。当句子在长度或结构上有所不同时,这尤其有用,因为池化可确保所有 token 都对最终表示做出贡献。例如,在“The quick brown fox jumps over the lazy dog”这样的句子中,[CLS] token 可能侧重于特定关键字(例如,“jumps”或“lazy”),而平均池化捕获所有单词之间的关系,保留诸如动作(跳跃)和主语(狐狸和狗)等细微差别。这种聚合降低了过度强调不相关 token 的风险,并创建了更平衡的嵌入。
另一个关键因素是微调过程。 Sentence Transformers 通常在训练期间使用对比损失或三元组损失目标,这些目标明确地优化池化嵌入,以对齐相似的句子并分离不相似的句子。例如,当在自然语言推理 (NLI) 数据集上进行训练时,该模型通过细化池化嵌入来学习区分蕴含、矛盾和中立。然而,除非该模型经过重新训练并具有针对该目标的特定目标,否则 [CLS] token 不会针对这些任务进行直接优化。如果没有这种微调,[CLS] 嵌入将保持与其原始预训练目标(如 NSP)相关联,而这些目标可能与下游任务不一致。因此,池化策略与特定于任务的训练相结合,可以创建更灵活且更适合语义搜索或聚类等实际应用的嵌入。