🚀 Snowflake's Arctic-embed-l-v2.0
Snowflake's Arctic-embed-l-v2.0是一款新的嵌入模型,旨在優化檢索性能和推理效率。它在多語言文本檢索方面表現出色,同時在英語任務中也不遜色。該模型在寬鬆的Apache 2.0許可下發布,非常適合需要大規模、可靠的企業級多語言搜索和檢索的應用場景。
🚀 快速開始
使用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!']
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)
使用Huggingface Transformers.js
如果你還沒有安裝Transformers.js JavaScript庫,可以從NPM進行安裝:
npm i @huggingface/transformers
然後你可以使用該模型進行檢索,如下所示:
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);
✨ 主要特性
- 多語言無妥協:在英語和非英語檢索任務中表現出色,在MTEB Retrieval、CLEF和MIRACL等基準測試中優於領先的開源和專有模型。
- 推理效率高:其303m非嵌入參數的推理速度快,適用於任何規模的應用。
- 易於壓縮:使用Matryoshka Representation Learning (MRL)和量化感知嵌入訓練,可實現低至128字節/向量的高質量檢索。
- 即插即用:基於BAAI/bge-m3-retromae構建,可直接替換任何新庫、內核、推理引擎等進行推理。
- 長上下文支持:基於BAAI/bge-m3-retromae構建,通過RoPE可支持長達8192的上下文窗口。
🔧 技術細節
質量基準
與大多數其他開源模型不同,Arctic-embed-l-v2.0在英語(通過MTEB Retrieval)和多語言(通過MIRACL和CLEF)任務中均表現出色。以下是一些模型在不同基準測試中的平均NDCG@10得分:
模型名稱 |
參數數量 |
非嵌入參數數量 |
維度 |
BEIR (15) |
MIRACL (4) |
CLEF (Focused) |
CLEF (Full) |
snowflake-arctic-l-v2.0 |
568M |
303M |
1024 |
55.6 |
55.8 |
52.9 |
54.3 |
snowflake-arctic-m |
109M |
86M |
768 |
54.9 |
24.9 |
34.4 |
29.1 |
snowflake-arctic-l |
335M |
303M |
1024 |
56.0 |
34.8 |
38.2 |
33.7 |
me5 base |
560M |
303M |
1024 |
51.4 |
54.0 |
43.0 |
34.6 |
bge-m3 (BAAI) |
568M |
303M |
1024 |
48.8 |
56.8 |
40.8 |
41.3 |
gte (Alibaba) |
305M |
113M |
768 |
51.1 |
52.3 |
47.7 |
53.1 |
除了高質量的檢索,arctic還提供易於壓縮的嵌入向量。通過MRL進行向量截斷,可將向量大小減小4倍,而質量下降不到3%。結合MRL向量和向量壓縮(Int4),可實現每個文檔128字節的檢索。
模型 |
維度 |
BEIR (15) |
相對性能 |
MIRACL (4) |
相對性能 |
CLEF (5) |
相對性能 |
CLEF (Full) |
相對性能 |
snowflake-arctic-l-v2.0 |
1024 |
55.6 |
N/A |
55.8 |
N/A |
52.9 |
N/A |
54.3 |
N/A |
snowflake-arctic-l-v2.0 |
256 |
54.3 |
-0.18% |
54.3 |
-2.70% |
51.9 |
-1.81% |
53.4 |
-1.53% |
📄 許可證
Arctic採用Apache-2許可。發佈的模型可免費用於商業目的。
聯繫我們
如果你對這個項目有任何問題或建議,請隨時打開一個issue或提交一個pull request。你也可以通過電子郵件聯繫Daniel Campos(daniel.campos@snowflake.com)。