写点什么

RAG 系统高效检索提升秘籍:如何精准选择 BGE 智源、GTE 阿里与 Jina 等的嵌入与精排模型的完美搭配

  • 2024-11-17
    浙江
  • 本文字数:12090 字

    阅读完需:约 40 分钟

RAG 系统高效检索提升秘籍:如何精准选择 BGE 智源、GTE 阿里与 Jina 等的嵌入与精排模型的完美搭配

Text Embedding 榜单:MTEB、C-MTEB


《MTEB: Massive Text Embedding Benchmark(海量文本嵌入基准)》


判断哪些文本嵌入模型效果较好,通常需要一个评估指标来进行比较,《MTEB: Massive Text Embedding Benchmark(海量文本嵌入基准)》就是一个海量文本嵌入模型的评估基准


  • 论文地址:https://arxiv.org/abs/2210.07316

  • MTEB 包含 8 个语义向量任务,涵盖 58 个数据集和 112 种语言。通过在 MTEB 上对 33 个模型进行基准测试,建立了迄今为止最全面的文本嵌入基准。我们发现没有特定的文本嵌入方法在所有任务中都占主导地位。这表明该领域尚未集中在一个通用的文本嵌入方法上,并将其扩展到足以在所有嵌入任务上提供最先进的结果

  • github 地址:https://github.com/embeddings-benchmark/mteb#leaderboard



1.BGE - 智源 [★]

  • github:https://github.com/FlagOpen/FlagEmbedding/blob/master/README.md


语义向量模型(Embedding Model)是语言模型生态体系中的重要组成部分,这一技术被广泛应用于搜索(Search)、问答(QA)、大语言模型检索增强(RAG)等应用场景之中。智源 BGE(BAAI General Embedding)模型自去年 8 月发布后广受好评,被开源爱好者集成至 LangChain、Llama_index 等项目,全球下载量已达 713 万次。


近日,智源发布了 BGE 家族新成员——通用语义向量模型 BGE-M3,支持超过 100 种语言,具备领先的多语言、跨语言检索能力,全面且高质量地支撑 “句子”、“段落”、“篇章”、“文档” 等不同粒度的输入文本,最大输入长度为 8192,并且一站式集成了稠密检索、稀疏检索、多向量检索三种检索功能,在多个评测基准中达到最优水平。


BGE-M3 是首个集多语言(Multi-Linguality)、多粒度(Multi-Granularity)、多功能(Multi-Functionality)三大技术特征于一体的语义向量模型,极大提升了语义向量模型在现实世界的可用性。目前,BGE-M3 已向社区全面开源并支持免费商用许可




  • 论文:https://arxiv.org/abs/2402.03216 M3-Embedding: Multi-Linguality, Multi-Functionality, Multi-Granularity Text Embeddings Through Self-Knowledge Distillation


本文介绍了一种名为 M3-Embedding 的新嵌入模型,该模型在多语言性、多功能性和多粒度方面具有独特优势。它为超过 100 种工作语言的语义检索提供了统一支持。它可以同时完成三种常见的检索功能:密集检索、多向量检索和稀疏检索。此外,它还能处理不同粒度的输入,从短句到长达 8,192 个标记的长文档。M3-Embedding 的有效训练提出了一系列技术贡献。值得注意的是,我们提出了一种新颖的自知识蒸馏方法,其中不同检索功能的相关性分数可以作为教师信号整合,以增强训练质量。我们还优化了批处理策略,实现了大批量和高训练吞吐量,以提高嵌入的判别性。M3-Embedding 在我们的实验中表现出卓越的性能,在多语言、跨语言和长文档检索基准测试中取得了新的最先进成果



检索流程的建议:建议使用 “混合检索 + 重排序” 的方式进行检索。


混合检索 (Hybrid Retrieval) 利用多种方法的优势,提升检索准确率和泛化能力。经典的混合检索方案包括结合嵌入检索与 BM25 算法,现在你可以使用支持密集与稀疏检索的 BGE-M3,在生成密集嵌入的同时获得类似 BM25 的词元权重。可以参考 Vespa 和 Milvus 实现混合检索。


