HuggingFace镜像/bce-embedding-base_v1-openmind
模型介绍文件和版本分析
下载使用量0

BCEmbedding: 面向RAG的双语跨语言嵌入模型

最新、最详细的bce-embedding-base_v1相关信息,请移步:

GitHub

主要特点(Key Features):

  • 中英双语及跨语言能力;
  • RAG优化,适配教育、法律、金融、医疗、文学、FAQ、教材、维基百科等多领域真实业务场景;
  • 轻松集成至langchain与llamaindex(详见BCEmbedding);
  • EmbeddingModel无需“精心设计”的指令,即可高效召回有用片段;
  • 最佳实践(Best practice):使用embedding召回Top 50-100片段,再通过reranker对这些片段进行精排,最终选取Top 5-10片段。(1. 借助bce-embedding-base_v1获取Top 50-100片段以实现“召回”;2. 使用bce-reranker-base_v1对片段进行重排序,最终得到Top 5-10片段以实现“精准”。)

最新动态(News):

  • BCEmbedding技术博客(Technical Blog):为RAG而生-BCEmbedding技术报告
  • RerankerModel相关链接:bce-reranker-base_v1

第三方应用示例(Third-party Examples):

  • RAG应用:QAnything、HuixiangDou、ChatPDF。
  • 高效推理框架:ChatLLM.cpp、Xinference、mindnlp(华为GPU)。

image/jpeg image/jpeg


点击展开目录
  • 🌐 双语及跨语言优势
  • 💡 核心特性
  • 🚀 最新更新
  • 🍎 模型列表
  • 📖 使用手册
    • 安装
    • 快速入门(transformers、sentence-transformers)
    • RAG框架集成(langchain、llama_index)
  • ⚙️ 评测
    • 基于MTEB的语义表征评测
    • 基于LlamaIndex的RAG评测
  • 📈 排行榜
    • MTEB语义表征评测
    • LlamaIndex RAG评测
  • 🛠 有道BCEmbedding API
  • 🧲 微信交流群
  • ✏️ 引用
  • 🔐 许可证
  • 🔗 相关链接

Bilingual and Crosslingual Embedding(BCEmbedding)由网易有道开发,包含EmbeddingModel和RerankerModel。EmbeddingModel专注于生成语义向量,在语义搜索和问答中发挥关键作用;RerankerModel则擅长优化搜索结果和排序任务。

BCEmbedding是有道检索增强生成(RAG)应用的核心基础,尤其在QAnything[github]中表现突出。QAnything作为开源项目,已广泛集成到有道的各类产品中,如有道速读和有道翻译。

BCEmbedding以其卓越的双语和跨语言能力为特色,能有效弥合中英文语言差异,实现:

  • 在MTEB语义表征评测中表现优异;
  • 在LlamaIndex RAG评测中树立新标杆。

BCEmbedding是由网易有道开发的双语和跨语种语义表征算法模型库,其中包含EmbeddingModel和RerankerModel两类基础模型。EmbeddingModel专门用于生成语义向量,在语义搜索和问答中起着关键作用,而RerankerModel擅长优化语义搜索结果和语义相关顺序精排。

BCEmbedding作为有道的检索增强生成式应用(RAG)的基石,特别是在QAnything[github]中发挥着重要作用。QAnything作为一个网易有道开源项目,在有道许多产品中有很好的应用实践,比如有道速读和有道翻译。

BCEmbedding以其出色的双语和跨语种能力而著称,在语义检索中消除中英语言之间的差异,从而实现:

  • 强大的双语和跨语种语义表征能力【基于MTEB的语义表征评测指标】。
  • 基于LlamaIndex的RAG评测,表现SOTA【基于LlamaIndex的RAG评测指标】。

🌐 双语与跨语种优势

现有的嵌入模型在双语和跨语种场景下往往面临性能挑战,尤其在中文、英文及其跨语种任务中。BCEmbedding借助有道翻译引擎的优势,在单语、双语和跨语种场景下均展现出卓越性能。

EmbeddingModel支持中文(ch)和英文(en)(更多语种支持即将上线),而RerankerModel支持中文(ch)、英文(en)、日文(ja)和韩文(ko)。

