利用GPT实现快递信息提取、整理

小初seo 软件工具评论1,458字数 2861阅读9分32秒阅读模式

一、需求背景

某个客户物流部门,每天需要安排人员花两三个小时处理基本数据。客户收到的下单数据不规范,需要导入SAP的字段又比较多,涉及的字段包括寄件人姓名(如果有)、寄件人联系方式(如果有)、指定快递公司、结算方式(如有)、其他特殊需求(加急、打木架、落地卸等)、收件人姓名、收件人联系方式、收件人详细地址(省市县区街道)。

二、需求分析、测试

一般提到地址解析,自然想到的就是jionlp,然而jionlp库没法解析联系人,也无法提取对应的手机号码。这个时候就可能有人想到,去市面上调用现成的快递地址接口不就行了么。再然而,小白也想过这个法子,经过测试(百度AI、腾讯云、万维)这几个现有的接口,都存在一个通病,如果是只有收货人的情况下,准确度确实是有保障的。但是如果出现了下单人收货人都有的情况下,经常只会提取出下单人,反而收货人没提取到。并且像客户的一些特殊要求、结算方式是没法提出出来的。

那么接下来的方向就比较明确了,借助GPT,根据相关的提示词,让GPT输出相关的字段信息。后续根据输出结果做相关优化。

三、关于GPT、JioNLP库

什么是GPT?

生成式预训练Transformer模型,通常称为GPT,是一系列使用Transformer架构的神经网络模型,是为ChatGPT等生成式人工智能应用程序提供支持的人工智能(AI)的一项关键进展。GPT模型使应用程序能够创建类似人类的文本和内容(图像、音乐等),并以对话方式回答问题。各行各业的组织正在将GPT模型和生成式人工智能用于问答机器人、文本汇总、内容生成和搜索。

GPT的工作原理

尽管将GPT模型描述为人工智能(AI)是准确的,但这是一个宽泛的描述。更具体地说,GPT模型是以Transformer架构为基础构建的基于神经网络的语言预测模型。这些模型可以分析自然语言查询(称为提示),并根据对语言的理解预测最佳响应。即ChatGPT 的核心任务始终是生成一个“合理的延续”

JioNLP库

JioNLP 是一个面向 NLP 开发者的工具包,提供 NLP 任务预处理、解析功能。功能主要包括:文本清洗,去除HTML标签、异常字符、冗余字符,抽取E-mail、电话号码、QQ号、括号内容、身份证号、IP地址、URL超链接,解析身份证号信息、手机号码归属地、座机区号归属地、E-mail域名,按行快速读写文件,停用词过滤,(优化的)分句,地址解析,繁简体转换,汉字转拼音,汉字偏旁拆解,基于词典的情感分析,色情数据过滤,反动数据过滤,关键短语抽取。

四、实现方式、调试

基本思路:以提示词的方式让GPT去提取。既然客户收到的这部分都是快递信息,那么开头一定要让GPT以快递(物流)行业从事人员执行接下来的工作。接着说明已知的快递类型有哪几个(最好附带简称)、结算方式有哪几种,最后让GPT提取寄件人、寄件人联系方式、收件人、收件人地址、收件人联系方式、特殊要求。并指明以字典格式输出。

初步测试,主要存在几个问题:

1.和市面上的接口一样,如果以同一个提示词去做提取,对同时存在发货人、收货人的情况下,只会提取到发货人并且错当成收货人(GPT3.5)。


输出结果对调

2.输出的结果虽然是字典格式,但是字段不固定,比如收货人的电话号码,有的时候输出"收货人联系方式"又有时候输出"收货人电话"

3.提取地址虽然能出来,但是如果区分省市县区街道以及详细地址的话,精确度没保障(以下是3.5版本明确要按省市县提出的结果)


GPT3.5版本明确要按省市县区分的结果

 

针对上面的问题做对应的调整。

1.由于不同的场景不方便用一个提示词获取信息,那就得做区分。小白这边取巧了,因为正常情况下,不管是下单人还是联系人,都留有电话号码,依照电话号码格式去判断哪一种情况。大家可以网上找一下国内手机/固话的格式,用正则匹配提取号码个数,然后采用不同的提示词,即仅有收货人的话,就不提示获取寄件人。

2.由于字段不固定,所以在提示词内容上,追加提示。务必/一定要以xxx格式输出,输出的字段一定包含xxx

3.虽然提取出详细地址,但是采用GPT3.5的话无法直接区分省市县街道,这个时候就得采用JioNLP库了,以固定字段输出然后做文本的二次处理。

(此处可以参考此前社区小伙伴发过的文档,链接:https://www.yingdao.com/community/detaildiscuss?id=3a445824-a508-4b07-8908-9428e78ab84a,该库的详细使用可以上官网,不止地址的区分)

 

调整之后做二次测试。

经过测试,单人提取的准确度相对较高,已经能够满足业务需求。并且字段固定统一,方便写入对应的Excel。经过JioNLP二次处理过的地址,已经能够精确的输出快递详细地址(省市县区街道详细点)。

然而依旧还存在问题:

1.同快递接口类似,提取多人联系方式的时候,常出现下单人、收货人对调的情况。这部分情况(也就是多人的情况)虽然采用GPT4.0的情况能几乎完美的解决,但是考虑到客户的预算以及小白勤俭持家的美德,尝试用其他方法突破。


GPT4.0提取(精确度稍微高点,但是贵且慢

 

2.其他偶发性问题,比如一个字典只输出键值对缺少括号、输出的字典格式的数据,有的时候是JSON格式,有的就普通字典格式(的文本),提取到无数据的时候,可能是空值的文本,也可能是None值的文本。


其他小问题(引号、None值和空值)

 

但是没有关西~只要思想不滑坡 办法总比困难多。继续优化

关于输出结果的问题,在转换成JSON格式前做一次文本的清洗处理,即统一替换None、" ' " 符号等,加入花括号判断等。效果较为明显。

最关键的是关于多人情况下数据提取的处理。这部分小白有取巧了(主要和客户提供的数据有关),绝大部分的快递信息,均为先寄件人再收件人,那么小白想了个骚操作,比如我先提取到寄件人的手机号码,然后反之去定位手机号码在文本中的位置,分割成两段,前半段寄件人,后半段收件人。按照这个思路去测试,果然效果提高了不少。

最后参考提示字段:

请你作为快递行业人员,一定要从发货信息提炼出发货信息。已知合作的快递公司有X个,分别为'顺丰快递(简称为顺丰)'、(这边自己添加对应类型),付款方式有X种,分别为'到付'、'寄付'、'月结'.请从客户的发货信息中,提取寄件人姓名、寄件人电话、指定快递公司、付款方式、寄件人特殊要求(比如'加急','签回单','打木架','落地取','保价'等)、收件人姓名、收件人电话、收件人地址,提取结果一定以要字典格式输出,字典的key一定要包含'寄件人姓名','寄件人电话','指定快递公司','付款方式','寄件人特殊要求','收件人姓名','收件人电话','收件人地址'

客户的发货信息如下:(后续即添加待提取文本内容)

测试效果如下(放不了高清大图大家将就看看):

五、其他

以上是小白琢磨出来的小测试,测试文件/流程截图也会放在这边。感兴趣的小伙伴可以实际操作测试下。欢迎各位小伙伴补充交流哈~

 
  • 本文由 小初seo 发表于 2023年9月1日02:23:40
  • 转载请务必保留本文链接:https://www.pkak.cn/win/9829.html
匿名

发表评论

匿名网友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

拖动滑块以完成验证