重排序 (Re-Ranking) 模型通过交叉编码器的方式,比双编码器模型具有更高的准确率。例如,在检索后使用 bge-reranker 或 bge-reranker-v2 进一步筛选文本。


  • 技术规格


<table><thead><tr><th>模型名</th><th>维度</th><th>序列长度</th><th>介绍</th></tr></thead><tbody><tr><td>BAAI/bge-m3</td><td>1024</td><td>8192</td><td>多语言,基于统一的微调(密集、稀疏、ColBERT)</td></tr><tr><td>BAAI/bge-m3-unsupervised</td><td>1024</td><td>8192</td><td>对比学习训练,来自 bge-m3-retromae</td></tr><tr><td>BAAI/bge-large-en-v1.5</td><td>1024</td><td>512</td><td>英文模型</td></tr><tr><td>BAAI/bge-base-en-v1.5</td><td>768</td><td>512</td><td>英文模型</td></tr><tr><td>BAAI/bge-small-en-v1.5</td><td>384</td><td>512</td><td>英文模型</td></tr></tbody></table>


  • 不同检索方法的介绍


  1. 密集检索: 通过将文本映射到单一嵌入向量进行检索,例如 DPR、BGE-v1.5。

  2. 稀疏检索(词汇匹配): 通过计算文本中出现的词元权重,常用模型如 BM25、unicoil、splade。

  3. 多向量检索: 使用多个向量来表示文本,例如 ColBERT。


  • 对于嵌入检索,可以按照 BGE 的用法使用 BGE-M3,只是 BGE-M3 不再需要为查询添加指令。

  • 对于混合检索,可以使用 Vespa 和 Milvus。

  • BGE-M3 使用教程


  1. 安装:


    git clone https://github.com/FlagOpen/FlagEmbedding.git    cd FlagEmbedding    pip install -e .
复制代码


或直接安装:
复制代码


    pip install -U FlagEmbedding
复制代码


  1. 生成密集嵌入:


    from FlagEmbedding import BGEM3FlagModel    model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True)    sentences = ["What is BGE M3?", "Definition of BM25"]    embeddings = model.encode(sentences, batch_size=12, max_length=8192)['dense_vecs']
复制代码


  1. 生成稀疏嵌入:


    from FlagEmbedding import BGEM3FlagModel    model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True)    output = model.encode(sentences, return_dense=True, return_sparse=True)    lexical_weights = output['lexical_weights']    print(model.convert_id_to_token(lexical_weights))
复制代码


  1. 生成多向量嵌入:


    from FlagEmbedding import BGEM3FlagModel    model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True)    output = model.encode(sentences, return_dense=True, return_sparse=True, return_colbert_vecs=True)    print(model.colbert_score(output['colbert_vecs'][0], output['colbert_vecs'][1]))
复制代码


  1. 文本对评分:


    sentence_pairs = [[i,j] for i in sentences_1 for j in sentences_2]    scores = model.compute_score(sentence_pairs, max_passage_length=128, weights_for_different_modes=[0.4, 0.2, 0.4])
复制代码


BGE-M3 提供了高效的多功能、多语言、多粒度文本嵌入解决方案,适用于多种复杂的检索任务。


在基于 Milvus 的工程化应用中,使用 BGE-M3 模型进行混合语义搜索可以极大提升搜索的准确性和效果。下面将介绍如何在 Milvus 环境中应用 BGE-M3 模型进行密集与稀疏向量的混合搜索,并使用 BGE CrossEncoder 模型对搜索结果进行重新排序。


  • 环境准备


  1. 安装依赖

  2. 需要安装 pymilvus 作为客户端连接 Milvus 服务器,并安装 pymilvus[model] 以支持 BGE-M3 模型嵌入功能:


    pip install pymilvus    pip install pymilvus[model]
复制代码


  1. 设置 Milvus 环境

  2. Milvus 支持在 2.4.0 及以上版本中进行稀疏向量搜索,因此需要确保本地 Milvus 环境版本符合要求。可以通过 Docker 安装最新版本的 Milvus:


    docker run -d --name milvus-standalone -p 19530:19530 -p 9091:9091 milvusdb/milvus:v2.4.0
