polish-reranker-large-ranknet

sdadas
Clasificación de texto

Este es un modelo de clasificación de texto en polaco entrenado con la pérdida de RankNet en un gran conjunto de datos de pares de texto que consiste en 1.4 millones de consultas y 10 millones de documentos. El conjunto de datos de entrenamiento incluyó las siguientes partes: 1) La división de entrenamiento de MS MARCO en polaco (800k consultas); 2) El conjunto de datos ELI5 traducido al polaco (más de 500k consultas); 3) Una colección de preguntas y respuestas médicas en polaco (aproximadamente 100k consultas). Como modelo maestro, empleamos unicamp-dl/mt5-13b-mmarco-100k, un gran recalificador multilingüe basado en la arquitectura MT5-XXL. Como modelo de estudiante, elegimos RoBERTa en polaco. A diferencia de las pérdidas more comunes de punto a punto, que consideran cada par de consulta-documento de manera independiente, el método RankNet calcula la pérdida basada en consultas y pares de documentos. Más específicamente, la pérdida se calcula en función del orden relativo de los documentos clasificados por su relevancia con respecto a la consulta. Para entrenar el recalificador, utilizamos el modelo maestro para evaluar la relevancia de los documentos extraídos en la etapa de recuperación para cada consulta. Luego, clasificamos estos documentos por la puntuación de relevancia, obteniendo un conjunto de datos que consta de consultas y listas ordenadas de 20 documentos por consulta. 💡 El método ha demostrado ser altamente efectivo. ¡El modelo proporcionado supera al modelo maestro en el Benchmark de Recuperación de Información en Polaco, a pesar de tener 30 veces menos parámetros y ser 33 veces más rápido que el maestro! 💡

Como usar

Puedes usar el modelo de esta manera con sentence-transformers:

from sentence_transformers import CrossEncoder
import torch.nn

query = "Jak dożyć 100 lat?"
answers = [
"Trzeba zdrowo się odżywiać i uprawiać sport.",
"Trzeba pić alkohol, imprezować i jeździć szybkimi autami.",
"Gdy trwała kampania politycy zapewniali, że rozprawią się z zakazem niedzielnego handlu."
]

model = CrossEncoder(
"sdadas/polish-reranker-large-ranknet",
default_activation_function=torch.nn.Identity(),
max_length=512,
device="cuda" if torch.cuda.is_available() else "cpu")
pairs = [[query, answer] for answer in answers]
results = model.predict(pairs)
print(results.tolist())

El modelo también puede ser utilizado con Huggingface Transformers de la siguiente manera:

from transformers import AutoTokenizer, AutoModelForSequenceClassification
import numpy as np

query = "Jak dożyć 100 lat?"
answers = [
"Trzeba zdrowo się odżywiać i uprawiać sport.",
"Trzeba pić alkohol, imprezować i jeździć szybkimi autami.",
"Gdy trwała kampania politycy zapewniali, że rozprawią się z zakazem niedzielnego handlu."
]

model_name = "sdadas/polish-reranker-large-ranknet"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForSequenceClassification.from_pretrained(model_name)
texts = [f"{query}{answer}" for answer in answers]
tokens = tokenizer(texts, padding="longest", max_length=512, truncation=True, return_tensors="pt")
output = model(**tokens)
results = output.logits.detach().numpy()
results = np.squeeze(results)
print(results.tolist())

Funcionalidades

Clasificación de texto
Transformers
Safetensors
Recuperación de información
Compatible con AutoTrain
Compatible con Endpoints

Casos de uso

Clasificación de texto en polaco
Recuperación de información en consultas de grandes bases de datos
Ordenamiento y clasificación de documentos por relevancia
Aplicación en sectores médicos para preguntas y respuestas