场景化应用实战系列六:检索问答系统
目录
景化应用实战系列六:检索问答系统
一、目标设定
二、关键知识点梳理
三、案例讲解与实战操作
1. 数据准备与预处理
2. 倒排表构建
3. 文本相似度计算
4. 检索问答系统实现
5. 系统优化与改进
一、目标设定
构建一个高效的检索问答系统,能够快速准确地回答用户的问题,提升用户体验和信息检索效率。
二、关键知识点梳理
-
倒排表构建
-
理解倒排表的基本概念和原理,了解如何通过分词和建立索引实现倒排表。
-
掌握倒排表在文本检索中的应用,能够利用倒排表实现快速的文本检索功能。
-
-
文本相似度计算
-
学习文本相似度计算的方法,如余弦相似度、Jaccard 相似度等。
-
能够将文本相似度计算应用于文本匹配和检索,以提高检索的准确性和相关性。
-
-
检索问答系统实现
-
整合倒排表和文本相似度计算,构建完整的检索问答系统。
-
实现对用户输入问题的理解、分析和检索,以及对检索结果的处理和回答生成。
-
-
优化与改进
-
探索倒排表和文本相似度计算的优化方法,提高检索效率和准确性。
-
持续改进问答系统,以更好地满足用户需求和提高用户体验。
-
三、案例讲解与实战操作
1. 数据准备与预处理
import json
import jieba# 加载知识库数据
with open('knowledge_base.json', 'r', encoding='utf-8') as f:knowledge_base = json.load(f)# 文本预处理函数
def preprocess_text(text):# 分词segs = jieba.lcut(text)# 去除停用词(假设已有一个停用词列表 stopwords)filtered_segs = [word for word in segs if word not in stopwords]return filtered_segs# 预处理知识库中的问题和答案
stopwords = set(line.strip() for line in open('stopwords.txt', 'r', encoding='utf-8').readlines())
for item in knowledge_base:item['question'] = preprocess_text(item['question'])item['answer'] = preprocess_text(item['answer'])
2. 倒排表构建
# 构建倒排表
inverted_index = {}
for doc_id, item in enumerate(knowledge_base):for word in item['question']:if word not in inverted_index:inverted_index[word] = []inverted_index[word].append(doc_id)# 查看倒排表
for word in inverted_index:print(f"词: {word}, 文档列表: {inverted_index[word]}")
3. 文本相似度计算
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity# 示例文本相似度计算
def calculate_similarity(text1, text2):# 将文本转换为 TF-IDF 向量vectorizer = TfidfVectorizer()tfidf_matrix = vectorizer.fit_transform([text1, text2])# 计算余弦相似度similarity = cosine_similarity(tfidf_matrix[0], tfidf_matrix[1])return similarity[0][0]# 示例:计算两个文本的相似度
text1 = '如何构建倒排表'
text2 = '倒排表的构建方法'
similarity = calculate_similarity(text1, text2)
print(f"文本相似度: {similarity}")
4. 检索问答系统实现
# 检索问答系统函数
def retrieval_qa_system(user_question):# 预处理用户问题processed_question = preprocess_text(user_question)# 根据倒排表获取相关文档related_docs = set()for word in processed_question:if word in inverted_index:related_docs.update(inverted_index[word])# 如果没有相关文档,返回默认回答if not related_docs:return "抱歉,我没有找到相关的信息。"# 计算用户问题与相关文档的相似度max_similarity = -1best_answer = ""for doc_id in related_docs:doc_text = ' '.join(knowledge_base[doc_id]['question'])similarity = calculate_similarity(user_question, doc_text)if similarity > max_similarity:max_similarity = similaritybest_answer = ' '.join(knowledge_base[doc_id]['answer'])return best_answer# 示例:用户提问
user_question = "如何计算文本相似度"
answer = retrieval_qa_system(user_question)
print(f"用户问题: {user_question}")
print(f"系统回答: {answer}")
5. 系统优化与改进
# 更新倒排表
def update_inverted_index(knowledge_base):inverted_index = {}for doc_id, item in enumerate(knowledge_base):for word in item['question']:if word not in inverted_index:inverted_index[word] = []inverted_index[word].append(doc_id)return inverted_index# 定期更新知识库和倒排表
def update_knowledge_base_and_inverted_index():# 假设有一个函数可以获取最新的知识库数据latest_knowledge_base = get_latest_knowledge_base()# 预处理更新后的知识库for item in latest_knowledge_base:item['question'] = preprocess_text(item['question'])item['answer'] = preprocess_text(item['answer'])# 更新倒排表inverted_index = update_inverted_index(latest_knowledge_base)return latest_knowledge_base, inverted_index# 示例:优化后更新系统
knowledge_base, inverted_index = update_knowledge_base_and_inverted_index()
相关文章:
场景化应用实战系列六:检索问答系统
目录 景化应用实战系列六:检索问答系统 一、目标设定 二、关键知识点梳理 三、案例讲解与实战操作 1. 数据准备与预处理 2. 倒排表构建 3. 文本相似度计算 4. 检索问答系统实现 5. 系统优化与改进 一、目标设定 构建一个高效的检索问答系统,能…...
选择合适的AI模型:解析Trae编辑器中的多款模型及其应用场景
在当今数字化时代,人工智能技术飞速发展,各种AI模型层出不穷,为人们的工作和生活带来了极大的便利。Trae编辑器作为一款集成了多种先进AI模型的工具,为用户提供了丰富的选择,以满足不同场景下的多样化需求。本文将深入…...