复制代码


  • 应用场景示例


在这个示例中,我们使用 BGE-M3 模型对文本进行密集和稀疏向量的嵌入,并将结果插入到 Milvus 数据库中进行搜索和排序。你可以选择随机生成向量,或使用 BGE-M3 模型生成高质量的密集和稀疏向量表示。


  • 实现步骤


  1. 嵌入文本为密集和稀疏向量

  2. 使用 BGE-M3 模型将文档和查询转换为向量表示:


    from pymilvus.model.hybrid import BGEM3EmbeddingFunction    ef = BGEM3EmbeddingFunction(use_fp16=False, device="cpu")    dense_dim = ef.dim["dense"]        docs_embeddings = ef(docs)    query_embeddings = ef([query])
复制代码


  1. 创建 Milvus 集合

  2. 定义包含文本、密集向量和稀疏向量的集合:


    fields = [        FieldSchema(, dtype=DataType.VARCHAR, is_primary=True, auto_id=True, max_length=100),        FieldSchema(, dtype=DataType.VARCHAR, max_length=512),        FieldSchema(, dtype=DataType.SPARSE_FLOAT_VECTOR),        FieldSchema(, dtype=DataType.FLOAT_VECTOR, dim=dense_dim),    ]    schema = CollectionSchema(fields, "")    col = Collection("hybrid_demo", schema, consistency_level="Strong")
复制代码


  1. 插入数据并创建索引

  2. 将生成的稀疏和密集向量插入集合并创建索引:


    entities = [docs, docs_embeddings["sparse"], docs_embeddings["dense"]]    col.insert(entities)    col.create_index("sparse_vector", {"index_type": "SPARSE_INVERTED_INDEX", "metric_type": "IP"})    col.create_index("dense_vector", {"index_type": "FLAT", "metric_type": "IP"})    col.load()
复制代码


  1. 进行混合搜索

  2. 使用稀疏和密集向量进行搜索,并结合 BGE CrossEncoder 模型对结果重新排序:


    res = col.hybrid_search([sparse_req, dense_req], rerank=RRFRanker(), limit=k, output_fields=['text'])
复制代码


  1. 结果展示

  2. 如果使用 BGE CrossEncoder 模型对结果进行排序,可以看到查询相关性更高的结果。

2.GTE - 阿里 [★]

GTE 模型,也称为 General Text Embeddings,是阿里巴巴达摩院推出的文本 Embedding 技术。


此前,通义实验室推出了 GTE(General Text Embedding)系列文本向量模型,涵盖了基于 BERT 架构的模型及基于 Qwen LLM 系列训练的 LLM embedding 模型,如 gte-Qwen2-1.5B-instructgte-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):模型可以输出句子中每个单词的词权重作为稀疏表示,适用于需要精确匹配的场景。



                                                         图 1 文本表征和文本排序模型架构示意图
复制代码


mGTE 系列模型构建流程如图 2 所示,首先,训练了支持长下文的多语言 Encoder-only 底座模型 GTE-base-multilinguish。并在底座基础上继续训练文本表示模型 gte-multilingual-base 和排序模型 gte-multilingual-base



                                                              图 2 模型训练过程示意图
复制代码


  • 模型结构

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

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

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


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



                                        图 3 GTE 底座模型结构示意图
复制代码

效果评测

1. 检索效果评测

为了评测文本表征模型的检索效果,尤其是模型的多语言和长文本处理能力,mGTE 模型主要在以下几个数据集进行评测


  • MLDR[9]: 多语言长文档检索评测集, 包括 13 个语种数据。

  • MIRACL[10]: 多语言检索评测集合, 包含 18 个语种数据。

  • MKQA[11]: 跨语言检索评测集,包含 25 个不同的语种。

  • BEIR[12]: 英文多领域检索评测集合。

  • LoCo[13]:英文长文档检索评测集合。


表 3 展示了在这 5 个数据集上 mGTE 模型和同规模模型的效果对比:


  • 受益于原生的长文本底座训练,mGTE 表征模型在长文本检索效果上明显优于其它模型。

  • 在短文本检索场景, mGTE 对比同规模的模型效果大幅度领先,对比更大规模的模型效果也很接近。

  • Sparse 向量检索效果在大部分场景优于 BM25,特别在长文档场景对比现有 Dense 向量检索有明显效果优势。


