使用大模型从政府公文中抽取指标数据

news2024/12/23 19:42:43

文章目录

    • 介绍
    • 流程结构介绍
    • 相关文本筛选
    • 大模型 few-shot
    • 大模型
    • 抽取结果

介绍

本文使用LangChain 结合 Ollama的qwen2:7b模型,抽取出全国市级单位每一年预期生产总值指标。

Ollama的qwen2:7b,显存占用只有5G左右,适合大多数消费级显卡运行。

流程结构介绍

  1. 从相关政府工作报告的文本中,筛选出包含目标信息的句子;
  2. 提示工程,使用few-shot提示,通过几个例子,定义模型的输出格式;
  3. 大模型的输出结果插入到pandas的DataFrame中,后续转成excel;
    在这里插入图片描述

相关文本筛选

文中关键句子定位,从一整篇文本中,定位到包含有目标的信息的句子。
因为喂一整篇文本给大模型会导致精度下降,使用句子级别的短文本能够提高模型信息抽取精度,
从一篇文章中,筛选出相关文本。通常可以使用向量相似筛选和关键词筛选等。

  1. 向量筛选:目前行业内常用的是基于向量的相似度的文本块筛选(RAG文本召回技术), 类似 llama-index 结合chatglm3-6B 利用RAG 基于文档智能问答, https://blog.csdn.net/sjxgghg/article/details/136963355。
  2. 关键词筛选:本项目直接使用关键词筛选,找到包含有目标信息的句子,这么明显与简单的项目需求,使用关键词筛选召回率更高;

大模型 few-shot

虽然目标句子中含有很明显的经济指标性数据,不建议使用正则表达式进行识别。
因为有的文本表述变化很大,正则表达式很难识别出来。直接让大模型进行信息抽取很方便。

 在拿到包含有目标信息的句子后。使用提示词告诉大模型要抽取值和应该返回的格式。

提示词如下所示:

prompt = """
参考下述例子,生成相应的回答,请你从中提取出今年生产总值的预期增长值是多少?
按照下述提供的json格式返回结果。

Input: 孝感市1894年文件节选:主要预期目标是:全市生产总值增长10%以上
Output: {"city":"孝感市", "year":"1894", "GDP_growth":"10%"}

Input: 上海市1895年文件节选:初步核算,全市生产总值比上年增长11.1%,规模以上工业增加值增长21.7%,全社会固定资产投资增长22.6%,社会消费品零售总额增长13.7%,地方一般预算收入增长18.1%,实际利用外资增长12.4%,外贸出口增长28.4%,城镇居民人均可支配收入增长10.1%,农民人均纯收入增长10.2%,年初确定的主要预期目标和各项工作任务全面超额完成\n今年经济社会发展的主要预期目标是:生产总值增长12%,全社会固定资产投资增长20%,'
Output: {"city":"上海市", "year":"1895", "GDP_growth":"12%"}

Input: {filename}年文件节选:{content}
Output: 
""".strip()

给了两个Input和Output示例,供大模型去学习与参考模型的结构化输出。使用例子对大模型进行提示的方法称为 few-shot。

大模型

使用本地的Ollama qwen2大模型进行实验,这个大模型的推理速度大概每秒处理1.6条数据,显存只占用5G。
因为本地有6千份文本进行抽取,故选择的本地大模型,本地推理速度更快一点。当然 gpt-4o-mini 准确率更高,虽然其收费不贵,但是网络延时太大。

若要追求更快的速度,使用llamafactory通过vllm部署qwen2:7B,推理速度可以更快。我的显存48G,3090性能级别的显卡,按照往常的速度大概可以达到每秒推理15条数据,速度提升还是很明显的。

虽然llamafactory vllm部署不算麻烦,而且速度更快,(勤快人推荐用这个);
Ollama不用部署模型,使用简单一点,挂一下机等着出结果(开奖)✌️。

from langchain_community.llms import Ollama
llm =  Ollama(model="qwen2:7b", temperature=0)

本工作使用的 few-shot 在一定程度上是为了实现大模型的结构化输出。
其实OpenAI 在本月已经支持结构化,若没有大量文本推理的需求,选择gpt-4o-mini 是一个不错的选择,而且价格非常便宜,一次调用大概$0.000102左右,参考教程如下:How to return structured data from a model, https://python.langchain.com/v0.2/docs/how_to/structured_output/

