FlagEmbedding项目BGE-M3多模态嵌入模型详解

【免费下载链接】FlagEmbedding Dense Retrieval and Retrieval-augmented LLMs 【免费下载链接】FlagEmbedding 项目地址: https://gitcode.com/GitHub_Trending/fl/FlagEmbedding

概述

FlagEmbedding项目中的BGE-M3是一个功能强大的多模态嵌入模型,它支持三种不同的检索方式:稠密检索(Dense Retrieval)、稀疏检索(Lexical Matching)和多向量交互(Multi-Vector Interaction)。这种多功能的特性使其在各种信息检索场景中都能表现出色。

环境准备

在开始使用BGE-M3之前,需要安装必要的Python包:

pip install -U transformers FlagEmbedding accelerate

这些包包括:

  • transformers:Hugging Face提供的Transformer模型库
  • FlagEmbedding:包含BGE-M3模型的专用库
  • accelerate:用于加速模型推理

模型架构

BGE-M3的基础模型是XLM-RoBERTa-large,这是一个多语言版本的RoBERTa模型。它包含以下主要组件:

  1. 词嵌入层:将输入token映射为1024维向量
  2. 24层Transformer编码器:每层包含自注意力机制和前馈网络
  3. 池化层:用于生成句子级别的表示
from transformers import AutoTokenizer, AutoModel

tokenizer = AutoTokenizer.from_pretrained("BAAI/bge-m3")
raw_model = AutoModel.from_pretrained("BAAI/bge-m3")

多功能检索方式

1. 稠密检索

稠密检索使用[CLS]token的归一化隐藏状态作为整个句子的嵌入表示:

from FlagEmbedding import BGEM3FlagModel

model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True)
embeddings = model.encode(sentences, max_length=100)['dense_vecs']

计算相似度时,可以使用内积或其他相似度函数:

similarity = embeddings_1 @ embeddings_2.T

2. 稀疏检索

稀疏检索通过线性层和ReLU激活函数生成token级别的权重:

output = model.encode(sentences, return_sparse=True)
lexical_weights = output['lexical_weights']

相似度计算基于共现term的权重乘积:

score = model.compute_lexical_matching_score(weights1, weights2)

3. 多向量交互

多向量方法利用整个输出嵌入进行细粒度匹配:

output = model.encode(sentences, return_colbert_vecs=True)
colbert_vecs = output['colbert_vecs']

相似度计算采用ColBERT的"late-interaction"方法:

score = model.colbert_score(vecs1, vecs2)

混合排序策略

BGE-M3的强大之处在于可以结合三种检索方式的优势:

  1. 先用稠密或稀疏方法进行初步检索
  2. 然后对候选结果使用混合分数重新排序

混合分数计算公式:

final_score = (dense_score + lexical_score + colbert_score) / 3

实际应用建议

  1. 长文本处理:可以通过设置max_length参数控制输入长度以提升效率
  2. 精度与效率权衡
    • 稠密检索:平衡效率与精度
    • 稀疏检索:适合term匹配重要场景
    • 多向量:精度最高但计算成本高
  3. 混合使用:初步检索+重排序是最佳实践

BGE-M3的多功能性使其成为信息检索领域的强大工具,开发者可以根据具体场景灵活选择最适合的检索方式或组合策略。

【免费下载链接】FlagEmbedding Dense Retrieval and Retrieval-augmented LLMs 【免费下载链接】FlagEmbedding 项目地址: https://gitcode.com/GitHub_Trending/fl/FlagEmbedding

Logo

分享最新的 NVIDIA AI Software 资源以及活动/会议信息,精选收录AI相关技术内容,欢迎大家加入社区并参与讨论。

更多推荐