simlm-msmarco-reranker
SimLM: Pre-training with Representation Bottleneck for Dense Passage Retrieval es un método de pre-entrenamiento simple pero efectivo para la recuperación densa de pasajes. Este modelo utiliza una arquitectura de cuello de botella que aprende a comprimir la información del pasaje en un vector denso a través del pre-entrenamiento autoguiado. SimLM utiliza un objetivo de modelado de lenguaje reemplazado, inspirado en ELECTRA, para mejorar la eficiencia de la muestra y reducir la discrepancia en la distribución de entrada entre el pre-entrenamiento y la afinación. No requiere acceso a corpus etiquetado, lo que lo hace aplicable en contextos donde no hay datos etiquetados o consultas. Los experimentos realizados en varios conjuntos de datos de recuperación de pasajes a gran escala muestran mejoras sustanciales sobre referencias sólidas en diversas configuraciones.
Como usar
Dado que utilizamos una pérdida de tipo lista para entrenar el reordenador, el puntaje de relevancia no está limitado a un rango numérico específico. Puntuaciones más altas indican mayor relevancia entre la consulta y el pasaje dados.
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer, BatchEncoding, PreTrainedTokenizerFast
from transformers.modeling_outputs import SequenceClassifierOutput
def encode(tokenizer: PreTrainedTokenizerFast,
query: str, passage: str, title: str = '-') -> BatchEncoding:
return tokenizer(query,
text_pair='{}: {}'.format(title, passage),
max_length=192,
padding=True,
truncation=True,
return_tensors='pt')
tokenizer = AutoTokenizer.from_pretrained('intfloat/simlm-msmarco-reranker')
model = AutoModelForSequenceClassification.from_pretrained('intfloat/simlm-msmarco-reranker')
model.eval()
with torch.no_grad():
batch_dict = encode(tokenizer, 'cuánto dura el juego del Super Bowl', 'El Super Bowl suele durar cuatro horas. El juego en sí dura alrededor de tres horas y media, con un espectáculo de medio tiempo de 30 minutos.')
outputs: SequenceClassifierOutput = model(**batch_dict, return_dict=True)
print(outputs.logits[0])
batch_dict = encode(tokenizer, 'cuánto dura el juego del Super Bowl', 'El costo de un comercial del Super Bowl ronda los $5 millones por 30 segundos de transmisión. Pero los beneficios que puede traer a una marca pueden justificar el costo.')
outputs: SequenceClassifierOutput = model(**batch_dict, return_dict=True)
print(outputs.logits[0])
Funcionalidades
- Pre-entrenamiento con arquitectura de cuello de botella
- Objetivo de modelado de lenguaje reemplazado inspirado en ELECTRA
- No requiere acceso a corpus etiquetado
- Mejoras sustanciales en datasets de recuperación de pasajes a gran escala
Casos de uso
- Recuperación densa de pasajes
- Clasificación de textos
- Consulta sin datos etiquetados
- Aplicaciones sin corpus etiquetado