GboardにおけるRNNベースの手書き認識(2/2)

  • 2019.03.14
  • AI
GboardにおけるRNNベースの手書き認識(2/2)

1.GboardにおけるRNNベースの手書き認識(1/2)まとめ

・タッチポイントをベジエ曲線にし、ベジエ曲線をQRNNでデコーダ行列に変換する
・デコーダ行列をCTCデコーダで最終的な文字に最も確からしい文字に変換する
・新しい文字認識モデルは20%-40%も誤認識を少なく出来、速度も速く、サイズも小さくできた

2.機械学習ベースのGboard

以下、ai.googleblog.comより「RNN-Based Handwriting Recognition in Gboard」の意訳です。元記事の投稿は2019年3月7日、Sandro FeuzさんとPedro Gonnetさんによる投稿です。なお、「Gboard – Google キーボード」で手書き入力を試すにはAndroid8.0以降でないと動作しないようです。

文字のデコード
一連の入力曲線はユーザの入力を表現しますが、更にそれを実際に書かれた文字に変換する必要があります。そのため、多層RNNを使用して曲線を順番に処理し、各曲線が表現している可能性がある全ての文字を含んだ確率分布を持つ出力復号行列を生成します。これは、その曲線の一部にどの文字が書かれているかを示します。

私達は複数の種類のRNNを実験し、そして最終的に双方向バージョンのQRNN(Quasi-Recurrent Neural Networks)を採用することにしました。QRNNは、畳み込みレイヤと再帰レイヤを交互に使用します。効率的な並列化の理論的可能性を与え、重みの数を比較的少なく保ちながら優れた予測性能を提供します。重みの数はモデルのサイズに直接関係し、モデルは端末にダウンロードする必要があるので、小さいほど良いのです。

曲線を「デコード」するために、リカレントニューラルネットワークは、各列が1つの入力曲線に対応し、各行がアルファベットの文字に対応する行列を生成します。特定の曲線の列は、アルファベットの全ての文字の出現確率を表す確率分布と見なすことができます。

ただし、各文字は複数の曲線からなることができます(たとえば、上のgとoは、それぞれ4つの曲線と3つの曲線から成り立っています)。

リカレントニューラルネットワークからの出力の長さ(これは常にベジェ曲線の数と一致します)と、入力が表すと想定される実際の文字数の不一致はCTC(Connectionist Temporal Classification)アルゴリズムなどで特別な空白記号を追加して、特定の曲線に対して出力がないことを示すことによって対処されます。

私達は、有限オートマトンデコーダを使用して、ニューラルネットワークの出力を、重み付き有限状態アクセプタとして符号化された文字ベースの言語モデルと組み合わせました。ある言語で一般的な文字シーケンス(ドイツ語の “sch”など)はボーナスを受け取り、出力される可能性が高くなりますが、珍しいシーケンスはペナルティが科されます。 プロセスは以下のように図示できます。


タッチポイントのそれぞれの点は(前の図のように曲線毎に色分けされています)は、ベジェ係数によってはるかに少ない数(この例では7つ)に集約され、それぞれが単一の曲線に対応するようになります。

QRNNベースの認識器は、これをデコーダ行列(Decoder matrix)に変換します。デコーダ行列は、縦の列がそれぞれの曲線、横の行が文字列「a」から「z」と空白記号(blank)に対応しています。明るさは、その文字の相対確率を表しています。デコーダ行列を左から右へ見ていくと、大部分が空白(blank)になっていて、文字「g」と「o」が黄色に輝いて見えて、最終的なテキスト出力は「go」になっています。

非常に単純であるにもかかわらず、私たちの新しい文字認識モデルは古いモデルよりも20%-40%誤認識が少なくなるだけでなく、速度もずっと速いです。 しかし、まだ課題があります。これを全て計算機資源に限りがあるスマートフォン上で実行する必要があるのです!

オンデバイスで動作させる
最高のユーザー体験を提供するには、文字認識精度が高いだけでは不十分です。加えて、高速に動作する必要があります。Gboardで可能な限り低い応答速度を実現するために、私達はTensorFlowでトレーニングした認識モデルをTensorFlow Liteモデルに変換しました。これには量子化、つまり1つの重みに4バイトが使用される通常の方式の代わりに1バイトのみを使用するように、モデルのトレーニング中に全ての重みのサイズを削減する事を含みます。

これにより、モデルが小さくなり、推論時間が短くなります。さらに、TensorFlow Liteを使用すると、推論に必要な部分だけを含めることで、小さいバイナリサイズに最適化する事が出来るため、TensorFlowを完全に実装した場合と比較してAPK(Android application package:アンドロイドでアプリを配布する際のファイル形式)サイズを削減できます。

更に進化を
私達はラテンスクリプトの認識機能を改良するだけでなく、限界を押し広げ続けます。手書きチームは、Gboardがサポートしている全ての手書き言語用に新しいモデルを立ち上げることにすでに力を注いでいます。

謝辞
Gboardでの手書き操作性の向上に貢献してくれたすべての人に感謝します
特に、GboardチームのJatin Matani、Speech&Language AlgorithmsチームのDavid Rybach、ExpanderチームのPrabhu Kaliamoorthi、TensorFlow LiteチームのPete Warden、そしてHandwritingチームのHenry Rowley、Li-Lun Wang、Mircea Trăichioiu、Philippe Gervais、およびThomas Deselaers。

3.GboardにおけるRNNベースの手書き認識(2/2)関連リンク

1)ai.googleblog.com
RNN-Based Handwriting Recognition in Gboard

2)play.google.com
Gboard – Google キーボード
Google手書き入力

3)arxiv.org
Fast Multi-language LSTM-based Online Handwriting Recognition

4)landing.google.co.jp
Gboard 物理手書きバージョン