当前位置: 首页 > news >正文

20250715问答课题-基于BERT与混合检索问答系统

1. 引言

构建一个基于BERT与混合检索策略的智能问答系统,通过深度学习与传统检索技术的融合,解决了心法领域知识检索中的三个关键问题:(1)专业术语的语义理解不足;(2)问答匹配精度低;(3)检索结果多样性差。

2. 方法

2.1. 深度语义理解模块

BERT是预训练语言模型,基于 Transformer 架构,通过双向 Transformer 编码来学习文本的深层语义表示。BERT 的核心创新在于其双向训练方式,能够同时理解上下文的关系,常用于多项自然语言处理任务。

采用BERT最后四层隐藏状态的加权融合策略,将问题转换为向量表示。

  1. 选取了 BERT 模型的最后四层隐藏状态
  2. 定义了各层的权重( [0.15, 0.25, 0.35, 0.25]),并进行了归一化处理
  3. 提取了各层隐藏状态中 CLS 标记的向量表示
  4. 对各层的 CLS 向量进行加权求和

2.2. 混合检索算法

混合检索算法是结合符号检索(如关键词匹配、规则匹配)和语义检索(如向量匹配、深度学习模型)优势的检索技术,旨在平衡检索的准确性、召回率和语义理解能力。它解决了单一检索方式的局限性,如关键词检索无法理解语义,纯语义检索可能遗漏精确匹配结果;应用于信息检索、推荐系统、问答系统等领域。

2.2.1. 语义-关键词协同架构

既保证对 “显性关键词” 的精准匹配,又能理解 “隐性语义”(如同义词、上下文关联),最终提升检索的召回率和准确率,即不漏掉相关结果、返回更相关的结果。

语义检索通道:

  • 原理:基于 “隐性语义理解”,将查询和文档转换为向量,通过向量相似度匹配语义相关内容,不依赖字面关键词。
  • 优势:能理解同义词、上下文语义、跨语言检索。
  • 局限性:可能引入语义相似但无关的 “噪声结果”(如 “猫的饲养方法” 匹配 “狗的训练技巧”)、计算成本高于关键词检索。

关键词检索通道:

  • 原理:基于 “显性符号匹配”,聚焦查询中的核心关键词,通过精确匹配或模糊匹配定位相关内容。
  • 优势:速度快、可解释性强、对专有名词、人名、地名的检索精准。
  • 局限性:无法处理同义词、语义歧义、长句上下文关联(代词的指向)

2.2.2. 权重分配策略

2.3. 智能去重模块

2.3.1. 三重去重机制

内容哈希级去重:

  • 基于SimHash算法检测字面重复
  • 设置5词滑动窗口处理近义表达(如"如何静心"与"怎样静心")

语义级去重:

  • 93%相似度阈值基于实验确定:低于该值可能丢失合理变体,高于则产生冗余
  • 采用余弦相似度+曼哈顿距离的双重度量

动态阈值扩展:

  • 初始相似度阈值设为0.85
  • 当返回结果不足5条时,以0.02为步长逐步放宽至0.75
  • 确保在任何情况下都能返回适度数量的相关结果
2.3.2. 语义相似度判定

采用双阈值判定策略:

  1. 余弦相似度>0.93
  2. 曼哈顿距离<0.15

同时满足上述两点才判定为重复

3. 实验结果

创建虚拟环境并激活

python -m venv venv
venv\Scripts\activate

分步安装依赖

#升级pip工具
python -m pip install --upgrade pip
#安装核心依赖
pip install torch==2.0.1+cpu -f https://download.pytorch.org/whl/torch_stable.html
pip install transformers==4.30.0 jieba==0.42.1 numpy==1.24.2 flask==2.3.2

准备

#确保BERT目录存在
if not exist BERT mkdir BERT
# 首次运行预加载
python -c "from transformers import BertModel; BertModel.from_pretrained('bert-base-chinese').save_pretrained('./BERT')"

运行

python xinfa_QA.py

4. 总结

本周完成了戴雄斌学长的中华心法问答系统的复现,对其中的一些方法实现基本了解,了解了多层BERT向量融合、混合检索算法、三层去重的机制等方法的实现。

http://www.lryc.cn/news/589115.html

相关文章:

  • 论文阅读:arxiv 2025 A Survey on Data Contamination for Large Language Models
  • 第八章,应用题
  • OpenCV 对数变换函数logTransform()
  • 【机器学习】第一章 概述
  • 【机器学习】第二章 Python入门
  • 【安卓笔记】RxJava之flatMap的使用
  • PyTorch笔记6----------神经网络案例
  • 【人工智能99问】神经网络的工作原理是什么?(4/99)
  • Android中Launcher简介
  • MySQL索引与事务详解:用大白话讲透核心概念
  • compose、 pipe 组合函数实现
  • 从底层技术到产业落地:优秘企业智脑的 AI 革命路径解析
  • Basilisk库教程(二)
  • QT——QList的详细讲解
  • SpringBoot3.0 +GraalVM17 + Docker
  • AI大模型训练相关函数知识补充
  • MongoDB基础增删改查命令
  • vscode配置运行完整C代码项目
  • B/S 架构通信原理详解
  • 高标准农田气象站的功能
  • 亚矩阵云手机:破解 Yandex 广告平台多账号风控难题的利器
  • 云服务器如何管理数据库(MySQL/MongoDB)?
  • 《大数据技术原理与应用》实验报告四 MapReduce初级编程实践
  • Keepalived双机热备概述
  • 死锁问题以及读写锁和自旋锁介绍【Linux操作系统】
  • Sersync和Rsync部署
  • 免杀学习篇(1)—— 工具使用
  • Dify的默认端口怎么修改
  • 算法学习day16----Python数据结构--模拟队列
  • Nuxt3宝塔PM2管理器部署