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),仅供参考

### BGE-M3 模型多模态功能支持 BGE-M3(Big General Embedding Model - Multi-lingual, Multi-modal, Multi-task)确实具备多模态的功能支持[^1]。这意味着它可以不仅限于单一的数据形式,而是能够处理多种形式的信息输入,例如文本、图像以及其他可能的媒体类型。 具体来说,这种能力使得 BGE-M3 能够生成高质量的嵌入表示,这些表示可用于多个领域中的复杂任务,比如信息检索、推荐系统以及对话系统的构建和优化。此外,在实际应用中,BGE-M3 不仅能应对不同语言环境下的文本数据,还能通过其设计实现对其他媒介类型的高效解析和支持[^5]。 因此,当提到是否支持多模态功能时,答案是肯定的,并且这一特性正是该模型名称中“Multi-modal”的核心体现之一。 ```python # 示例代码展示如何加载预训练好的 BGE-M3 模型并获取文本与图片联合嵌入 from transformers import AutoTokenizer, AutoModel tokenizer = AutoTokenizer.from_pretrained("BAAI/bge-m3") model = AutoModel.from_pretrained("BAAI/bge-m3") def get_embedding(text_or_image_input): inputs = tokenizer(text_or_image_input, return_tensors="pt", padding=True, truncation=True) outputs = model(**inputs) embeddings = outputs.last_hidden_state.mean(dim=1) # 获取平均池化后的嵌入向量 return embeddings.detach().numpy() example_text = "这是一个测试例子" embedding_result = get_embedding(example_text) print(embedding_result.shape) # 输出嵌入维度大小 ``` 上述代码片段展示了基于 Python 和 Hugging Face Transformers 库来加载 BGE-M3 并计算给定输入(此处为一段中文文字)对应的嵌入向量的过程。对于更复杂的场景如图文混合分析,则需进一步扩展此逻辑至兼容更多种类的数据源上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

章迅筝Diane

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

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

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

打赏作者

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

抵扣说明:

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

余额充值