Sentence Transformers 与传统的词嵌入模型(如 Word2Vec 或 GloVe)的不同之处在于,它专注于**将整个句子或短语编码成密集的向量表示**,而不是单个词。虽然 Word2Vec 和 GloVe 为单个词生成固定的嵌入(例如,“apple”无论上下文如何都只有一个向量),但 Sentence Transformers 通过考虑词序、上下文和语义关系来捕捉完整句子的含义。例如,“river bank”中的 “bank” 与 “bank account” 中的 “bank” 在句子嵌入中具有不同的上下文含义,但在 Word2Vec 中具有相同的静态向量。这使得 Sentence Transformers 更适合需要理解句子级语义的任务,如文本相似性或释义检测。
在架构上,Sentence Transformers 构建在基于 Transformer 的模型(如 BERT)之上,但增加了**针对句子级任务的微调**。传统的词嵌入使用浅层神经网络(如 Word2Vec 的 Skip-gram 或 CBOW)或矩阵分解(GloVe)进行训练,以预测词的共现。相比之下,Sentence Transformers 使用 Transformer 层来处理整个句子,并使用对比学习或 triplet loss 等目标进行训练,从而优化句子之间的语义相似性。例如,像 all-MiniLM-L6-v2
这样的模型是在包含标记为相似的句子对的数据集上训练的,迫使该模型在嵌入空间中将语义相关的句子分组得更近。这与 Word2Vec 形成对比,后者将词语孤立对待,并且无法原生表示像 “machine learning” 这样的短语作为一个统一的概念。
实际上,这种差异影响了开发者如何使用这些模型。词嵌入非常适合需要词级分析的任务(例如,词性标注),但在句子级任务中表现不佳,除非与池化或平均结合使用,这是一种次优方法。然而,Sentence Transformers 直接输出有意义的句子向量。例如,使用 sentence-transformers
库,开发人员可以嵌入两个句子,如 “How old are you?” 和 “What is your age?”,并测量它们的余弦相似度以发现它们几乎相同,而 Word2Vec 会因为缺乏上下文感知而错过这一点。这使得 Sentence Transformers 更有效地应用于语义搜索、聚类或检索增强生成 (RAG) 系统等需要理解全文含义的应用程序中。