现有的单个语义表征模型在双语和跨语种场景中常常表现不佳,特别是在中文、英文及其跨语种任务中。BCEmbedding充分利用有道翻译引擎的优势,实现只需一个模型就可以在单语、双语和跨语种场景中表现出卓越的性能。

EmbeddingModel支持中文和英文(之后会支持更多语种);RerankerModel支持中文,英文,日文和韩文。

💡 核心特性

  • 卓越的双语与跨语种能力:依托有道翻译引擎,在中文、英文及其中英跨语种检索任务中表现突出,更多语种支持即将推出。

  • RAG优化设计:专为各类RAG任务量身打造,包括翻译、摘要和问答,确保精准的查询理解。详见 LlamaIndex中的RAG评测。

  • 高效精准的检索流程:EmbeddingModel采用双编码器架构,在第一阶段实现高效检索;RerankerModel则运用交叉编码器,在第二阶段提升精度并进行深度语义分析。

  • 广泛的领域适应性:通过多样化数据集训练,在不同领域均能保持优异性能。

  • 用户友好的设计:无需指令前缀,适用于多任务场景,无需为每项任务单独指定查询指令。

  • 有意义的重排序分数:RerankerModel提供具有实际意义的相关性分数,有助于提升结果质量并优化大语言模型性能。

  • 经过生产验证:已在有道多款产品中成功部署并验证。

    • 双语和跨语种能力:基于有道翻译引擎的强大能力,我们的BCEmbedding具备强大的中英双语和跨语种语义表征能力。

    • RAG适配:面向RAG做了针对性优化,可以适配大多数相关任务,比如翻译,摘要,问答等。此外,针对问题理解(query understanding)也做了针对优化,详见 基于LlamaIndex的RAG评测指标。

    • 高效且精确的语义检索:EmbeddingModel采用双编码器,可以在第一阶段实现高效的语义检索。RerankerModel采用交叉编码器,可以在第二阶段实现更高精度的语义顺序精排。

    • 更好的领域泛化性:为了在更多场景实现更好的效果,我们收集了多种多样的领域数据。

    • 用户友好:语义检索时不需要特殊指令前缀。也就是,你不需要为各种任务绞尽脑汁设计指令前缀。

    • 有意义的重排序分数:RerankerModel可以提供有意义的语义相关性分数(不仅仅是排序),可以用于过滤无意义文本片段,提高大模型生成效果。

    • 产品化检验:BCEmbedding已经被有道众多真实产品检验。

🚀 最新动态

  • 2024-01-03: 模型发布 - bce-embedding-base_v1 和 bce-reranker-base_v1 已开放使用。

  • 2024-01-03: 评测数据集 [CrosslingualMultiDomainsDataset] - 用于评估 RAG 性能,可结合 LlamaIndex 使用。

  • 2024-01-03: 评测数据集 [详情] - 用于评估跨语种语义表征性能,可结合 MTEB 使用。

    • 2024-01-03: 模型发布 - bce-embedding-base_v1和bce-reranker-base_v1已发布.
    • 2024-01-03: RAG评测数据 [CrosslingualMultiDomainsDataset] - 基于LlamaIndex的RAG评测数据已发布。
    • 2024-01-03: 跨语种语义表征评测数据 [详情] - 基于MTEB的跨语种评测数据已发布.

🍎 模型列表

模型名称模型类型支持语言参数规模权重下载
bce-embedding-base_v1EmbeddingModel中文、英文279M下载
bce-reranker-base_v1RerankerModel中文、英文、日文、韩文279M下载

📖 使用手册

安装

首先,创建并激活 conda 环境。

conda create --name bce python=3.10 -y
conda activate bce

然后安装 BCEmbedding 以进行最小化安装:

pip install BCEmbedding==0.1.1

或者从源代码安装:

git clone git@github.com:netease-youdao/BCEmbedding.git
cd BCEmbedding
pip install -v -e .

在 Openmind 中的使用

from openmind import AutoTokenizer, AutoModel, is_torch_npu_available
from openmind_hub import snapshot_download
import torch.nn.functional as F
from torch import Tensor
import openmind
import torch
import argparse
import time

# Mean Pooling - Take attention mask into account for correct averaging
def mean_pooling(model_output, attention_mask):
    token_embeddings = model_output[0]  # First element of model_output contains all token embeddings
    input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
    return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)

