agusnieto77/byt5-portada-contrastivo
ByT5 Portada Contrastivo
Modelo ByT5 encoder afinado con aprendizaje contrastivo para similitud semántica entre variantes OCR y formas canónicas de gentilicios y entidades históricas en español. Desarrollado en el marco del proyecto PortADa.
⚠️ Uso correcto
Este modelo es un encoder (T5EncoderModel), no un modelo seq2seq. Genera embeddings que se comparan por similitud coseno.
import torch
import torch.nn.functional as F
from transformers import AutoTokenizer, T5EncoderModel
tokenizer = AutoTokenizer.from_pretrained("agusnieto77/byt5-portada-contrastivo")
model = T5EncoderModel.from_pretrained("agusnieto77/byt5-portada-contrastivo", torch_dtype=torch.bfloat16)
model.eval()
def get_embedding(texto):
inputs = tokenizer(texto, return_tensors="pt", truncation=True, max_length=128)
with torch.no_grad():
out = model(**inputs)
mask = inputs["attention_mask"].unsqueeze(-1).expand(out.last_hidden_state.size()).float()
return (out.last_hidden_state.float() * mask).sum(1) / mask.sum(1).clamp(min=1e-9)
emb1 = get_embedding("española")
emb2 = get_embedding("ospanola")
print(F.cosine_similarity(emb1, emb2).item())Datos del afinamiento (byt5_portada)
- Pares contrastivos: 22,409
- Grupos semánticos (
group_id): 5,059
El entrenamiento contrastivo utiliza mean pooling sobre la salida del encoder y una variante de Multiple Negatives Ranking Loss con group masking e inclusión de hard negatives por grupo.
Caso de uso
Dada una variante OCR ruidosa, el modelo identifica a cuál forma canónica corresponde por similitud semántica en el espacio de embeddings.
Contexto del proyecto de investigación PortADa
Este modelo se enmarca en el proyecto PortADa (Port Arrivals Data), centrado en el análisis de llegadas de buques en los puertos de Barcelona, Marsella, La Habana y Buenos Aires entre 1850 y 1915. El proyecto busca generar una base de datos de aproximadamente 1 millón de registros a partir de prensa histórica.
Sitio oficial: https://www.proyectoportada.eu/
