Snowflake/snowflake-arctic-embed-l
Snowflake
Similitud de oraciones
Snowflake's Arctic-embed-l es un modelo de incrustación de texto que se destaca por su alta precisión en tareas de recuperación de información. Está basado en el modelo intfloat/e5-large-unsupervised y se entrena con datos públicos y propios, utilizando técnicas avanzadas de pre-entrenamiento y optimización. Este modelo es capaz de producir vectores de incrustación de alta calidad que pueden reemplazar APIs cerradas. Se lanzó el 26 de julio de 2024 y está registrado con la licencia Apache-2.0.
Como usar
Utilizando Sentence Transformers
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Snowflake/snowflake-arctic-embed-l")
queries = ['¿qué es Snowflake?', '¿Dónde puedo conseguir los mejores tacos?']
documents = ['¡La Nube de Datos!', '¡Ciudad de México, por supuesto!']
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)
Utilizando Huggingface Transformers
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 = 'Representa esta oración para buscar pasajes relevantes: '
queries = ['¿qué es Snowflake?', '¿Dónde puedo conseguir los mejores 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 = ['¡La Nube de Datos!', '¡Ciudad de México, por supuesto!']
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)
Utilizando Transformers.js
import { pipeline, dot } from '@xenova/transformers';
// Create feature extraction pipeline
const extractor = await pipeline('feature-extraction', 'Snowflake/snowflake-arctic-embed-l', {
quantized: false,
});
// Generate sentence embeddings
const sentences = [
'Representa esta oración para buscar pasajes relevantes: ¿Dónde puedo conseguir los mejores tacos?',
'¡La Nube de Datos!',
'¡Ciudad de México, por supuesto!',
]
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]
Funcionalidades
- Precisión en la recuperación de información con MTEB Retrieval Score (NDCG @ 10) de 55.98
- Gran modelo con 335 millones de parámetros y dimension de incrustación de 1024
- Optimizado para crear vectores de incrustación altamente comprimibles sin pérdida de calidad
- Soporta hasta 8192 tokens usando RPE
- Basado en modelos de representación de texto de código abierto como bert-base-uncased
Casos de uso
- Búsqueda de información relevante en grandes conjuntos de datos
- Mejora del pre-entrenamiento contrastivo mediante la incrustación y el agrupamiento de datos
- Sistemas de recomendación utilizando vectores de incrustación de alta calidad
- Reemplazo de APIs cerradas con un modelo de código abierto que ofrece alta precisión