def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument(
        "--model_name_or_path",
        type=str,
        help="Path to model",
        default="jeffding/bce-embedding-base_v1-openmind",
    )
    args = parser.parse_args()
    return args

def main():
    args = parse_args()
    model_path = args.model_name_or_path

    if is_torch_npu_available():
        device = "npu:0"
    else:
        device = "cpu"
        
    # Load model from HuggingFace Hub
    tokenizer = AutoTokenizer.from_pretrained(model_path,trust_remote_code=True)
    model = AutoModel.from_pretrained(model_path, trust_remote_code=True).to(device)
    start_time = time.time()
    sentences = ['如何更换花呗绑定银行卡', 'How to replace the Huabei bundled bank card']
    # Tokenize sentences
    encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt').to(device)

    # Compute token embeddings
    with torch.no_grad():
        model_output = model(**encoded_input)
    # Perform pooling. In this case, mean pooling.
    sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
    print("Sentence embeddings:")
    print(sentence_embeddings)
    
    end_time = time.time()
    print(f"硬件环境:{device},推理执行时间:{end_time - start_time}秒")
    
if __name__ == "__main__":
    main()

快速开始

1. 基于BCEmbedding

使用EmbeddingModel,默认采用cls 池化器。

from BCEmbedding import EmbeddingModel

# list of sentences
sentences = ['sentence_0', 'sentence_1', ...]

# init embedding model
model = EmbeddingModel(model_name_or_path="maidalun1020/bce-embedding-base_v1")

# extract embeddings
embeddings = model.encode(sentences)

使用 RerankerModel 计算相关分数并重新排序:

from BCEmbedding import RerankerModel

# your query and corresponding passages
query = 'input_query'
passages = ['passage_0', 'passage_1', ...]

# construct sentence pairs
sentence_pairs = [[query, passage] for passage in passages]

# init reranker model
model = RerankerModel(model_name_or_path="maidalun1020/bce-reranker-base_v1")

# method 0: calculate scores of sentence pairs
scores = model.compute_score(sentence_pairs)

# method 1: rerank passages
rerank_results = model.rerank(query, passages)

注意:

  • 在 RerankerModel.rerank 方法中,我们提供了一种在生产环境中使用的高级预处理方式,用于在“passages”很长时构建 sentence_pairs。

2. 基于 transformers

对于 EmbeddingModel:

from transformers import AutoModel, AutoTokenizer

# list of sentences
sentences = ['sentence_0', 'sentence_1', ...]

# init model and tokenizer
tokenizer = AutoTokenizer.from_pretrained('maidalun1020/bce-embedding-base_v1')
model = AutoModel.from_pretrained('maidalun1020/bce-embedding-base_v1')

device = 'cuda'  # if no GPU, set "cpu"
model.to(device)

# get inputs
inputs = tokenizer(sentences, padding=True, truncation=True, max_length=512, return_tensors="pt")
inputs_on_device = {k: v.to(self.device) for k, v in inputs.items()}

# get embeddings
outputs = model(**inputs_on_device, return_dict=True)
embeddings = outputs.last_hidden_state[:, 0]  # cls pooler
embeddings = embeddings / embeddings.norm(dim=1, keepdim=True)  # normalize

对于 RerankerModel:

import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification

# init model and tokenizer
tokenizer = AutoTokenizer.from_pretrained('maidalun1020/bce-reranker-base_v1')
model = AutoModelForSequenceClassification.from_pretrained('maidalun1020/bce-reranker-base_v1')

device = 'cuda'  # if no GPU, set "cpu"
model.to(device)

# get inputs
inputs = tokenizer(sentence_pairs, padding=True, truncation=True, max_length=512, return_tensors="pt")
inputs_on_device = {k: v.to(device) for k, v in inputs.items()}

# calculate scores
scores = model(**inputs_on_device, return_dict=True).logits.view(-1,).float()
scores = torch.sigmoid(scores)

3. 基于 sentence_transformers

对于 EmbeddingModel:

from sentence_transformers import SentenceTransformer

# list of sentences
sentences = ['sentence_0', 'sentence_1', ...]

# init embedding model
## New update for sentence-trnasformers. So clean up your "`SENTENCE_TRANSFORMERS_HOME`/maidalun1020_bce-embedding-base_v1" or "~/.cache/torch/sentence_transformers/maidalun1020_bce-embedding-base_v1" first for downloading new version.
model = SentenceTransformer("maidalun1020/bce-embedding-base_v1")

