什么是句子嵌入、交叉编码器和重新排名

💡 原文中文,约13000字,阅读约需31分钟。
📝

内容提要

本文比较了双编码器和交叉编码器的差异,双编码器适合搜索,速度快且可扩展性强,交叉编码器适合分类和高精度排名,更准确。双编码器独立编码每个句子,将输入文本编码为固定长度向量,而交叉编码器同时对两个句子进行编码,能捕获句子之间的关系。在实践中,可以先使用双编码器减少候选数量,再使用交叉编码器获取最终结果。交叉编码器可用于语义相似性任务。通过两阶段检索和重新排序系统,可以在实践中使用双编码器和交叉编码器。

🔎

延伸解读

双编码器与交叉编码器的本质差异

双编码器独立编码每个句子,生成固定长度向量,句子间关系不被捕获,因此适合并行处理海量句子,实现快速搜索。交叉编码器同时编码两个句子,输出分类分数,能捕获句子间关系,因而更准确但速度慢、内存占用高。这种结构差异决定了它们分别适用于召回和精排两个阶段。

两阶段检索与重排序的实用价值

面对大规模语料,直接使用交叉编码器计算所有句子对不现实。文章建议先用双编码器快速检索出前若干候选(如25个),再用交叉编码器对候选重新排序。这样既保证了召回率,又提升了最终精度,是信息检索中平衡效率与准确性的常用技术。

交叉编码器的适用场景与限制

交叉编码器在需要捕捉细微语义差别的任务中表现更好,例如医学或法律文档,措辞的细微变化可能改变句子含义。但它需要对所有句子对进行编码,当比较数十万个句子时,耗时可能长达数小时。因此,它更适合对少量句子进行高精度比较或分类,而非大规模检索。

增强型SBERT:用交叉编码器改进双编码器

当标注数据不足时,可先用交叉编码器为大量未标注句子对打标签,再用这些数据训练双编码器。为避免随机组合导致负样本过多,文章提到可采用KDE、BM25、语义搜索采样或BM25与语义搜索结合的方法来生成更均衡的训练对,从而有效提升双编码器的性能。

❓

Q&A

双编码器和交叉编码器的主要区别是什么?

双编码器独立编码每个句子为固定长度向量,速度快、可扩展性强,适合搜索;交叉编码器同时编码两个句子并输出分类分数,速度慢但更准确,适合分类和高精度排名。

为什么双编码器更适合搜索任务?

双编码器独立编码每个句子,可以并行处理大量句子,速度快且易于扩展;它通过优化查询和相关句子之间的相似度来训练,因此适合搜索。

交叉编码器在哪些场景下更适用?

交叉编码器适合分类、高精度排名以及细微差别重要的任务(如医学或法律文档),也适用于语义相似性比较,但比较句子数量不宜过多(如几十个)。

什么是两阶段检索和重新排序?如何实现?

两阶段检索和重新排序是信息检索中的常用技术:先用双编码器快速检索大量候选(保证召回),再用交叉编码器对候选重新排序(提高精度)。例如,在10万句子中搜索时,先用双编码器取前25个,再用交叉编码器精排。

增强型SBERT是什么?它如何改进双编码器?

增强型SBERT是一种通过交叉编码器标记大量输入对来生成训练数据,从而改进双编码器的技术。它使用随机组合、BM25、语义搜索采样或BM25+语义搜索采样等方法生成句子对,并用交叉编码器打标签,以扩充训练数据。

使用交叉编码器进行语义相似性判断的效果如何?

交叉编码器在语义相似性任务上更准确,能捕捉句子间的细微关系。例如,对于句子对“今天天气很好”和“今天是个晴天”,交叉编码器给出的相似度分数高于“今天天气很好”和“正在下雨”。

🏷️

标签

➡️

继续阅读