2. 多任务文本表征效果评测

MTEB[14] 是一个涵盖多任务文本表示的通用评测数据集,英语、法语和波兰语这四种不同语言上对 mGTE 模型与其他模型的性能进行了对比。类似于检索任务,mGTE 模型在与开源社区中同规模的 Encoder-only 系列模型进行比较时表现出非常好的效果。当然,与更大型的基于 LLM 的模型相比,mGTE 仍存在明显差距。然而,考虑到 mGTE 小模型在推理性能方面的优势,其在实际应用场景中应具备更大的发挥空间。


3. 排序效果评测

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



                                                                                         图 5 排序模型结果对比图
复制代码


  • 各个排序模型相比召回模型均表现出更佳的性能,证明了在检索链路中引入排序模型的必要性。

  • 与同尺寸甚至更大尺寸的模型相比,mGTE-reranker-base 模型在各个数据集上均取得了相当甚至更好的效果,尤其是在多语言长文档的检索场景中。


模型的使用方法可以参考 Huggingface 上的样例:


  • Embedding 模型:


import torch.nn.functional as Ffrom transformers import AutoModel, AutoTokenizer
input_texts = [ "what is the capital of China?", "how to implement quick sort in python?", "北京", "快排算法介绍"]
model_path = 'Alibaba-NLP/gte-multilingual-base'tokenizer = AutoTokenizer.from_pretrained(model_path)model = AutoModel.from_pretrained(model_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) * 100print(scores.tolist())
复制代码


  • Ranking 模型:


import torchfrom transformers import AutoModelForSequenceClassification, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('Alibaba-NLP/gte-multilingual-reranker-base')model = AutoModelForSequenceClassification.from_pretrained('Alibaba-NLP/gte-multilingual-reranker-base', trust_remote_code=True)model.eval()
pairs = [["中国的首都在哪儿","北京"], ["what is the capital of China?", "北京"], ["how to implement quick sort in python?","Introduction of quick sort"]]with torch.no_grad(): inputs = tokenizer(pairs, padding=True, truncation=True, return_tensors='pt', max_length=512) scores = model(**inputs, return_dict=True).logits.view(-1, ).float() print(scores)
复制代码


3.E5 Embedding - 微软

E5-embedding 是由 intfloat 团队研发的一款先进的 Embedding 模型。E5 的设计初衷是为各种需要单一向量表示的任务提供高效且即用的文本 Embedding,与其他 Embedding 模型相比,E5 在需要高质量、多功能和高效的文本 Embedding 的场景中表现尤为出色。


以下是 E5-embedding 的一些特点:


  1. 新的训练方法:E5 采用了 “EmbEddings from bidirEctional Encoder rEpresentations” 这一创新方法进行训练,这意味着它不仅仅依赖传统的有标记数据,也不依赖低质量的合成文本对。

  2. 高质量的文本表示:E5 能为文本提供高质量的向量表示,这使得它在多种任务上都能表现出色,尤其是在需要句子或段落级别表示的任务中。

  3. 多场景:无论是在 Zero-shot 场景还是微调应用中,E5 都能提供强大的现成文本 Embedding,这使得它在多种 NLP 任务中都有很好的应用前景。



