大模型实战-FinGLM解析金融财报做RAG经验参考篇

news2024/11/15 11:39:59

大模型实战-FinGLM金融财报解析实战

https://modelscope.cn/datasets/modelscope/chatglm_llm_fintech_raw_dataset/summary

详细解读:

https://modelscope.cn/models/finglm/FinGLM/summary

背景:解读pdf版本的公司财务年报,构建问答模型,能回答一些金融领域相关的问题。包含答案抽取,以及答案推理。

一 数据处理步骤

以下是我们推荐的处理步骤:

1、**PDF文本和表格提取:**您可以使用如pdfplumber、pdfminer等工具包提取PDF文件中的文本和表格数据。

「pdfplumber:」

pdfplumber库按页处理 pdf ,获取页面文字,提取表格等操作。

学习文档:https://github.com/jsvine/pdfplumber

「pypdf2:」

PyPDF2 是一个纯 Python PDF 库,可以读取文档信息(标题,作者等)、写入、分割、合并PDF文档,它还可以对pdf文档进行添加水印、加密解密等。

官方文档:https://pythonhosted.org/PyPDF2

2、数据切分:根据PDF文件的目录、子目录和章节信息,对内容进行精确的切块处理。

3、构建基础金融数据库:依据金融知识和PDF内容,设计专业的金融数据库字段和格式。例如,定义资产负债表、现金流量表和利润表等。

4、信息提取:使用大模型的信息提取能力和NLP技术来抽取对应的金融字段信息。例如,请使用json方式输出目录的内容,其中章节的名称作为key,页码作为value。同时,请详细地抽取表格内的数据,以JSON格式输出。

5、构建金融知识问答库:结合构建的金融数据库,应用大模型构建基础的金融问答库。例如,

    {"question":"某公司2021年的财务费用为多少元?", "answer": "某公司2021年的财务费用为XXXX元。"}
    prompt:用多种句式修改question及answer的内容。

    {"question":"为什么财务费用可以是负的?", "answer": ""}
    prompt:请模仿上面的question给出100个类似的问题与对应的答案,用json输出。

6、构建向量库:借助于如Word2Vec、Text2Vec等技术,从原始文本数据中提取出语义向量。使用pgvector这种基于PostgreSQL的扩展来存储和索引这些向量,从而建立起一个可供高效查询的大规模向量库。

7、应用:结合向量库、大模型、langchain等工具,提升应用效果。

二 实战教程参考
https://tianchi.aliyun.com/forum/post/573555
https://zhuanlan.zhihu.com/p/659585193  [大模型绝密技巧]ChatGLM金融开源FinGLM学习笔记,让你升职加薪!
https://zhuanlan.zhihu.com/p/648760946  SMP 2023金融大模型挑战赛实践优化调试分享(三

https://www.zhihu.com/question/585107192/answer/3196812752 ChatGPT实现自然语言转SQL有采用特定的算法或模型吗?
https://zhuanlan.zhihu.com/p/648860146?spm=a2c22.21852664.0.0.225e41f48Z5Swa SMP 2023 chatglm大模型比赛第一名经验总结

https://lslfd0slxc.feishu.cn/base/GaJqbfQpRatYkRsf6Ioc0D7ynfb?table=tblrZ5Aq8iM6X4i3&view=vewQx72054  一些问题的答疑

https://space.bilibili.com/3493270982232856/channel/collectiondetail?sid=1610943  b站视频讲解
三 详解步骤
1 数据处理 pdf转txt

image-20231010114216188

2.数据入库,提取pdf中表格的数据,变成结构化数据,入数据库

image-20231010114234353

3.回答问题

1)首先对输入问句做问句分类,也就是意图识别,看是哪类问题
前提:总结问题都有哪些类型。
问题类型识别:可以关键词,或者问法写规则

2)再次提取句子中的实体,定义关键实体:时间,公司,字段

3)不同问题类型,构建prompt,需要使用实体上文提到的实体。
#如果是计算题,大模型效果不好,需要给示例让大模型计算。如果直接提取数据定义公式,计算出结果, 再放到prompt中,拼接生成答案。

#如果是开放题,世界让大模型回答

#不能给大模型太多信息,不然它会找不到

​ 4)prompt转为sql从存储数据库中查数据

image-20231010114353221

  1. 具体详细流程

    https://mp.weixin.qq.com/s/-eA2yfcutjE-kinFb1XdGg

图片

5.代码解读

1)数据转txt 、转html

2)收集关键词,调用chatglm组合成mysql命令。

