Qihoo360 / 360zhinao

360zhinao
Apache License 2.0
274 stars 23 forks source link

RAG应用中如何使用qihoo360/360Zhinao-1.8B-Reranking,可以给个例子吗? #17

Open shizidushu opened 2 months ago

shizidushu commented 2 months ago

qihoo360/360Zhinao-1.8B-Reranking看起来很不错,但是不知道RAG应用中如何使用它。

RAG中有个场景是给定查询(query)和上下文文档节点(docs),使用重排序模型对上下文节点进行排序。不过,从 https://huggingface.co/qihoo360/360Zhinao-1.8B-Reranking 上的例子看,qihoo360/360Zhinao-1.8B-Reranking是用于处理问答对的,并不适用。

比较好奇,qihoo360/360Zhinao-1.8B-Reranking在RAG的应用场景是怎样的,如果有个demo代码就好了

Yusifu commented 2 months ago

您好,感谢您的提问,这个确实是一个问题。刷榜和业务应用确实存在一些gap。

文档和答案不同之处在于,数据分布不同,序列长度更长,即使文档大部分在说其他事情,但只要有一句话回答了用户问题,就认为文档相关。对模型的抗噪能力和鲁棒性提出了更高的要求。

qihoo360/360Zhinao-1.8B-Reranking的训练数据只使用了榜单对应的四个数据集,Marco,T2reranking,cmedqav1和cmedqav2,由于Marco和T2reranking两个数据集是使用全网文档池的段落作为候选段落,因此对文档类分布有一定判别能力。根据这四个数据集的论文,数据集的负例都是先使用一个基础版本的排序器(比如bm25等),在答案池(cmedqav1和cmedqav2)或者全网文档池(Marco和T2reranking)得到topN的答案,因此这个topN个负例可认为有关键词匹配但语义不相关,模型会从这些负例中学到一些噪音数据的判别能力,具有一定鲁棒性。谨慎猜测可以试一下文档排序。

在rag使用过程中,建议将文档切分成段落,或者为文档抽取摘要,使用qihoo360/360Zhinao-1.8B-Reranking模型判断最后的<问题-段落>或<问题-摘要>的相关性。

如果您对文档排序的准确率要求很高,建议在业务数据上进行微调,qihoo360/360Zhinao-1.8B-Reranking支持4096的序列长度,能够比榜单bert类模型处理更长的序列。

精排和向量召回不同,向量召回只能把长文档的丰富语义压缩到一个向量中。精排可做的事情有很多,个人建议先抽摘要,使用qihoo360/360Zhinao-1.8B-Reranking判断<问题-摘要>的相关性。

shizidushu commented 2 months ago

@Yusifu 感谢你的回复。还有点具体的细节要请教下,https://huggingface.co/qihoo360/360Zhinao-1.8B-Reranking 上的推理脚本是先调用process函数处理用户输入input。这个process好像是专用处理QA对的,判断<问题-摘要>的相关性(RAG)时是直接调用这个函数,还是说需要修改这个process函数?如果需要修改,应该如何修改?

Yusifu commented 2 months ago

直接调用process函数即可