<table><thead><tr><th></th><th>BEIR</th><th># of layers</th><th>embedding dimension</th><th>Huggingface</th></tr></thead><tbody><tr><td>E5-small-v2</td><td>49.0</td><td>12</td><td>384</td><td><a href="https://huggingface.co/intfloat/e5-small-v2" rel="nofollow">intfloat/e5-small-v2</a></td></tr><tr><td>E5-base-v2</td><td>50.3</td><td>12</td><td>768</td><td><a href="https://huggingface.co/intfloat/e5-base-v2" rel="nofollow">intfloat/e5-base-v2</a></td></tr><tr><td>E5-large-v2</td><td>50.6</td><td>24</td><td>1024</td><td><a href="https://huggingface.co/intfloat/e5-large-v2" rel="nofollow">intfloat/e5-large-v2</a></td></tr><tr><td></td><td></td><td></td><td></td><td></td></tr><tr><td>E5-small</td><td>46.0</td><td>12</td><td>384</td><td><a href="https://huggingface.co/intfloat/e5-small" rel="nofollow">intfloat/e5-small</a></td></tr><tr><td>E5-base</td><td>48.8</td><td>12</td><td>768</td><td><a href="https://huggingface.co/intfloat/e5-base" rel="nofollow">intfloat/e5-base</a></td></tr><tr><td>E5-large</td><td>50.0</td><td>24</td><td>1024</td><td><a href="https://huggingface.co/intfloat/e5-large" rel="nofollow">intfloat/e5-large</a></td></tr><tr><td></td><td></td><td></td><td></td><td></td></tr><tr><td>E5-small-unsupervised</td><td>40.8</td><td>12</td><td>384</td><td><a href="https://huggingface.co/intfloat/e5-small-unsupervised" rel="nofollow">intfloat/e5-small-unsupervised</a></td></tr><tr><td>E5-base-unsupervised</td><td>42.9</td><td>12</td><td>768</td><td><a href="https://huggingface.co/intfloat/e5-base-unsupervised" rel="nofollow">intfloat/e5-base-unsupervised</a></td></tr><tr><td>E5-large-unsupervised</td><td>44.2</td><td>24</td><td>1024</td><td><a href="https://huggingface.co/intfloat/e5-large-unsupervised" rel="nofollow">intfloat/e5-large-unsupervised</a></td></tr></tbody></table>


The models with -unsupervised suffix only pre-trains on unlabeled datasets.


  • Multilingual Pre-trained Models


<table><thead><tr><th></th><th>BEIR</th><th># of layers</th><th>embedding dimension</th><th>Huggingface</th></tr></thead><tbody><tr><td>multilingual-e5-small</td><td>46.6</td><td>12</td><td>384</td><td><a href="https://huggingface.co/intfloat/multilingual-e5-small" rel="nofollow">intfloat/multilingual-e5-small</a></td></tr><tr><td>multilingual-e5-base</td><td>48.9</td><td>12</td><td>768</td><td><a href="https://huggingface.co/intfloat/multilingual-e5-base" rel="nofollow">intfloat/multilingual-e5-base</a></td></tr><tr><td>multilingual-e5-large</td><td>51.4</td><td>24</td><td>1024</td><td><a href="https://huggingface.co/intfloat/multilingual-e5-large" rel="nofollow">intfloat/multilingual-e5-large</a></td></tr><tr><td>multilingual-e5-large-instruct</td><td>52.5</td><td>24</td><td>1024</td><td><a href="https://huggingface.co/intfloat/multilingual-e5-large-instruct" rel="nofollow">intfloat/multilingual-e5-large-instruct</a></td></tr></tbody></table>

4.Jina Embedding V3 [★]

githubhttps://github.com/jina-ai/serve


huggingface:https://huggingface.co/jinaai/jina-embeddings-v3



jina-embeddings-v3 是一个前沿的多语言文本嵌入模型,具有 570M 个参数和 8192 个令牌长度,优于 OpenAI 和 Cohere 在 MTEB 上的最新专有嵌入。


Jina Embeddings V3 来了,这款 5.7 亿参数的顶级文本向量模型,在多语言和长文本检索任务上达到当前最佳水平 SOTA。内置多种 LoRA 适配器,可以根据你的需求,针对 检索、聚类、分类和匹配 的不同场景进行定制,获得更精准的向量化效果。


  • 多语言支持: 支持 89 种语言,全面超越 multilingual-e5-large-instruct


支持的语言:

