Posted in

更高效的 RAG 文本检索和排序: 多语言 GTE 系列模型开源_AI阅读总结 — 包阅AI

包阅导读总结

1. 关键词:RAG、GTE 系列模型、文本检索、排序、多语言

2. 总结:本文介绍了 RAG 技术,重点阐述了通义实验室推出的 GTE 系列模型,包括其特点、训练过程、效果评测等,该模型在多语言、长文本处理等方面表现出色,已开源并提供商用 API 服务。

3. 主要内容:

– RAG 技术:

– 介绍 RAG 范式,将检索与生成结合,减轻模型误解和隐私问题,提升响应能力。

– 指出文本表示模型和排序模型在 RAG 中的重要性及差异。

– GTE 系列模型:

– 介绍 GTE 系列模型的发展背景及涵盖类型。

– 详细阐述 mGTE 模型特点,如高性能、长文档支持等。

– 说明 mGTE 模型的训练过程,包括底座预训练模型结构和各阶段训练技巧。

– 展示模型在不同数据集上的效果评测,包括检索效果和多任务文本表征效果。

– 介绍模型的推理性能优势。

– 开源与商用服务:

– 指出 GTE 系列模型已在 Modelscope 开源,被主流框架集成。

– 提到 GTE 系列在阿里云上提供商用 API 服务。

思维导图:

文章地址:https://mp.weixin.qq.com/s/v0xb1a6acQcTINScaiqG7Q

文章来源:mp.weixin.qq.com

作者:张延钊

发布时间:2024/8/14 9:37

语言:中文

总字数:5439字

预计阅读时间:22分钟

评分:91分

标签:RAG,文本检索,多语言模型,GTE系列,通义实验室


以下为原文内容

本内容来源于用户推荐转载,旨在分享知识与观点,如有侵权请联系删除 联系邮箱 media@ilingban.com

检索增强生成(Retrieval-Augmented Generation, 简称RAG)正日益成为大模型应用中的热门范式。这种创新方法将检索与生成相结合,使得大模型在提供回答时,能够充分借助外部知识库的支撑,从而获得更为准确且丰富的内容。这不仅有效地减轻了大模型常见的误解和数据隐私问题,也提升了实时响应的能力。


在RAG实施过程中,文本表示模型(Embedding model)和排序模型(Reranker model)是至关重要的两大模块。两者的目标一致,皆为检索与用户问题相关的文档,但在实现方法上却有所不同:文本表示模型首先计算每段文本的向量表示,然后通过余弦距离等方法计算它们之间的相关性分数。因此,所有文档的向量表示可以在离线阶段提前计算,在线上只需处理用户查询的向量,通过高效的向量搜索引擎迅速获取相关候选文档。而排序模型则直接将文本对作为输入,通过更精细的计算方法输出它们的相关性分数,实现更准确的排序效果。需要注意的是,排序模型的计算复杂度较高,因此主要适用于小规模的候选集合。


随着RAG技术的不断发展,系统的功能也在日益增强。早期的系统主要关注向量召回,而如今更复杂的模块被逐步引入,进一步提升了RAG系统的整体效果。同时,随着应用场景的拓展以及大模型处理上下文长度的能力增强,对多语言检索、跨语言检索以及长文本处理的需求也愈加迫切。


此前,通义实验室推出了GTE(General Text Embedding)系列文本向量模型,涵盖了基于BERT架构的模型及基于Qwen LLM系列训练的LLM embedding模型,如gte-Qwen2-1.5B-instruct和gte-Qwen2-7B-instruct。目前,基于双向注意力的Encoder-only结构的模型在同一规模下相较于Decoder-only模型在召回和排序效果上明显更优。然而,当前基于Encoder-only的Embedding和Ranking模型仍面临一些来自BERT时代的遗留问题,例如最长上下文长度仅为512,以及预训练阶段使用的语料明显不足。为解决这些问题,GTE模型开发团队从零开始训练了一种能支持长上下文和多语言的Encoder-only基础模型,并在此基础上推出了最新版本的GTE-MultiLingual系列模型(简称mGTE模型)。