已经 上线 Vue 项目 国际化 i18n 中译英
省流说明:本文不是把项目中译英,只是抽取js、vue文件里的中文到JSON文件中,en.json里的value还是需要自己翻译成英文 ### 安装 `npm install vve-i18n-cli -D` ### package.json 里添加脚本命令,简化命令使用 ```json { "scripts": { "i18n": …...

RISC-V 开发板 MUSE Pi Pro Gstreamer 编码UVC及MIPI CSI摄像头视频流
视频讲解: RISC-V 开发板 MUSE Pi Pro Gstreamer 编码UVC及MIPI CSI摄像头视频流 Gstreamer 在视频编码、解码、保存等场景下非常常用,其基于插件化的架构,可以玩的很花,进迭时空的Spacemit GStreamer 支持 spacemitdec 专有插件&…...
Android 直播播放器FFmpeg静态库编译实战指南(NDK r21b)
一、环境准备与验证 1.1 必要组件安装 # Ubuntu环境依赖 sudo apt update sudo apt install -y git make automake autoconf libtool pkg-config curl unzip# NDK r21b下载 mkdir -p ~/android && cd ~/android wget https://dl.google.com/android/repository/andro…...

【RA-Eco-RA2L1-48PIN】ADC 电压表
【RA-Eco-RA2L1-48PIN】ADC 电压表 本文介绍了 RA-Eco-RA2L1-48PIN 开发板通过瑞萨 e2 Studio 灵活软件包(FSP)编程实现 ADC 串口采集电压的项目设计,包括 串口通信、打印字符串、UART 和 ADC 配置、关键代码、ADC 电压转换、电压值串口打印…...
Oracle 数据文件被删除后使用rman备份恢复过程
有个环境,因空间使用率100%,现场直接误删了数据文件,log记录恢复过程下 SQL > select file#,name,checkpoint_change# from v$datafile; FILE# NAME CHECKPOINT_CHANGE# ------…...

KS107BG型超声体模的结构及性能
KS107BG型超声体模适用于工作频率在5~10MHz之间的B超设备的性能检测。 一、外部结构 体模外壳和底座由有机玻璃加工组装而成,底面板上开有两个直径36mm的圆孔,其上封有2mm厚的真空橡皮,作为抽气及注射保养液的入口。体模外壳外表…...
visual studio重新安装如何修改共享组件、工具和SDK路径方案
安装了VsStudio后,如果自己修改了Shared路径,当卸载旧版本,需要安装新版本时发现,之前的Shared路径无法进行修改,这就很坑了 但是却遇到了路径无法修改的问题…真让人头大,当然不修改也可以,有时候&#x…...