# extract embeddings
embeddings = model.encode(sentences, normalize_embeddings=True)

对于 RerankerModel:

from sentence_transformers import CrossEncoder

# init reranker model
model = CrossEncoder('maidalun1020/bce-reranker-base_v1', max_length=512)

# calculate scores of sentence pairs
scores = model.predict(sentence_pairs)

RAG 框架集成

1. 在 langchain 中使用

from langchain.embeddings import HuggingFaceEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_community.vectorstores.utils import DistanceStrategy

query = 'apples'
passages = [
        'I like apples', 
        'I like oranges', 
        'Apples and oranges are fruits'
    ]
  
# init embedding model
model_name = 'maidalun1020/bce-embedding-base_v1'
model_kwargs = {'device': 'cuda'}
encode_kwargs = {'batch_size': 64, 'normalize_embeddings': True, 'show_progress_bar': False}

embed_model = HuggingFaceEmbeddings(
    model_name=model_name,
    model_kwargs=model_kwargs,
    encode_kwargs=encode_kwargs
  )

# example #1. extract embeddings
query_embedding = embed_model.embed_query(query)
passages_embeddings = embed_model.embed_documents(passages)

# example #2. langchain retriever example
faiss_vectorstore = FAISS.from_texts(passages, embed_model, distance_strategy=DistanceStrategy.MAX_INNER_PRODUCT)

retriever = faiss_vectorstore.as_retriever(search_type="similarity", search_kwargs={"score_threshold": 0.5, "k": 3})

related_passages = retriever.get_relevant_documents(query)

2. 在 llama_index 中使用

from llama_index.embeddings import HuggingFaceEmbedding
from llama_index import VectorStoreIndex, ServiceContext, SimpleDirectoryReader
from llama_index.node_parser import SimpleNodeParser
from llama_index.llms import OpenAI

query = 'apples'
passages = [
        'I like apples', 
        'I like oranges', 
        'Apples and oranges are fruits'
    ]

# init embedding model
model_args = {'model_name': 'maidalun1020/bce-embedding-base_v1', 'max_length': 512, 'embed_batch_size': 64, 'device': 'cuda'}
embed_model = HuggingFaceEmbedding(**model_args)

# example #1. extract embeddings
query_embedding = embed_model.get_query_embedding(query)
passages_embeddings = embed_model.get_text_embedding_batch(passages)

# example #2. rag example
llm = OpenAI(model='gpt-3.5-turbo-0613', api_key=os.environ.get('OPENAI_API_KEY'), api_base=os.environ.get('OPENAI_BASE_URL'))
service_context = ServiceContext.from_defaults(llm=llm, embed_model=embed_model)

documents = SimpleDirectoryReader(input_files=["BCEmbedding/tools/eval_rag/eval_pdfs/Comp_en_llama2.pdf"]).load_data()
node_parser = SimpleNodeParser.from_defaults(chunk_size=512)
nodes = node_parser.get_nodes_from_documents(documents[0:36])
index = VectorStoreIndex(nodes, service_context=service_context)
query_engine = index.as_query_engine()
response = query_engine.query("What is llama?")

⚙️ 评测

通过 MTEB 评估语义表征

我们基于MTEB和C_MTEB,提供embedding和reranker模型的语义表征评测工具。

我们基于MTEB和C_MTEB,提供embedding和reranker模型的语义表征评测工具。

1. 嵌入模型

只需运行以下命令,即可在双语和跨语种场景(例如["en", "zh", "en-zh", "zh-en"])下评估your_embedding_model(如maidalun1020/bce-embedding-base_v1)。

运行下面命令评测your_embedding_model(比如,maidalun1020/bce-embedding-base_v1)。评测任务将会在双语和跨语种(比如,["en", "zh", "en-zh", "zh-en"])模式下评测:

python BCEmbedding/tools/eval_mteb/eval_embedding_mteb.py --model_name_or_path maidalun1020/bce-embedding-base_v1 --pooler cls

总评测任务包含 "Retrieval"(检索)、"STS"(语义文本相似度)、"PairClassification"(句子对分类)、"Classification"(分类)、"Reranking"(重排序) 和 "Clustering"(聚类) 六大类任务的 114 个数据集。

