Sentence Transformers 中的 bi-encoder(双编码器)指的是一种模型架构,该架构独立地将两个输入句子编码成固定维度的向量表示,然后比较这些向量以确定它们的相似性。 这种方法使用两个独立的神经网络(或同一网络的两个实例)来单独处理每个句子。 生成的嵌入捕获语义意义,语义搜索或聚类等任务依赖于测量这些向量之间的距离(例如,余弦相似度)。 例如,在问答系统中,bi-encoder 可能会分别编码用户的查询和答案数据库,然后根据答案与查询嵌入的相似性对答案进行排序。
bi-encoder 的主要优点是效率。 由于每个句子都是独立编码的,因此可以预先计算和存储大型数据集(如产品描述或支持文章)的嵌入。 这使得检索任务在推理时速度很快,因为比较简化为简单的向量运算。 例如,使用 bi-encoder 的搜索引擎可以预先计算数百万个文档的嵌入,从而实现实时的相似性搜索。 像 all-MiniLM-L6-v2
这样的流行模型针对此目的进行了优化,从而平衡了速度和准确性。 此外,bi-encoder 更容易扩展,因为编码和比较步骤是分离的,允许分布式系统分别处理每个阶段。
但是,bi-encoder 会牺牲一些准确性来换取速度。 由于两个句子是分开处理的,因此该模型无法捕获配对句子中单词之间的细粒度交互。 对于需要深度上下文分析的任务(例如,释义检测),cross-encoder(交叉编码器,它一起处理两个句子)通常表现更好,但速度较慢。 当延迟和可扩展性至关重要时,开发人员会选择 bi-encoder。 例如,推荐系统可以使用 bi-encoder 将用户配置文件与产品进行匹配,同时保留 cross-encoder 用于重新排序排名靠前的候选者。 这种选择取决于在性能需求和计算约束之间取得平衡。