ONNX 模型库
返回模型

说明文档

mixedbread-ai/mxbai-embed-large-v1

这里我们提供了几种生成句子嵌入的方法。请注意,如果您想将其用于检索任务,需要为查询提供提示词 Represent this sentence for searching relevant passages:。除此之外不需要任何提示词。我们的模型还支持 Matryoshka 表示学习和二进制量化

快速开始

这里我们提供了几种生成句子嵌入的方法。请注意,如果您想将其用于检索任务,需要为查询提供提示词 Represent this sentence for searching relevant passages: 。除此之外不需要任何提示词。

sentence-transformers

python -m pip install -U sentence-transformers
from sentence_transformers import SentenceTransformer
from sentence_transformers.util import cos_sim
from sentence_transformers.quantization import quantize_embeddings

# 1. 指定首选维度
dimensions = 512

# 2. 加载模型
model = SentenceTransformer("mixedbread-ai/mxbai-embed-large-v1", truncate_dim=dimensions)

# 用于查询检索任务的提示词:
# query_prompt = 'Represent this sentence for searching relevant passages: '

query = "A man is eating a piece of bread"
docs = [
    "A man is eating food.",
    "A man is eating pasta.",
    "The girl is carrying a baby.",
    "A man is riding a horse.",
]

# 2. 编码
query_embedding = model.encode(query, prompt_name="query")
# 等效替代方案:
# query_embedding = model.encode(query_prompt + query)
# query_embedding = model.encode(query, prompt=query_prompt)

docs_embeddings = model.encode(docs)

# 可选:对嵌入进行量化
binary_query_embedding = quantize_embeddings(query_embedding, precision="ubinary")
binary_docs_embeddings = quantize_embeddings(docs_embeddings, precision="ubinary")

similarities = cos_sim(query_embedding, docs_embeddings)
print('similarities:', similarities)

Transformers

from typing import Dict

import torch
import numpy as np
from transformers import AutoModel, AutoTokenizer
from sentence_transformers.util import cos_sim

# 对于检索,您需要传递此提示词。请在我们的博客文章中了解更多。
def transform_query(query: str) -> str:
    """ 对于检索,为查询添加提示词(文档不需要)。
    """
    return f'Represent this sentence for searching relevant passages: {query}'

# 该模型与 cls 池化(默认)配合使用效果很好,但也支持 mean 池化。
def pooling(outputs: torch.Tensor, inputs: Dict,  strategy: str = 'cls') -> np.ndarray:
    if strategy == 'cls':
        outputs = outputs[:, 0]
    elif strategy == 'mean':
        outputs = torch.sum(
            outputs * inputs["attention_mask"][:, :, None], dim=1) / torch.sum(inputs["attention_mask"], dim=1, keepdim=True)
    else:
        raise NotImplementedError
    return outputs.detach().cpu().numpy()

# 1. 加载模型
model_id = 'mixedbread-ai/mxbai-embed-large-v1'
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModel.from_pretrained(model_id).cuda()


docs = [
    transform_query('A man is eating a piece of bread'),
    "A man is eating food.",
    "A man is eating pasta.",
    "The girl is carrying a baby.",
    "A man is riding a horse.",
]

# 2. 编码
inputs = tokenizer(docs, padding=True, return_tensors='pt')
for k, v in inputs.items():
    inputs[k] = v.cuda()
outputs = model(**inputs).last_hidden_state
embeddings = pooling(outputs, inputs, 'cls')

similarities = cos_sim(embeddings[0], embeddings[1:])
print('similarities:', similarities)

Transformers.js

如果您还没有安装,可以从 NPM 安装 Transformers.js JavaScript 库:

npm i @huggingface/transformers

然后您可以像这样使用模型计算嵌入:

import { pipeline, cos_sim } from "@huggingface/transformers";

// 创建特征提取管道
const extractor = await pipeline("feature-extraction", "mixedbread-ai/mxbai-embed-large-v1", {
    dtype: "fp32", // 选项: "fp32", "fp16", "q8"
});

// 生成句子嵌入
const docs = [
    "Represent this sentence for searching relevant passages: A man is eating a piece of bread",
    "A man is eating food.",
    "A man is eating pasta.",
    "The girl is carrying a baby.",
    "A man is riding a horse.",
]
const output = await extractor(docs, { pooling: "cls" });

// 计算相似度分数
const [source_embeddings, ...document_embeddings ] = output.tolist();
const similarities = document_embeddings.map(x => cos_sim(source_embeddings, x));
console.log(similarities); // [0.7919578577247139, 0.6369278664248345, 0.16512018371357193, 0.3620778366720027]

使用 API

您可以通过我们的 API 使用该模型,如下所示:

from mixedbread_ai.client import MixedbreadAI, EncodingFormat
from sklearn.metrics.pairwise import cosine_similarity
import os

mxbai = MixedbreadAI(api_key="{MIXEDBREAD_API_KEY}")