评测包含 "Retrieval", "STS", "PairClassification", "Classification", "Reranking"和"Clustering" 这六大类任务的 114个数据集。

注意:

  • 所有模型均采用其推荐的池化方法(pooler)进行评测。
    • mean 池化:"jina-embeddings-v2-base-en"、"m3e-base"、"m3e-large"、"e5-large-v2"、"multilingual-e5-base"、"multilingual-e5-large" 和 "gte-large"。
    • cls 池化:其他模型。
  • "jina-embeddings-v2-base-en" 模型加载时需使用 trust_remote_code。
python BCEmbedding/tools/eval_mteb/eval_embedding_mteb.py --model_name_or_path {moka-ai/m3e-base | moka-ai/m3e-large} --pooler mean

python BCEmbedding/tools/eval_mteb/eval_embedding_mteb.py --model_name_or_path jinaai/jina-embeddings-v2-base-en --pooler mean --trust_remote_code

注意:

  • 所有模型的评测采用各自推荐的pooler。"jina-embeddings-v2-base-en"、"m3e-base"、"m3e-large"、"e5-large-v2"、"multilingual-e5-base"、"multilingual-e5-large"和"gte-large"的pooler采用mean,其他模型的pooler采用cls。
    • "jina-embeddings-v2-base-en"模型在载入时需要trust_remote_code。

2. 重排序模型

运行以下命令在双语和跨语言设置(例如["en", "zh", "en-zh", "zh-en"])下评测your_reranker_model(例如"maidalun1020/bce-reranker-base_v1")。

运行下面命令评测your_reranker_model(比如,maidalun1020/bce-reranker-base_v1)。评测任务将会在 双语种和跨语种(比如,["en", "zh", "en-zh", "zh-en"])模式下评测:

python BCEmbedding/tools/eval_mteb/eval_reranker_mteb.py --model_name_or_path maidalun1020/bce-reranker-base_v1

评测任务包含 "Reranking" 相关的 12个数据集。

评测包含 "Reranking" 任务的 12个数据集。

3. 指标可视化工具

我们提供了一键脚本,可将 embedding 和 reranker 模型的评测结果汇总为 Embedding 模型评测汇总 与 Reranker 模型评测汇总。

我们提供了embedding和reranker模型的指标可视化一键脚本,输出一个markdown文件,详见Embedding模型指标汇总和Reranker模型指标汇总。

python BCEmbedding/evaluation/mteb/summarize_eval_results.py --results_dir {your_embedding_results_dir | your_reranker_results_dir}

通过LlamaIndex评估RAG

LlamaIndex是一个知名的基于大语言模型(LLM)的应用数据框架,尤其在检索增强生成(RAG)领域表现突出。近期,LlamaIndex博客对RAG流程中主流的嵌入(embedding)和重排序(reranker)模型进行了评测,引发了广泛关注。现在,我们将遵循其评测流程来评估我们的BCEmbedding。

LlamaIndex是一个著名的大模型应用的开源工具,在RAG中很受欢迎。最近,LlamaIndex博客对市面上常用的embedding和reranker模型进行RAG流程的评测,吸引广泛关注。下面我们按照该评测流程验证BCEmbedding在RAG中的效果。

首先,安装LlamaIndex:

pip install llama-index==0.9.22

1. 指标定义

  • 命中率(Hit Rate):

    命中率计算的是在检索的前k个文档中找到正确答案的查询所占的比例。简单来说,它反映了我们的系统在前几次猜测中答对的频率。该指标越大越好。

  • 平均倒数排名(Mean Reciprocal Rank,MRR):

    对于每个查询,MRR通过查看最高排名的相关文档的排名来评估系统的准确性。具体来说,它是在所有查询中这些排名的倒数的平均值。因此,如果第一个相关文档是排名最靠前的结果,倒数排名就是1;如果是第二个,倒数排名就是1/2,依此类推。该指标越大越好。

2. 复现LlamaIndex博客结果

为了公平地将我们的BCEmbedding与其他嵌入和重排序模型进行比较,我们提供了一键式脚本以复现LlamaIndex博客中的结果,其中包括我们的BCEmbedding:

