HIT-TMG/EviOmni-nq_train-7B
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.
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}, }
