CoolFace
Modelpublic

HIT-TMG/EviOmni-nq_train-7B

sourceHugging Facemitupdated 1y agoView on Hugging Face
2likes18downloads
Model Card

EviOmni-nq_train-7B

Introduction

EviOmni is a rational evidence extraction model. Compared to vanilla evidence extraction models, EviOmni demonstrates the superiority in terms of performance, generalization, efficiency, and robustness.

Requirements

The code of EviOmni has been in the latest Huggingface transformers and we advise you to use the latest version of transformers.

With transformers<4.37.0, you will encounter the following error:

KeyError: 'qwen2'

Quickstart

from transformers import AutoModelForCausalLM, AutoTokenizer from transformers import StoppingCriteria, StoppingCriteriaList import re

class MultiTokenStoppingCriteria(StoppingCriteria): def _init(self, stopids, device): self.stopids = stopids self.stoplen = len(stopids)

def _call(self, inputids, scores, **kwargs): if len(inputids[0]) >= self.stoplen: lasttokens = inputids[0][-self.stoplen:].tolist() return lasttokens == self.stop_ids return False

modelname = "HIT-TMG/EviOmni-nqtrain-7B" model = AutoModelForCausalLM.frompretrained( modelname, torchdtype="auto", devicemap="auto" ) tokenizer = AutoTokenizer.frompretrained(modelname)

prompt = open("eviomni_prompt", "r").read() question = "..." passages = "..." instruction = prompt.format(question=question, passages=passages)

messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": instruction} ]

stoptoken = "</extract>\n\n" stopids = tokenizer.encode(stoptoken, addspecial_tokens=False)

stoppingcriteria = StoppingCriteriaList([ MultiTokenStoppingCriteria(stopids, model.device) ])

text = tokenizer.applychattemplate( messages, tokenize=False, addgenerationprompt=True ) modelinputs = tokenizer([text], returntensors="pt").to(model.device)

generatedids = model.generate( **modelinputs, maxnewtokens=512, stoppingcriteria=stoppingcriteria ) generatedids = [ outputids[len(inputids):] for inputids, outputids in zip(modelinputs.inputids, generatedids) ]

response = tokenizer.batchdecode(generatedids, skipspecialtokens=True)[0].strip() match = re.search(r"<extract>(.*?)</extract>", response, re.DOTALL) evidence = match.group(1).strip()

Performance

Main results. [image]

Citation

If you find our work helpful, feel free to give us a cite.

@misc{EviOmni, title={Learning to Extract Rational Evidence via Reinforcement Learning for Retrieval-Augmented Generation}, author={Xinping Zhao and Shouzheng Huang and Yan Zhong and Xinshuo Hu and Meishan Zhang and Baotian Hu and Min Zhang}, year={2025}, eprint={2507.15586}, archivePrefix={arXiv}, primaryClass={cs.CL}, url={https://arxiv.org/abs/2507.15586}, }