基于大模型零代码1小时完成国标数据分级分类近义词库构建及思考

  1. 任务背景及困难分析      

        因项目要求,需要对国家标准国民经济行业分类-GB/T 4754-2017【1】进行近义词库的构建,时间非常紧,只给了很短时间进行处理,目标是构建一份中等粒度的行业近义词库。

       搁在以前,可能需要点时间写代码处理,但在大模型普及的时代,这类工作可以显著被提效。本文主要是记录如何通过零代码实现对目标文件的近义词库构建,给非专业数据处理工作者提供一些启发。

        因为项目系统本身的一些限制,这里暂不探讨引入embedding模型实现基于向量的匹配方案。且本文的初衷是,针对各类群体,只需要会中文,就能利用大模型快速解决数据处理的问题。

        首先看一下国民经济行业一级分类长啥样:

代码分类
A农、林、牧、渔业
B采矿业
C制造业
D电力、热力、燃气及水生产和供应业
E建筑业
F批发和零售业
G交通运输、仓储和邮政业
H住宿和餐饮业
I信息传输、软件和信息技术服务业
J金融业
K房地产业
L租赁和商务服务业
M科学研究和技术服务业
N水利、环境和公共设施管理业
O居民服务、修理和其他服务业
P教育
Q卫生和社会工作
R文化、体育和娱乐业
S公共管理、社会保障和社会组织
T国际组织

表1. 国民经济行业一级分类

        一开始看到这个分类,感觉无从下手,一级分类果然是大类,不清楚每一个大类具体会包含哪些子类。

        由于我们的目标是构建中等粒度的行业近义词库。可能一开始会想,能不能直接找一下github上的一些近义词库,然后分门别类匹配到各个类目中,但搜索了很多资料,发现几乎都不可用。原因主要有三点:(1)近义词库太细粒度,比如农业的数据,细到“南蛇藤”、“绿尾大蚕蛾”、“佛肚苣苔”等;(2)数据太乱,猜测是用了word2vec类似模型在大规模数据上直接跑的结果,聚出来的词库没有做进一步的清洗,一股脑提供出来。我们的场景由于性质特殊,对于词库的准确性要求很高;(3)和行业类别很难搭上边,几乎不会在客户搜索数据中出现,和实际业务不契合。

2. 解决思路及实践

2.1 解决思路

        既然短平快利用现有的近义词库,出现了粒度、质量、业务等问题,因此只能自己动手构建。远水解不了近渴,为了梳理国民经济行业近义词库,且贴近业务需要,我们继续对国标文件进行分析,发现国标文件中,提供了非常好的数据,如图1所示。        

        图1. 国标文件结构及类目细则        

        可以看到类目结构中包含了大类、中类、小类,类别名称结构对应该结构,如图1的右下角所示。很容易构建“林业-林木-造林-森林”,“育种-育苗”,“经营-管护-改培”、“木材-竹材”这类同义词对。因此完全可以基于该数据构建一份短期内满足业务需求的近义词库了。

2.2 实践

处理步骤如下:

第一步:提取pdf中的数据

采用PDFminer【2】,将pdf文件转换为文本文件

图2.  PDFminer工具

使用起来非常简单,两行代码

pip install pdfminer

pdf2txt.py ~/pdfminer/samples/gb_category.pdf -o ~/category.txt

运行之后就获得了纯文本的内容,但格式比较杂乱,不能直接用,接下来就需要用大模型来帮我们清洗文件。

        图2.  PDF解析之后得到的txt文件(格式比较乱)

第二步:清洗txt文件

给出提示语:

你现在角色为专业的数据工程师,请帮我,对categoty.txt文件去除空格、特殊字符、空行,不用给出脚本代码,只需要输出处理后的可下载的文本,需要保持原始的换行格式

处理后的文件格式:

    图3.  初步清洗后结果

        但还包含了很多无关的内容,比如国标格式、前言、类目描述信息,观察一下数据内容的特点,只需要保留数字开头后的一行信息,并且根据数字本身的特点,另外可以看到021, 022等内部的内容,是可以单独作为一个数据块来考虑,数据块内的关键词具备同义词的特性。当然你也可以先手动快速删除一些可以删除的内容,再进行大模型处理,可能更快更准确。

        有了以上的分析,就可以开始提示语的编写了。