该系列模型具备以下显著特点:

-高性能:在多个数据集上与同规模开源模型的对比中,对比效果领先

-长文档支持:Embedding和Reranker均可处理8k token文本长度,且支持通过ntk-rope等方法扩展到更长的上下文

-多语言支持:模型支持75种语言,涵盖当前主要大模型所支持的所有语种。

-弹性向量表示(Elastic Embedding):模型支持输出128-768维度之间的任意向量表示,以便在性能和存储成本之间取得最佳平衡。在128维的情况下,与768维相比,召回性能损失小于2%,同时节省6倍的存储空间。

-稀疏向量表示(Sparse Embedding):模型可以输出句子中每个单词的词权重作为稀疏表示,适用于需要精确匹配的场景。


mGTE系列模型构建流程如图2所示,首先训练了支持长下文的多语言Encoder-only底座模型(mGTE-MLM)。在底座基础上继续训练文本表示模型(mGTE-TRM)和排序模型(mGTE- Reranker)。下面将详细介绍不同阶段的训练过程。


底座预训练

模型结构

为了提升模型多语言以及长文本领域相关的能力,mGTE模型参考了目前Decode-Only架构大语言模型训练过程中一些常见的技巧,对原始的BERT架构做了以下几点改动,具体模型结构如图3所示

-位置编码: 将BERT模型中采用的绝对位置embedding方式改为了旋转位置编码RoPE,以便能更好的支持长上下文的训练,同时保持上下文长度扩展的可能性。

-激活函数: 将BERT模型中线性层(FFN)部分改为了GLU(gated linear unit),这也是在LLM训练过程中已经经过充分验证能有效提升模型训练稳定性的技巧。

此外,为了满足多语言和长文本处理能力的需求,mGTE模型使用了XLM-Roberta系列的词表。


训练过程

预训练阶段mGTE使用MLM(Masked Language Prediction)作为预训练阶段的loss,并参考RoBERTa等工作去掉了NSP loss。在此基础上,mGTE模型尝试了以下几种训练技巧来提升模型训练的效率:

  1. 数据采样:训练过程中,为保证每个Batch内的数据均来自同一种语言,每次会从所有语言中根据概率采样某种语言的数据,具体每一种语言的采样的概率计算方法如下:

其中n代表的是该语言的数据量,

  1. 多阶段预训练:为提高训练效率,训练过程中首先将数据截断为2k长度进行训练,之后在此基础上将数据截断到8k进行继续训练,并将RoPE的base参数由10000设置为160,000。

  2. Unpaddding Model:训练过程中,由于并不是所有的文档都都是统一的长度,mGTE利用了unpadding技术来避免在计算过程中对padding部分的token进行计算,通过这一技术可以有效的提升训练效率,目前常见的flash-attention与xformers库中均支持该操作。

预训练阶段,模型均使用BF16精度进行训练。


底座模型效果评测

为了验证预训练底座模型的效果,mGTE模型在多语言评测榜单XTREAM(共包含50种不同的语言)和英文GLUE数据上对比了2K阶段与8K阶段训练模型与之前Encoder-only架构的同尺寸多语言模型的效果,可以看到在绝大多数任务上mGTE底座模型都相较于过去的模型有更好的效果。

表1 XTREME-R多语言数据评估

表2 英文GLUE数据集评估


在目前的研究中,基于Encoder-only架构的文本表征模型普遍采用双阶段训练范式,即弱监督训练与监督训练的结合,旨在提升模型的泛化能力与性能。在监督阶段,mGTE不仅使用了基础的连续向量对比学习损失,还引入了两个新的表征特性:

-弹性维度表示:该特性允许模型输出不同维度的向量表示,以平衡索引存储和模型效果之间的权衡。多个开源和闭源项目均通过MRL学习支持这一特性。在训练时,先定义一个整数列表D,并分别对模型输出的前k维度(k属D)进行标准化处理,以计算对比学习损失。最终,损失值是各维度对比损失的平均数。

