snowflake-arctic-embed-m
snowflake-arctic-embed-m es un modelo de embedding de texto de tamaño mediano basado en intfloat/e5-base-unsupervised, diseñado para proporcionar el mejor rendimiento de recuperación sin ralentizar la inferencia. Este modelo forma parte de la suite de modelos snowflake-arctic-embed, que se centran en crear modelos de recuperación de alta calidad optimizados para el rendimiento. Los modelos snowflake-arctic-embed logran un rendimiento de vanguardia en el ranking de MTEB/BEIR para cada una de sus variantes de tamaño. Estos modelos están entrenados aprovechando modelos de representación de texto de código abierto existentes, como bert-base-uncased, y se entrenan en una tubería multietapa para optimizar su rendimiento de recuperación. Primero, los modelos se entrenan con grandes lotes de pares de consultas-documento donde los negativos se derivan dentro del lote: el preentrenamiento aprovecha alrededor de 400 millones de muestras de una mezcla de conjuntos de datos públicos y datos de búsqueda web propietaria. Luego, los modelos se optimizan con un entrenamiento prolongado en un conjunto de datos más pequeño (alrededor de 1 millón de muestras) de tríos de consulta, documento positivo y documento negativo derivado de minería negativa difícil.
Como usar
Usando Sentence Transformers
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("Snowflake/snowflake-arctic-embed-m")
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)
# Output passages & scores
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')
model = AutoModel.from_pretrained('Snowflake/snowflake-arctic-embed-m', add_pooling_layer=False)
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)
# Output passages & scores
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', {
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.15664823859882132, 0.24481869975470627]
Funcionalidades
- Modelo de embedding de texto de tamaño mediano
- Basado en intfloat/e5-base-unsupervised
- Rendimiento de recuperación de vanguardia
- Optimizado para recuperación de alta calidad
- Entrenamiento en un proceso multietapa
Casos de uso
- Mejorar la precisión de recuperación de información
- Preprocesamiento de documentos para búsqueda
- Clasificación y agrupación de texto