请对文件进行分析,将每一对三位数字之间的内容作为一个单独的内容块进行保存,块与块之间以空格隔开。内容块中的内容为四位数字后面的一行。其他的可以丢弃。不需要保留数字本身。为了便于理解,这里给出示例,之后请按照该示例所体现的抽取规则对全文进行处理。

原始数据:

02
林业
021
林木育种和育苗
0211
林木育种
指应用遗传学原理选育繁殖林木良种和繁
殖林木新品种核心的栽植材料的林木遗传改良
活动
0212
林木育苗
指通过人为活动将种子穗条或植物其他组
织培育成苗木的活动
022
0220
造林和更新
指在宜林荒山荒地荒沙采伐迹地火烧迹
地疏林地灌木林地等一切可造林的土地上
通过人工造林人工更新封山育林飞播造
林等方式培育和恢复森林的活动
023
森林经营管护和改培
0231
森林经营和管护
指为促进林木生长发育在林木生长的不同
时期进行的促进林木生长发育的活动
0232

处理后数据:

林木育种和育苗
林木育种
林木育苗
 

造林和更新
 

森林经营管护和改培

森林经营和管护

要求:直接生成可以下载的处理后的文件。

处理后的文件格式如图4所示,可以看到进一步清洗后的数据,已经接近我们想要的结果了。

    图4.  进一步清洗后结果

第三步:对每一个数据块进行分词并拼接成行进行展示

        前述的大模型使用的是gpt4, 后续的操作是基于豆包进行处理,豆包国内使用起来比较方便,且完全免费。        

图5.  分词处理后的初步同义词列表结果

        经过前三步处理后,我们其实已经拿到一份比较靠谱的行业同义词列表了,接下来做一下人工后处理,或者再输入到大模型中,做提示词引导精洗。

        这里贴一下最后处理的国标行业同义词库结果,每个词都会作为key一次,value为同义词列表。

图6.  最终行业近义词库

3. 关于大模型的一些思考

