inokufu/flaubert-base-uncased-xnli-sts-finetuned-education

inokufu
Similitud de oraciones

Un modelo de sentence-transformers afinado en oraciones de cursos. Mapea oraciones y párrafos a un espacio vectorial denso de 768 dimensiones y puede ser usado para tareas como agrupamiento o búsqueda semántica. Este modelo se basa en el modelo preentrenado flaubert-base-uncased. Primero fue afinado en nuestro dataset de oraciones de objetos de aprendizaje (LO), que consiste en una muestra de 500k oraciones de descripciones de cursos. Luego fue afinado en una tarea de inferencia de lenguaje natural (XNLI) y finalmente en una tarea de similitud semántica de texto (en datos de STS-fr). Este proceso de afinación permite al modelo tener una representación semántica de palabras mucho mejor que la propuesta por el modelo base.

Como usar

El uso de este modelo se vuelve sencillo cuando tienes sentence-transformers instalado:

pip install -U sentence-transformers

Luego puedes usar el modelo de la siguiente forma:

from sentence_transformers import SentenceTransformer
sentences = ["Apprendre le python", "Devenir expert en comptabilité"]

model = SentenceTransformer('inokufu/flaubert-base-uncased-xnli-sts-finetuned-education')
embeddings = model.encode(sentences)
print(embeddings)

Sin sentence-transformers, puedes usar el modelo así: Primero, pasas tu entrada a través del modelo transformer, luego tienes que aplicar la correcta operación de pooling sobre las incrustaciones de palabras contextualizadas.

from transformers import AutoTokenizer, AutoModel
import torch

# Mean Pooling - Tener en cuenta la máscara de atención para el promedio correcto

def mean_pooling(model_output, attention_mask):
    token_embeddings = model_output[0]  # El primer elemento de model_output contiene todas las incrustaciones de 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 cuales queremos incrustaciones de oraciones
sentences = ["Apprendre le python", "Devenir expert en comptabilité"]

# Cargar el modelo desde HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained('inokufu/flaubert-base-uncased-xnli-sts-finetuned-education')
model = AutoModel.from_pretrained('inokufu/flaubert-base-uncased-xnli-sts-finetuned-education')

# Tokenizar oraciones
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')

# Calcular incrustaciones de tokens
with torch.no_grad():
    model_output = model(**encoded_input)

# Realizar pooling. En este caso, mean pooling.
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])

print("Incrustaciones de oraciones:")
print(sentence_embeddings)

Funcionalidades

Transformador de oraciones
Vectorización densa de 768 dimensiones
Afinado en oraciones de cursos
Mejora en similitud semántica y relaciones entre oraciones
Basado en flaubert-base-uncased

Casos de uso

Agrupamiento de oraciones
Búsqueda semántica
Reconocimiento de relaciones entre oraciones (contradicción, neutralidad, implicación)
Estimación de la similitud entre dos oraciones