在OpenAI 宣布支持支持结构化输出后,当时看到LangChain在第一时间对其进行了支持,看得出来都挺能卷的。

在这里插入图片描述

抽取结果

在全国所有市级单位,从2000年开始抽取出6000条数据。
在这里插入图片描述

虽然qwen2这个小模型的效果没有那么的强,但从它返回的结果来看,本人还是挺满意的。其中大模型的思考过程,体现出来了。
比如,下述是商丘市2011年的政府工作报告节选,在其中它没有提到要增长多少,只说要高于全省平均水平:

今年经济社会发展主要预期目标是:生产总值增速高于全省平均水平1到2个百分点
财政一般预算收入增速高于生产总值增速2个百分点,全社会固定资产投资增长20%,
社会消费品零售总额增长17%,外贸出口增长21%,实际利用外商直接投资增长22%,
居民消费价格涨幅控制在4%左右,人口自然增长率控制在6.5% 以内,
新增城镇就业人员5.6万人,农民人均纯收入增长9%,城镇居民人均可支配收入增长9%,
节能减排完成省定目标。

大模型的输出结果是:生产总值增速高于全省平均水平1到2个百分点。这就是最优的回答。我并没有给大模型相关的提示,它能主动做到这一点,其实就很厉害了。

在这里插入图片描述

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

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

相关文章

华为云Api调用怎么生成Authorization鉴权信息,StringToSign拼接流程

请求示例 Authorization 为了安全,华为云的 Api 调用都是需要在请求的 Header 中携带 Authorization 鉴权的,这个鉴权15分钟内有效,超过15分钟就不能用了,而且是需要调用方自己手动拼接的。 Authorization的格式为 OBS 用户AK:…

zabbix agent 可用性 为 灰色

解决zabbix可用性为灰色状态 配置–》模板–》选择模板, 之后正常。

排序: 插入\希尔\选择\归并\冒泡\快速\堆排序实现

