OCR文字識別在股票查詢的運用邏輯
本文將以行業(yè)+AI的角度,介紹OCR技術在證券業(yè)務中的運用,且詳細介紹功能背后的AI技術和技術選型思考。
一、需求分析
1. 需求背景
對于股票服務類軟件,添加自選股是用戶的高頻需求,自此之前查詢股票是前置步驟,APP中批量查詢股票并添加自選股一直是一個無法解決的痛點問題,如果添加幾十只股票,需要一只一只的查詢添加,操作非常麻煩。
另一方面,股票業(yè)務經(jīng)過多年的互聯(lián)網(wǎng)線上發(fā)展,線上新手用戶已經(jīng)很難開拓,獲客方式是通過提供差異化的服務,吸引其他股票產(chǎn)品用戶,并提高用戶轉(zhuǎn)化留存,培養(yǎng)用戶使用自己產(chǎn)品的習慣。此場景中老用戶都有自己的自選股池,批量導入自選股,是提高用戶留存的必經(jīng)之路和關鍵環(huán)節(jié)。對于運營轉(zhuǎn)化提升,有非常重要的價值。
2. 為什么使用OCR
添加自選股的第一步是查詢股票,查詢股票可以通過三種方式操作:手動輸入查詢、語音查詢、圖片識別查詢。
三種查詢方式對比如下表:
從表中可以看出圖片識別查詢在進行批量操作有絕對的優(yōu)勢。此外,靈活的使用場景,便捷的操作方式,未來可能會逐步成為用戶查詢股票的高頻行為之一。
3. 確定場景和需求
1)移動端主流場景分析
- 在新用戶首次使用過程中,會將已經(jīng)的自選股進行截圖,通過相冊獲取截圖進行OCR文字識別查詢股票。
- 老用戶對網(wǎng)上的推薦股票進行截圖或拍照,通過相冊或相機獲取截圖或照片進行OCR文字識別查詢股票
- 在新聞、熱點文章中會多只關聯(lián)股票,通過對相應文本進行截圖或拍照,獲取圖片進行OCR文字識別查詢股票。
2)功能需求及非功能需求
- 基于需求場景,OCR識別的圖像,多是截圖和照片,圖片中會有長文本,會有場景復雜的拍照文字識別。
- 基于產(chǎn)品功能定義,OCR技術識別語言目前只需支持A股市場股票名稱識別,未來隨著業(yè)務發(fā)展有可能要支持港美股。所以,OCR文字識別技術首先要識別中文和數(shù)字,未來需要擴展英文識別。手寫字體識別是一個發(fā)生概率比較低的小場景,所以對手寫體識別率要求不高。
- OCR識別出的文字,需要從文本中提取股票名稱,文字提取也是必要的過程。
對于非功能性需求,需要基于使用場景考慮,查詢股票雖然是一個高頻需求,但用戶使用場景不像下單購買那么急迫,對識別的速度、并發(fā)量行業(yè)平均水平即可,在2秒左右可以接受。識別失敗是體驗中比較受挫的事情,對用戶體驗影響大,對常用的印刷體識別準確率要高,至少達到90%以上。
二、產(chǎn)品方案規(guī)劃
1. 整體功能架構
[2-1圖片識別股票名稱框架圖]
基于圖片查詢股票功能,主要由三部分構成:第一部分是前端交互流程,第二部分是OCR文字識別,第三部分是文字提取。
1)前端界面交互
[2-2 圖片識別股票名稱界面流程圖]
2)OCR文字識別
相比于傳統(tǒng)OCR場景(印刷體、掃描文檔),移動端OCR場景主要是針對手機拍攝的照片或手機截圖進行文字信息提取和識別,考慮到線下用戶的多樣性,因此主要面臨以下挑戰(zhàn):
- 成像復雜:噪音、模糊、光線變化、變現(xiàn)
- 文字復雜:字體、字號、色彩、磨損、筆畫寬度不固定、方向任意
- 背景復雜:版面缺失,背景干擾
以上問題,普遍使用基于深度學習OCR進行解決。
3)文字提取
股票名稱提取,涉及到從識別的文本中提取文字。
股票名稱有維護中的數(shù)據(jù)表單,A股市場整體也就2000多只股票,數(shù)據(jù)量不大,所以通過正則表達式,進行股票名稱提取即可。如果從大數(shù)據(jù)中提取文字,用NLP技術是當前比較普遍的方式。
2. 功能流程圖
[2-3 圖片識別股票名稱功能流程圖]
3. 服務接入方式
批量添加自選股功能是以APP為載體,除了必要的功能及交互之外,大量計算都是服務端進行處理,適合以接口形式獲取OCR文字識別和文字提取服務。從性能和體驗的角度考慮,相比API接口,通過SDK的調(diào)取方式是最好的。
三、OCR文字識別技術選型
OCR文字識別是產(chǎn)品方案的核心技術。
對于OCR文字識別技術,可以從兩種途徑獲得:
- 是公司內(nèi)部自建AI團隊,搭建技術框架,準備數(shù)據(jù),訓練算法,并包裝成接口供業(yè)務層調(diào)用。
- 是從外部得到技術支持,調(diào)用AI開放平臺提供的云服務接口,獲得通用OCR文字識別技術。
實踐過程中,兩種方案各有利弊,需要從公司資源和業(yè)務規(guī)劃層面評估,哪種方案是最好的,下面來介紹兩種方案的實現(xiàn)。
1. 自研發(fā)OCR文字識別
自己團隊研發(fā)OCR技術,實踐中的關鍵點在于如何設計網(wǎng)絡結構和合成訓練數(shù)據(jù)。雖然有公開數(shù)據(jù)集,但是數(shù)據(jù)集并不一定完全吻合自身業(yè)務,可能需要自建數(shù)據(jù)集,或多個數(shù)據(jù)集篩選整合到一起,如何獲取高質(zhì)量的數(shù)據(jù)集和訓練出高識別率的網(wǎng)絡結構,是AI技術的團隊的核心工作。
1)數(shù)據(jù)集
OCR算法訓練最有難度的是數(shù)據(jù),一方面是訓練數(shù)據(jù)集大。普遍應用的深度學習OCR技術,需要大量的數(shù)據(jù)來保證訓練效果,此外,中文漢字庫非常大,一級字庫有3755個漢字,再加上三級字庫,就有上萬個漢字,印刷體漢字還有9種常用的字體,手寫體漢字更是千人千面,這些組成一個龐大的數(shù)據(jù)集。
另一方面數(shù)據(jù)集圖片種類多,數(shù)據(jù)標注成本高。OCR場景圖片識別會有很多因素影響識別效果,如復雜背景、藝術字體、低分辨率、非均勻光照、圖像退化、字符變現(xiàn)、多語言混合、文本行復雜版式、檢測框字符殘缺等等,有效的數(shù)據(jù)集需要包含這些關聯(lián)因素。
根據(jù)功能定義,OCR文字識別技術需要識別中文和數(shù)字,兼容印刷體識別和手寫體識別,未來需要擴展英文識別。
對于手寫體識別數(shù)據(jù)集,選擇中科院自動化研究所的公開收集。對于印刷體識別數(shù)據(jù)集獲取方式是:公開數(shù)據(jù)集+合成數(shù)據(jù),公開數(shù)據(jù)集主要來自ICDAR比賽和AI研究機構。
除此之外,需要自己合成數(shù)據(jù),來進行數(shù)據(jù)增強,對于數(shù)據(jù)增強需要考慮字體、形變、模糊、噪聲、背景變化等因素。合成數(shù)據(jù)可以彌補深度學習數(shù)據(jù)量和數(shù)據(jù)多樣性不夠的問題,使訓練出來的模型泛化能力更好。
一般我們獲取到的是最原始的數(shù)據(jù)集,會有不同的格式,在圖像深度學習訓練中我們一般都會把原始數(shù)據(jù)集轉(zhuǎn)化為統(tǒng)一的數(shù)據(jù)格式以方便后續(xù)的網(wǎng)絡訓練。
2)框架工具
OCR技術已經(jīng)從傳統(tǒng)OCR發(fā)展到深度學習OCR,并已成為主流趨勢,所以需要選擇深度學習框架和工具進行算法訓練。
常用工具有下面幾種:
Tesseract:
Tesseract是一款很流行的開源OCR引擎,它的特點是開源、免費、支持多語言、多平臺,是一直以來使用比較普通的OCR工具,可以快速搭建圖文識別系統(tǒng)。它可以讀取各種格式的圖像并將它們轉(zhuǎn)化成超過60種語言的文本,但是中文的識別效果不理想,需要使用自己的庫進行訓練,開發(fā)符合自身需求的OCR引擎。
以前的Tesseract是基于傳統(tǒng)機器學習的引擎,現(xiàn)在Tesseract (v4) 最新版本支持基于深度學習的OCR。底層的 OCR 引擎使用的是一種循環(huán)神經(jīng)網(wǎng)絡(RNN)——LSTM 網(wǎng)絡,準確率顯著提高,更符合當前的深度學習OCR趨勢。因為使用的是別人的OCR引擎,所以自己優(yōu)化網(wǎng)絡結構提高識別率的靈活性差。
Tensorflow:
Tensorflow是非常流行的深度學習框架,尤其是對圖像處理有很好的效果,基于其深度學習庫,可以很好的進行OCR文字識別訓練。
使用Tensorflow雖然沒有Tessract效率高,但是有更高的靈活性和探索性,基于深度學習庫的使用,可以設計出更適應業(yè)務需求的網(wǎng)絡結構,更好的提高OCR識別效率。對于研發(fā)能力強的團隊,更傾向于使用基礎框架,自己設計網(wǎng)絡結構。
OpenCV:
OpenCV是一個跨平臺的開源計算機視覺庫,提供基本的計算機視覺、圖像處理和模式識別的開源項目,實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法。
OpenCV模塊支持Caffe、TensorFlow、Torch、PyTorch等深度學習框架應用于OCR領域,可用于檢測、識別自然場景圖像中的文本。OpenCV在數(shù)據(jù)增強方面價值尤其突出,通過合成數(shù)據(jù)集,訓練算法,提高OCR識別率。
3)框架設計
設計網(wǎng)絡結構是OCR實踐中的另外一個關鍵點。識別文字建模為一個多分類任務,比如3755個文字識別就需要3755個類別的分類任務,實際訓練中可能有上萬個分類。
深度學習OCR框架通常包括文字檢測和文字識別2個模塊,文字檢測是通過檢測算法定位到文本行,然后通過文字識別算法閱讀出文本行的內(nèi)容。
【3-1 深度學習OCR框架】
文字檢測是場景文字識別的前提條件,要在雜亂無序、千奇百怪的復雜場景中準確地定位出文字的位置,需要高效合理的文字檢測框架支持。適用于通用場景的主流文字檢測框架有兩種FCN和CTPN,對廣泛應用的Faster-RCNN框架適用于特定場景文字檢測,如身份證識別、銀行卡識別、發(fā)票識別等場景。
FCN:
FCN是基于全卷積網(wǎng)絡的文字檢測方法,在通用場景的文字檢測領域有很好的效果,尤其是背景復雜的戶外廣告牌識別。
FCN框架基于全卷積網(wǎng)絡的方法,同時使用分割(Segmentation)和邊界框回歸(Bounding Box Regression)的方式對場景文字進行檢測,直接產(chǎn)生單詞或文本行級別的預測(旋轉(zhuǎn)矩形或任意四邊形),通過非極大值抑制產(chǎn)生最終結果。
【3-2基于FCN的文本檢測流程圖】
【3-3 基于FCN的文本檢測網(wǎng)絡結構圖】
CTPN:
CTPN是基于聯(lián)結文本建議網(wǎng)絡的文字檢測方法,與傳統(tǒng)文字定位方法相比,通過CNN提取深度特征,并結合RNN進行序列學習提升文本檢測效果,大幅提高文本框邊界檢測精度,尤其對于長文本(水平及具有一定傾斜角度的長文本)的檢測。
CTPN算法框架主要思路是:將文本行識別看做一個序列識別問題,通過在卷積網(wǎng)絡的特征圖上提取Anchors,并計算每個Anchor的得分,并在計算得分的過程中,綜合利用上下文信息、每行的文本序列特性,采用RNN進行建模以判斷文字的得分。
【3-4基于聯(lián)結文本建議網(wǎng)絡的文本檢測模型架構圖】
【3-5經(jīng)典的CTPN網(wǎng)絡模型架構圖】
在文字識別過程中,將整行文字識別問題歸結為一個序列學習問題。
基本思路是:CNN與RNN結合,CNN被用于提取有表征能力的圖像特征,而RNN處理序列問題,學習上下文關系。
文字識別框架近兩年比較受關注的主要有兩種:一種是CNN+RNN+CTC的方法,另一種是Attention model+CNN+RNN。
CNN+RNN+CTC:
文字識別可建模為時序依賴的詞匯或者短語識別問題,基于聯(lián)結時序分類訓練RNN的算法。
相比于傳統(tǒng)OCR,其識別效果更好。CNN+RNN+CTC網(wǎng)絡結構包含三部分,從下到上依次為:
- 卷積層,使用CNN,作用是從輸入圖像中提取特征序列。
- 循環(huán)層,使用RNN,作用是預測從卷積層獲取的特征序列的標簽(真實值)分布。
- 轉(zhuǎn)錄層,使用CTC,作用是把從循環(huán)層獲取的標簽分布通過去重整合等操作轉(zhuǎn)換成最終的識別結果。
【3-6 CNN+RNN+CTC算法模型架構圖】
Attention model+CNN+RNN:
Attention model+CNN+RNN是基于注意力模型的文字識別方法,其實這兩大方法主要區(qū)別在于最后的輸出層(翻譯層)——即怎么將網(wǎng)絡學習到的序列特征信息轉(zhuǎn)化為最終的識別結果。
這兩大主流技術在其特征學習階段都采用了CNN+RNN的網(wǎng)絡結構,CRNN OCR在對齊時采取的方式是CTC算法,而attention OCR采取的方式則是attention機制。注意力模型在廣告圖像、自然場景圖像等極具挑戰(zhàn)性的場景取得了很好的端到端識別效果。
4)算法測試
衡量一個OCR算法性能的常用指標包括精準率、召回率、F值和識別速度。
精準率與召回率:
精準率可以理解為:模型識別字符“A”,最終識別成功的數(shù)量占所有被識別為字符“A”的比例。精準率是算法最重要的標準之一,精準率測試除了對字符進行測試外,還對條目進行測試。在印刷體識別中OCR的識別率比較高,普遍達到90%以上,但在自然場景文字識別中,獲得理想的準確率面臨著非常大的挑戰(zhàn)。
計算公式為:
精準率=TP/(TP+FP)
召回率可以理解為:模型識別字符“A”,最終識別成功的數(shù)量占所有字符“A”的比例。召回率與精準率在一般情況下是矛盾的。
計算公式為:
召回率=TP/(TP+TN)
F值(也稱F1值):
精準率和召回率是互相影響的,理想情況下肯定是兩者都高最好,但是一般情況下準確率與召回率是矛盾的。召回率高、準確率低,召回率低、準確率高,當然如果兩者都低,那是什么地方出問題了。
當精準率和召回率矛盾的情況下,單一依靠某個指標并不能較為全面地評價一個模型的性能。如何評估一個模型,常見的方法是F-Measure(又稱F-Sorce),通過引入F值作為綜合指標,評價模型的性能,F(xiàn)值是精準率和召回率的加權調(diào)和平均值。
F-Measure方法中,常用F1值作為精準率和召回率的加權調(diào)和平均值,實踐中如果我們想創(chuàng)建一個具有最佳的精度—召回率平衡的模型,那么就要嘗試將 F1 值 最大化。
F1=2*精準率*召回率/(精準率+召回率)
舉例說明精準率、召回率、F值:
OCR模型的測試方法為比較圖片中識別字符與標注的字符是否一致。例如:識別100個字符,標注是“A”識別為“A”的情況有30次,標注是“A”沒有識別為“A”的情況為5次,標注不是“A”被識別為“A”的次數(shù)有8次。綜上所述:TP為30次,F(xiàn)N為5次,F(xiàn)P為8次。
【3-7 文字識別精準率、召回率與F值】
通過公式計算字符識別的精準率、召回率、F1值:
- 精準率:30/30+8=0.79
- 召回率:30/30+5=0.86
- 模型的綜合評價F1值: 2*0.79*0.86/0.79+0.86= 0.82
在OCR識別中,不管是FN和FP都是識別錯誤,對業(yè)務場景的影響沒有區(qū)別,不像人臉識別,高召回率意味著模型風控更嚴格,所以OCR應該更關注模型的F值,盡可能取最大F值。
識別速度:
深度學習OCR的識別流程是輸入圖片,進行文字檢測識別文字位置,然后進行文字識別,輸出識別文本結果。整個過程算法識別速度,一般在200ms – 2s,真實場景中識別速度會受圖片大小、字數(shù)多少及網(wǎng)絡環(huán)境影響。
5)模型封裝
模型訓練好,通常還需要對模型進行裁剪遷移到實際運行環(huán)境中并封裝成SDK接口供前端調(diào)用,其中還涉及到模型在真實環(huán)境中參數(shù)的跳轉(zhuǎn)和優(yōu)化。
2. 第三方OCR云服務接口
分析完自研發(fā)OCR技術的實現(xiàn)流程后,接下來分析第二種實現(xiàn)方案,接入外部AI開放平臺的OCR接口實現(xiàn)產(chǎn)品功能。對于接入外部接口,要從多個方面來衡量OCR系統(tǒng),除了關注指標識別準確率、識別速度、接口的穩(wěn)定性、抗壓性、易用性及用戶界面的友好性等因素外,還要關注成本因素。
1)OCR技術比較
對行業(yè)知名的AI開放平臺百度、騰訊、阿里、有道,進行通用OCR文字識別分析比較:
百度—通用文字識別:
騰訊—通用印刷體識別:
有道-通用OCR:
阿里云—通用文字識別:
2)通用OCR服務選擇
根據(jù)功能定義、產(chǎn)品規(guī)劃、場景需求和成本費用,比較后,選擇百度通用文字識別接口。因為其常用文字的印刷體中文識別率比較高,識別速度和并發(fā)量都是可接受的范圍,對于文字位置識別,生僻字識別等功能沒有太強需求。
同時,百度通用OCR價格也是比較有有優(yōu)勢的,根據(jù)每日的接口請求數(shù)據(jù)估算,提供的免費額度很充分,性價比很高。
最重要的因素之一是:其提供移動端SDK接口,可以更靈活的設計前端界面和交互。
3)小結
使用第三方技術接口,有很多局限性,OCR技術的優(yōu)化升級依賴第三方公司,無法根據(jù)自己的業(yè)務場景優(yōu)化OCR識別效果。另一方面,使用第三方接口,產(chǎn)品測試主要是常規(guī)的接口、整個系統(tǒng)聯(lián)調(diào)測試,OCR文字識別算法測試精細度受限。
四、方案選擇
通過兩個技術方案的分析,自己建立AI團隊,訓練出的算法會跟滿足自身產(chǎn)品的需求,識別效果更好。但整個AI開發(fā)過程的周期是比較長的,同時團隊的算法工程師大多是做大數(shù)據(jù)和量化投資方向的,沒有專門OCR技術經(jīng)驗,無法保證短時間內(nèi)設計出合理的OCR網(wǎng)絡結構。
在綜合考量了時間成本、人力成本、技術難度等各方面的因素后,決定通過第三方云服務接口來獲取OCR技術。
五、總結
行業(yè)+AI方向的業(yè)務中,由于人才和成本的限制,大多數(shù)是沒有自建AI算法團隊,很大程度上依賴AI開放平臺上的技術能力。這個時候需要產(chǎn)品經(jīng)理去了解各種AI開放平臺的技術能力,各自的技術優(yōu)劣勢,做好技術選型。
作為業(yè)務層產(chǎn)品經(jīng)理雖不參與AI技術研發(fā),還是要了解AI技術實踐,一是為功能規(guī)劃選擇最有利的,便于業(yè)務層功能的設計開發(fā);二是對領導可以闡述清楚,獲得領導層的支持。
參考資料
- 《AI in 美團》深度學習在OCR中的應用
- OCR技術淺析——吳兆陽
- OCR檢測與識別
- 【OCR技術系列之七】端到端不定長文字識別CRNN算法詳解
- ICDAR2013文本檢測算法的衡量方法(一)Evaluation Levels
本文由 @夏薇 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自Unsplash,基于CC0協(xié)議
很不錯的想法。不過從需求而言。感覺有更好的方法