目标检测评估指标mAP详解:原理与代码
目标检测评估指标mAP详解:原理与代码 目标检测评估指标mAP详解:原理与代码一、前言:为什么需要mAP?二、核心概念解析2.1 PR曲线(Precision-Recall Curve)2.2 AP计算原理 三、代码实现详解3.1 核心函数ap_pe…...

【风控】模型算法区分度指标KS
一、KS指标的定义原理 背景 KS(Kolmogorov–Smirnov)原本用于检验样本分布与理论分布或两个样本分布是否一致。风控建模中,将“好样本”(Good)与“坏样本”(Bad)的模型输出概率看作两组经验分布…...
道可云人工智能每日资讯|浙江省人民政府印发《关于支持人工智能创新发展的若干措施》
道可云元宇宙每日简报(2025年5月21日)讯,今日元宇宙新鲜事有: 浙江省人民政府印发《关于支持人工智能创新发展的若干措施》 为抢占人工智能发展制高点,打造全球人工智能创新发展高地,浙江省人民政府于近日…...

win11下jenkins+docker+maven自动部署springboot项目
win11下jenkinsdockermaven自动部署springboot项目 一、前置软件安装二、jenkins配置三、springboot项目准备四、jenkins打包部署项目到本地docker中五、jenkins打包部署项目到远程服务器docker中 一、前置软件安装 docker安装 需要开启wsl,以管理员身份运行docke…...
密码学标准(Cryptography Standards)介绍
密码学标准(Cryptography Standards)是为确保信息安全传输、存储和处理而制定的一系列技术规范和协议,广泛应用于通信、金融、互联网等领域。以下从分类、主流标准、应用场景和发展趋势四个方面进行详细介绍: 一、密码学标准的分类 密码学标准可根据技术原理和应用场景分…...
2 卡尔曼滤波
卡尔曼滤波是啥? 卡尔曼滤波就像是一个“智能猜谜大师”,专门用来在不确定的情况下,算出最接近真实值的答案。 核心思想: 预测(猜):根据之前的经验,猜现在大概是什么状态ÿ…...

《决策科学与艺术》No1: 决策树:概念、原理、发展历史、特点及应用
决策树:概念、原理、发展历史、特点及应用 摘要 决策树是一种广泛使用的机器学习和决策分析方法,以其可解释性、简洁性和多功能性著称。本文全面介绍了决策树的概念基础、基本原理、发展历程、显著特征及其在商业、医疗、金融和工程等多个领域的典型应用…...
手机合集(不定期更新)
一、华为手机: 1.华为手机自助维修的方法: https://blog.csdn.net/humors221/article/details/145946128 2.华为手机实用功能介绍: https://blog.csdn.net/humors221/article/details/132514011 3.华为手机清理大数据的方法:…...
掌握正则表达式:从基础语法到工程实践
引言:正则表达式的力量与边界 在信息爆炸的数字时代,正则表达式(Regular Expression) 作为文本处理的“瑞士军刀”,已成为开发者、数据分析师、运维工程师等群体的核心技能。它能用简洁的符号逻辑描述复杂…...
Prometheus 基础入门文档
目录 概述 核心组件详解 Prometheus Server Exporters Alertmanager 存储解决方案 安装与配置 安装方法 基本配置 示例配置文件 数据模型与查询语言 数据模型 PromQL 查询语言 示例查询 告警系统 告警规则 示例告警规则 Alertmanager 配置 示例 Alertmanager…...
【数据分析】什么是特征蒸馏?
引言 —— “ 在数据洪流中提炼真金——解密特征蒸馏的艺术。” 在数据爆炸的时代,我们每天产生的信息量已远超人类处理能力的极限。当企业拥有百万维的用户行为数据,医疗研究者面对TB级的基因测序记录,工程师试图从千万张图像中识别关键模式…...