-Sparse向量表示:与传统的连续向量(Dense)表示法不同,Sparse表示通过深度模型计算文本中每个单词的权重,并将两段文本间相互匹配单词的权重乘积求和,从而得到相似度。这种方法可以视为对传统检索手段(如BM25)的扩展。Sparse表示在精准匹配(如型号、品牌、年份等)和长上下文检索场景中,常常展现出更强的性能。为了实现Sparse表示,mGTE模型在每个位置token的最后一层输出后增加了一层线性层(使用ReLU激活),并运用对比学习损失作为Sparse向量表示的损失函数

由此,模型的最终训练损失函数由MRL部分损失和Sparse部分损失的加权和构成,确保模型的有效性能与训练效率。

效果评测

检索效果评测

为了深入评估GTE多语言文本表征模型在检索任务上的表现,特别是在多语言和长文本检索方面,GTE模型作者选择了以下几个数据集进行评测:

-MLDR:多语言长文档检索评测集,包含13种语言的数据。

-MIRACL:多语言检索评测集,涵盖18种语言的数据。

-MKQA:跨语言检索评测集,提供25种不同语言的数据。

-BEIR:英文多领域检索评测集。

-LoCo:专注于英文长文档的检索评测集。

在这些数据集上的对比效果如表3所示:

-长文本检索的领先性:得益于原生的长文本底座训练,mGTE模型在长文本检索任务中显著优于其他开源模型(如mE5、BGE-M3等)及商业API(如OpenAI-3-large)。

-短文本检索的优势:在短文本检索场景中,mGTE模型表现出色,相较于同规模的其他模型,效果大幅领先;即便与参数量更大的模型对比,其效果也接近。

-稀疏向量检索的优势:在大多数检索场景中,稀疏向量检索相较于BM25表现优异,尤其在长文档场景中,与现有的稠密向量检索相比,显示出明显的优势。

表3 检索数据集效果对比


多任务文本表征效果评测

MTEB是一个涵盖多任务文本表示的通用评测数据集,包含分类,聚类,检索,文本相似度计算等多项任务,也是目前文本表示领域公认的衡量文本表示综合能力的榜单。mGTE在英语、法语和波兰语这四种不同语言上对mGTE模型与其他模型的性能进行了对比。类似于检索任务,mGTE模型在与开源社区中同规模的Encoder-only系列模型进行比较时表现出非常好的效果。


当然,与更大型的基于LLM的模型相比,mGTE仍存在明显差距。然而,考虑到mGTE小模型在推理性能方面的优势,其在实际应用场景中应具备更大的发挥空间。

表3 MTEB多任务多语言效果效果对比


在训练排序模型时,mGTE继续采用对比学习损失函数。mGTE作者在实验过程发现弱监督训练阶段对排序模型效果的提升非常有限。因此,在最终的排序模型训练过程中,mGTE放弃了弱监督训练,仅使用监督数据对模型进行微调。


由于排序模型需要以文本对作为输入来计算相关性分数,因此无法像Embedding模型那样利用batch内其他文档作为负样本。为了保证负样本的多样性,mGTE在训练过程中为每个查询构造了不同难度的负样本。具体而言,mGTE会针对每个查询从排序在不同区间的文档中随机采样负样本,并从文档集合中随机采样负样本,组合成该查询的负样本集合。在训练过程中,每次从这个负样本集合中随机采样K个用于训练。此外,排序模型的训练设置均与文本表示模型保持一致。

效果评测

类似地,mGTE对MLDR、MIRACL、MKQA和BEIR数据集上的排序结果进行了评估。所有的排序模型都基于mGTE-TRM-base模型生成的稠密向量召回的top100结果进行重新排序。具体结果如下:

图4 排序模型结果对比图


图4展示了不同排序模型的检索效果:


GTE多语言Embedding和ReRanking模型共享同一个训练底座,对同等规模的输入,两者的推理效率相当。因此在Embedding表征任务上测试验证mGTE系列模型的推理性能。

