lujain5666/finetune-gemma-7b
El proyecto tiene como objetivo entrenar modelos de incrustación de oraciones en conjuntos de datos muy grandes utilizando un objetivo de aprendizaje contrastivo auto-supervisado. Usamos el modelo preentrenado nreimers/MiniLM-L6-H384-uncased y lo ajustamos en un conjunto de datos de 1 billón de pares de oraciones. Utilizamos un objetivo de aprendizaje contrastivo: dada una oración del par, el modelo debe predecir cuál, entre un conjunto de otras oraciones muestreadas al azar, fue realmente emparejada con ella en nuestro conjunto de datos. Desarrollamos este modelo durante la semana comunitaria usando JAX/Flax para PNL y CV, organizada por Hugging Face. Desarrollamos este modelo como parte del proyecto: Entrenar el mejor modelo de incrustación de oraciones jamás con 1B de pares de entrenamiento. Nos beneficiamos de una infraestructura de hardware eficiente para ejecutar el proyecto: 7 TPUs v3-8, así como la intervención de miembros del equipo de Flax, JAX y Cloud de Google sobre marcos de aprendizaje profundo eficientes.
Como usar
Uso (Sentence-Transformers)
pip install -U sentence-transformers
from sentence_transformers import SentenceTransformer
sentences = ["Esta es una oración de ejemplo", "Cada oración se convierte"]
model = SentenceTransformer('sentence-transformers/all-MiniLM-L6-v2')
embeddings = model.encode(sentences)
print(embeddings)
Uso (HuggingFace Transformers)
from transformers import AutoTokenizer, AutoModel
import torch
import torch.nn.functional as F
# Media de los embeddings - Tener en cuenta la mascara de atención para promediar correctamente
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0] # El primer elemento del model_output contiene todos los embeddings de los tokens
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)
# Oraciones para las que queremos obtener embeddings de la oración
sentences = ['Esta es una oración de ejemplo', 'Cada oración se convierte']
# Cargar el modelo desde HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')
model = AutoModel.from_pretrained('sentence-transformers/all-MiniLM-L6-v2')
# Tokenizar las oraciones
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
# Calcular los embeddings de los tokens
with torch.no_grad():
model_output = model(**encoded_input)
# Realizar la media de los embeddings
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
# Normalizar los embeddings
sentence_embeddings = F.normalize(sentence_embeddings, p=2, dim=1)
print("Embeddings de las oraciones:")
print(sentence_embeddings)
Resultados de Evaluación
Para una evaluación automática de este modelo, consulte el Benchmark de Incrustaciones de Oraciones: https://seb.sbert.net
Funcionalidades
- Incrustación de oraciones y párrafos a un espacio de vector denso de 384 dimensiones
- Compatible con Sentence-Transformers y transformers de Hugging Face
- Utiliza aprendizaje contrastivo para ajustar el modelo
- Compatible con AutoTrain
- Compatible con Tensores seguros (Safetensors)
- Inferencia de incrustaciones de texto
- Compatible con Endpoints de Inferencia
Casos de uso
- Recuperación de información
- Agrupamiento de oraciones
- Tareas de similitud de oraciones
- Codificación de oraciones y párrafos cortos