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

介绍

本文使用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个百分点。这就是最优的回答。我并没有给大模型相关的提示,它能主动做到这一点,其实就很厉害了。

在这里插入图片描述

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jieshenai

为了遇见更好的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值