为了公平起见,运行下面脚本,复现LlamaIndex博客的结果,将BCEmbedding与其他embedding和reranker模型进行对比分析:

# There should be two GPUs available at least.
CUDA_VISIBLE_DEVICES=0,1 python BCEmbedding/tools/eval_rag/eval_llamaindex_reproduce.py

然后,通过以下方式总结评估结果:

python BCEmbedding/tools/eval_rag/summarize_eval_results.py --results_dir results/rag_reproduce_results

从LlamaIndex博客复现的结果可在***RAG评估复现总结中查看,其中包含一些明显的结论***:

  • 在WithoutReranker设置下,我们的bce-embedding-base_v1性能优于所有其他嵌入模型。

  • 在固定嵌入模型的情况下,我们的bce-reranker-base_v1实现了最佳性能。

  • bce-embedding-base_v1与bce-reranker-base_v1的组合达到了SOTA水平。

    输出的指标汇总详见***LlamaIndex RAG评测结果复现***。从该复现结果中,可以看出:

    • 在WithoutReranker设置下(竖排对比),bce-embedding-base_v1比其他embedding模型效果都要好。
    • 在固定embedding模型设置下,对比不同reranker效果(横排对比),bce-reranker-base_v1比其他reranker模型效果都要好。
    • bce-embedding-base_v1和bce-reranker-base_v1组合,表现SOTA。

3. 广泛的领域适应性

LlamaIndex博客中的评估是单语种、小数据量且特定领域的(仅包含“llama2”论文)。为了评估广泛的领域适应性、双语及跨语言能力,我们参照该博客构建了一个多领域评估数据集(包括“计算机科学”、“物理学”、“生物学”、“经济学”、“数学”和“量化金融”),命名为CrosslingualMultiDomainsDataset,通过OpenAI的gpt-4-1106-preview确保高质量。

在上述的LlamaIndex博客的评测数据只用了“llama2”这一篇文章,该评测是单语种,小数据量,特定领域的。为了兼容更真实更广的用户使用场景,评测算法模型的领域泛化性,双语和跨语种能力,我们按照该博客的方法构建了一个多领域(计算机科学,物理学,生物学,经济学,数学,量化金融等)的双语种、跨语种评测数据,CrosslingualMultiDomainsDataset。为了保证构建数据的高质量,我们采用OpenAI的gpt-4-1106-preview。

首先,运行以下命令来评估最受欢迎且功能强大的嵌入和重排序模型:

# There should be two GPUs available at least.
CUDA_VISIBLE_DEVICES=0,1 python BCEmbedding/tools/eval_rag/eval_llamaindex_multiple_domains.py

然后,运行以下脚本以汇总评估结果:

python BCEmbedding/tools/eval_rag/summarize_eval_results.py --results_dir results/rag_results

多领域评估摘要可参见 多领域场景。

📈 排行榜

MTEB语义表征评估

1. 嵌入模型

模型维度池化方式指令要求检索 (47)STS (19)句子对分类 (5)分类 (21)重排序 (12)聚类 (15)平均 (119)
bge-base-en-v1.5768cls需要37.1455.0675.4559.7343.0037.7447.19
bge-base-zh-v1.5768cls需要47.6363.7277.4063.3854.9532.5653.62
bge-large-en-v1.51024cls需要37.1854.0975.0059.2442.4737.3246.80
bge-large-zh-v1.51024cls需要47.5864.7379.1464.1955.9833.2654.23
e5-large-v21024mean需要35.9855.2375.2859.5342.1236.5146.52
gte-large1024mean不需要36.6855.2274.2957.7342.4438.5146.67
gte-large-zh1024cls不需要41.1564.6277.5862.0455.6233.0351.51
jina-embeddings-v2-base-en768mean不需要31.5854.2874.8458.4241.1634.6744.29
m3e-base768mean不需要46.2963.9371.8464.0852.3837.8453.54
m3e-large1024mean不需要34.8559.7467.6960.0748.9931.6246.78
multilingual-e5-base768mean需要54.7365.4976.9769.7255.0138.4458.34
multilingual-e5-large1024mean需要56.7666.7978.8071.6156.4943.0960.50
bce-embedding-base_v1768cls不需要57.6065.7374.9669.0057.2938.9559.43