english_sentences = [
    'What is the capital of Australia?',
    'Canberra is the capital of Australia.'
] 

res = mxbai.embeddings(
     input=english_sentences,
     model="mixedbread-ai/mxbai-embed-large-v1",
     normalized=True,
     encoding_format=[EncodingFormat.FLOAT, EncodingFormat.UBINARY, EncodingFormat.INT_8],
     dimensions=512
)

encoded_embeddings = res.data[0].embedding
print(res.dimensions, encoded_embeddings.ubinary, encoded_embeddings.float_, encoded_embeddings.int_8)

API 原生支持 int8 和二进制量化!查看文档了解更多详细信息。

Infinity

docker run --gpus all -v $PWD/data:/app/.cache -p "7997":"7997" \
michaelf34/infinity:0.0.68 \
v2 --model-id mixedbread-ai/mxbai-embed-large-v1 --revision "main" --dtype float16 --engine torch --port 7997

评估

截至 2024 年 3 月,我们的模型在 MTEB 上实现了 Bert-large 尺寸模型的 SOTA 性能。它优于 OpenAI 的 text-embedding-3-large 等商业模型,并与比其大 20 倍的模型(如 echo-mistral-7b)的性能相当。我们的模型在训练时没有使用 MTEB 数据,这表明我们的模型在多个领域、任务和文本长度上都能很好地泛化。我们知道该模型存在一些局限性,这些将在 v2 版本中修复。

模型 平均分(56 个数据集) 分类(12 个数据集) 聚类(11 个数据集) 配对分类(3 个数据集) 重排序(4 个数据集) 检索(15 个数据集) STS(10 个数据集) 摘要(1 个数据集)
mxbai-embed-large-v1 64.68 75.64 46.71 87.2 60.11 54.39 85.00 32.71
bge-large-en-v1.5 64.23 75.97 46.08 87.12 60.03 54.29 83.11 31.61
mxbai-embed-2d-large-v1 63.25 74.14 46.07 85.89 58.94 51.42 84.9 31.55
nomic-embed-text-v1 62.39 74.12 43.91 85.15 55.69 52.81 82.06 30.08
jina-embeddings-v2-base-en 60.38 73.45 41.73 85.38 56.98 47.87 80.7 31.6
专有模型
OpenAI text-embedding-3-large 64.58 75.45 49.01 85.72 59.16 55.44 81.73 29.92
Cohere embed-english-v3.0 64.47 76.49 47.43 85.84 58.01 55.00 82.62 30.18
OpenAI text-embedding-ada-002 60.99 70.93 45.90 84.89 56.32 49.25 80.97 30.80

更多详细信息请参阅我们的博客文章

Matryoshka 和二进制量化

以其常用形式(浮点数组)使用的嵌入在大规模使用时占用大量内存。解决这个问题的两种方法是 Matryoshka 表示学习(MRL)和(二进制)量化。MRL 减少嵌入的维度数量,而二进制量化将每个维度的值从 float32 转换为较低精度(int8 甚至二进制)。该模型同时支持这两种方法!

您还可以更进一步,将 MRL 和量化结合使用。二进制量化和 MRL 的结合可以显著减少嵌入的内存使用。这在使用向量数据库时可以大幅降低成本。您可以在我们的博客文章中阅读更多关于该技术及其优势的信息。

社区

请加入我们的 Discord 社区,分享您的反馈和想法!我们在这里提供帮助,也很高兴与您交流。

许可证

Apache 2.0

引用

@online{emb2024mxbai,
  title={Open Source Strikes Bread - New Fluffy Embeddings Model},
  author={Sean Lee and Aamir Shakir and Darius Koenig and Julius Lipp},
  year={2024},
  url={https://www.mixedbread.ai/blog/mxbai-embed-large-v1},
}

@article{li2023angle,
  title={AnglE-optimized Text Embeddings},
  author={Li, Xianming and Li, Jing},
  journal={arXiv preprint arXiv:2309.12871},
  year={2023}
}

mixedbread-ai/mxbai-embed-large-v1

作者 mixedbread-ai

feature-extraction sentence-transformers
↓ 1.9M ♥ 773

创建时间: 2024-03-07 15:45:34+00:00

更新时间: 2026-01-23 11:59:58+00:00

在 Hugging Face 上查看

文件 (21)

.gitattributes
1_Pooling/config.json
LICENSE
README.md
config.json
config_sentence_transformers.json
gguf/mxbai-embed-large-v1-f16.gguf
model.safetensors
modules.json
onnx/model.onnx ONNX
onnx/model_fp16.onnx ONNX
onnx/model_quantized.onnx ONNX
openvino/openvino_model.bin
openvino/openvino_model.xml
openvino/openvino_model_qint8_quantized.bin
openvino/openvino_model_qint8_quantized.xml
sentence_bert_config.json
special_tokens_map.json
tokenizer.json
tokenizer_config.json
vocab.txt