ONNX 模型库
返回模型

说明文档

<h1 align="center">Snowflake 的 Arctic-embed-l</h1> <h4 align="center"> <p> <a href=#news>新闻</a> | <a href=#models>模型</a> | <a href=#usage>使用说明</a> | <a href="#evaluation">评估</a> | <a href="#contact">联系我们</a> | <a href="#faq">常见问题</a> <a href="#license">许可证</a> | <a href="#acknowledgement">致谢</a> <p> </h4>

新闻

2024/12/04: 发布 snowflake-arctic-embed-l-v2.0snowflake-arctic-embed-m-v2.0,这是我们为多语言工作负载设计的最新的模型。这些模型优于 Arctic Embed 的早期版本,我们建议用这些新版本来替换早期版本!

2024/07/26: 在 arXiv 上发布预印本 [2407.18887] Embedding And Clustering Your Data Can Improve Contrastive Pretraining

2024/07/18: 发布 snowflake-arctic-embed-m-v1.5,能够生成高度可压缩的嵌入向量,即使压缩到每个向量仅 128 字节也能保持质量。关于该模型开发的详细信息请查看 Snowflake 工程博客的发布文章

2024/05/10: 发布 Arctic Embed 的技术报告

2024/04/16: 发布 snowflake-arctic-embed 系列文本嵌入模型。这些版本在各自对应的参数规模下均达到了检索质量的最新水平。技术报告即将发布。更多详情请访问我们的 GitHub:Arctic-Text-Embed

模型

snowflake-arctic-embed 是一系列专注于创建高质量检索模型的文本嵌入模型,针对性能进行了优化。

snowflake-arctic-embedding 模型在 MTEB/BEIR 排行榜上实现了各参数规模下的最新技术水平性能。评估使用的是这些脚本。如下所示,每个参数规模的模型类别相较于其他顶级模型都达到了 SOTA 检索准确率。

这些模型通过利用现有的开源文本表示模型(如 bert-base-uncased)进行训练,并采用多阶段训练流程来优化检索性能。首先,模型使用大批量的查询-文档对进行训练,其中负样本来自批次内——预训练使用了约 4 亿条公开数据集和网络搜索数据的混合样本。预训练后,模型在较小的数据集(约 100 万条查询、正样本文档和负样本文档的三元组)上进行进一步优化,这些负样本来自硬负样本挖掘。负样本挖掘和数据策展对检索准确率至关重要。详细的技术报告请见此处

名称 MTEB 检索得分 (NDCG @ 10) 参数量(百万) 嵌入维度
snowflake-arctic-embed-xs 50.15 22 384
snowflake-arctic-embed-s 51.98 33 384
snowflake-arctic-embed-m 54.90 110 768
snowflake-arctic-embed-m-long 54.83 137 768
snowflake-arctic-embed-l 55.98 335 1024

除了是优秀的开源模型外,最大的模型 snowflake-arctic-embed-l 还可以作为闭源嵌入的自然替代品,如下所示。

模型名称 MTEB 检索得分 (NDCG @ 10)
snowflake-arctic-embed-l 55.98
Google-gecko-text-embedding 55.7
text-embedding-3-large 55.44
Cohere-embed-english-v3.0 55.00
bge-large-en-v1.5 54.29

snowflake-arctic-embed-xs

这款小型模型表现出色。基于 all-MiniLM-L6-v2 模型,仅有 2200 万参数和 384 维,即使是最严格的延迟/总拥有成本预算也能满足。尽管体积小,其检索准确率接近 1 亿参数的模型。

模型名称 MTEB 检索得分 (NDCG @ 10)
snowflake-arctic-embed-xs 50.15
GIST-all-MiniLM-L6-v2 45.12
gte-tiny 44.92
all-MiniLM-L6-v2 41.95
bge-micro-v2 42.56

snowflake-arctic-embed-s

基于 intfloat/e5-small-unsupervised 模型,这款小型模型在保持小体积的同时没有牺牲检索准确率。仅有 3300 万参数和 384 维,可以轻松扩展到大型数据集。

