APP下载

OCR文字识别在股票查询的运用逻辑_使用者

消息来源:baojiabao.com 作者: 发布时间:2024-05-02

报价宝综合消息OCR文字识别在股票查询的运用逻辑_使用者

本文将以行业+AI的角度,介绍OCR技术在证券业务中的运用,且详细介绍功能背后的AI技术和技术选型思考。

一、需求分析 1. 需求背景

对于股票服务类软件,新增自选股是使用者的高频需求,自此之前查询股票是前置步骤,APP中批量查询股票并新增自选股一直是一个无法解决的痛点问题,如果新增几十只股票,需要一只一只的查询新增,操作非常麻烦。

另一方面,股票业务经过多年的互联网线上发展,线上新手使用者已经很难开拓,获客方式是通过提供差异化的服务,吸引其他股票产品使用者,并提高使用者转化留存,培养使用者使用自己产品的习惯。此场景中老使用者都有自己的自选股池,批量汇入自选股,是提高使用者留存的必经之路和关键环节。对于运营转化提升,有非常重要的价值。

2. 为什么使用OCR

新增自选股的第一步是查询股票,查询股票可以通过三种方式操作:手动输入查询、语音查询、图片识别查询。

三种查询方式对比如下表:

从表中可以看出图片识别查询在进行批量操作有绝对的优势。此外,灵活的使用场景,便捷的操作方式,未来可能会逐步成为使用者查询股票的高频行为之一。

3. 确定场景和需求

1)移动端主流场景分析

2)功能需求及非功能需求

对于非功能性需求,需要基于使用场景考虑,查询股票虽然是一个高频需求,但使用者使用场景不像下单购买那么急迫,对识别的速度、并发量行业平均水平即可,在2秒左右可以接受。识别失败是体验中比较受挫的事情,对使用者体验影响大,对常用的印刷体识别准确率要高,至少达到90%以上。

二、产品方案规划 1. 整体功能架构

[2-1图片识别股票名称框架图]

基于图片查询股票功能,主要由三部分构成:第一部分是前端互动流程,第二部分是OCR文字识别,第三部分是文字提取。

1)前端界面互动

[2-2 图片识别股票名称界面流程图]

2)OCR文字识别

相比于传统OCR场景(印刷体、扫描档案),移动端OCR场景主要是针对手机拍摄的照片或手机截图进行文字资讯提取和识别,考虑到线下使用者的多样性,因此主要面临以下挑战:

以上问题,普遍使用基于深度学习OCR进行解决。

3)文字提取

股票名称提取,涉及到从识别的文字中提取文字。

股票名称有维护中的资料表单,A股市场整体也就2000多只股票,资料量不大,所以通过正则表示式,进行股票名称提取即可。如果从大资料中提取文字,用NLP技术是当前比较普遍的方式。

2. 功能流程图

[2-3 图片识别股票名称功能流程图]

3. 服务接入方式

批量新增自选股功能是以APP为载体,除了必要的功能及互动之外,大量计算都是服务端进行处理,适合以界面形式获取OCR文字识别和文字提取服务。从效能和体验的角度考虑,相比API界面,通过SDK的调取方式是最好的。

三、OCR文字识别技术选型

OCR文字识别是产品方案的核心技术。

对于OCR文字识别技术,可以从两种途径获得:

实践过程中,两种方案各有利弊,需要从公司资源和业务规划层面评估,哪种方案是最好的,下面来介绍两种方案的实现。

1. 自研发OCR文字识别

自己团队研发OCR技术,实践中的关键点在于如何设计网络结构和合成训练资料。虽然有公开资料集,但是资料集并不一定完全吻合自身业务,可能需要自建资料集,或多个资料集筛选整合到一起,如何获取高质量的资料集和训练出高识别率的网络结构,是AI技术的团队的核心工作。

1)资料集