注:

  • 我们的 bce-embedding-base_v1 在具有可比模型大小的其他开源嵌入模型中表现更优。

  • 在 ["en", "zh", "en-zh", "zh-en"] 设置下,包含 "Retrieval"、"STS"、"PairClassification"、"Classification"、"Reranking" 和 "Clustering" 的 114 个数据集。

  • 我们发布的跨语言评估数据集属于 Retrieval 任务。

  • 更多评估细节请查看 嵌入模型评估摘要。

    要点:

    • 对比其他开源的相同规模的embedding模型,bce-embedding-base_v1 表现最好,效果比最好的large模型稍差。
    • 评测包含 "Retrieval", "STS", "PairClassification", "Classification", "Reranking"和"Clustering" 这六大类任务的共 114个数据集。
    • 我们开源的跨语种语义表征评测数据属于Retrieval任务。
    • 更详细的评测结果详见Embedding模型指标汇总。

2. 重排序模型

模型重排序 (12)平均 (12)
bge-reranker-base59.0459.04
bge-reranker-large60.8660.86
bce-reranker-base_v161.2961.29

注:

  • 我们的 bce-reranker-base_v1 优于其他开源重排序模型。

  • 在 ["en", "zh", "en-zh", "zh-en"] 设置下,包含 "Reranking" 的 12 个数据集。

  • 更多评估细节请查看 重排序模型评估摘要。

    要点:

    • bce-reranker-base_v1 优于其他开源reranker模型。
    • 评测包含 "Reranking" 任务的 12个数据集。
    • 更详细的评测结果详见Reranker模型指标汇总

LlamaIndex 中的 RAG 评测

1. 多领域场景

image/jpeg

注意:

  • 评测在 ["en", "zh", "en-zh", "zh-en"] 设置下进行。

  • 在 WithoutReranker 设置中,我们的 bce-embedding-base_v1 性能优于所有其他嵌入模型。

  • 当固定嵌入模型时,我们的 bce-reranker-base_v1 实现了最佳性能。

  • bce-embedding-base_v1 与 bce-reranker-base_v1 的组合达到了 SOTA 水平。

    要点:

    • 评测是在["en", "zh", "en-zh", "zh-en"]设置下。
    • 在WithoutReranker设置下(竖排对比),bce-embedding-base_v1优于其他Embedding模型,包括开源和闭源。
    • 在固定Embedding模型设置下,对比不同reranker效果(横排对比),bce-reranker-base_v1比其他reranker模型效果都要好,包括开源和闭源。
    • bce-embedding-base_v1和bce-reranker-base_v1组合,表现SOTA。

🛠 有道 BCEmbedding API

对于那些希望获得轻松体验,无需在自己的系统上下载和配置模型的用户,BCEmbedding 可通过有道 API 直接使用。此选项提供了一种简化高效的方式,能将 BCEmbedding 集成到您的项目中,省去了手动设置和维护的复杂性。详细的操作指南和全面的 API 文档可在 有道 BCEmbedding API 查看。您将在此找到所有必要的指导,以便轻松地在各种使用场景中实现 BCEmbedding,确保集成过程顺利有效,从而获得最佳结果。

对于那些更喜欢直接调用api的用户,有道提供方便的BCEmbedding调用api。该方式是一种简化和高效的方式,将BCEmbedding集成到您的项目中,避开了手动设置和系统维护的复杂性。更详细的api调用接口说明详见有道BCEmbedding API。

🧲 微信交流群

欢迎扫描下方二维码,加入微信交流群。

欢迎大家扫码加入官方微信交流群。

image/jpeg

✏️ 引用说明

如果您在研究或项目中使用了 BCEmbedding,欢迎引用并为其点亮 star:

如果在您的研究或任何项目中使用本工作,烦请按照下方进行引用,并打个小星星~

@misc{youdao_bcembedding_2023,
    title={BCEmbedding: Bilingual and Crosslingual Embedding for RAG},
    author={NetEase Youdao, Inc.},
    year={2023},
    howpublished={\url{https://github.com/netease-youdao/BCEmbedding}}
}

🔐 许可证

BCEmbedding 基于 Apache 2.0 许可证 进行许可。

🔗 相关链接

网易有道 - QAnything

FlagEmbedding

MTEB

C_MTEB

LLama Index | LlamaIndex 博客