polish-reranker-base-ranknet
Este es un modelo polaco de clasificación de textos entrenado con la pérdida RankNet en un gran conjunto de datos de pares de textos que consiste en 1,4 millones de consultas y 10 millones de documentos. Los datos de entrenamiento incluyeron las siguientes partes: 1) La división de entrenamiento polaca de MS MARCO (800 mil consultas); 2) El conjunto de datos ELI5 traducido al polaco (más de 500 mil consultas); 3) Una colección de preguntas y respuestas médicas polacas (aproximadamente 100 mil consultas). Como modelo maestro, empleamos unicamp-dl/mt5-13b-mmarco-100k, un gran reranker multilingüe basado en la arquitectura MT5-XXL. Como modelo estudiante, elegimos Polish RoBERTa. A diferencia de las pérdidas puntuales más comúnmente utilizadas, que consideran cada par consulta-documento de manera independiente, el método RankNet calcula la pérdida basada en las consultas y pares de documentos. Más específicamente, la pérdida se calcula según el orden relativo de los documentos ordenados por su relevancia para la consulta. Para entrenar el reranker, utilizamos el modelo maestro para evaluar la relevancia de los documentos extraídos en la etapa de recuperación para cada consulta. Luego ordenamos estos documentos por la puntuación de relevancia, obteniendo un conjunto de datos que consiste en consultas y listas ordenadas de 20 documentos por consulta.
Como usar
Puedes usar el modelo de la siguiente 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-base-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 se puede usar 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-base-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())
El modelo alcanza un NDCG@10 de 60.32 en la categoría de Rerankers del Benchmark de Recuperación de Información Polaca. Consulte el PIRB Leaderboard para resultados detallados.
Funcionalidades
- Clasificación de textos
- Entrenamiento con pérdida RankNet
- Evaluación de relevancia a partir del orden relativo de documentos
- Uso de modelos maestros y estudiantes
- Optimizado para el idioma polaco
Casos de uso
- Clasificación y ordenamiento de respuestas relevantes para consultas polacas
- Evaluación de la relevancia de documentos en consultas de búsqueda
- Uso en sistemas de recuperación de información y respuesta a preguntas en polaco