1.排序的概念及应用 1.1概念 排序:所谓排序,就是一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 1.2运用 购物筛选排序: 1.3常见排序算法 2.实现常见的排序算法 int a[ {5,3,9,6,2,4,7,1,8}; 2…

MySQL数据库专栏(三)数据库服务维护操作

1、界面维护,打开服务窗口找到MySQL服务,右键单击可对服务进行启动、停止、重启等操作。 选择属性,还可以设置启动类型为自动、手动、禁用。 2、指令维护 卸载服务:sc delete [服务名称] 例如:sc delete MySQL 启动服…

嵌入式软件开发学习一:软件安装(保姆级教程)

资源下载: 江协科技提供: 资料下载 一、安装Keil5 MDK 1、双击.EXE文件,开始安装 2、 3、 4、此处尽量不要安装在C盘,安装路径选择纯英文,防止后续开发报错 5、 6、 7、弹出来的窗口全部关闭,进入下一步&a…

STM32(一):新建工程

stm32f10x.h文件:描述stm32有哪些寄存器(外围)和它对应的地址。stm32由内核和内核外围的设备组成的,内核寄存器描述和外围寄存器描述文件存储位置不在一起core_cm3.h core_cm3.c内核寄存器描述文件。mic.c内核库函数 stm32f10x_co…

【初阶数据结构】通讯录项目(可用作课程设计)

文章目录 概述1. 通讯录的效果2. SeqList.h3. Contact.h4. SeqList.c5. Contact.c6. test.c 概述 通讯录项目是基于顺序表这个数据结构来实现的。如果说数组是苍蝇小馆,顺序表是米其林的话,那么通讯录就是国宴。 换句话说,通讯录就是顺序表…

pycharm windows/mac 指定多版本python

一、背景 工作中经常会使用不同版本的包,如同时需要tf2和tf1,比较新的tf2需要更高的python版本才能安装,而像tf1.5 需要低版本的python 才能安装(如 python3.6),所以需要同时安装多个版本。 二、安装多版本python py…

会员系统开发,检测按钮位置,按钮坐标,弹出指定位置对话框-SAAS 本地化及未来之窗行业应用跨平台架构

一 获取元素坐标 var 按钮_obj document.querySelector(#未来之窗玄武id);var 按钮_rect 按钮_obj.getBoundingClientRect()console.log(按钮_rect);输出结果 bottom : 35 height : 21 left : 219.921875 right : 339.921875 top : 14 width : 120 x : 219.921875 y…

R语言统计分析——组间差异的非参数检验

参考资料:R语言实战【第2版】 如果数据无法满足t检验或ANOVA的参数假设,可以转而使用非参数检验。举例来说,若结果变量在本质上就严重偏倚或呈现有序关系,那么可以考虑非参数检验。 1、两组的比较 若两组数据独立,可以…

大厂进阶五:React源码解析之Diff算法

本文主要针对React源码进行解析,内容有: 1、Diff算法原理、两次遍历 一、Diff源码解析 以下是关于 React Diff 算法的详细解析及实例: 1、React Diff 算法的基本概念和重要性 1.1 概念 React Diff 算法是 React 用于比较虚拟 DOM 树之间…

初识C++ · 类型转换

目录 前言: 1 C中的类型转换 1.1 static_cast 1.2 reinterpret_cast 1.3 const_cast 1.4 dynamic_cast 前言: C可以说是恨死了隐式类型转换,你可能会疑问了,为什么?不是单参数隐式类型转换为自定义类型的时候人…

苹果笔记本电脑可以玩steam游戏吗 MacBook支持玩steam游戏吗 在Steam上玩黑神话悟空3A大作 苹果Mac怎么下载steam

游戏是生活的润滑剂,越来越多的用户开始关注Mac平台上可玩的游戏。幸运的是,Steam作为最大的数字发行平台之一,提供了大量适用于Mac操作系统的游戏。无论你是喜欢策略、冒险还是射击类游戏,都能在Steam上找到适合自己Mac设备玩耍的…

ESP32CAM人工智能教学18

ESP32CAM人工智能教学18 获取数据并显示 如果我们给ESP32Cam外挂一些传感器(比如温湿度传感器、超声波测距传感器、红外人体传感器等),我们怎么把ESP32Cam捕获到的数据,传递到客户端的浏览器,并在网页index.html中显示…

WordPress网站速度优化

提升网站速度对用户体验和搜索引擎排名至关重要。无论你是新手博主,还是经验丰富的网站开发人员,要想优化WordPress网站,需要长时间的努力和坚持。以下是按入门、中级和专家级别介绍的12个实用方法,帮助你提升WordPress网站的整体…

zabbix监控进程,日志,主从状态和主从延迟

自定义监控进程 使用httpd服务为例,监控httpd的进程 在zabbix-agent上安装httpd yum -y install httpd 重启httpd systemctl restart httpd systemtctl enable httpd 查看httpd的进程 [rootzabbix-agent ~]# ps -ef | grep httpd root 2407458 1 0 16:…

soapui调用接口参数传递嵌套xml,多层CDATA表达形式验证

1.环境信息 开发工具:idea 接口测试工具:soapui 编程语言:java 项目环境:jdk1.8 webservice:jdk自带的jws 处理xml:jdk自带的jaxb 2.涉及代码 package org.example.webdemo;import javax.jws.WebMethod; i…

Python,Spire.Doc模块,处理word、docx文件,极致丝滑

Python处理word文件,一般都是推荐的Python-docx,但是只写出一个,一句话的文件,也没有什么样式,就是36K。 再打开word在另存一下,就可以到7-8k,我想一定是python-docx的问题,但一直没…

汽车免拆诊断案例 | DAF(达富)汽油尾气处理液故障警示

故障现象 距离我上次在货卡上工作已经有一段时间了,让它们在道路上保持安全行驶是非常重要的。因此,当故障警示灯亮起时,我们需要迅速找到问题方向以及排除故障。 车辆的仪表板亮起多个故障灯以及警示灯,我们需要用解码器查找触…

数据分析与应用:微信-情人节红包流向探索分析

目录 0 需求描述 1 红包发送方用户的基本信息缺失率有多高?(即有多少红包发送方用户无法在用户基本信息表中匹配? 2 哪一组红包金额的拒收率最高? 3、最受二线城市欢迎的红包金额为?(即发出次数最多) 4 北上广深 4 大城市中,哪座城市的男性用户发出的 520 红包比例…