蘋果的機器學習開發日記:如何設計能在Apple Watch上實時運行的中文手寫識別系統

分類:實用技巧 時間:2017-09-30

雷鋒網 AI 科技評論按:隨著蘋果機器學習日記(Apple ML Journal)的開放,蘋果分享出的設計自己產品、運用機器學習解決問題的故事也越來越多。近日蘋果在上面就放出了一篇關於識別手寫中文的文章,介紹了自己對這個功能的思考和實現過程。雖然文章中沒有什麽全新的技術,但也不失為一篇有誠意的開發經驗分享。雷鋒網 AI 科技評論把文章編譯如下。

隨著手機、平板電腦這樣的移動設備,以及智能手表這樣的可穿戴設備變得流行甚至不可或缺,手寫識別也隨之變得前所未有地重要。中文包含了一個很大的字符庫,在這些移動設備上支持中文手寫識別就帶來了一組獨特的挑戰。這篇文章中,蘋果介紹了他們是如何在 iPone、iPad 和 Watch(繪畫模式中)上應對這些挑戰、實現中文手寫的實時識別的。蘋果設計的基於深度學習的識別系統可以準確地處理高達3萬個不同的字符。為了達到合理的準確度,蘋果的開發人員們在數據收集模式、書寫方式的代表性和訓練方式方面專門花了心思處理。他們發現,只要使用恰當的方式,即便更大的字符庫也可以解決得了。實驗表明只要訓練數據的質量足夠高、數量足夠大,隨著字符庫增大,識別準確率只會慢慢下降。

簡介

手寫識別可以增強移動設備的用戶體驗,尤其是中文的鍵盤輸入還相對比較復雜。中文的手寫識別也有獨特的挑戰性,因為中文背後的字符庫非常大。其它基於字母的語言中,包含字符的數量級通常也就在100上下,而中文國標 GB18030-2005 中含有的漢字有27533個,在整個中國範圍內還有許多圖形式的字符仍然在使用著。

為了便於電腦處理,常見的做法是只關註其中的一部分字符,一般就是選出日常使用中最有代表性的字。根據這樣的思路,中文國標字符集 GB2312-80 僅僅包含了 6763 個字符(其中一級字符3755個,二級字符3008個)。中國科學院自動化研究所也構建了一個嚴密對齊的字符集,運用在CASIA數據庫中,包含了總共7356個字符。SCUT-COUCH數據庫的容量也在同一個水平上。

這些字符集基本反映了全中國的作家們的常用字。然而在個人層面上,每個人之間的“最常用字”經常都會有所不同。許多人都至少有幾十個自己的“不常用字”,因為這些字其實會在相關的事物名中出現,反倒不用一個個寫出來了。這樣,理想狀況下的中文手寫識別算法就至少要擴充到 GB18030-2005 中2萬多個漢字的水平。

早期的識別算法主要依靠基於一筆一劃分析的結構化方法,後來有了去除筆劃順序影響的需求,就引發了人們利用整體形狀信息建立統計學方法的興趣。然而文本類別的數量越多,清晰地把文本分入一個類別就越難,這些方法顯然會大大提升大字符集下的識別難度。

對於MNIST之類的拉丁字符識別任務,卷積神經網絡(CNN)很快就表現出了壓倒性的優勢。只要有足夠的訓練數據、適當補充一些需要的生成樣本,CNN毫無疑問可以達到出頂尖的表現。不過,這些研究中的字符類別都相當的少。

之前,當蘋果的研究人員們開始研究如何做大規模的中文字符識別時,似乎明擺著就應該選CNN。但是CNN的方法需要把網絡拓展到包含接近3萬個字符,同時還要保證在嵌入式設備上還有實時識別的性能。這篇文章的重點就是介紹如何解決延時、字符覆蓋率、書寫風格的魯棒性等方面的問題,達到理想的性能表現。

系統配置

蘋果的研究人員們在這項研究中采用了一個普遍的CNN架構,跟之前用在MNIST手寫識別實驗中的CNN類似。系統的總體架構如圖

圖1. 典型的CNN架構(帶有連續的2組卷積+子采樣)

系統輸入是一張中等分辨率 48x48 的圖像(為了更好的性能),其中包含著一個手寫中文字符。然後把它送入幾個包含卷積層和子采樣層的特征提取層。最後一個特征提取層通過一個全連接層連接到輸出。

在每個卷積層中,蘋果的研究人員們都選擇了能夠從逐漸變得粗糙的粒度中盡量提取特征的卷積核和feature map數量。他們運用一個2x2的卷積核,通過一個最大池化層做子采樣。最後一個特征層包含的小feature map數量級一般在1000上下。最後,輸出層上給每一個類都有一個單獨的節點,對於 GB2312-80 中級別1的漢字就有3755個節點,拓展到所有字符的時候就要接近30000。

