lujain5666/finetune-gemma-7b

lujain5666
Similitud de oraciones

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