图5展示了不同模型编码100条平均长度1000的文档所需的时间,所有的实验都基于单张32G V100完成。可以看到,对比基于LLM的文本表示模型,mGTE编码同样数量的文本仅需约1/8的时间,在推理性能方面有较大优势。


GTE文本向量-多语言-base

https://modelscope.cn/models/iic/gte_sentence-embedding_multilingual-base



GTE文本排序-多语言-base

https://modelscope.cn/models/iic/gte_passage-ranking_multilingual-base



import torch.nn.functional as Ffrom modelscope import AutoModel, AutoTokenizer
input_texts = [ "what is the capital of China?", "how to implement quick sort in python?", "北京", "快排算法介绍"]
model_name_or_path = 'iic/gte_sentence-embedding_multilingual-base'tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)model = AutoModel.from_pretrained(model_name_or_path, trust_remote_code=True)
batch_dict = tokenizer(input_texts, max_length=8192, padding=True, truncation=True, return_tensors='pt')
outputs = model(**batch_dict)
dimension=768 embeddings = outputs.last_hidden_state[:, 0][:dimension]
embeddings = F.normalize(embeddings, p=2, dim=1)scores = (embeddings[:1] @ embeddings[1:].T)print(scores.tolist())

import torchfrom modelscope import AutoModelForSequenceClassification, AutoTokenizer
model_name_or_path = "iic/gte_passage-ranking_multilingual-base"
tokenizer = AutoTokenizer.from_pretrained(model_name_or_path)model = AutoModelForSequenceClassification.from_pretrained(model_name_or_path, trust_remote_code=True)model.eval()
with torch.no_grad(): pairs = [["中国的首都在哪儿", "北京"], ["what is the capital of China?", "北京"], ["how to implement quick sort in python?","Introduction of quick sort"]] inputs = tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=8192) scores = model(**inputs, return_dict=True).logits.view(-1, ).float() print(scores)


GTE(General Text Embedding)系列模型是由通义实验室开源的系列通用文本表征、剖析模型,旨在为RAG(检索增强生成)等检索场景提供领先的文本表征和排序功能。目前,GTE系列涵盖了多种模型,包括GTE中文/英文单语言系列、GTE-Qwen-instruct系列(MTEB榜单评测多语言SOTA模型)以及最新的GTE-Multilingual系列。这些模型已经在Modelscope上开源,拥有超过10万开发者的使用和支持。GTE系列模型也被Langchain、LLaMA Index等主流开源框架集成。


ModelScope链接

GTE文本向量-中文-通用领域-large

https://modelscope.cn/models/iic/nlp_gte_sentence-embedding_chinese-large


GTE文本向量-中文-通用领域-base

https://modelscope.cn/models/iic/nlp_gte_sentence-embedding_chinese-base


GTE文本向量-英文-通用领域-large

https://modelscope.cn/models/iic/nlp_gte_sentence-embedding_english-large


GTE文本向量-中文-通用领域-base

https://modelscope.cn/models/iic/nlp_gte_sentence-embedding_chinese-base


GTE文本向量-Qwen2-1.5B

https://modelscope.cn/models/iic/gte_Qwen2-1.5B-instruct


GTE文本向量-Qwen2-7B

https://modelscope.cn/models/iic/gte_Qwen2-7B-instruct

GTE文本向量-多语言-base

https://modelscope.cn/models/iic/gte_sentence-embedding_multilingual-base


GTE文本排序-多语言-base

https://modelscope.cn/models/iic/gte_passage-ranking_multilingual-base


除了开源的GTE系列模型,GTE系列模型同时在阿里云上提供商用API服务:

  • 文本Embedding模型: 提供三种版本的文本嵌入模型:text-embedding-v1/v2/v3,其中v3是最新版本的模型服务(https://help.aliyun.com/zh/model-studio/developer-reference/general-text-embedding/)

  • 文本ReRank模型: 提供gte-rerank模型服务, 模型持续迭代中(https://help.aliyun.com/zh/model-studio/developer-reference/general-text-sorting-model/)

点击阅读原文,即可跳转模型页~