模型名称 MTEB 检索得分 (NDCG @ 10)
snowflake-arctic-embed-s 51.98
bge-small-en-v1.5 51.68
Cohere-embed-english-light-v3.0 51.34
text-embedding-3-small 51.08
e5-small-v2 49.04

snowflake-arctic-embed-m

基于 intfloat/e5-base-unsupervised 模型,这款中型模型是提供最佳检索性能而不会减慢推理的工作主力。

模型名称 MTEB 检索得分 (NDCG @ 10)
snowflake-arctic-embed-m 54.90
bge-base-en-v1.5 53.25
nomic-embed-text-v1.5 53.25
GIST-Embedding-v0 52.31
gte-base 52.31

snowflake-arctic-embed-m-long

基于 nomic-ai/nomic-embed-text-v1-unsupervised 模型,这是我们中型模型的长上下文变体,非常适合受其他模型常规 512 令牌上下文限制的工作负载。在不使用 RPE 的情况下,该模型支持最多 2048 个令牌。使用 RPE 可以扩展到 8192!

模型名称 MTEB 检索得分 (NDCG @ 10)
snowflake-arctic-embed-m-long 54.83
nomic-embed-text-v1.5 53.01
nomic-embed-text-v1 52.81

snowflake-arctic-embed-l

基于 intfloat/e5-large-unsupervised 模型,这款大型模型是闭源 API 的直接替代品,提供最准确的检索体验。

模型名称 MTEB 检索得分 (NDCG @ 10)
snowflake-arctic-embed-l 55.98
UAE-Large-V1 54.66
bge-large-en-v1.5 54.29
mxbai-embed-large-v1 54.39
e5-Large-v2 50.56

使用说明

使用 Sentence Transformers

您可以使用 sentence-transformers 包来使用 snowflake-arctic-embed 模型,如下所示。

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("Snowflake/snowflake-arctic-embed-l")

queries = ['what is snowflake?', 'Where can I get the best tacos?']
documents = ['The Data Cloud!', 'Mexico City of Course!']

query_embeddings = model.encode(queries, prompt_name="query")
document_embeddings = model.encode(documents)

scores = query_embeddings @ document_embeddings.T
for query, query_scores in zip(queries, scores):
    doc_score_pairs = list(zip(documents, query_scores))
    doc_score_pairs = sorted(doc_score_pairs, key=lambda x: x[1], reverse=True)
    # Output passages & scores
    print("Query:", query)
    for document, score in doc_score_pairs:
        print(score, document)
Query: what is snowflake?
0.28976774 The Data Cloud!
0.19071159 Mexico City of Course!
Query: Where can I get the best tacos?
0.38650584 Mexico City of Course!
0.25145516 The Data Cloud!

使用 Huggingface transformers

您可以使用 transformers 包来使用 snowflake-arctic-embed 模型,如下所示。为了获得最佳检索质量,请使用 CLS 令牌对每个文本部分进行嵌入,并在查询上使用以下查询前缀(仅在查询上使用)。

import torch
from transformers import AutoModel, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained('Snowflake/snowflake-arctic-embed-l')
model = AutoModel.from_pretrained('Snowflake/snowflake-arctic-embed-l', add_pooling_layer=False)
model.eval()

query_prefix = 'Represent this sentence for searching relevant passages: '
queries  = ['what is snowflake?', 'Where can I get the best tacos?']
queries_with_prefix = ["{}{}".format(query_prefix, i) for i in queries]
query_tokens = tokenizer(queries_with_prefix, padding=True, truncation=True, return_tensors='pt', max_length=512)

documents = ['The Data Cloud!', 'Mexico City of Course!']
document_tokens =  tokenizer(documents, padding=True, truncation=True, return_tensors='pt', max_length=512)

# Compute token embeddings
with torch.no_grad():
    query_embeddings = model(**query_tokens)[0][:, 0]
    document_embeddings = model(**document_tokens)[0][:, 0]


