我用90M的小模型解决了银行流水核对的世纪难题
大概 6 年前,我用 VBA 写了个序时账和银行流水核对小程序,
当时解决了银行流水一对一的问题,
再后面“效率视界”王文铖,又进一步优化了很多,做了一对多模糊匹配之类的。
但最近和业务人员交流,才发现,其实这些一直没有解决问题。
难点如下:
- 交易对手核对。核对的本质其实就是核对交易对手,这个一直有缺失。
- 一对多、多对多没有解决。
今天,我重新在 SW审计工具箱写了个银行流水核对的功能。
一切从交易对手出发。
交易对手的拆分
一笔银行流水,正确的做法,是根据相同凭证号,找到对方科目,
再找到对应的客商,
然后把这一笔流水,拆分成对应客商的多笔金额。
这样,其实就解决了很多一对多的问题。
交易对手的核对
我们知道无论是客商还是摘要和银行流水中的交易对手其实不一定完全一致。
这里就需要语义理解,
我使用了一个 90M 的向量模型,让这不完全一致的交易对手进行核对。
分成了 6 个主要模式匹配,每匹配一次,就将匹配上的数据从池子里拿掉。
- 交易对手精准匹配。
- 摘要精准匹配。
- 交易对手语义匹配。
- 摘要语义匹配。
- 同客商-多笔汇总。比如相同交易对手,同一天(近几天)多笔汇款对应一笔或者多笔银行流水,也可以当月的交易对手进行汇总。
- 金额-独一。以上都匹配不上的时候,就拿金额来对了(一般没有交易对手,摘要也没有效信息)。一一对应。
- 金额-凑数。再不行,就是多个金额凑数,这个其实效率很低,所以限制了每次计算次数,避免死机。
通过以上匹配,我把之前同事一个项目大量,一对多,多对多,第三方回款的项目,
金额匹配率干到了99.6% ,数据条数匹配率干到了 96.1% 。
当时核对这个项目流水的同事,不禁发出这样的感叹:
交易对手的一致性
当然匹配上是基础,还需要明确告诉审计师这个有没有问题,
或者说给定人工检查范围。
所以输出结果里,一是输出每一行数据的匹配模式(上面的 6 种),
还有一个字段“交易对手核对”,明确给出“一致”还是“不一致”,
通过这个字段去检查,可以直接看出是否是第三方回款的情况,
再执行进一步审计程序。
结语
这里我们利用本地的 90M 的AI 模型( bge ),
就解决了交易对手模糊匹配的问题(并且高置信度的才算匹配上),
完全模拟替代了以前人工核对的思路。
当然,这中间,我还参考了作为人类会计,他们平时做账时的常见习惯,
把这些习惯融入到核对逻辑中。
避开了完全去凑数的暴力方法(当然最后兜底也使用了),
还是用正常人类的思维去思考,
这是更有效的方法,
至少目前来看,效果不错。
等我再拿一些项目数据测试优化后,
就可以解放所内的初级同事了。
AI 从来不是为了 AI 而 AI ,
也不是要什么高大上的技术或者模型,
90M 本地CPU就可以跑的效率奇高的小模型,
也能发挥大作用。