Snowflake Arctic-Embed-M-Long
Snowflake
Similitud de oraciones
Snowflake Arctic-Embed-M-Long es un modelo de embeddings de texto optimizado para la recuperación de información. Este modelo se basa en modelos de representación de texto de código abierto existentes y está entrenado en un pipeline de múltiples etapas para optimizar su rendimiento en tareas de recuperación. El modelo soporta hasta 2048 tokens, y con el uso de RPE, puede escalar hasta 8192 tokens, lo que lo hace adecuado para cargas de trabajo que requieren contextos largos. Se ha demostrado que el modelo ofrece un rendimiento de recuperación de última generación en el tablero de MTEB/BEIR.
Como usar
Usando Sentence Transformers
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Snowflake/snowflake-arctic-embed-m-long", trust_remote_code=True)
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)
print("Query:", query)
for document, score in doc_score_pairs:
print(score, document)
Usando Huggingface transformers
import torch
from transformers import AutoModel, AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained('Snowflake/snowflake-arctic-embed-m-long')
model = AutoModel.from_pretrained('Snowflake/snowflake-arctic-embed-m-long', trust_remote_code=True, add_pooling_layer=False, safe_serialization=True)
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)
print("Query:", query)
for document, score in doc_score_pairs:
print(score, document)
Usando Transformers.js
import { pipeline, dot } from '@xenova/transformers';
// Create feature extraction pipeline
const extractor = await pipeline('feature-extraction', 'Snowflake/snowflake-arctic-embed-m-long', {
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.36740492125676116, 0.42407774292046635]
Funcionalidades
- Optimizado para la recuperación de información.
- Soporta hasta 2048 tokens, y con el uso de RPE, puede escalar hasta 8192 tokens.
- Basado en el modelo nomic-ai/nomic-embed-text-v1-unsupervised.
- Entrenado con 400 millones de muestras de datos mixtos y optimizado con 1 millón de muestras de tripletas.
- Licencia Apache 2.0.
- Modelos de alta calidad de código abierto.
Casos de uso
- Búsqueda de datos relevantes en grandes conjuntos de datos.
- Análisis de consultas y recuperación de documentos relevantes.
- Extracción de características para tareas de aprendizaje profundo.
- Aplicaciones que requieren el procesamiento de contextos largos.