1.FinQwen 金融大模型项目-基于大模型构建金融场景智能问答系统。
比赛介绍 https://tianchi.aliyun.com/competition/entrance/532172/introduction?spm=a2c22.28136470.0.0.d5cd4a0aIgpnA4&from=search-list

代码  https://github.com/Tongyi-EconML/FinQwen
可参考的RAG技巧
  1. 对用户输入的query做意图识别,问题分类,不同问题不同处理。也可以用关键词识别意图,来分类问题。

    image-20240710172445377

  2. 基于pymupdf或者pdfplumber解析pdf,最小召回单元为“行"

  3. 对问题做粗召的时候,用Elastic search。

  4. 对用户问题,基于LLM抽取关键词,用关键词做检索,提升检索的准确率。原问题直接用于检索,准确率低。

    image-20240710172401622

  5. 使用少量标注数据,得到微调后的LLM,用该LLM抽取领域内关键词更准确

    采用人工标注少量30-60个样本,微调LLM模型,基本解决了表名列名不匹配问题,能较好理
    
  6. 召回的片段,做精排,用cross-encoder模型或者TF-IDF余弦相似度

    image-20240710172653384

    image-20240711154604898

  7. 对生成的答案,做幻觉检查,对答案做校验与修正,去除冗余,修正单位,或者答案检查再尝试功能。对答案中搜索,如果答案中有:对不起,抱歉,无法 等字眼,就再retry请求答案。

    image-20240710172744162

  8. Prompt的设计很重要

    prompt设计原则:
    • 系统角色定义清晰:(你是一名XX的专家)
    • 清晰明确的任务描述  (任务原则是1 2 3 )
    • 详细的问题拆解与提示:(步骤是 1 2 3) 
    • Few-shot提示样本的多样化:(以下是一些示例,示例1 示例2 )
    • 参考内容在模型输入中的位置: (优先根据文档原文来回答每个问题)
    
  9. 使用金融领域的语料下的embedding模型,或者微调过的embedding模型对输入做embedding。(预训练embedding的语境与金融领域语境差别大)

2.AI大模型用于智能汽车检索问答
天池比赛 https://tianchi.aliyun.com/competition/entrance/532154/introduction?spm=a2c22.28136470.0.0.69114a0axVi2sw&from=search-list
代码
1:Tianchi-LLM-retrieval     https://github.com/poisonwine/Tianchi-LLM-retrieval  
2: tianchi-LLM-QA    https://github.com/aiwq2/tianchi-LLM-QA
3:Tianchi-LLM-QA   https://github.com/dawoshi/Tianchi-LLM-QA?tab=readme-ov-file

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2080389.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

zsh: command not found: brew(M系列芯片)

利用官网的命令安装完brew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"查看版本,提示找不到命令 % brew -v zsh: command not found: brew解决方法,在终端中执行以下命令&#xff0c…

EV代码签名证书——消除软件下载时的安全警告

开发公司和软件开发人员在发布应用程序后,当用户尝试下载并安装应用程序时,被SmartScreen识别为不常见或尚未建立起良好的信誉度,系统就会发出警告,提示用户该应用程序可能对电脑构成风险。这会导致软件下载率大幅度下降。 EV代码…

鸿蒙XComponent组件的认识

概述: XComponent组件作为一种渲染组件,通常用于满足开发者较为复杂的自定义渲染需求,例如相机预览流的显示、游戏画面的渲染、自定义视频播放器等等。其中Native API是其核心内容! 其可通过指定其type字段来实现不同的功能&…

Comsol 声学黑洞梁式结构的振动能量收集器

声学黑洞梁式结构是一种用于收集振动能量的装置,其工作原理类似于光学中的黑洞概念。它可以将周围环境中的声波能量转化为可用的电能。声学黑洞梁式结构通常由以下几个主要组成部分构成: 1. 梁:梁是主要的振动结构,可以是金属、陶…

mac nvm安装及使用(nvm安装指定版本node npm pnpm)

mac nvm安装及使用(nvm安装指定版本node npm pnpm) 1.卸载电脑的node 打开终端:依次执行以下命令: sudo rm -rf /usr/local/bin/npm sudo rm -rf /usr/local/share/man/man1/node.1 sudo rm -rf /usr/local/lib/dtrace/node.d s…

JVM极简教程

基础概念 1.1. Java 虚拟机 是运行 Java字节码的虚拟机 1.2. JVM跨平台原理 JVM在不同的系统(Linux、Windows、MacOS)上有不同的实现,目的是在使用相同的字节码,它们都会给出相同的结果 JVM跨平台本质:不同操作系统…

高标准农田灌区信息化如何提高灌溉效率