作為基準線,蘋果的研究人員們在CASIA benchmark任務中評估了這個CNN模型。雖然這個任務只涵蓋了漢字中級別1的字符,但是在以往文獻中有豐富的識別測試準確率結果。他們使用了同樣的基於 CASIA-OLHWDB、DB1.0-1.2,分為訓練集和測試集,訓練樣本的數量大約為100萬個。

值得註意的是,蘋果這項研究的關註點是面向產品的,所以他們的目標並不是在 CASIA 中取得盡可能高的準確率,更為關註的是模型大小、推理速度和用戶體驗。所以,他們的優化目標是一個緊湊的、能夠實時計算結果的系統,它要能夠對付多種不同的書寫風格,對於非標準的筆劃順序也需要有較高的魯棒性。這樣下來,即便把在線的數據庫也加入了評估中,他們還是選用了基於圖像特征的識別方法。他們也把實際觀察到的筆劃變化、外型改變也考慮了進來。

表1展示了前文圖1中的CNN模型的測試結果,其中“Hz-1”代表了級別1的漢字庫(3755個字符),“CR(n)”代表了模型的前n位識別結果中含有正確字符的準確率。除了常用的首選準確率(n=1)和前10位識別準確率(n=10)之外,表格中還加入了一項前4位準確率(n=4),因為蘋果的用戶界面中就是顯示4個候選字符,前4位準確率是一個重要的衡量用戶體驗的標誌。

表1:CASIA在線數據庫中3755個中文字符的測試結果。標準訓練,關聯模型大小1MB

之前有研究中首選準確率達到93%,前10位準確率達到98%。相比之下,雖然蘋果自己的前10位準確率和其它研究中的在同一水平上,但第一位準確率要稍低。在蘋果看來,這是為了達到更高的前4位準確率作出的平衡;而且可能更重要的是,這個模型的大小(1MB)比之前任何類似的系統都要小。

表1中的系統僅僅用了CASIA中的數據進行了訓練,沒有用到其它的訓練數據。蘋果的研究人員們也很感興趣,如果額外加入自家的iOS設備上實際采集到的手寫數據用來訓練系統會達到怎樣的效果。這些數據中涵蓋的書寫風格更為多樣,每個字符也有更多對應的訓練樣本。如下表2就是訓練結果,對應的是同一個3755字符的字符庫。

表2:CASIA在線數據庫中3755個中文字符的測試結果。增強訓練,關聯模型大小15MB

雖然這個系統的體積有大幅度的增加(達到了15MB),準確率卻只提升了一點點(前4位準確率的絕對值提升了2%)。這表明,測試集中的多數書寫風格都已經在CASIA的訓練集中有了相當的覆蓋。不過這也說明增加更多的訓練數據並沒有什麽壞處:新增加的書寫風格並不會對模型的原有表現帶來負面的影響。

拓展到3萬個字符

前文有說過,每個人理想狀況的下的“常寫的字”都不一樣,用戶數目大的時候需要的字庫大小也就遠遠不止3755個。準確挑出需要的字庫也不是一件那麽簡單直接的事情。GB2312-80 定義的簡體中文字符,以及 Big5、Big5E、CNS 11643-92 中定義的繁體中文字符覆蓋的範圍也各有不同(從3755到48027個漢字)。近期一些的還有新增了4568個字符的 HKSCS-2008,GB18030-2000中的甚至更多。

蘋果想要保證用戶們的日常用語都能寫得出來,不管是簡體還是繁體中文、是名字還是詩歌,還有其它常用的標記、視覺符號和emoji表情,他們也希望能讓用戶無需轉譯就寫出偶爾會在產品或者品牌名中出現的拉丁字符。蘋果遵循了國際主流的 Unicode 字符集作為字符編碼標準,因為其中幾乎囊括了上面提到的所有字符標準(值得一提的是,Unicode 7.0在B-D拓展中可以區分7萬個字符,而且還在考慮增加更多)。所以蘋果的字符識別系統就選擇了關註 GB18030-2005, HKSCS-2008, Big5E 中的漢字部分,以及 ASCII 的核心字符集和一組視覺符號和emoji表情,總數大約3萬個字符。這對於大多數中國用戶來說已經是最佳的取舍了。

在選出了模型內在的字符庫之後,下一個關鍵的點就是對用戶真正使用的書寫風格進行采樣。雖然不同的書寫風格之間有一些正式的規則可以用來幫助鑒別,但此外還會有一些區域性的書寫變化,比如 U+2EBF (艹)的幾種寫法,或者U+56DB(四)的寫得潦草的時候和U+306E(の)之間的類似性。

屏幕上顯示的字符也會帶來迷惑性,因為有些用戶會希望某些字符以特定的樣式顯示。寫得快的時候也會讓風格變得潦草,這會增加字符的模糊性,比如 U+738B(王)和U+4E94(五)。

最後,增大國際化的程度有時候也會帶來沒有預料到的沖突,比如U+4E8C(二),寫成連筆的時候就會和拉丁字符“2”和“Z”產生沖突。

