Rag中选择合适的embedding

rag系列文章目录


前言

Embedding在rag召回文本中,占有重要的作用,准确的召回能够避免llm的幻觉。一般项目中使用bge-m3或openai向量模型作为rag的选型。其实,还有其他一些embedding模型可供选择,下面我们来探究一下,并讨论下,如何选择一个适合自己场景的embedding模型。

一、Embedding类型

1.1 Sparse embedding

它的特点是稀疏性,生成的向量大多数维度为零,仅有少数非零值。它的可解释性强,每个维度可以直接映射到一个具体的词或特征,易于解释模型结果。

它的常用方法是TF-IDF和Bag of Words(BoW),一般根据词频、逆文档频率等生成向量,无法捕捉上下文信息,语义相似度有限。适用于关键词匹配和简单的文档检索。

1.2 Dense embedding

它有以下特点:
• 稠密性:生成的向量大多数维度都有非零值。
• 低维:通常为 100~1,024 维,相比稀疏嵌入更紧凑。
• 语义表达能力强:通过神经网络训练,能够捕捉词语、句子或文档的深层语义信息。

常用的方法有
Word2Vec: 基于上下文窗口预测目标词或上下文词,生成静态词向量。
BERT: 基于 Transformer,通过双向注意力机制捕捉词的上下文关系。

它能够捕捉深层语义关系,但是需要大规模数据和计算资源进行预训练,且具有不可解释性,因为向量表示缺乏直观的可解释性。适合进行语义检索,rag中常用的embedding模型,一般是这种类型。

1.3 Multi-Vector Embeddings

该方法通过多个向量表示单个实体或文本。这些向量通常表示不同的语义方面,或者同一实体在不同上下文中的不同含义。每个向量可以代表不同上下文中的信息,适合多义词的处理。如何处理这多个向量呢,常见的方式是多个向量求平均、加权求和或者拼接。

它使用多个向量,计算和存储开销较大,计算复杂度高,优点是能捕捉同一文本或实体在不同上下文中的多重含义。适用于多义词处理场景。

1. 4 Long Context Embeddings

该方法旨在处理长文本(如长篇文章、完整的段落),通常采用不同的策略来延长上下文窗口的范围,使模型能够捕捉更长距离的依赖关系。

通常,基于 Transformer 的模型(如 BERT)只能处理有限长度的上下文,超过长度限制的文本需要被截断或分段处理。长上下文嵌入方法通过优化模型结构或通过分段拼接技术来缓解这一问题。

它能够处理更长的上下文,避免文本截断导致的信息丢失。但是处理长文本时,仍然需要较高的计算和内存资源。长文本嵌入模型结构更为复杂,训练时间较长。

1.5 Variable Dimension Embeddings

这种嵌入方式不是使用固定维度的向量来表示所有文本或实体,而是根据输入文本的复杂度、信息量或上下文的重要性动态调整向量的维度。

可变维度嵌入的目的是让模型能够根据任务需求自动调整表示的详细程度。复杂的任务或多信息源的输入可能会使用更高维度的向量表示,简单的输入则使用较低维度的向量表示。

它通过根据任务动态调整维度,减少了不必要的计算负担。但是动态调整维度使得模型的设计和训练更加复杂。它适合需要根据不同任务调整嵌入表示精度的场景。

此外,有code embedding,旨在将编程语言中的代码片段表示为向量。它不仅考虑了代码的语法,还考虑了语义和上下文关系。它针对code场景进行各种优化,在code生成,code检索相关的大模型服务中,用处较广。

以下是这几类模型的对比:

在这里插入图片描述

二、评价模型

如何评价一个embedding模型的好坏呢,一般使用MTEB: Massive Text Embedding Benchmark。
它是一个专门设计用于评估不同文本嵌入模型(Embedding Models)性能的基准框架。它通过一系列标准化的任务和数据集,对嵌入模型在多种文本处理任务中的表现进行综合评估。这使得研究人员和开发者可以对各种嵌入模型的效果进行客观比较。

它允许用户评估不同嵌入模型在以下几个关键方面的表现:

  1. 文本相似度:评估模型在计算文本之间的相似度(如余弦相似度)时的准确性。
  2. 文本分类:评估模型在将文本归类到多个类别中的表现。
  3. 问答系统:评估嵌入模型在信息检索和问答任务中的表现。
  4. 多语言支持:评估模型在不同语言之间的适用性。
  5. 效率:评估模型的推理速度、存储需求以及计算资源消耗等。

具体如何使用Python代码进行评估,参考文档

场景不同,embedding模型的效果也不同,建议自己根据自己的业务,构建数据集,并进行评测。


总结

Embedding数据是在文档上传时生成,对embedding性能要求并不高,它不影响到问答时间的快慢。

Embedding在文档检索中起着特别重要的作用,选择一个embedding模型,需要考虑它的维度、是否开源,成本,响应延迟,多语言支持,文本长度等等多个方面,所以建议多角度进行测试评估,尽可能最大化embedding的能力。

### 支持的Embedding模型 在构建检索增强生成(Retrieval-Augmented Generation, RAG)架构时,选择合适的嵌入模型对于系统的整体性能至关重要[^1]。通常情况下,RAG 架构依赖于强大的预训练语言模型来创建文档和查询的向量表示。 #### 常见的Embedding模型选项: - **BERT及其变体**:由于其双向编码能力,BERT成为许多NLP任务中的首选解决方案之一。它能够捕捉上下文信息,在语义相似度计算方面表现出色。 - **DPR (Dense Passage Retrieval)**:专门为开放域问答设计的一种密集型段落检索方法。相比传统的稀疏索引方式,DPR通过学习问题与文章片段之间的映射关系实现了更精准的信息检索效果[^2]。 - **Sentence-BERT**:改进版的BERT用于句子级别的表征学习,可以加速余弦距离等操作的同时保持较高的准确性。这使得Sentence-BERT非常适合用来作为RAG框架内的文本匹配工具。 - **USE (Universal Sentence Encoder)**:由Google开发的一个通用句法分析器,能够在不同应用场景下提供一致性的高质量特征提取服务。尽管在某些特定领域可能不如其他专用模型精确,但在跨主题的任务上具有良好的泛化能力。 ```python from sentence_transformers import SentenceTransformer model = SentenceTransformer('all-MiniLM-L6-v2') # 使用MiniLM版本以节省资源消耗 embeddings = model.encode(["这是一个测试例子"]) print(embeddings.shape) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值