3.1 Software2.0(软件2.0)的提出

        以上的实践例子,是在一个小时内零代码完成,得到的结果也初步可以接受。写这个例子,其实也是想表达一些对于大模型在后续学习、工作中的一些思考,前两天看到关于Software2.0【3,4,5】(软件2.0)的文章,是指应用范式的改变。放在以前很难想象,通过零代码快速实现对指定数据的满足处理要求的文本结果,可以说本次实践是一次完全面向大模型的提示词适配的任务处理。

        Software2.0(软件2.0)对于自己思维模式有很大的冲击,所谓Software2.0是完全基于神经网络的软件,最早是OpenAI 创始人Karpathy在2017年提及的概念【4】,他说:人们通常认为神经网络只是机器学习中的一个工具,不幸的是这种理解是只见树木不见森林。神经网络代表了软件开发方式的一次根本性的转变,它们是软件2.0。在软件1.0,源代码是由程序员编写,这些源代码经过编译,最终转换成一个二进制文件,这个文件能够执行有用的工作。在软件2.0中,源代码就是数据集和神经网络,而数据集定义了神经网络的参数,也定义了期望的行为。

        号称全球第一个Software2.0架构的应用(https://genweb.rahul.gs/)诞生,做的事情很简单,就是提供一份网页的生成提示语,直接生成html的代码。给一个示例如下:

app提示语:

Create a When2Meet clone for scheduling group meetings.

Features:
     1. add two input fields for the start and end time
     2. add another input field for date
     3. add an input field for the user's name
     4. when user submits, add that information in the body of the app and reset the form

图7. genweb自动生成功能网页

   genweb的特点:

  • 全自然语言编程。

  • 没有后端逻辑,全部交给大模型处理。

  • 也没有前端渲染,全部实时生成。

          

        图8. 数据定义AI - > AI创造应用(图来自【3】)

3.2 软件 2.0 的益处

        为何更倾向于将复杂程序移植到软件 2.0 中?软件 2.0 具有以下特点:

        计算同质性。一个典型的神经网络,在一阶近似下,仅由两种操作组成:矩阵乘法和零阈值(ReLU)。与经典软件的指令集相比,其更加异质和复杂。因为您只需为少量核心计算原语(例如矩阵乘法)提供软件 1.0 实现,所以更容易做出各种正确性/性能保证。

        易于嵌入硅片。作为一个推论,由于神经网络的指令集相对较小,用定制的专用集成电路(ASIC)、神经形态芯片等将这些网络实现得更接近硅片要容易得多。当低功耗智能在我们周围普及时,世界将会改变。例如,小型、廉价的芯片可以带有预先训练的卷积网络、语音识别器和 WaveNet 语音合成网络,都集成在一个您可以连接到各种设备的小“原型大脑”中。

        恒定运行时间。典型的神经网络前向传播的每次迭代所需的浮点运算次数完全相同。与代码可能通过一些庞大的 C++代码库采取的不同执行路径相比,没有任何可变性。当然,可以有动态计算图,但执行流程通常仍然受到显著限制。这样,几乎可以保证永远不会陷入意外的无限循环。恒定内存使用。与上述相关,任何地方都没有动态分配的内存,因此几乎不可能出现交换到磁盘或内存泄漏的情况,无需在代码中查找这些问题。        

        高度可移植。与经典的二进制文件或脚本相比,一系列矩阵乘法在任意计算配置上运行要容易得多。

        非常灵活。如果有一个 C++代码,并且有人希望使其速度提高一倍(如果需要,可以以性能为代价),为新规范调整系统将非常困难。然而,在软件 2.0 中,我们可以获取我们的网络,删除一半的通道,重新训练,然后——它的运行速度正好提高一倍,效果稍差。相反,如果碰巧获得更多的数据/计算资源,可以立即通过添加更多通道并重新训练来使程序运行得更好。

        模块可以融合成最优整体。我们的软件通常被分解为通过公共函数、API 或端点进行通信的模块。然而,如果两个原本分别训练的软件 2.0 模块相互作用,我们可以轻松地通过整个过程进行反向传播。想想如果网络浏览器可以自动重新设计低级别系统指令 10 层以提高网页加载效率,或者导入的计算机视觉库(例如 OpenCV)可以根据特定数据进行自动调整,那会多么神奇。在 2.0 中,这是默认行为。

        最后,也是最重要的是,在很大一部分有价值的垂直领域中,神经网络是比人类能想出的任何代码都更好的一段代码,目前至少涉及与图像/视频和声音/语音有关的任何内容。

3.3 软件 2.0 的局限性

        2.0 堆栈也有其自身的一些缺点。在优化结束时,留下了运行良好的大型网络,但很难说清楚其工作原理。在许多应用领域,将面临选择使用我们理解的 90%准确率的模型,还是我们不理解的 99%准确率的模型。

        2.0 堆栈可能以难以理解和令人尴尬的方式失败,或者更糟的是,它们可能“默默失败”,例如,在训练数据中默默地采用偏差,而在大多数情况下,当它们的规模轻易达到数百万时,很难对其进行适当的分析和检查。

        最后,我们仍在发现这个堆栈的一些特殊属性。例如,对抗性示例和攻击的存在突出了这个堆栈的难以理解的性质。

3.4. 期待

        虽然新的事物诞生,总会伴随着曲折和非议、质疑,但你不能装成乌龟,要积极去拥抱。李飞飞提到未来5年的两个重大突破方向,其中之一是AI app。而且随着大模型技术的飞快演变进化,开源技术的迅速发展,很多之前只有大公司能做的东西,现在个人也可以在短时间内创作出来,我觉得未来会诞生越来越多的三人公司,甚至一人公司。一场新的变革已经在发生,而且是以极快的速度。这将会深刻改变我们的思维模式和做事方式,非常激动。

4.参考材料

【1】国家标准国民经济行业分类-GB/T 4754-2017

【2】PDFminer

【3】应用开发范式或将改变! 从全球首个Software2.0架构应用说起

【4】Software 2.0

【5】All You Need To Know About Software 2.0

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值