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

Recibe las últimas noticias y actualizaciones sobre el mundo de IA directamente en tu bandeja de entrada.