NoInstruct pequeño Embedding v0

avsolatorio
Similitud de oraciones

NoInstruct Embedding: Asymmetric Pooling es todo lo que necesitas. Este modelo ha mejorado el rendimiento de recuperación en comparación con el modelo avsolatorio/GIST-small-Embedding-v0. Uno de los puntos en los que la familia de modelos GIST fallaba era en el rendimiento en tareas de recuperación. Proponemos un método que produce un mejor rendimiento de recuperación mientras mantiene la independencia en la creación de instrucciones arbitrarias, un paradigma en tendencia en los modelos de embedding para tareas de recuperación, cuando se codifica una consulta. Los detalles técnicos del modelo serán publicados próximamente.

Como usar

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

model = AutoModel.from_pretrained('avsolatorio/NoInstruct-small-Embedding-v0')
tokenizer = AutoTokenizer.from_pretrained('avsolatorio/NoInstruct-small-Embedding-v0')

def get_embedding(text: Union[str, list[str]], mode: str = 'sentence'):
  model.eval()

  assert mode in ('query', 'sentence'), f'mode={mode} fue pasado pero solo `query` y `sentence` son los modos soportados.'

  if isinstance(text, str):
    text = [text]

  inp = tokenizer(text, return_tensors='pt', padding=True, truncation=True)

  with torch.no_grad():
    output = model(**inp)

  # El modelo está optimizado para usar el mean pooling para consultas,
  # mientras que el embedding de oraciones/documentos usa la representación [CLS].

  if mode == 'query':
    vectors = output.last_hidden_state * inp['attention_mask'].unsqueeze(2)
    vectors = vectors.sum(dim=1) / inp['attention_mask'].sum(dim=-1).view(-1, 1)
  else:
    vectors = output.last_hidden_state[:, 0, :]

  return vectors


texts = [
  'Illustration of the REaLTabFormer model. The left block shows the non-relational tabular data model using GPT-2 with a causal LM head. In contrast, the right block shows how a relational dataset's child table is modeled using a sequence-to-sequence (Seq2Seq) model. The Seq2Seq model uses the observations in the parent table to condition the generation of the observations in the child table. The trained GPT-2 model on the parent table, with weights frozen, is also used as the encoder in the Seq2Seq model.',
  'Predicting human mobility holds significant practical value, with applications ranging from enhancing disaster risk planning to simulating epidemic spread. In this paper, we present the GeoFormer, a decoder-only transformer model adapted from the GPT architecture to forecast human mobility.',
  'As the economies of Southeast Asia continue adopting digital technologies, policy makers increasingly ask how to prepare the workforce for emerging labor demands. However, little is known about the skills that workers need to adapt to these changes'
]

# Calcular embeddings
embeddings = get_embedding(texts, mode='sentence')

# Calcular la similitud coseno para cada par de oraciones
scores = F.cosine_similarity(embeddings.unsqueeze(1), embeddings.unsqueeze(0), dim=-1)
print(scores.cpu().numpy())

# Probar el rendimiento de recuperación.
query = get_embedding('¿Qué oración habla sobre conceptos de trabajo?', mode='query')

scores = F.cosine_similarity(query, embeddings, dim=-1)
print(scores.cpu().numpy())

Funcionalidades

Mejora en el rendimiento de recuperación
Independencia en la creación de instrucciones arbitrarias
Optimizado para el uso de pooling medio para consultas
Optimización en embeddings de oraciones/documentos usando la representación [CLS]

Casos de uso

Mejora en tareas de recuperación de información
Generación de embeddings para oraciones y documentos
Comparación de similitud entre textos
Uso en aplicaciones de búsqueda y consulta