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