Skip to content

Instantly share code, notes, and snippets.

@real-jiakai
Last active February 23, 2025 01:03
Show Gist options
  • Save real-jiakai/beb5623c68c8a8fd647183b127733b58 to your computer and use it in GitHub Desktop.
Save real-jiakai/beb5623c68c8a8fd647183b127733b58 to your computer and use it in GitHub Desktop.
各位老师、同学们好,我汇报的论文为《基于Sailor2和RAG的东博会新闻问答系统》。
---
分享由5部分组成:
第一部分介绍论文的研究背景;
第二部分介绍相关工作概述;
第三部分介绍问答系统的设计与实现;
第四部分介绍设计相应的实验对系统的各项性能指标进行评估;
最后给出总结与展望
---
东盟博览会始于2004年,每年定期在广西南宁举行,是东盟与中国贸易的重要平台。
有以下信息处理挑战:
1、每年有关东博会的新闻报道数量庞大,这既是挑战也是机遇,给我们提供了丰富的语料数据支持。
2、多语言需求,试想一下,如果有一个这样的问答系统,
东盟10国的用户输入有关东博会新闻的母语提问,系统能反馈
与之相匹配的语言新闻回复,并附上引文支持,这必定有助于该用户快速了解东博会的相关动态。
3、实时性要求:新闻更新频繁,实时性至关重要。
---
基于上述挑战,我们提出了一个基于Sailor2和RAG的东博会新闻问答系统。
在该系统中,我们结合混合检索机制提升检索质量,通过工程化的系统设计,实现了多语种新闻智能问答。
如用户用泰语提问东博会相关新闻,能得到泰语回复,并在回复末尾,附上引文支持。
研究的意义有:
1、促进中国-东盟信息共享
2、丰富LLM在新闻领域应用
3、构建了高质量东博会新闻数据集
---
首先来简要介绍一下Sailor2这个专门针对东南亚优化的大语言模型。
它由Sea AI Lab等机构联合发起,专注东南亚语言支持,它的构建基于Qwen2.5模型。
目前Sailor2对于东南亚语言支持较好的前三甲为:
- 越南语
- 印尼语
- 泰语
- ......
其余的小语种由于语料稀缺,支持力度不够。
---
RAG【检索增强生成】三阶段演进为:
- 常规RAG
- 高级RAG
- 模块化RAG
当然后续RAG还在不断发展【如GraphRAG等】,但大体而言有这主要的3个阶段。
---
接下来介绍新闻问答研究现状:
- 2016年,微软开源NewsQA数据集,推动了新闻问答研究的发展。
- 2023年,国内学者构建了新闻视频数据集,做新闻视觉问答。
- 2023年,国外学者,基于BERT模型,做了波斯语新闻问答【当然,这主要还是抽取式问答】.
- 2024年,国外学者,结合LLM+RAG,在多语种新闻语料支撑下,做了多语言新闻问答。
可以看到现有的研究存在以下不足:
- 东南亚语言相关研究欠缺
- 缺乏专门的领域数据集
- 实时性问题待解决
---
这是东博会新闻问答系统的流程图。
首先会有领域路由来过滤用户的提问,如果用户提问不属于东博会新闻领域,则引导用户提问与之相关的问题;
紧接着会进入查询路由,如果用户提问涉及一些属性信息,比如最新的东博会5条新闻,则会进行结构化查询;
如果用户提问属于语义信息,则进行向量式检索。
最终将查询的结果,连带提示词模版发送给Sailor2模型生成回复。
这边需要说明的点有:
- Sailor2 LLM经过微调步骤,用了身份认知等数据集来使得该LLM更契合这个场景。
- 领域路由和查询路由都采用了基于语义的路由,如果用户提问是小语种,会先让Sailo2将用户提问转换为中文,并用对应的embedding模型,
对中文提问向量化,将向量化后的结果和预制的规则的向量进行余弦相似度的计算,从而准确识别用户提问的领域和查询类型。
之所以会先将用户小语种提问转为中文,是因为多语种embedding模型对小语种的支持力度较差,虽然写明了支持,但实际应用中会难以精确进行路由匹配。
而转为中文,用中文提问和预制的中文规则语义匹配,则能较好地实现路由功能。
---
新闻数据全部取自东盟博览会官网,官网的新闻搜罗国内外媒体对于东博会新闻的高质量报道,有助于新闻问答研究的展开。
用脚本爬取的新闻数据包含html标签等噪音元素,这边我们采用了深度求索DeepSeek的模型进行清除,提取出干净的文本数据。
这是东博会新闻来源分布饼图,右侧是对于饼图的说明。
截至2024年12月12日,共收集了5897条新闻数据。
用DeepSeek进行html标签去除的过程中,发现有一小部分新闻为图片新闻或者是视频新闻。
针对图片新闻,我们将相应的新闻图片发送给强大的多模态LLM,让其生成图片新闻对应的描述,经人工校验后,将描述作为新闻内容存储。
而对于视频新闻,我们则采取用新闻摘要/新闻标题来替代新闻内容的方式。
经上述步骤,并人工二次校验后,数据预处理工作初步完成。
---
紧接着进行数据索引化操作。
新闻数据的完整版本存储到postgresql数据库中,而新闻对应的向量化数据存储到向量数据库Milvus中,之所以分开存储,在于
Milvus的字段最长是65535字符,而东博会新闻数据中有一些新闻内容超出了该限制,故采取了分开存储的方式。
Postgresql存储了新闻的完整信息,主要字段:标题、链接、时间、摘要等。
Milvus存储了新闻向量化字段信息,会先用一些分块策略对新闻文本进行分块,得到每一个新闻文本块,
再由开源的Embedding模型生成该新闻文本块对应的密集向量和稀疏向量,用于后续的混合检索。
---
接下来就是刚才流程图中描述的检索策略模块,用户提问经查询路由后,
如果选择进入结构化查询,则将用户提问,连带预先设置的提示词模版,发送给开源的Qwen2.5-Coder模型,由其生成
对应的SQL查询语句,在Postgresql数据库中执行,得到相应的结果,紧接着将对应的结果和用户原始提问加入到提示词模版发送给Sailo2进行回复生成。
当然其实这边也是存在隐患的,比如SQL语句不准确会导致无法得到结构化查询结果。但我们精心设计了对应的提示词模版,将数据库的详细信息加入到提示词模版中,
与此同时,Qwen2.5-Coder在去年12月份是开源LLM中的SOTA模型,
其生成的SQL语句准确率较高,这些举措都有助于降低隐患的发生。
如果选择进入向量式检索,则将用户提问中文版向量化,在milvus向量数据库中进行混合检索,将密集向量和稀疏向量的两路检索结果用倒数排名融合排序器进行融合,
得到初步排序的最相关的Top-10片段,再经由配套的重排序模型从语义层面进行进行精排,得到与用户提问最相关的Top-5片段,连带用户原始提问加入提示词模版,发送给Sailor2进行处理回复。
---
用两个例子来说明刚才的检索策略模块,这边的例子均只是系统原型。
结构化查询演示:
用户用泰语提问:“东博会最新的5条新闻是什么?”
将用户提问发送给Sailor2模型,Sailor2检测到用户提问为东南亚小语种,于是先将其翻译为中文版本的提问。
将中文版本的提问和领域路由的预制中文规则进行语义匹配,发现属于东博会新闻范畴,于是进入查询路由模块,将用户的中文提问与预制的规则进行语义匹配,发现查询类型属于结构化查询,则将用户中文版提问
发送给Sailo2模型,由其生成对应的SQL查询语句,在Postgresql数据库中执行,得到相应的结果,紧接着将对应的结果和用户原始提问加入到提示词模版发送给Sailo2进行回复生成。
Sailor2就会反馈给用户东博会最新的5条新闻的泰语报告。
向量式检索演示:
用户用泰语提问:“中国和泰国之间有哪些文化交流?”
将用户提问发送给Sailor2模型,Sailor2检测到用户提问为东南亚小语种,于是先将其翻译为中文版本的提问。
将中文版本的提问和领域路由的预制中文规则进行语义匹配,发现属于东博会新闻范畴,于是进入查询路由模块,将用户的中文提问与预制的规则进行语义匹配,发现查询类型属于向量式检索,则将用户中文版提问
向量化,在milvus向量数据库中进行混合检索,将密集向量和稀疏向量的两路检索结果用倒数排名融合排序器进行融合,得到初步排序的最相关的Top-10片段,
再经由配套的重排序模型从语义层面进行进行精排,得到与用户提问最相关的Top-5片段,连带用户提问加入提示词模版,发送给Sailor2进行处理回复。
Sailor2就会反馈给用户中泰文化交流的泰语报告。并附有引文支持。
---
紧接着我们设计实验来说明该系统的健壮性:
用DeepEval框架设计了300条测试数据集,测试数据集也是由DeepSeek的chat模型进行生成。
测试数据集中包含了东博会的10大主题,每个主题下有30条测试数据。总共300条测试数据集。
为了确保测试数据集质量,我们设置了问题质量阈值0.8。
与此同时,为了符合新闻问答场景,测试数据集的问题类型的分布为:
- 10%的推理问题
- 30%的多语境问题
- 40%的具体化问题
- 20%的比较类问题
毕竟新闻问答追求的是具体化、真实回答。
这是一条测试数据集样例。
DeepSeek的chat模型会生成问题提问作为input字段,生成问题答案作为expected_output字段,参考的新闻来源作为context字段,新闻链接作为source_file字段。
真实的输出字段actual_output由RAG流程填充,用于后续的评估。
测试数据集的生成和后续RAG流程的评估均由DeepSeek的chat模型生成。
---
我们设计了4种分块策略,分别是:
- 小块滑动窗口
- 大块滑动窗口
- 父子分块
- 语义分块
---
评价指标有:
- 上下文精确度
- 上下文召回率
- 回答相关度
- 可信度
其中在中文语境中的性能评估如图所示。
---
紧接着我们将测试数据集的一些字段,如提问等翻译为泰语,印尼语等小语种,用于测试系统在小语种环境下的性能。
评估指标的数值见表。
主要发现:
- 整体表现接近中文水平
- 语义分块策略普遍最优
- 泰语、越南语、印尼语表现相近
性能分析:
✓ 上下文精确度:>0.90
✓ 上下文召回率:>0.83
✓ 回答相关度:>0.79
✓ 可信度:>0.70
需要指出的是:这仅仅是Sailor2-8B大小模型的评估效果,如果需要进一步提升性能【比如可信度等指标】可以用开源的更大尺寸模型进行实验。
---
最后总结一下研究成果:
- 首次将Sailor2应用于东博会新闻领域
- 构建混合检索的RAG框架
- 构建高质量东博会新闻数据集
系统特色见右侧。
---
未来展望:
数据层面:
......
系统层面:
目前该问答系统仅仅是一个原型,建立相应的反馈机制可以方便系统的不断迭代。
模型层面:
DeepSeek在春节前后爆火,R1类的推理模型不直接参与RAG检索过程,让其在可靠的上下文中工作,生成对应的用户提问报告。
......
当然还有很多可以优化改进的点。我的汇报就是这些,谢谢大家!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment