CAiRE/UniVaR-lambda-80

CAiRE
Similitud de oraciones

nomic-embed-text-v1: Un codificador de texto de longitud de contexto 8192 que supera el rendimiento de text-embedding-ada-002 y text-embedding-3-small de OpenAI en tareas de contexto corto y largo.

Como usar

La forma más fácil de empezar con Nomic Embed es a través de la API de Embeddings de Nomic.

Generar embeddings con el cliente de Python de Nomic es tan sencillo como:

from nomic import embed

output = embed.text(
texts=['Nomic Embedding API', '#keepAIOpen'],
model='nomic-embed-text-v1',
task_type='search_document'
)

print(output)

Para más información, consulta la referencia de la API.

También puedes utilizar Transformers con el siguiente código:

import torch
import torch.nn.functional as F
from transformers import AutoTokenizer, AutoModel

def mean_pooling(model_output, attention_mask):
    token_embeddings = model_output[0]
    input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
    return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)

sentences = ['search_query: What is TSNE?', 'search_query: Who is Laurens van der Maaten?']

tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased')
model = AutoModel.from_pretrained('nomic-ai/nomic-embed-text-v1', trust_remote_code=True)
model.eval()

encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')

with torch.no_grad():
    model_output = model(**encoded_input)

embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
embeddings = F.normalize(embeddings, p=2, dim=1)
print(embeddings)

El modelo admite de forma nativa la ampliación de la longitud de la secuencia más allá de 2048 tokens. Para hacerlo:

- tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased')
+ tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased', model_max_length=8192)

- model = AutoModel.from_pretrained('nomic-ai/nomic-embed-text-v1', trust_remote_code=True)
+ model = AutoModel.from_pretrained('nomic-ai/nomic-embed-text-v1', trust_remote_code=True, rotary_scaling_factor=2)

También puedes utilizar Sentence Transformers:

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("nomic-ai/nomic-embed-text-v1", trust_remote_code=True)
sentences = ['search_query: What is TSNE?', 'search_query: Who is Laurens van der Maaten?']
embeddings = model.encode(sentences)
print(embeddings)

Funcionalidades

Longitud de contexto de 8192 tokens
Etapa de entrenamiento no supervisada contrastiva
Etapa de ajuste fino con conjuntos de datos etiquetados de alta calidad
Soporte para aplicaciones de recuperación con prefijos
Compatibilidad con Transformers y Sentence Transformers

Casos de uso

Clasificación de productos de Amazon con alta precisión
Recuperación de información en aplicaciones de búsqueda
Extracción de características de textos
Integración en aplicaciones de transformadores y modelos predictivos