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