像 [CLS]
和 [SEP]
这样的特殊标记在 Sentence Transformer 模型中扮演着特定的结构和功能角色,这些模型建立在像 BERT 这样的 Transformer 架构之上。这些标记帮助模型有效地处理和组织输入文本,从而实现诸如句子嵌入生成或成对句子比较之类的任务。虽然它们的作用是从原始 Transformer 设计继承的,但它们适应了 Sentence Transformers 中句子级别任务的独特需求。
[CLS]
标记(“classification” 的缩写)通常放置在输入序列的开头。在像 BERT 这样的模型中,此标记的最终隐藏状态通常用作分类任务的摘要表示。但是,在 Sentence Transformers 中,[CLS]
标记的角色可能会有所不同。一些实现方式通过对其输出应用池化操作(例如,平均或最大池化)来使用它作为生成句子嵌入的基础。例如,在 bert-base-nli-mean-tokens
模型中,嵌入是通过平均所有标记输出(包括 [CLS]
)来导出的。但是,其他模型可能会直接使用 [CLS]
标记的输出作为句子表示,如果针对该目的进行了微调。[SEP]
标记(“separator” 的缩写)用于标记句子之间的边界,尤其是在处理句子对时。例如,在语义相似性任务中,两个句子可能会用 [SEP]
标记连接在一起,从而使模型能够区分一个句子在哪里结束以及下一个句子在哪里开始。这种分离对于直接比较句子对的交叉编码器架构至关重要。
这些标记的存在确保了与预训练的 Transformer 模型的兼容性,并保持了输入格式的一致性。对于开发人员而言,这意味着在准备输入时要遵循标记化约定。例如,在编码单个句子时,您可以将其格式化为 [CLS] sentence [SEP]
,而句子对将为 [CLS] sentence1 [SEP] sentence2 [SEP]
。忽略这些标记可能会导致性能不佳,因为模型期望它们能够构建对输入内容的理解。但是,在某些 Sentence Transformer 实现中,这些标记的处理被诸如 sentence-transformers
这样的库抽象出来,这些库会在预处理期间自动添加它们。了解它们的作用有助于开发人员调试问题,为特定任务定制标记化,或使模型适应新的用例,其中输入结构可能与标准设置不同。