OCR演算法训练最有难度的是资料,一方面是训练资料集大。普遍应用的深度学习OCR技术,需要大量的资料来保证训练效果,此外,中文汉字型档非常大,一级字型档有3755个汉字,再加上三级字型档,就有上万个汉字,印刷体汉字还有9种常用的字型,手写体汉字更是千人千面,这些组成一个庞大的资料集。

另一方面资料集图片种类多,资料标注成本高。OCR场景图片识别会有很多因素影响识别效果,如复杂背景、艺术字型、低分辨率、非均匀光照、影象退化、字元变现、多语言混合、文字行复杂版式、检测框字元残缺等等,有效的资料集需要包含这些关联因素。

根据功能定义,OCR文字识别技术需要识别中文和数字,相容印刷体识别和手写体识别,未来需要扩充套件英文识别。

对于手写体识别资料集,选择中科院自动化研究所的公开收集。对于印刷体识别资料集获取方式是:公开资料集+合成资料,公开资料集主要来自ICDAR比赛和AI研究机构。

除此之外,需要自己合成资料,来进行资料增强,对于资料增强需要考虑字型、形变、模糊、噪声、背景变化等因素。合成资料可以弥补深度学习资料量和资料多样性不够的问题,使训练出来的模型泛化能力更好。

一般我们获取到的是最原始的资料集,会有不同的格式,在影象深度学习训练中我们一般都会把原始资料集转化为统一的资料格式以方便后续的网络训练。

2)框架工具

OCR技术已经从传统OCR发展到深度学习OCR,并已成为主流趋势,所以需要选择深度学习框架和工具进行演算法训练。

常用工具有下面几种:

Tesseract:

Tesseract是一款很流行的开源OCR引擎,它的特点是开源、免费、支援多语言、多平台,是一直以来使用比较普通的OCR工具,可以快速搭建图文识别系统。它可以读取各种格式的影象并将它们转化成超过60种语言的文字,但是中文的识别效果不理想,需要使用自己的库进行训练,开发符合自身需求的OCR引擎。

以前的Tesseract是基于传统机器学习的引擎,现在Tesseract (v4) 最新版本支援基于深度学习的OCR。底层的 OCR 引擎使用的是一种循环神经网络(RNN)——LSTM 网络,准确率显著提高,更符合当前的深度学习OCR趋势。因为使用的是别人的OCR引擎,所以自己优化网络结构提高识别率的灵活性差。

Tensorflow:

Tensorflow是非常流行的深度学习框架,尤其是对影象处理有很好的效果,基于其深度学习库,可以很好的进行OCR文字识别训练。

使用Tensorflow虽然没有Tessract效率高,但是有更高的灵活性和探索性,基于深度学习库的使用,可以设计出更适应业务需求的网络结构,更好的提高OCR识别效率。对于研发能力强的团队,更倾向于使用基础框架,自己设计网络结构。

OpenCV:

OpenCV是一个跨平台的开源计算机视觉库,提供基本的计算机视觉、影象处理和模式识别的开源专案,实现了影象处理和计算机视觉方面的很多通用演算法。

OpenCV模组支援Caffe、TensorFlow、Torch、PyTorch等深度学习框架应用于OCR领域,可用于检测、识别自然场景影象中的文字。OpenCV在资料增强方面价值尤其突出,通过合成资料集,训练演算法,提高OCR识别率。

3)框架设计

设计网络结构是OCR实践中的另外一个关键点。识别文字建模为一个多分类任务,比如3755个文字识别就需要3755个类别的分类任务,实际训练中可能有上万个分类。

深度学习OCR框架通常包括文字检测和文字识别2个模组,文字检测是通过检测演算法定位到文字行,然后通过文字识别演算法阅读出文字行的内容。

【3-1 深度学习OCR框架】

文字检测是场景文字识别的前提条件,要在杂乱无序、千奇百怪的复杂场景中准确地定位出文字的位置,需要高效合理的文字检测框架支援。适用于通用场景的主流文字检测框架有两种FCN和CTPN,对广泛应用的Faster-RCNN框架适用于特定场景文字检测,如身份证识别、银行卡识别、发票识别等场景。