【苍穹外卖】Day01—Mac前端环境搭建
目录 一、安装Nginx (一)安装Homebrew (二)Homebrew安装Nginx 1. 执行安装命令: 2. 验证安装: (三)启动与停止Nginx 二、配置Nginx 1. 替换nginx.conf 2. 替换html文件夹 三…...
Apollo10.0学习——planning模块(9)之参数详解一
planning.conf --flagfilemodules/common/data/global_flagfile.txt # 加载全局通用配置,包含基础运行参数 --traffic_rule_config_filenamemodules/planning/planning_component/conf/traffic_rule_config.pb.txt # 交通规则配置文件,定义信号灯、停车…...
Python-多进程编程 (multiprocessing 模块)
目录 一、创建进程1. Process 的语法结构2. 进程不共享全局变量 二、进程间通信1. 队列通信2. 管道通信 三、进程池1. 常用函数2. 进程池中的 Queue 四、应用:复制文件夹(多进程版)五、守护进程和进程同步六、注意事项 通过使用 multiprocess…...
GraphQL在.NET 8中的全面实践指南
一、GraphQL与.NET 8概述 GraphQL是一种由Facebook开发的API查询语言,它提供了一种更高效、更灵活的替代REST的方案。与REST不同,GraphQL允许客户端精确指定需要的数据结构和字段,避免了"过度获取"或"不足获取"的问题。…...
在mobaxterm下面执行shell脚本报错
关键步骤:在 MobaXterm 的 SSH 会话中强制指定 Bash 解释器 若你曾通过 高级 SSH 设置中的「执行命令」 填写 /bin/bash 解决脚本问题,以下是具体操作和原理说明: 1. 设置位置 打开 MobaXterm,选择需要配置的 SSH 会话࿰…...
系统集成项目管理工程师学习笔记之启动过程组
第十章 启动过程组 制定项目章程 定义 制定项目章程是编写一份正式批准项目并授权项目经理在项目活动中使用组织资源的文件的过程。 正式批准的项目文件 作用 1、明确项目与组织战略目标之间的直接联系 2、确立项目的正式地位 3、展示组织对项目的承诺 本过程仅开展一…...
OceanBase数据库全面指南(数据操作篇DML)
文章目录 一、OceanBase插入数据全指南1.1 INSERT语句基础用法1.2 高级INSERT用法1.2.1 插入查询结果1.2.2 多表插入1.2.3 条件插入1.3 INSERT性能优化技巧1.3.1 批量插入优化1.3.2 使用APPEND提示1.3.3 并行插入二、OceanBase批量插入优化2.1 多行插入语法详解2.2 批量绑定技术…...
深入解析AI中的Prompt工程:从理论到实践
目录 引言:Prompt在AI中的核心地位 第一部分:Prompt基础理论 1.1 什么是Prompt 1.2 ICIO框架:Prompt设计的结构化方法 1.3 为什么需要Prompt 1.4 Prompt的终极价值 第二部分:Prompt工程实践 2.1 Prompt工程概述 2.2 Prompt工程的具体内容 2.3 Prompt Engineer的工…...

软考中级软件设计师——设计模式篇
一、设计模式核心分类 设计模式分为 3 大类,共 23 种模式(考试常考约 10-15 种): 分类核心模式考试重点创建型模式工厂方法、抽象工厂、单例、生成器、原型单例模式的实现(懒汉、饿汉)、工厂模式的应用场…...
matlab二维随机海面模拟
二维随机海面模拟是一种重要的技术,广泛应用于海洋工程、船舶设计、雷达系统和光学通信等领域。利用蒙特卡罗方法结合二维海浪功率谱模型,可以生成符合实际海面特性的随机表面。 步骤 1: 定义海浪功率谱模型 海浪功率谱模型描述了海浪能量在不同频率和…...