蘋果的設計準則是給用戶提供全部的輸入可能性,不管是像印刷字體一樣,還是潦草的、不受約束的寫法。為了囊括盡可能多的字體變形,蘋果的研究人員們從全中國不同區域的作家們手中收集數據。讓他們很驚訝的是,有不少不常用的字,大多數的用戶連見都沒有見過。由於對不常用字的不熟悉,用戶在書寫的時候可能會猶豫、寫錯筆劃順序,以及造成其它的一些錯誤,都需要納入考慮中。

蘋果的研究人員們雇了許多不同年齡段、性別、教育程度的普通中國人,讓他們寫字,收集數據;最終得到的手寫數據也有許多別的數據庫不具有的特點:包含了多大幾千名用戶的數據,在iOS設備上用手指書寫(而不是手寫筆),數據也是有許多小批的。其中還有一個好處是iOS設備的采樣會形成非常清晰的手寫筆跡。

蘋果的研究人員們發現了非常多樣的書寫方式。如下圖2到圖4是其中一些U+82B1(花)的寫法,有的接近打印,有的很潦草,有的變化很大。

實際上,日常生活中用戶們經常寫得很快、變化很大,潦草、變形的筆跡看起來會有很大的區別。比如U+7684(的)和U+4EE5(以)。

反過來說,有時候不同的字也會看起來很相似,造成迷惑。以下U+738(王)、U+4E94(五)的數據就是明顯的例子。值得註意的是,要能夠區分潦草的變化就一定需要足夠的訓練數據。

根據前面討論的設計準則,蘋果采集了上千萬個手寫的漢字實例用作訓練數據。下面表3中的結果就是把可識別的字符數量從前面的3755個字符拓展到接近3萬之後得到的。仍然是前文的同一個 CASIA 在線測試。

表3:CASIA在線數據庫中30K個字符的測試結果

這裏保持了同樣的模型大小。前文表2中的系統只是限制在級別1漢字範圍,其它都與表3中的系統相同。準確率有略微下降,這倒比較符合研究人員們的期待,因為大幅度增長的覆蓋範圍會帶來額外的混淆,比如前面提到過的“二”和“Z”。

把表1到表3的結果進行對比,可以看到把字符覆蓋範圍擴大10倍並不會把錯誤率也擴大10倍,或者把模型大小變大10倍。實際上,對於更大的模型,錯誤率升高得要慢得多。所以,構建一個覆蓋了3萬個字符(而不是僅僅3755)、同時還有高準確率的中文手寫字符識別系統,不僅是可能的,還是可行的。

為了說明系統在這所有3萬個字符中的表現如何,蘋果的研究人員們也用一系列不同的測試集進行了測試,其中包含了所有支持的字符、用了各種的書寫風格。表4是結果的平均值。

表4:包含了所有書寫風格的3萬個字符的測試集的多個蘋果內部測試的平均結果

當然,表3和表4的結果是不能夠直接進行對比的,因為它們是用不同的測試集得到的。不過,它們的第一位準確率和前四位準確率對於整個字符庫都是在同一水平的。這樣的結果是通過較為均衡的訓練模式達到的。

討論

在表意文字工作組 IRG 不斷從不同的來源收集文字、提出新的增加建議下,目前大小約為75000的Unicode字符集中含有的中日韓文表義文字未來還可能繼續增加。坦誠地講,之後新增加的字符都會是非常罕見的字符(比如歷史上出現過的名字或者詩歌中的)。不過,對於名字裏剛好有一些罕見字的人來說,這些工作還是很有意義的。

那麽,蘋果未來打算如何應對更大的字符庫呢?這篇文章中的實驗展示了不同數量的訓練數據下的訓練和測試錯誤率狀況。這樣就可以做近似的推斷,預測有更多訓練數據、更多字符需要識別的時候準確率表現如何。

比如,從表1到表3可以看到,對於增大了十倍的字符庫和模型相關資源的大小,準確率僅僅下降了(不到)2%。那麽就有理由猜測,對於數目達到十萬個的字符庫和同倍增加的訓練數據,完全有可能仍然達到84%左右的首選準確率和97%的前10位準確率(對於同樣的網絡架構)。

總結來說,構造一個覆蓋了多達3萬個中文字符的高準確率手寫識別系統,即便對於嵌入式設備也是可以實現的。進一步地,隨著字符庫大小增加,識別準確率下降得非常慢,只要有足夠數量的高質量訓練數據。這對未來可能的基於更大的字符庫的手寫識別來說是一個好消息。

via Apple ML Journal ,雷鋒網 (公眾號:雷鋒網) AI 科技評論編譯

相關文章:

蘋果機器學習博客姍姍來遲,不過第一篇文章就給緊缺訓練數據的研究者們發糖

雷鋒網版權文章,未經授權禁止轉載。詳情見 轉載須知 。


Tags: 中文 手寫 字符 識別 蘋果 設備

文章來源:


ads
ads

相關文章
ads

相關文章

ad