高标准农田灌区的信息化建设,是现代农业发展的重要一环,旨在通过先进的信息技术手段优化水资源管理,提高灌溉效率,保障粮食安全,同时促进农业可持续发展。这一过程不仅涉及硬件设施的升级,还包括软件系统、…

第2章 双向链表

双向链表 概念 对链表而言,双向均可遍历是最方便的,另外首尾相连循环遍历也可大大增加链表操作的便捷性。因 此,双向循环链表,是在实际运用中是最常见的链表形态。 基本操作 与普通的链表完全一致,双向循环链表虽然…

PHP房屋出售出租多端多平台预约系统小程序源码

🏠🔑「房屋出售出租多端运营系统」——房产管理新纪元,一键掌控所有!🚀 🏡 开篇直击:房产市场新利器,轻松管理不再是梦! 亲们,还在为房屋出售或出租的繁琐流…

【IC设计】跨时钟异步处理系列——单比特跨时钟

文章目录 建立时间和保持时间单比特信号的跨时钟处理慢时钟域的信号传输到快时钟域打两拍 快时钟域的信号传输到慢时钟域方案一 脉冲展宽同步 (打拍打拍,进行或)代码原理图 方案二 脉冲电平检测双触发器同步边沿检测代码原理图 建立时间和保持时间 所谓的建立时间或…

python可视化-漏斗图(转化分析)

1、数据生成 from scipy import stats# 构造数据 stage [浏览,加入购物车,下单,支付,交易成功] values [] for i in range(len(stage)):values.append(int(1000*stats.expon.pdf(i, scale0.95))) 2、基于漏斗图的转化分析 from pyecharts import options as opts from pye…

HarmonyOs如何获取rawfile目录下的所有文件列表

最近在做一个功能,需要使用获取rawfile下目录的所有文件 参考连接为: zRawfile-模块-C API-Localization Kit(本地化开发服务)-应用框架 - 华为HarmonyOS开发者 (huawei.com) 需要使用到native实现,实现步骤&#…

redis面试(二十四)Semaphore锁实现

Semaphore也是redis分布式锁支持的一种,同步组件 之前给大家的讲解的锁,基本上都是同时间只能一个客户端获取这个锁,然后做一些事情,处理完了以后释放锁 Semaphore,信号量,他作为一个锁机制,可以…

Charles苹果手机https抓包

1、电脑设置Charles代理端口 1)设置代理端口 Proxy-》Proxying Settings-》HTTP Proxy 设置端口 2)设置监控的代理地址 Proxy-》SSL Proxying Settings 添加Add允许所有地址*.* 2、电脑导入Charles的ssl证书 3、电脑查看Charles的IP地址和端口 4、手机无线wifi配置代理 5、手…

kubernetes HPA

K8S的HPA介绍 在Kubernetes(K8S)集群管理中,Horizontal Pod Autoscaler(HPA)是一种关键的自动扩缩容机制,用于根据当前负载情况自动调整Pod副本的数量。这一机制能够显著提升应用的响应能力和资源利用率&a…

虚幻5|按键触发学习

一,如图参考 1.下移 驱动阈值 越大按时间长才会触发,越小很快就可以触发 2.按下 当按下超出驱动阈值大小就会触发一次,这里的驱动阈值只能设置再0.1~1的大小 3.已松开 当按下的时候,先触发单次的started,如果按压…

华为OD 山峰个数 C语言实现

不知道是不是我理解错了,这个题目200分? int main(void) {int i 0;int len 0;char c \0;int data[1000] {0};int temp[1000] {-1};int top 0;int count 0;while(scanf("%d",&data[i]) 1){i;len;cgetchar();if(c \n){break;}}// …

【调研】弱网环境下分片上传方案调研

目标 在高延迟、高丢包的弱网环境下,合理调整上传任务中分片大小这一参数,以达到尽可能好的传输性能(传输时间、成功率)。 调研 腾讯云弱网分块续传功能 腾讯云的弱网分块续传功能,基于腾讯云对象存储(Cloud Object…

Redis单线程和多线程

1.Redis的单线程 Redis的单线程主要是指Redis的网络IO和键值对读写是由一个线程完成的,Redis在处理客户端的请求时包括获取(Socket读)、解析、执行、内容返回(Socket写)等都由一个顺序串行的主线程处理,这…

OpenCV绘图函数(3)判断点一条直线是否在一个矩形范围内的函数clipLine()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 裁剪线段与图像矩形相交的部分。 cv::clipLine 函数计算出完全位于指定矩形内的线段部分。如果线段完全位于矩形之外,则返回 false。…