在生成嵌入时,平均池化和 [CLS] 标记之间的选择会影响结果向量的质量和计算速度。 平均池化对序列中所有标记的嵌入进行平均,而 [CLS] 标记是经过训练的专用向量,用于表示整个输入。 权衡取决于任务、模型架构和输入特征。 平均池化通常会捕获更广泛的上下文信息,但会稀释关键特征,而 [CLS] 标记提供特定于任务的摘要,但如果未进行微调,则性能可能不佳。 速度差异源于所需的计算步骤:平均池化涉及聚合所有标记,而 [CLS] 标记是固定的、预先计算的输出。
在嵌入质量方面,对于需要全面上下文的任务,平均池化通常更健壮。 例如,在语义相似性任务中,平均所有标记嵌入可以更好地捕获较长文本(例如段落或文档)中的细微差别,方法是将重要性分配给所有单词。 但是,这种方法存在将不相关或嘈杂的标记与关键标记混合的风险,尤其是在短或嘈杂的输入中。 另一方面,[CLS] 标记在预训练期间(例如,在 BERT 中进行分类)经过显式训练以总结输入。 如果模型针对特定任务进行了微调,则 [CLS] 标记可以通过关注与任务相关的特征来胜过池化。 例如,在情感分析中,经过微调的 [CLS] 标记可能比平均池化的向量更好地隔离情感线索。 但是,如果模型未针对目标任务进行微调,或者任务与预训练目标显着不同,则 [CLS] 标记的质量可能会下降,从而使平均池化对于通用用途更安全。
计算速度有利于 [CLS] 标记。 提取 [CLS] 嵌入不需要超出模型已经产生的额外计算,使其成为固定的 O(1) 操作。 然而,平均池化涉及迭代所有标记嵌入(序列长度n 的 O(n) 时间)并执行算术运算。 对于长序列(例如,512 个标记),这会增加可测量的开销,尤其是在批处理或实时系统中。 例如,根据硬件的不同,使用平均池化处理 10,000 个文档可能比使用 [CLS] 标记花费的时间多 20%。 但是,在许多框架中,由于优化的矩阵运算,对于较短的序列(例如,64 个标记),这种差异可能可以忽略不计。 开发人员应在处理高吞吐量系统(例如,搜索引擎)时优先考虑速度,但在嵌入质量至关重要且序列长度可管理的应用程序中选择平均池化。 最终的选择是在任务要求、模型设计和性能约束之间取得平衡。