🚀 SnowflakeのArctic-embed-l-v2.0
SnowflakeのArctic-embed-l-v2.0は、検索性能と推論効率を最適化した埋め込みモデルです。多言語対応で、高品質な検索と取得を提供します。
🚀 クイックスタート
このセクションでは、Snowflakeのarctic-embedモデルの基本的な使い方を説明します。
✨ 主な機能
多言語対応
英語と非英語の検索で優れた性能を発揮し、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分の1に減らし、品質の低下を3%未満に抑えることができます。
モデル |
|
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% |
📦 インストール
このモデルを使用するには、必要なライブラリをインストールする必要があります。以下のセクションでは、異なる方法でのインストールと使用方法を説明します。
💻 使用例
基本的な使用法
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を使用する場合
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を使用する場合
まず、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);
📚 ドキュメント
このモデルに関する詳細な情報は、元のモデルカードを参照してください。
🔧 技術詳細
このモデルは、Snowflake/snowflake-arctic-embed-l-v2.0 をベースに構築されており、llama.cpp を使用してGGUF量子化が行われています。
📄 ライセンス
Arcticは、Apache 2 ライセンスの下で提供されています。公開されているモデルは、商用目的で無料で使用することができます。
お問い合わせ
このプロジェクトに関する質問や提案がある場合は、自由にissueやプルリクエストを開いてください。また、Daniel Campos (daniel.campos@snowflake.com) にメールを送ることもできます。