本文基于之前做过的票据交易服务平台,思考AI技术如何与票据交易场景相结合。应用OCR和NLP技术,可以辅助票据录入和票据签收,从而提高企业的工作效率。本文按以下几个部分作说明:
这是我一年前参与的从0开始设计的项目,当时没有在业务场景中应用AI技术。但现在回顾,还是有不少场景可以通过AI技术来提高效率的。下面内容是对当时业务作的简单回顾
一些概念
1.本文中的“票据”特指商业汇票,包括银行承兑汇票和商业承兑汇票; 按介质类型又可以划分为:纸票、电票。平台服务以电子银行承兑汇票为主,下面为电票的正面和背面信息样本图:
2.票据的签发是基于真实的贸易背景的,企业A为企业B提供产品/服务后,B需要向A支付款项。如果B支付“票据”给A以结清款项,那么企业A拿到票据后,可以采用以下几种常用方式获得现金:
3.票据中介,一般指通过买断票据,再贴现给银行,赚取差价的企业。这类企业的优势之一在于在收票端有大量的票源,出票端对接多家合作银行,可以找到最低的价格来贴现。
票据作为支付或融资手段,关于票据或其衍生品的金融产品很多。票据业务的知识广泛,本文只作最简单的说明,票据知识入门推荐看 什么是票据?终于有人说明白了
用户画像
平台主要服务的用户是票据中介和具备票据流转操作需求的企业,此类客户有高频交易的特性。此类客户的业务诉求,简单概要为:
1.能高效率地获取精准的票源客户
2.资金交易安全
3.交易及时,实现秒打款(从有交易意向到钱票交换完成,通常在30分钟以内是可接受范围)
产品介绍
我们的票据服务平台主要分为三个技术核心系统:
1.票据撮合系统:为持有票据的中小企业获取贴现渠道,让收票机构高效率低成本的获取精准客户,解决市场信息匮乏和不对称等问题。
2.票据交易系统:让企业完成在线“钱票交换”,即资金、票据的安全流转。包括资金的收付、票据的转让和签收。
3.SaaS票据审批管理系统:基于SaaS结构的业务审批系统,包括企业的收票、出票业务审批、库存管理、报价管理、统计报表管理等
业务主流程及解决方案
1.业务主流程
审批管理系统的业务主流程,包含了5个模块:报价管理,业务发起,业务审核,钱票交换,记账。
主流程中的业务环节中,有些对企业人员的行业知识程度高,规则变化较大。但有些流程通用程度高,是一些规则明确的操作。下面针对各环节作简单说明:
1)报价管理
票据的贴现利率是每日变化的,报价单位不同,企业每天收怎样的票据(如期限范围,类型,到期日期,背书次数,背书要求等等)都是有不同的要求。所以无论是价格上,还是票据的要求上都具有非确定性。
当时的解决方案:报价管理模块目前是有人工来维护,操作包括创建,提交,报价审核,发布,下架等,而每个操作动作的触发条件不同也是不同,由系统提醒+人工操作来完成。
2)业务发起
业务发起根据发起角色,发起方式,不同会影响后续的交易和审批流程。但发起的表单的内容较为固定,包含信息有:票据信息、票据报价、平台费用。此部分在业务层面上,是有提高效率的需求的。
当时的解决方案:人工录入票据信息,在创建卖票时从“票据库”选中相关票据,对缺少的信息作人手补充。
3)业务审批
业务审批部分,企业可根据内部审批政策来自定义审批流程,一般包含运营审核、财务审核,运营通常关注票据及价格信息,财务关注票据、价格、费用、收款人/付款人信息等。
4)钱票交换
此部分操作主要在票据交易系统完成,系统间作信息的交换,审批系统会收到交易对手方的相关操作信息,如操作状态和结果等。
5)记账
记账分为收票记账和出票记账。对票据信息进行完善,并对票据库存作更新。
当时的解决方案:登录网银查看,人手检查并在系统中记录。未能自动记账的原因主要是票据签收中有线下维护的信息,为了保证交易时效把此部分放在交易后维护。
2.业务场景举例
正如上文所说,根据交易的发起方式不同,交易角色不同,有不同的流程。下面举一个例子:针对卖方发布的票源,买方主动发起交易时,买方的流程:
从业务规则是否简单/固定、业务流程的耗时和频率、出错率、容错率等维度出发,得出以下适用结合AI技术的业务场景。
场景一:票据录入
1.需求背景
在票据交易的卖票业务场景下,企业询价通常需要先录入票据,所以票据录入是企业用户询价的第一步,是用户的高频需求。票据的关键信息众多。任何一个关键信息都可能会影响交易。如果要添加多张票据,一个个添加是很低效率的行为,且不能保证准确性,还需人工一个个校验。
2.使用场景
如果在我们的平台交易的票据,信息就已经在签收、收票记账时维护好了,不需要再录入。需要录入票据的场景有:
1)从其他线上平台收回来的票据,财务登录企业网银将票据的正背面截图保存下来,共享给运营部门,然后在在PC端录入到票据库中;
2)还有一种场景是运营或业务员在移动端录入票据。
综合来说,识别的图像主要以截图图片为主,识别的文本有中文、数字、金额符号。操作平台为:移动端和PC端。
场景二:票据签收&记账
1.需求背景:
1)在收票业务中,如前述的例子(针对卖方发布的票源,买方主动发起交易),财务部门在收票流程中,需要对电票的背面信息进行分析,避免收到有异常/瑕疵票。当时的操作方式是财务部登录网站,查看电票的正面、背面信息查看,如果票据转让的次数多,需要花耗很多的时间。
2)在记账业务中,还需要把缺少的信息(此类信息通常不影响价格,但影响收票,如:出款人)全部更新完整。如图:
综合来说,识别票据所有信息并作出鉴别,操作平台为PC端。
当时的解决方案:手工记账+工具辅助
1)开发了“背书分析工具”以提高效率,其处理逻辑:登录网银行,把复制背书详情中的文字,得到相关文本,产品事先定义好关键字或者短语(穷举所有可能的关键词,如“承兑人名称”等)、相关规则和结果。并将信息做结构化显示,在UI上呈现数据和结果。如下图
存在问题:1)此工具无法覆盖所有银行的电票信息,有此银行的电票信息无法复制,如招行(只能导出excel文档) 2)制定规则无法穷尽所有的情况 3) 工具只能分析出是否有回头和重复票,但票据的异常情况有20多种。如下图:
上述描述的业务场景,可以使用OCR技术辅助,将票据录入到系统,并对票据的正面和背书信息过行分析。
整理框架分为四个部分:图像采集、OCR识别、提取含义、结果展示
1)图像采集:根据场景不同,可以采取上传图片/截图或者调用摄像头进行拍照。对于图像的大小有一定要求。卖票询价时通常只需票据正面信息,所以应当支持多张票据同时上传
2)OCR识别:按文字图像的类型分为印刷体文字识别和自然场景文字识别,深度学习OCR识别主要分为文字检测、文字识别两步骤。下文技术预研会详细描述。
3)提取含义:OCR识别出来图片中所有的文字段,这时需要找到需要的字段,并将关键信息提取出来。我们使用正则表达式来查找票据的信息,票据抽取的字段有一些共通点,如电票票号通常为16~18的数字; 识别出两个日期一个为出票日期、一个为到期日期,到期日期>出票日期; 承兑人为银行机构(含银行、营业厅等关键字的文本行)等,票面金额为大小繁体,再通过转换成小数得到小写金额。如果是从大数据中抽取信息,可以使用NLP技术实现。
4)结果展示:将提取出来的含义,显示到前端界面,由用户进行核对,正确无误后提交。继续报价流程。
流程图如下:
1)打开企业网银打开票据,从签票工具的“添加票据”入口启动“截图工具”完成截图(同时应支持截取长图片)
2)图像自动调用服务端的OCR识别获得文字识别结果
3)根据识别结果,根据正则表达式完成含义提取,返回结构化的识别结果
4)基于识别结果进行票据分析,得到分析结果(如到期、上下不一致、背书X次、背书回头、背书重复、黑名单银行等等)。
5)分析结果为正常票据,进行票据签收; 如果是异常情况,则拒绝签收。
6)票据签收后,如果增加人工核对环节的,核对后完成记账。没有人工核对的,系统自动完成记账,并生成票据签收清单。
文字识别,俗称OCR光学字符识别(Optical Character Recognition)是对输入图像进行分析识别处理,获取图像中文字信息的过程。
OCR主要分为两类:
传统OCR技术流程如下:
技术流程可以分为三个阶段:图像预处理、文字行提取、文字行识别。
1)图像预处理:主要包括倾斜校正、图像增强、噪声处理、图像滤波等,这个过程主要目的是减少图像中的无用信息,以便后面的处理。
2)版面分析:将文档图片分段落,分行的过程。 版面分析通常使用连通域分析方法,行切分采用投影分析来生成文本行,即把每一行的文字切割下来
3)字符切割:对每一行文本进行列分割,切割出每个字符。由于拍照条件的限制,经常造成字符粘连,断笔,因此极大限制了识别系统的性能,这就需要文字识别软件有字符切割功能。
4)字符识别:把字符送到OCR识别模型进行字符识别,得到结果。
5)后处理:对识别结果进行矫正和优化。根据特定的语言上下文的关系,对识别结果进行较正,就是后处理。通常使用HMM、CRF算法。
字符识别技术从字符模板匹配,到以特征提取为主的识别模型(SVM分类器),再到基于深度学习的CNN字符识别、最后向端到端的方向发展。
字符模板匹配–>传统机器学习–>深度学习CNN字符识别–>端到端系统
字符模板匹配
比如识别只有数字的场景,需要首先定义10个数学模板(0~9),然后用模板匹配图像上的字符,这种策略虽然简单但相当有效,且只需要维护好模板库就可以了。但这个方法只限于一些很简单的场景,对于稍微复杂的场景,并不太实用。显然不适合我们文中的需求
传统机器学习方法(基于特征提取)
传统机器学习方法做字符识别的步骤为:特征提取—>模型选择—>数据训练—>语言模型—>输出识别结果
首先需要对原始数据进行处理,抽象出关键特征(字符的结构特征:字符的端点、交叉点、圈的个数、横线竖线条数等),将关键特征作为算法模型的输入 ; 使用分类器(如SVM)作为OCR识别模型; 用数据对模型进行训练; 为了减少识别错误率,还可以将识别问题跟语言模型结合起来,通过动态规划的方法给出最优的识别结果。
此类方法存在的问题:
基于深度学习方法
基于深度学习的OCR技术将流程简化为两个主要的步骤:文字检测(即文字区域定位)和文字识别。简化的步骤降低了因误差累计对最终识别结果的影响。
–文字检测
文字检测的目标是对图像中存在文字的区域进行定位,并找到单词/文本行的边界框。如下图用绿色框把文本行框出来。
1)近几年的目标检测算法
深度学习目标检测算法,从最早的R-CNN、Fast R-CNN到后来的YOLOv2、YOLOv3,模型性能越来越好。以下是从近几年(2013年到2019年)目标检测的发展和相关论文。
以上视觉领域常规的物体检测的算法直接套用在文字检测任务中效果并不理想,要对常规的物体检测方法进行改造来提升文本检测的准确率。
2)文字检测的算法
基于深度学习的文本检测方法使用效果更加鲁棒的高层语义特征,利用更多的数据去拟合更复杂、泛化能力更强的模型。要执行文字检测任务现在主流算法是基于CNN的,例如:
CNN的网络结构:
1.卷积层提取图片初步特征
2.池化层提取图片主要特征
3.全连接层将各部分特征汇总
4.产生分类器,进行预测识别
使用CNN的好处:
1.对原始图像自动提取特征,免除传统模型的人工提取特征这一比较困难的核心部分
2.比传统模型有更高的精度
3.比传统模型更好的泛化能力
该任务根据是否有先验信息和自身的复杂性又可以划分为:受控场景文字检测、非受控场景的文字检测。
1.受控场景的文字检测,如身份证识别、银行卡识别、发票识别等场景。
本文中讨论的票据识别就属于这种,它的正面的先验信息有:
a.大部分银行的电票的正面是长宽度固定的;b.字体及大小一致;c.文本的相对位置是较为固定;d.存在固定文字。e.电票的背面的长度是跟随着处理的业务,业务类型是可以穷举出来的,也可以转化成结构化的信息。
主要算法:Faster RCNN(是一种用于任意方向文本的端到端文本检测方法,能够有效解决文字尺度不一、形态各异,和检测器对尺度过于敏感等问题,大幅提高了检测环节的精度。)
2.非受控场景的文字检测,适用为复杂的场景图像文本检测任务,例如广告文字这类背景复杂的随意文字。
主要算法:CTPN、FSTN、RRPN、DMPNet、EAST、SegLink、WordSup
–文字识别
文字识别的目标是对定位后的文字进行识别。如下图
1)文字识别的算法
该任务可以看作是一个多分类问题,通常基于LSMT网络的技术路线,进行序列化(词汇、短语、语句等)识别。常用的算法有:
–深度学习OCR方法需要考虑:
端到端系统
同时完成文字检测和文字识别任务的端到端的系统,论文中的到的算法比如:STN-OCR、FOTS等
关于各类算法,参考了以下文章:
场景文字识别(OCR)调研
OCR技术浅析
美团-深度学习在OCR中的应用
腾讯-OCR检测与识别技术
衡量OCR系统的好坏有两部分内容:
1)是否成功地圈出了文字
2)对于圈出来的文字,有没有成功识别
常用量化指标有:准确率、召回率、F-值和识别速度
准确率=正确识别的文字数量占所有被识别字符的比例。
召回率=正确识别的文字数量占所有字符的比例。
F-值= 2 X 召回率X 准确率/(召回率+准确率),此值越大越好
识别异常的情况为:识别错误字符、漏识别字符、识别多余字符。OCR技术识别结果要结合人工确认,允许用户对识别结果进行修改。
使用OCR技术进行字符识别有如下几种策略:
要选择采用哪种策略或方法,首先需要从构成OCR产品的三大要素:算法、数据、算力来考虑。
1.算法:关于技术实现的各类算法在技术预研中已经有描述。
2.云服务器:AI模型的训练对服务器的运算能力有较高要求,GPU服务器比一般云服务器更适合深度学习项目,企业通常可以采用租用GPU云服务器或购买GPU服务主机进行模型训练。
3.训练数据:深度学习模型的训练需要大量的数据,且数据集图片种类多,数据标注成本高。
根据功能定义,我们需要识别的是银行电子承兑汇票,虽然不同银行的电票的表单样式不太一样(例如下图招商银行的电票信息)但都属于印刷字体的识别,只需要识别简体中文、数字和大写金额。所以我们对于印刷体识别数据集获取方式有三种:
1)使用公开数据集。主要来自ICDAR比赛和AI研究机构
2)使用计算机自动生成一批训练数据。可以使用灰度图像构建样本,作为模型的输入。输出方面,因为识别的最多文字是机构名称(如银行、公司名称),可以在网上爬取此类数据,然后作为模型的输出。同时可在图片上加上随机噪音,以增强模型的泛化能力。
3)使用线上数据去训练。由于平台有数据积累,可获取到企业用户在线上交易的积累的交易数据(包含图片,以及审批系统中维护的票据数据)作为标注数据,随着交易量增加,数据也会增加。
4.深度学习开源框架:文字识别技术研究已久,从传统OCR到深度学习OCR,有少成成熟的OCR技术和产品产生。比如Tesseract、OpenCV、Tensorflow
如果要使用自研团队来实现算法模型,就需要了解深度学习OCR的开源框架,根据业务选择合适的开发平台,设计网络结构。
5.OCR开放平台:行业知名的OCR技术和产品,如百度OCR、腾讯优图、阿里云通用文字识别、京东、有道、ABBYY fineReader等。衡量OCR系统核心指标包括:准确率、识别速度、接口稳定性、QPS、用户界面的友好性、易用性及可行性等。
是否对接开放平台,除了考虑以上指标外,还需要考虑到此方法的两个问题:
1)成本。要关注调用服务的价格。一般平台都会有免费的调用量。
2)企业对AI产品的控制程度不足。我们想要提升识别准确率,不可以从OCR识别上做改进,因为平台作为技术提供方,toB企业直接做改善,只能做图像的预处理和识别后处理来提高准确率。
以下是几家平台的指标对比图:
公司/对比 | 百度-通用文字识别 | 腾讯-通用印刷体识别 | 阿里云-通用文字识别 | 有道-通用OCR |
---|---|---|---|---|
识别准确率 | 印刷体识别准确率99%。复杂场景的手写体识别率准确率比较低。 | 印刷体的平均准确率可达90%以上,手写体的识别平均准确率高达85%以上。 | 普通版,对临近边界、笔画多字体、中英混合的识别效果不理想,高精版准确率可达95%以上。 | 印刷体文字识别测试效果比较好的。手写体识别效果一般,复杂场景识别不好。 |
服务方式 | 云端Paas服务接口,用户可直接调用API或使用SDK对图片中的文字进行识别。提供离线SDK和本地私有化部署。 | 提供直接调用的全面的 API 接口和SDK 供开发者使用。 | 提供直接调用的 API 接口 | 云端Paas服务接口,支持IOS/Android SDK和API接入。提供离线及本地私有化OCR部署 |
SDK支持语言 | 支持Android、iOS、Java、PHP、Python、C++、C#、Node.js多种编程语言 | Java、PHP、Python、Node;SDK不支持移动端开发语言 | IOS/Android | |
识别速度 | 测试接口识别速度1s-2s,同时识别时间会受图片大小、字数多少及网络环境影响。 | 一般在200ms - 1s内,识别时间会受图片大小、字数多少及网络环境影响。 | 使用通用GPU识别,识别速度快,一般200ms | 测试识别速度比较快,识别时间会受图片大小、字数多少及网络环境影响。 |
QPS | 免费服务不保证,付费服务10/s | 通用印刷体识别:20次/秒;高速版:10次/秒;高精度版:10次/秒 | 3600/小时 | |
价格 | 通用版:价格0.0025—0.005/次,50000次/天免费调用量;高精度版:价格0.01—0.03/次,500次/天免费调用量;含位置版本:价格0.0047—0.01/次,500次/天免费调用量. | 通用版:价格0.15元/次—0.06元/次,1000次/月免费调用;高速版:价格0.50元/次—0.20元/次,1000次/月免费调用;高精度版:价格0.50元/次—0.20元/次,1000次/月免费调用. | 按资源包形式购买,资源包有效期1年。有500次免费调用量。通用版:价格0.238元/次—0.023元/次;高精版:价格0.50元/次—0.10元/次 | 通用版:价格0.0045元/次—0.01元/次,每月没有免费调用量 |
6.确定方案
通过上述分析,我们要确定最终方案,需要根据OCR技术实现的候选方法/策略出发,一方面需要与客户反复沟通需求,思考清楚业务场景; 另一方面需与开发一起选用适合的技术以及算法,然后综合公司的实际情况决定哪些场景都需要用AI解决,投入多少资源(成本)进行研发。
以上是对AI技术与票据交易场景结合的思考过程。除了上面列举询价时的票据录入、票据签收时的验票、收票记账环节用到了OCR技术,其实还有报价管理模块的报价推荐、票据获取等场景可以使用NLP技术等AI技术去实现智能化。企业要将自身产品+AI时,需要作综合考虑。