# normalize embeddings
query_embeddings = torch.nn.functional.normalize(query_embeddings, p=2, dim=1)
document_embeddings = torch.nn.functional.normalize(document_embeddings, p=2, dim=1)

scores = torch.mm(query_embeddings, document_embeddings.transpose(0, 1))
for query, query_scores in zip(queries, scores):
    doc_score_pairs = list(zip(documents, query_scores))
    doc_score_pairs = sorted(doc_score_pairs, key=lambda x: x[1], reverse=True)
    #Output passages & scores
    print("Query:", query)
    for document, score in doc_score_pairs:
        print(score, document)

使用 Transformers.js

如果还没有安装,您可以通过运行以下命令从 NPM 安装 Transformers.js JavaScript 库:

npm i @xenova/transformers

然后您可以按如下方式使用模型计算嵌入:

import { pipeline, dot } from '@xenova/transformers';

// Create feature extraction pipeline
const extractor = await pipeline('feature-extraction', 'Snowflake/snowflake-arctic-embed-l', {
    quantized: false, // Comment out this line to use the quantized version
});

// Generate sentence embeddings
const sentences = [
    'Represent this sentence for searching relevant passages: Where can I get the best tacos?',
    'The Data Cloud!',
    'Mexico City of Course!',
]
const output = await extractor(sentences, { normalize: true, pooling: 'cls' });

// Compute similarity scores
const [source_embeddings, ...document_embeddings ] = output.tolist();
const similarities = document_embeddings.map(x => dot(source_embeddings, x));
console.log(similarities); // [0.25145517380846977, 0.3865060421197194]

使用 Infinity

通过 Infinity 和 Docker 进行 OpenAI 兼容 API 部署。

docker run --gpus all -v $PWD/data:/app/.cache -p \"7997\":\"7997\" \
michaelf34/infinity:0.0.70 \
v2 --model-id Snowflake/snowflake-arctic-embed-l --dtype float16 --batch-size 32 --engine torch --port 7997

常见问题

待定

联系我们

如果您对此项目有任何问题或建议,请随时提交 issue 或 pull request。 您也可以发送电子邮件给 Daniel Campos(daniel.campos@snowflake.com)。

许可证

Arctic 采用 Apache-2 许可证。发布的模型可免费用于商业目的。

致谢

我们要感谢开源社区,是他们提供了优秀的基础组件,让我们得以构建我们的模型。 感谢我们的建模工程师 Danmei Xu、Luke Merrick、Gaurav Nuti 和 Daniel Campos,是他们让这些优秀的模型成为可能。 感谢我们的领导 Himabindu Pucha、Kelvin So、Vivek Raghunathan 和 Sridhar Ramaswamy 对这项工作的支持。 我们还要感谢开源社区,是他们贡献了优秀的模型,让我们能够在此基础上进行构建,并使这些发布成为可能。 最后,感谢创建 BEIR 和 MTEB 基准测试的研究人员。 正是由于他们不懈地定义什么是更好的模型,我们才能改进模型性能。

<img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=d6741f66-9018-401c-8805-d79c74fb98ff" />

Snowflake/snowflake-arctic-embed-l

作者 Snowflake

sentence-similarity sentence-transformers
↓ 49.1K ♥ 100

创建时间: 2024-04-12 13:54:34+00:00

更新时间: 2024-12-19 13:32:48+00:00

在 Hugging Face 上查看

文件 (19)

.gitattributes
1_Pooling/config.json
README.md
config.json
config_sentence_transformers.json
model.safetensors
modules.json
onnx/model.onnx ONNX
onnx/model_bnb4.onnx ONNX
onnx/model_fp16.onnx ONNX
onnx/model_int8.onnx ONNX
onnx/model_q4.onnx ONNX
onnx/model_quantized.onnx ONNX
onnx/model_uint8.onnx ONNX
sentence_bert_config.json
special_tokens_map.json
tokenizer.json
tokenizer_config.json
vocab.txt