虽然基础模型支持 100 种语言,将调整工作重点放在以下 30 种语言上: 阿拉伯语、孟加拉语、中文、丹麦语、荷兰语、英语、芬兰语、法语、格鲁吉亚语、德语、希腊语、印地语、印尼语、意大利语、日语、韩语、拉脱维亚语、挪威语、波兰语、葡萄牙语、罗马尼亚语、俄语、斯洛伐克语、西班牙语、瑞典语、泰语、土耳其语、乌克兰语、乌尔都语和越南语。


  • 长文本处理: 支持 8192 token 的输入长度,在 LongEmbed 基准测试中表现出色

  • 任务定制更精准: 内置多种 LoRA 适配器,针对检索、聚类、分类和匹配等任务,生成定制化向量,效果更精准。

  • retrieval.query:用于非对称检索任务中的查询嵌入

    retrieval.passage:用于非对称检索任务中的段落嵌入

    separation:用于聚类和重新排序应用程序中的嵌入

    classification:用于分类任务中的嵌入

    text-matching:用于量化两个文本之间的相似度的任务中的嵌入,例如 STS 或对称检索任务

  • 输出维度可定制: 默认输出维度为 1024,但你完全可以根据需要把它缩减到 32,性能几乎不受影响,这都归功于俄罗斯套娃表示学习技术的加持。

  • 论文连接:https://arxiv.org/abs/2409.10173

  • Model Architecture 模型架构




java -embeddings-v3 的关键创新是使用了 LoRA 适配器。介绍了五个特定于任务的 LoRA 适配器,以优化四个任务的嵌入。模型的输入由两部分组成: 文本 (要嵌入的长文档) 和任务。jina-embeddings-v3 支持 4 个任务并实现 5 个适配器供您选择: 用于非对称检索任务中的查询和通道嵌入的 retrievalquery 和 retrievalpassage,用于聚类任务的分离,用于分类任务的分类,以及用于涉及语义相似性的任务的文本匹配,例如 STS 或对称检索。LoRA 适配器占总参数的比例不到 3%,因此给计算增加的开销非常小。


为了进一步提高性能和减少内存消耗,我们集成了 FlashAttention 2,支持激活检查点,并使用 DeepSpeed 框架进行高效的分布式训练。



jina-embeddings-v3 的性能已在多种多语言和跨语言 MTEB 任务中进行评估



jina-embeddings-v3 在 LongEmbed 基准测试的六个长文档检索任务上的表现,相较于其他模型有显著提升。得分是 nDCG@10;得分越高越好。这表明基于 RoPE 的位置嵌入的有效性,它优于 baai-bge-m3 使用的固定位置嵌入和 jina-embeddings-v2 中使用的基于 ALiBi 的方法。





Scaling law of embedding models. The average MTEB performance on English tasks is plotted against the number of model parameters. Each dot represents an embedding model. The trendline, representing all models, is highlighted, with multilingual models emphasized in cyan. One can see that jina-embeddings-v3 demonstrates superior performance compared to models of similar size, also showing a superlinear improvement over its predecessor, jina-embeddings-v2. This graph was created by selecting top-100 embedding models from the MTEB leaderboard , excluding those without size information, typically closed-source or proprietary models. Submissions identified as obvious trolling were also filtered out

5.Cohere

  • 官网网址:https://cohere.com/

  • cohere-python:https://github.com/cohere-ai/cohere-python

  • Cohere 为各种阅读和写作任务训练大型语言模型 (LLMs),例如摘要、内容创建和情感分析。其语言模型针对三个主要用例进行了优化:检索文本(retrieving text)、生成文本(generating text)和分类文本(classifying text)

  • 检索文本(Retrieving Text)

  • Cohere 产品中提供了三个主要 API 端点,这些端点专注于检索文本以进行搜索、聚类和推荐。

  • Embed(嵌入):该端点提供英语和 100 多种语言的准确嵌入,使用户能够发现趋势、比较语言并根据数据构建自己的文本分析应用程序。

  • Semantic Search(语义搜索):为用户提供语义搜索功能,可根据含义(而不仅仅是关键字)查找文本、文档和文章。它允许开发人员为任何语言构建更好的搜索系统。

  • Rerank(重排):重新排名提高了关键字或矢量搜索系统的搜索质量。它可以帮助系统更好地理解上下文以及问题和查询的含义,同时承诺对现有系统进行最小程度的修改。


# python -m pip install cohere --upgrade
import cohere
co = cohere.ClientV2("<<apiKey>>")response = co.chat( model="command-r-plus", messages=[{"role": "user", "content": "hello world!"}])
print(response)
复制代码

