模型概述
模型特點
模型能力
使用案例
🚀 Snowflake的Arctic-embed-l-v2.0
Snowflake的Arctic-embed-l-v2.0是一款優化檢索性能和推理效率的嵌入模型,支持多語言檢索,在英語和非英語檢索方面表現出色,適用於需要大規模多語言搜索和檢索的企業級應用。
🚀 快速開始
本項目是使用 llama.cpp 創建的 Snowflake/snowflake-arctic-embed-l-v2.0 的GGUF量化版本。
✨ 主要特性
Snowflake arctic-embed-l-v2.0是Snowflake發佈的嵌入模型套件中的最新成員,它針對檢索性能和推理效率進行了優化。Arctic Embed 2.0為多語言嵌入模型樹立了新的標準,在不犧牲英語性能的前提下,實現了高質量的多語言文本檢索。該模型根據寬鬆的Apache 2.0許可證發佈,非常適合需要可靠的企業級大規模多語言搜索和檢索的應用程序。
主要特性如下:
- 多語言無妥協:在英語和非英語檢索方面表現出色,在MTEB Retrieval、CLEF和MIRACL等基準測試中優於領先的開源和專有模型。
- 推理效率高:其3.03億個非嵌入參數的推理速度快,適用於任何規模的應用。
- 壓縮友好:使用Matryoshka Representation Learning(MRL)和量化感知嵌入訓練,即使嵌入向量小至128字節/向量,也能實現高質量的檢索。
- 直接替換:arctic-embed-l-v2.0基於 BAAI/bge-m3-retromae 構建,允許直接替換任何形式的新庫、內核、推理引擎等進行推理。
- 長上下文支持:arctic-embed-l-v2.0基於 BAAI/bge-m3-retromae 構建,通過使用RoPE可以支持長達8192的上下文窗口。
質量基準
與大多數其他開源模型不同,Arctic-embed-l-v2.0在英語(通過MTEB Retrieval)和多語言(通過MIRACL和CLEF)方面都表現出色。您不再需要支持多個模型來實現高質量的英語和多語言檢索。以下所有數字均為所討論數據集上的平均NDCG@10。
模型名稱 | 參數數量 | 非嵌入參數數量 | 維度 | BEIR (15) | MIRACL (4) | CLEF (聚焦) | CLEF (完整) |
---|---|---|---|---|---|---|---|
snowflake-arctic-l-v2.0 | 5.68億 | 3.03億 | 1024 | 55.6 | 55.8 | 52.9 | 54.3 |
snowflake-arctic-m | 1.09億 | 8600萬 | 768 | 54.9 | 24.9 | 34.4 | 29.1 |
snowflake-arctic-l | 3.35億 | 3.03億 | 1024 | 56.0 | 34.8 | 38.2 | 33.7 |
me5 base | 5.6億 | 3.03億 | 1024 | 51.4 | 54.0 | 43.0 | 34.6 |
bge-m3 (BAAI) | 5.68億 | 3.03億 | 1024 | 48.8 | 56.8 | 40.8 | 41.3 |
gte (Alibaba) | 3.05億 | 1.13億 | 768 | 51.1 | 52.3 | 47.7 | 53.1 |
除了高質量的檢索,arctic還能提供易於壓縮的嵌入向量。通過MRL進行向量截斷,可將向量大小減小4倍,而質量下降不到3%。將MRL向量與向量壓縮(Int4)結合使用,每個文檔僅需128字節即可實現檢索。
模型 | BEIR (15) | 相對性能 | MIRACL (4) | 相對性能 | CLEF (5) | 相對性能 | CLEF (完整) | 相對性能 | |
---|---|---|---|---|---|---|---|---|---|
snowflake-arctic-l-v2.0 | 1024 | 55.6 | 不適用 | 55.8 | 不適用 | 52.9 | 不適用 | 54.3 | 不適用 |
snowflake-arctic-l-v2.0 | 256 | 54.3 | -0.18% | 54.3 | -2.70% | 51.9 | -1.81% | 53.4 | -1.53% |
📦 安裝指南
若要使用 Transformers.js JavaScript庫,可通過以下命令從 NPM 進行安裝:
npm i @huggingface/transformers
💻 使用示例
基礎用法
使用Sentence Transformers
from sentence_transformers import SentenceTransformer
# 加載模型
model_name = 'Snowflake/snowflake-arctic-embed-l-v2.0'
model = SentenceTransformer(model_name)
# 定義查詢和文檔
queries = ['what is snowflake?', 'Where can I get the best tacos?']
documents = ['The Data Cloud!', 'Mexico City of Course!']
# 計算嵌入向量:使用 `prompt_name="query"` 對查詢進行編碼!
query_embeddings = model.encode(queries, prompt_name="query")
document_embeddings = model.encode(documents)
# 計算餘弦相似度得分
scores = model.similarity(query_embeddings, document_embeddings)
# 輸出結果
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)
print("Query:", query)
for document, score in doc_score_pairs:
print(score, document)
使用Huggingface Transformers
您可以使用transformers包來使用Snowflake的arctic-embed模型,如下所示。為了獲得最佳的檢索質量,請使用CLS標記對每個文本部分進行嵌入,並使用以下查詢前綴(僅用於查詢)。
import torch
from transformers import AutoModel, AutoTokenizer
model_name = 'Snowflake/snowflake-arctic-embed-l-v2.0'
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModel.from_pretrained(model_name, add_pooling_layer=False)
model.eval()
query_prefix = 'query: '
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=8192)
documents = ['The Data Cloud!', 'Mexico City of Course!']
document_tokens = tokenizer(documents, padding=True, truncation=True, return_tensors='pt', max_length=8192)
# 計算標記嵌入向量
with torch.no_grad():
query_embeddings = model(**query_tokens)[0][:, 0]
document_embeddings = model(**document_tokens)[0][:, 0]
# 歸一化嵌入向量
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)
# 輸出段落和得分
print("Query:", query)
for document, score in doc_score_pairs:
print(score, document)
此代碼應產生以下得分:
Query: what is snowflake?
tensor(0.2715) The Data Cloud!
tensor(0.0661) Mexico City of Course!
Query: Where can I get the best tacos?
tensor(0.2797) Mexico City of Course!
tensor(0.1250) The Data Cloud!
使用Huggingface Transformers.js
import { pipeline, dot } from '@huggingface/transformers';
// 創建特徵提取管道
const extractor = await pipeline('feature-extraction', 'Snowflake/snowflake-arctic-embed-m-v2.0', {
dtype: 'q8',
});
// 生成句子嵌入向量
const sentences = [
'query: what is snowflake?',
'The Data Cloud!',
'Mexico City of Course!',
]
const output = await extractor(sentences, { normalize: true, pooling: 'cls' });
// 計算相似度得分
const [source_embeddings, ...document_embeddings ] = output.tolist();
const similarities = document_embeddings.map(x => dot(source_embeddings, x));
console.log(similarities); // [0.24783534471401417, 0.05313122704326892]
📚 詳細文檔
模型信息
屬性 | 詳情 |
---|---|
基礎模型 | Snowflake/snowflake-arctic-embed-l-v2.0 |
任務類型 | 句子相似度 |
標籤 | xlm-roberta、mteb、arctic、snowflake-arctic-embed、text-embeddings-inference |
庫名稱 | sentence-transformers |
支持語言 | af、ar、az、be、bg、bn、ca、ceb、cs、cy、da、de、el、en、es、et、eu、fa、fi、fr、gl、gu、he、hi、hr、ht、hu、hy、id、is、it、ja、jv、ka、kk、km、kn、ko、ky、lo、lt、lv、mk、ml、mn、mr、ms、my、ne、nl、pa、pl、pt、qu、ro、ru、si、sk、sl、so、sq、sr、sv、sw、ta、te、th、tl、tr、uk、ur、vi、yo、zh |
📄 許可證
Arctic採用 Apache-2 許可證。發佈的模型可免費用於商業目的。
📞 聯繫我們
如果您對本項目有任何疑問或建議,請隨時提出問題或提交拉取請求。您也可以通過電子郵件聯繫Daniel Campos(daniel.campos@snowflake.com)。