FCN:

FCN是基于全卷积网络的文字检测方法,在通用场景的文字检测领域有很好的效果,尤其是背景复杂的户外广告牌识别。

FCN框架基于全卷积网络的方法,同时使用分割(Segmentation)和边界框回归(Bounding Box Regression)的方式对场景文字进行检测,直接产生单词或文字行级别的预测(旋转矩形或任意四边形),通过非极大值抑制产生最终结果。

【3-2基于FCN的文字检测流程图】

【3-3 基于FCN的文字检测网络结构图】

CTPN:

CTPN是基于联结文字建议网络的文字检测方法,与传统文字定位方法相比,通过CNN提取深度特征,并结合RNN进行序列学习提升文字检测效果,大幅提高文字框边界检测精度,尤其对于长文字(水平及具有一定倾斜角度的长文字)的检测。

CTPN演算法框架主要思路是:将文字行识别看做一个序列识别问题,通过在卷积网络的特征图上提取Anchors,并计算每个Anchor的得分,并在计算得分的过程中,综合利用上下文资讯、每行的文字序列特性,采用RNN进行建模以判断文字的得分。

【3-4基于联结文字建议网络的文字检测模型架构图】

【3-5经典的CTPN网络模型架构图】

在文字识别过程中,将整行文字识别问题归结为一个序列学习问题。

基本思路是:CNN与RNN结合,CNN被用于提取有表征能力的影象特征,而RNN处理序列问题,学习上下文关系。

文字识别框架近两年比较受关注的主要有两种:一种是CNN+RNN+CTC的方法,另一种是Attention model+CNN+RNN。

CNN+RNN+CTC:

文字识别可建模为时序依赖的词汇或者短语识别问题,基于联结时序分类训练RNN的演算法。

相比于传统OCR,其识别效果更好。CNN+RNN+CTC网络结构包含三部分,从下到上依次为:

【3-6 CNN+RNN+CTC演算法模型架构图】

Attention model+CNN+RNN:

Attention model+CNN+RNN是基于注意力模型的文字识别方法,其实这两大方法主要区别在于最后的输出层(翻译层)——即怎么将网络学习到的序列特征资讯转化为最终的识别结果。

这两大主流技术在其特征学习阶段都采用了CNN+RNN的网络结构,CRNN OCR在对齐时采取的方式是CTC演算法,而attention OCR采取的方式则是attention机制。注意力模型在广告影象、自然场景影象等极具挑战性的场景取得了很好的端到端识别效果。

4)演算法测试

衡量一个OCR演算法效能的常用指标包括精准率、召回率、F值和识别速度。

精准率与召回率:

精准率可以理解为:模型识别字元“A”,最终识别成功的数量占所有被识别为字元“A”的比例。精准率是演算法最重要的标准之一,精准率测试除了对字元进行测试外,还对条目进行测试。在印刷体识别中OCR的识别率比较高,普遍达到90%以上,但在自然场景文字识别中,获得理想的准确率面临着非常大的挑战。

计算公式为:

精准率=TP/(TP+FP)

召回率可以理解为:模型识别字元“A”,最终识别成功的数量占所有字元“A”的比例。召回率与精准率在一般情况下是矛盾的。

计算公式为:

召回率=TP/(TP+TN)

F值(也称F1值):

精准率和召回率是互相影响的,理想情况下肯定是两者都高最好,但是一般情况下准确率与召回率是矛盾的。召回率高、准确率低,召回率低、准确率高,当然如果两者都低,那是什么地方出问题了。

当精准率和召回率矛盾的情况下,单一依靠某个指标并不能较为全面地评价一个模型的效能。如何评估一个模型,常见的方法是F-Measure(又称F-Sorce),通过引入F值作为综合指标,评价模型的效能,F值是精准率和召回率的加权调和平均值。

