A native cross-encoder reranker for Italian information retrieval, fine-tuned from an Italian BERT architecture on a curated passage ranking and QA corpus.
Why this model
Italian-language information retrieval has very few dedicated reranker models — most pipelines either fall back to multilingual cross-encoders (diluted by 100 languages) or skip reranking entirely. This model is trained natively in Italian, on Italian-specific hard negatives, to fill that gap.
"Base retriever" refers to nickprock/multi-sentence-BERTino — a strong, Italian-specialized bi-encoder — used to mine hard negatives during training. The gain reported here is therefore a realistic estimate of what this reranker adds on top of a competitive existing Italian retriever, not a comparison against a weak baseline.
Training data
The model was trained on a high-quality Italian passage ranking mixture combining samples from mMARCO-it and vincolle/gooaq-italian-80k, an Italian translation of GooAQ that I produced myself (translated with DeepSeek). To my knowledge this is the first public Italian version of GooAQ — it does not exist as a native dataset in any other language besides English.
Hard negative mining
Hard negatives were mined using nickprock/multi-sentence-BERTino, a native Italian bi-encoder trained with Matryoshka Representation Learning. Using an Italian-specific embedder for mining (rather than a generic multilingual one) was a deliberate choice — early experiments with multilingual embedders produced negatives that were either too easy (trivially distinguishable) or, in the worst case, contained answers just as valid as the labeled positive. Switching to an Italian-native retriever for mining produced negatives that were genuinely hard without being false negatives, which is what made margin-based filtering during mining meaningful at all.
75,000 training triples (question, positive, 5 hard negatives)
2,500 held-out dev samples, reranking-evaluation format (30 candidates per query, positive included)
Usage
pip install -U sentence-transformers
python
1from sentence_transformers import CrossEncoder
23model = CrossEncoder("vincolle/reranker-bert-italian-uncased-mmarco-mnrl")45# Score query-document pairs directly6pairs =[7("Quante calorie si bruciano correndo 5 miglia?",8"Correndo 5 miglia si brucia una grande quantità di calorie. In generale, la maggior parte delle persone che corre 5 miglia brucia circa 500 calorie."),9("Quante calorie si bruciano correndo 5 miglia?",10"Le pinzette sono consentite nel bagaglio a mano, così come i rasoi elettrici."),11]12scores = model.predict(pairs)13print(scores)14# [0.99..., 0.05...]1516# Or rerank a list of candidate documents for a single query17ranks = model.rank(18"Quante calorie si bruciano correndo 5 miglia?",19[20"Correndo 5 miglia si brucia una grande quantità di calorie...",21"Le pinzette sono consentite nel bagaglio a mano...",22"Guidare con ammortizzatori difettosi può essere estremamente pericoloso...",23],24)
Suggested pipeline
This reranker is designed as the second stage of a retrieve-then-rerank pipeline:
If you use this model, please cite the base model and the Sentence Transformers library:
bibtex
1@inproceedings{reimers-2019-sentence-bert,
2 title = "Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks",
3 author = "Reimers, Nils and Gurevych, Iryna",
4 booktitle = "Proceedings of the 2019 Conference on Empirical Methods in Natural Language Processing",
5 month = "11",
6 year = "2019",
7 publisher = "Association for Computational Linguistics",
8 url = "https://arxiv.org/abs/1908.10084",
9}