二、使用langchain搭建RAG:金融问答机器人--数据清洗和切片
选择金融领域的专业文档作为源文件
这里选择 《博金大模型挑战赛-金融千问14b数据集》,这个数据集包含若干公司的年报,我们将利用这个年报搭建金融问答机器人。
具体下载地址 这里

git clone https://www.modelscope.cn/datasets/BJQW14B/bs_challenge_financial_14b_dataset.git
具体目录如下:

这里直接使用已经识别的纯文本数据,即pdf_txt_file目录下的文件。
选择词向量模型
这里选用m3e-base。M3E是专注于中文文本处理,具有强大的文本处理能力和灵活的部署选项,适合资源受限或需要私有化的应用场景
这里

git clone https://www.modelscope.cn/Jerry0/m3e-base.git
读取与清洗数据
1, 读取文件列表
import osdir_path = "bs_challenge_financial_14b_dataset/pdf_txt_file"
all_files = os.listdir(dir_path)
print(all_files)

2,清洗数据
从结果我们可以观察到文件名都是乱码,我们需要把文件名改成公司名,可以一看就看出是哪个公司的年报,并且在后续处理的时候把公司名加入到每个chuck中,在后续检索的时候对应指定公司的query就能匹配这个公司相关的一系列信息。
(1),读取数据
import re
for file in all_files:with open(os.path.join(dir_path, file), "r",encoding = "utf-8") as f:lst = f.readlines()pattern = ".*发行人.*股份有限公司\n"name = "" for line in lst[-20:]: if re.match(pattern, line): name = linename = name.split(":")[-1] breakif name == "" :pattern = ".*股份有限公司\n"for line in lst: if re.match(pattern, line): name = lineif ":" in name:name = name.split(":")[-1] break name = name.strip() #找到公司名后:创建一个新文件夹存放if name != "" : print(file,name)try:with open("financial_dataset/{}.txt".format(name), "w",encoding = "utf-8") as f:for line in lst:f.write(line)except Exception as e:print(e)continue
(2)经过研究,文本里会含有多个股份有限公司,所以想过滤一次“.*发行人.*股份有限公司”,再过滤“.*股份有限公司” 。然后把新文件放到独立的目录下
import osdir_path = "financial_dataset"
files = os.listdir(dir_path)
files

(3)然后对文件名做最后的筛选,公司名称一般不超过20个字符。
new_files = []
for item_file in files:if len(item_file) > 20:continueelse:if " " in item_file:continueif "、" in item_file:continuenew_files.append(item_file)
new_files

至此数据清洗完毕。如果还有其他需求可以自行再根据规则清洗。
读取无结构文本内并切片
1,使用UnstructuredFileLoader加载文件
def get_all_text(file_list):documents = []#遍历所有目标文件#使用tqdm可视化库,以时间轴的形式展示出来for one_file in tqdm(file_list):print(one_file)file_suffix = one_file.split(".")[-1]if file_suffix == "txt":loader = TextLoader(one_file,encoding = "utf-8")else:continuedocuments.extend(loader.load())return documentsfile_list = [os.path.join(dir_path, item) for item in new_files]
docs = get_all_text(file_list)

2,数据切片
由于1个文档的内容比较多,超过大模型的上下文窗口限制,所以需要把数据切片。
调用langchain里的text_splitter分割为chunk,每个chunk设置为350个大小,同时overlap为150,也就是前一个chunk的后150个字符跟后一个chunk的前150个字符是一样的。通过这样的方式避免在分chunk的时候遗漏相关信息
from langchain.text_splitter import RecursiveCharacterTextSplittertext_splitter = RecursiveCharacterTextSplitter(chunk_size=350, chunk_overlap=150)
split_docs = text_splitter.split_documents(docs)
print(split_docs[0])

