snowflake-arctic-embed-m

Snowflake
Similitud de oraciones

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