6.Instructor - 港大

  • code:https://github.com/xlang-ai/instructor-embedding

  • paper:One Embedder, Any Task: Instruction-Finetuned Text Embeddings


Instructor 是由香港大学自然语言处理实验室团队推出的一种指导微调的文本 Embedding 模型。该模型可以生成针对任何任务(例如分类、检索、聚类、文本评估等)和领域(例如科学、金融等)的文本 Embedding,只需提供任务指导,无需任何微调。Instructor 在 70 个不同的 Embedding 任务(MTEB 排行榜)上都达到了最先进的性能。该模型可以轻松地与定制的 sentence-transformer 库一起使用。


Instructor 模型主要特点如下:


  • 多任务适应性:只需提供任务指导,即可生成针对任何任务的文本 Embedding。

  • 高性能:在 MTEB 排行榜上的 70 个不同的 Embedding 任务上都达到了最先进的性能。

  • 易于使用:与定制的 sentence-transformer 库结合使用,使得模型的使用变得非常简单。


此外,模型还提供了其他使用案例,如计算句子相似性、信息检索和聚类等。

7.XLM-Roberta-Facebook

XLM-Roberta(简称 XLM-R)是 Facebook AI 推出的一种多语言版本的 Roberta 模型。它是在大量的多语言数据上进行预训练的,目的是为了提供一个能够处理多种语言的强大的文本表示模型。XLM-Roberta 模型在多种跨语言自然语言处理任务上都表现出色,包括机器翻译、文本分类和命名实体识别等。


模型主要特点如下:


  • 多语言支持:XLM-Roberta 支持多种语言,可以处理来自不同语言的文本数据。

  • 高性能:在多种跨语言自然语言处理任务上,XLM-Roberta 都表现出了最先进的性能。

  • 预训练模型:XLM-Roberta 是在大量的多语言数据上进行预训练的,这使得它能够捕获跨语言的文本表示。

8.text-embedding-ada-002 --OpenAI

官网:https://platform.openai.com/docs/guides/embeddings/use-cases


text-embedding-ada-002 是一个由 Xenova 团队开发的文本 Embedding 模型。该模型提供了一个与 Hugging Face 库兼容的版本的 text-embedding-ada-002 分词器,该分词器是从 openai/tiktoken 适应而来的。这意味着它可以与 Hugging Face 的各种库一起使用,包括 Transformers、Tokenizers 和 Transformers.js。


模型主要特点如下:


  • 兼容性:该模型与 Hugging Face 的各种库兼容,包括 Transformers、Tokenizers 和 Transformers.js。

  • 基于 openai/tiktoken:该模型的分词器是从 openai/tiktoken 适应而来的。


  1. 精排模型推荐




专业级语义搜索优化:利用 Cohere AI、BGE Re-Ranker 及 Jina Reranker 实现精准结果重排


参考文章:https://blog.csdn.net/sinat_39620217/article/details/141850425


文本嵌入技术 Text Embedding 模型详解:text2vec、OpenAI ada-002 到 M3E 及 BGE-M3 的演变


相关榜单:



https://huggingface.co/spaces/mteb/leaderboard

10 xinference 推理

文章参考:Xinference 实战指南:全面解析 LLM 大模型部署流程


Xorbits Inference (Xinference) 是一个开源平台,用于简化各种 AI 模型的运行和集成。借助 Xinference,您可以使用任何开源 LLM、嵌入模型和多模态模型在云端或本地环境中运行推理,并创建强大的 AI 应用。通过 Xorbits Inference,可以轻松地一键部署你自己的模型或内置的前沿开源模型




发布于: 刚刚阅读数: 5
用户头像

本博客将不定期更新关于NLP等领域相关知识 2022-01-06 加入

本博客将不定期更新关于机器学习、强化学习、数据挖掘以及NLP等领域相关知识,以及分享自己学习到的知识技能,感谢大家关注!

评论

发布
暂无评论
RAG 系统高效检索提升秘籍:如何精准选择 BGE 智源、GTE 阿里与 Jina 等的嵌入与精排模型的完美搭配_rag_汀丶人工智能_InfoQ写作社区