可以看page_content里没公司名称,但我们在query的时候希望与公司相关,所有把公司名也放到page_content里
for one_chunk in split_docs:one_chunk.page_content = one_chunk.metadata["source"].split("/")[-1] + one_chunk.page_content + one_chunk.metadata["source"].split("/")[-1]
print(split_docs[0])

数据向量化并保存到向量数据库中
使用词向量模型把前面切分的chunk转化成词向量,保存到向量数据库中。
from langchain_huggingface import HuggingFaceEmbeddings
embeddings = HuggingFaceEmbeddings(model_name="m3e-base") from langchain.vectorstores import Chroma
# 定义持久化路径
persist_directory = 'data_base/chroma'
# 加载数据库
vectordb = Chroma.from_documents(documents=split_docs[:20000],#由于自己电脑性能有限,如果很久没完成的时候,可以重新启动执行,改成取1000或者500。记得删除已经生成的向量数据库文件。embedding=embeddings,persist_directory=persist_directory # 允许我们将persist_directory目录保存到磁盘上
)
会自动保存到磁盘上:

数据清洗和切片已完毕。
相关文章:
二、使用langchain搭建RAG:金融问答机器人--数据清洗和切片
选择金融领域的专业文档作为源文件 这里选择 《博金大模型挑战赛-金融千问14b数据集》,这个数据集包含若干公司的年报,我们将利用这个年报搭建金融问答机器人。 具体下载地址 这里 git clone https://www.modelscope.cn/datasets/BJQW14B/bs_challenge_…...
【Linux】-- linux 配置用户免密登录本机
比如我们要配置用户 app_tom 免密登录本机(SSH 登录自己机器时无需输入密码),你可以按照以下步骤操作: 步骤 1:切换到 app_tom 用户 首先,确保你已经以 app_tom 用户登录,或者切换到该用户&…...
泷羽sec学习打卡-brupsuite8伪造IP和爬虫审计
声明 学习视频来自B站UP主 泷羽sec,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都 与本人无关,切莫逾越法律红线,否则后果自负 关于brupsuite的那些事儿-Brup-FaskIP 伪造IP配置环境brupsuite导入配置1、扩展中先配置python环境2、安…...
【uniapp蓝牙】基于native.js链接ble和非ble蓝牙
【uniapp蓝牙】基于native.js链接ble和非ble蓝牙 uniapp不是仅支持低功耗蓝牙(基础蓝牙通讯不支持),有些可能需要基础蓝牙。我现在同步我的手机蓝牙列表低功耗,基础蓝牙都支持 /*** author wzj* 通用蓝牙模块封装* 搜索 ble 和非…...
.NET Core 各版本特点、差异及适用场景详解
随着 .NET Core 的不断发展,微软推出了一系列版本来满足不同场景下的开发需求。这些版本随着时间的推移逐渐演变为统一的 .NET 平台(从 .NET 5 开始)。本文将详细说明每个版本的特点、差异以及适用场景,帮助开发者更好地选择和使用…...
Linux中自动检测并定时关闭KDialog程序
自动检测并关闭对话框的程序示例 创建并打开KDialog的脚本自动检测并定时关闭KDialog的脚本 创建并打开KDialog的脚本 #!/bin/bash kdialog --msgbox "demo"自动检测并定时关闭KDialog的脚本 #!/bin/bash# Continuously check for kdialog dialog while true; do# …...
CSS学习记录12
CSS浮动 CSSfloat属性规定元素如何浮动 CSSclear属性规定哪些元素可以在清除的元素旁边以及在哪一侧浮动。 float属性 float属性用于定位和格式化内容,例如让图像向左浮动到容器的文本那里。 float属性可以设置以下值之一: left - 元素浮动到其容器…...
【Java基础面试题016】JavaObject类中有什么主要方法,作用是什么?
equals() 作用:用于比较两个对象是否相等。默认实现比较对象的内存地址,即判断两个引用是否指向同一个对象 使用:通常会重写此方法来比较对象的内容 hashCode() 作用:返回对象的哈希值,用整数表示对象。 使用&…...
实践环境-docker安装mysql8.0.40步骤
一、docker安装mysql 8.0.40版本 1、检索镜像版本 docker search mysql:8.0.40 NAME DESCRIPTION STARS OFFICIAL mysql MySQL is a widely used, open-source relation… …...
边缘智能创新应用大赛获奖作品系列一:智能边缘计算✖软硬件一体化,开启全场景效能革命新征程
边缘智能技术快速迭代,并与行业深度融合。它正重塑产业格局,催生新产品、新体验,带动终端需求增长。为促进边缘智能技术的进步与发展,拓展开发者的思路与能力,挖掘边缘智能应用的创新与潜能,高通技术公司联…...
决策树的生成与剪枝
决策树的生成与剪枝 决策树的生成生成决策树的过程决策树的生成算法 决策树的剪枝决策树的损失函数决策树的剪枝算法 代码 决策树的生成 生成决策树的过程 为了方便分析描述,我们对上节课中的训练样本进行编号,每个样本加一个ID值,如图所示…...
蓝桥杯算法训练 黑色星期五
题目描述 有些西方人比较迷信,如果某个月的13号正好是星期五,他们就会觉得不太吉利,用古人的说法,就是“诸事不宜”。请你编写一个程序,统计出在某个特定的年份中,出现了多少次既是13号又是星期五的情形&am…...
MySQL存储引擎-存储结构
Innodb存储结构 Buffer Pool(缓冲池):BP以Page页为单位,页默认大小16K,BP的底层采用链表数据结构管理Page。在InnoDB访问表记录和索引时会在Page页中缓存,以后使用可以减少磁盘IO操作,提升效率。 ○ Page根据状态可以分…...
理解torch函数bmm
基本信息 功能描述 torch.bmm 是 PyTorch 中的一个函数,用于执行批量矩阵乘法(Batch Matrix Multiplication)。它适用于处理一批矩阵的乘法操作,特别适合于深度学习任务中的场景,比如卷积神经网络中的某些层。 参数…...
2024 年的科技趋势
2024 年在科技领域有着诸多重大进展与突破。从人工智能、量子计算到基因组医学、可再生能源以及新兴技术重塑了众多行业。随着元宇宙等趋势的兴起以及太空探索取得的进步,未来在接下来的岁月里有望继续取得进展与突破。让我们来探讨一下定义 2024 年的一些关键趋势&…...
win服务器的架设、windows server 2012 R2 系统的下载与安装使用
文章目录 windows server 2012 R2 系统的下载与安装使用1 windows server 2012 的下载2 打开 VMware 虚拟机软件(1)新建虚拟机(2)设置虚拟机(3)打开虚拟机 windows server 2012(4)进…...
leetcode45.跳跃游戏II
标签:动态规划 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i j] 处:返回到达 nums[n - 1] 的最小跳跃次数。…...
边缘智能创新应用大赛获奖作品系列三:边缘智能强力驱动,机器人天团花式整活赋能千行百业
边缘智能技术快速迭代,并与行业深度融合。它正重塑产业格局,催生新产品、新体验,带动终端需求增长。为促进边缘智能技术的进步与发展,拓展开发者的思路与能力,挖掘边缘智能应用的创新与潜能,高通技术公司联…...
基于语义的NLP任务去重:大语言模型应用与实践
引言 在自然语言处理(NLP)任务中,数据质量是模型性能的关键因素之一。重复或冗余的数据会导致模型过度拟合或浪费计算资源,特别是在大语言模型(如 BERT、GPT 系列等)训练和推理阶段。传统的基于字符匹配的…...
使用阿里云Certbot-DNS-Aliyun插件自动获取并更新免费SSL泛域名(通配符)证书
进入nginx docker,一般是Alpine Linux系统 1. 依次执行命令: sudo docker-compose exec nginx bashapk updateapk add certbot apk add --no-cache python3 python3-dev build-baseapk add python3 py3-pippip3 install --upgrade pippip3 install certbot-dns-ali…...
3步解锁加密音乐:ncmdumpGUI技术解析与实战指南
3步解锁加密音乐:ncmdumpGUI技术解析与实战指南 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换,Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI ncmdumpGUI是一款专为网易云音乐用户设计的NCM文件…...
WLAN——从零到一:深度解析CAPWAP隧道建立与AP上线全流程
1. 初识CAPWAP:无线网络的隐形桥梁 第一次接触CAPWAP协议时,我盯着拓扑图上AP和AC之间的虚线发愣——这条看似简单的连接线背后,竟然藏着无线网络最精妙的控制逻辑。CAPWAP(Control And Provisioning of Wireless Access Points P…...
实战应用:定制专属labelimg,快速生成YOLO格式车辆检测数据集
实战应用:定制专属labelimg,快速生成YOLO格式车辆检测数据集 在计算机视觉项目中,数据标注是模型训练的基础环节。最近我在做一个车辆检测项目时,发现通用的标注工具往往无法完全满足特定需求。比如我需要同时生成PASCAL VOC和YO…...
uni.uploadFile上传图片失败排查:Content-Type与boundary的隐藏陷阱
1. 为什么uni.uploadFile上传图片会失败? 最近在做一个uniapp项目时,遇到了一个让人头疼的问题:使用uni.uploadFile上传图片时,后端死活接收不到文件数据。经过一番排查,发现问题出在Content-Type这个看似简单的请求头…...
Godot引擎资源提取完全指南:从PCK文件到资产复用的技术实践
Godot引擎资源提取完全指南:从PCK文件到资产复用的技术实践 【免费下载链接】godot-unpacker godot .pck unpacker 项目地址: https://gitcode.com/gh_mirrors/go/godot-unpacker 技术挑战速览 核心问题解决方案预览技术价值如何识别有效PCK文件?…...
bilibili-api技术解析:如何解决视频标识符转换核心问题
bilibili-api技术解析:如何解决视频标识符转换核心问题 【免费下载链接】bilibili-api 哔哩哔哩常用API调用。支持视频、番剧、用户、频道、音频等功能。原仓库地址:https://github.com/MoyuScript/bilibili-api 项目地址: https://gitcode.com/gh_mir…...
Linux下objdump反汇编实战:从二进制文件到可读代码的深度解析
1. 初识objdump:二进制世界的翻译官 第一次接触objdump时,我把它比作"二进制世界的翻译官"。这个比喻来自我调试段错误时的经历——当时面对崩溃的core dump文件手足无措,直到同事教我用了objdump -d。这个GNU工具链中的瑞士军刀&a…...
重构Switch游戏安装体验:Awoo Installer的突破与革新
重构Switch游戏安装体验:Awoo Installer的突破与革新 【免费下载链接】Awoo-Installer A No-Bullshit NSP, NSZ, XCI, and XCZ Installer for Nintendo Switch 项目地址: https://gitcode.com/gh_mirrors/aw/Awoo-Installer 如果你是Nintendo Switch破解玩家…...
腰间盘突出别硬扛!阶梯治疗才科学,专科诊疗帮你摆脱疼痛
腰间盘突出是现代人的常见病,很多人要么强忍疼痛,要么盲目按摩,结果越治越重。作为从事脊柱外科多年的专家,我要告诉大家:腰间盘突出治疗有明确的阶梯方案,从保守到手术循序渐进,关键是选对时机…...
多 Agent 协作架构:Agent 之间如何通信、协调和分工
多 Agent 协作架构:Agent 之间如何通信、协调和分工 我在字节跳动 OpenViking 分析之后,有一件事一直在脑子里转:多 Agent 的协作到底难在哪里?不是难在"写代码",而是难在把一堆各自为政的 Agent 变成一个真…...