F-Measure方法中,常用F1值作为精准率和召回率的加权调和平均值,实践中如果我们想建立一个具有最佳的精度—召回率平衡的模型,那么就要尝试将 F1 值 最大化。

F1=2*精准率*召回率/(精准率+召回率)

举例说明精准率、召回率、F值:

OCR模型的测试方法为比较图片中识别字元与标注的字元是否一致。例如:识别100个字元,标注是“A”识别为“A”的情况有30次,标注是“A”没有识别为“A”的情况为5次,标注不是“A”被识别为“A”的次数有8次。综上所述:TP为30次,FN为5次,FP为8次。

【3-7 文字识别精准率、召回率与F值】

通过公式计算字元识别的精准率、召回率、F1值:

在OCR识别中,不管是FN和FP都是识别错误,对业务场景的影响没有区别,不像人脸识别,高召回率意味着模型风控更严格,所以OCR应该更关注模型的F值,尽可能取最大F值。

识别速度:

深度学习OCR的识别流程是输入图片,进行文字检测识别文字位置,然后进行文字识别,输出识别文字结果。整个过程演算法识别速度,一般在200ms – 2s,真实场景中识别速度会受图片大小、字数多少及网络环境影响。

5)模型封装

模型训练好,通常还需要对模型进行裁剪迁移到实际执行环境中并封装成SDK界面供前端呼叫,其中还涉及到模型在真实环境中引数的跳转和优化。

2. 第三方OCR云服务界面

分析完自研发OCR技术的实现流程后,接下来分析第二种实现方案,接入外部AI开放平台的OCR界面实现产品功能。对于接入外部界面,要从多个方面来衡量OCR系统,除了关注指标识别准确率、识别速度、界面的稳定性、抗压性、易用性及使用者界面的友好性等因素外,还要关注成本因素。

1)OCR技术比较

对行业知名的AI开放平台百度、腾讯、阿里、有道,进行通用OCR文字识别分析比较:

百度—通用文字识别:

腾讯—通用印刷体识别:

有道-通用OCR:

阿里云—通用文字识别:

2)通用OCR服务选择

根据功能定义、产品规划、场景需求和成本费用,比较后,选择百度通用文字识别界面。因为其常用文字的印刷体中文识别率比较高,识别速度和并发量都是可接受的范围,对于文字位置识别,生僻字识别等功能没有太强需求。

同时,百度通用OCR价格也是比较有有优势的,根据每日的界面请求资料估算,提供的免费额度很充分,价效比很高。

最重要的因素之一是:其提供移动端SDK界面,可以更灵活的设计前端界面和互动。

3)小结

使用第三方技术界面,有很多局限性,OCR技术的优化升级依赖第三方公司,无法根据自己的业务场景优化OCR识别效果。另一方面,使用第三方界面,产品测试主要是常规的界面、整个系统联调测试,OCR文字识别演算法测试精细度受限。

四、方案选择

通过两个技术方案的分析,自己建立AI团队,训练出的演算法会跟满足自身产品的需求,识别效果更好。但整个AI开发过程的周期是比较长的,同时团队的演算法工程师大多是做大资料和量化投资方向的,没有专门OCR技术经验,无法保证短时间内设计出合理的OCR网络结构。

在综合考量了时间成本、人力成本、技术难度等各方面的因素后,决定通过第三方云服务界面来获取OCR技术。

五、总结

行业+AI方向的业务中,由于人才和成本的限制,大多数是没有自建AI演算法团队,很大程度上依赖AI开放平台上的技术能力。这个时候需要产品经理去了解各种AI开放平台的技术能力,各自的技术优劣势,做好技术选型。

作为业务层产品经理虽不参与AI技术研发,还是要了解AI技术实践,一是为功能规划选择最有利的,便于业务层功能的设计开发;二是对领导可以阐述清楚,获得领导层的支援。

参考资料

本文由 @夏薇 原创释出于人人都是产品经理。未经许可,禁止转载

题图来自Unsplash,基于CC0协议

2019-10-20 05:51:00

相关文章