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

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

FlagEmbedding Dense Retrieval and Retrieval-augmented LLMs FlagEmbedding 项目地址: https://gitcode.com/gh_mirrors/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/gh_mirrors/fl/FlagEmbedding

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

章迅筝Diane

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值