效果展示(环境依赖请参看上一篇文章):
qa.json(示例知识):
测试结果:
引言
在构建智能问答系统时,常常遇到用户提问方式多样化的问题。即使问题本质相同,表达方式可能千差万别。为了提高搜索和匹配的准确性,我们需要对原始问题进行扩展,即生成多个同义表达。这有助于增强向量检索的召回能力,从而提升问答系统的性能。
Demo的目标是基于 Hugging Face 预训练模型和 FAISS 向量数据库,实现高效的知识检索,支持对用户问题的同义扩展,并通过向量搜索提供最佳答案。
问题分析
在传统的基于关键字匹配的问答系统中,用户的查询必须与数据库中的问题文本完全匹配,否则无法找到答案。这样的方法存在以下缺陷:
- 用户表达多样性:相同的问题可以有多种不同的提问方式,例如“天气怎么样?”与“今天的天气如何?”
- 查询灵活性不足:固定的问答库难以覆盖所有可能的提问方式,导致问答系统容易失配。
- 检索准确度低:单纯的关键字匹配容易受到语序、停用词等因素影响。
为了解决这些问题,我们需要构建一个基于语义的查询扩展和高效的向量检索系统。
解决方案
本项目采用以下方法来优化问答系统的性能:
- 生成同义表达:
- 使用 Hugging Face 预训练的大模型(Qwen1.5-1.8B)生成不同的问法。
- 通过 prompt 设定规则,确保生成的问法保持原意但表达不同。
- 构建向量数据库:
- 采用 BAAI/bge-large-zh 作为嵌入模型,将问题转换为向量。
- 使用 FAISS 存储和索引这些向量,提高检索效率。
- 语义匹配优化:
- 通过向量相似度搜索,而非简单的关键字匹配,来提高查询命中率。
- 设定合理的相似度阈值,减少无关答案。