FC2ブログ

誰もがやさしく微笑みあえる、その日まで

東日本大震災で被災された方々、心を痛めた方々に送ります。

くずし字認識(その7) ~Kuzushiji-Kanjiについて~


 今回は、「くずし字認識(その7) ~Kuzushiji-Kanjiについて~」です。

 くずし字とは、「古典籍や古文書などで使われている文字のうち、楷書の点画を省略した手書き文字と、手書き文字をもとにした版本の文字」のことです。
 詳細は、こちらをご覧ください。
  https://www.nijl.ac.jp/pages/event/seminar/images/H26-kotenseki03.pdf

 くずし字認識とは、コンピュータを使って画像からくずし字を認識する技術です。
 OCR(Optical character recognition)技術が使われます。
 詳細は、こちらをご覧ください。
  https://ja.wikipedia.org/wiki/%E5%85%89%E5%AD%A6%E6%96%87%E5%AD%97%E8%AA%8D%E8%AD%98

 古典籍や古文書で使われる、くずし字の認識では、既存のOCRと同様な解析プロセスを用いることが想定されます。
 既存のOCRは以下のプロセスに従って解析されます。
  1:画像作成(書類をスキャナーでスキャン、カメラで撮影など)
  2:画像の前処理(コントラストや濃度調整、ノイズ除去、二値化など)
  3:レイアウト認識(文字領域や図形領域などの配置を認識)
  4:文字画像切り出し(文字領域から一つひとつの文字画像を切り出す)
  5:文字認識(文字画像から文字を推定)
  6:言語処理(文字認識結果の正しさを評価)
  7:文字データ化(解析結果を統合して文字データを出力)
 詳細は、こちらの記事をご参照ください。
  https://codezine.jp/article/detail/6607

 

 今回は、Kuzushiji-Kanjiについて書きます。

 Kuzushiji-Kanjiは、人文学オープンデータ共同利用センターが作成したデータセットです。
 特徴は以下のとおりです。
  グレイスケール画像
  漢字のくずし字3832種類のクラス分類
  漢字ごとに画像の数が異なる
  提供データはpng形式の画像のみ
  クリエイティブコモンズライセンス:『KMNISTデータセット』(CODH作成) 『日本古典籍くずし字データセット』(国文研ほか所蔵)を翻案 doi:10.20676/00000341 
 詳細は、こちらをご参照ください。
  http://codh.rois.ac.jp/kmnist/
 Kuzushiji-Kanjiは、こちらのGitHubのリンク先からダウンロードできます。
  https://github.com/rois-codh/kmnist
 Kuzushiji-Kanjiについては、"Deep Learning for Classical Japanese Literature"というタイトルで、人文学オープンデータ共同利用センターなどの研究者が論文を発表しています。
  https://arxiv.org/pdf/1812.01718.pdf



 Kuzushiji-Kanjiの画像の例を示します。
 以下に、「徒」、「然」、「草」の順番で例示します。
 楷書に近いと読めるけど、草書に近づくと一気に読めなくなります。
 漢字のくずし字の難しさが分かります。
 「徒」の一部の画像は、行人偏「彳」ではなく、さんずい「氵」に見えます。
 「然」の一部の画像は、楷書の原形が全く残っていないです!
 「草」の画像は、比較的わかりやすく崩されていますが、それでも一部の画像は読めませんでした。
 

 

 


 Kuzushiji-Kanjiは、データの提供がpng形式の画像なので、機械学習で使えるnumpy形式に変換しました。
 なお、画像の大きさが64×64pixelであり、MNISTの28×28pixelと異なっています。

 機械学習用のスクリプトには、TensorFlowのCNNのチュートリアルを流用しました。
 修正点は、png形式の画像からnumpy形式に変換するコードを追加した点、CNNのConvolutional Layerを3層に変更した点、クラス数を3832に変更した点です。
 詳細は、こちらをご参照ください。
  https://www.tensorflow.org/tutorials/estimators/cnn

 
 このCNNモデルを使って学習した結果、正答率は「0.813」でした。 
 前述の人文学オープンデータ共同利用センターの論文では、Kuzushiji-Kanjiのくずし字認識の正答率が示されていませんでしたので比較はできませんが、そこそこ高い正答率が得られました。
 以下は解答例です。
 
 ind =7266    ind =6839   ind =5983   ind =4564   ind =401
 ans =3705其  ans =1750理  ans =3048居  ans =3103夜   ans =533迄
 pred=3705其  pred=1750理  pred=3048居  pred=3103夜  pred=1163色

 ind =4022     ind =8639    ind =9767    ind =6479     ind =633
 ans =3536労  ans =2176気   ans =3051屋   ans =1163色  ans =3773云
 pred=3536労  pred=1869点   pred= 659貧   pred=1163色  pred=3773云

 表示の意味は以下のとおりです。
  ind:問題番号(index)
  ans:正解(answer)のラベル
  pred:予測(prediction)のラベル
  prob:モデルが予測した確率(probability)
  ラベル番号と漢字の対応関係「3705其」は、『3705番目のラベルは「其」』の意味です。

 この例では、ind=401、iind =8639、ind =9767の問題が誤答でした。
 それぞれ問題について、モデルが予測したtop10の確率を確認すると、以下のとおりでした。
  ※誤答例の表示の意味
   ans=533迄 8.40e-11 はそれぞれ「ラベル番号、漢字、指数表示の確率」の順に表示
   pred=モデルが予測したtop10の確率(「ラベル番号、漢字、指数表示の確率」×10セット)

・誤答例1:
ind = 401
ans =533迄 8.40e-11
pred=1163色 1.00e+00, 2818意 9.28e-09, 563造 5.06e-10, 2783息 4.40e-10, 3704兵 2.66e-10,
533迄 8.40e-11, 578達 7.25e-12, 643豆 4.34e-12, 2169毛 1.54e-12, 3760乞 1.42e-13,
正解の「迄」は上位6番目の予測確率。ただし、上位1番目の「色」が圧倒的に高い予測確率。人間が見ても、まあ、間違ってもしょうがないかな、という画像。

・誤答例2:
ind = 8639
ans=2176気 4.73e-01
pred=1869点 5.25e-01, 2176気 4.73e-01, 2177氣 2.12e-03, 3366受 2.04e-05, 988被 2.92e-06,
3489出 7.25e-07, 2763急 6.22e-07, 655貞 4.28e-07, 1015葉 1.74e-07, 3076島 1.53e-07,
正解の「気」は上位2番目の予測確率。上位1番目の「点」との差はわずか。人間が見たらなんとか予測できるレベルなので、できれば正答して欲しい画像。 

・誤答例3:
ind = 9767
ans= 3051屋 1.09e-09
pred=659貧 1.00e+00, 1122蚕 2.29e-07, 3039就 1.23e-07, 3423咎 1.11e-07, 3486処 7.19e-08,
1859盆 4.45e-08, 2547敷 2.16e-08, 3356參 1.91e-08, 3124奥 1.49e-08, 2754忽 1.01e-08,
正解の「屋」は上位10番目以下の予測確率。画数が増えて複雑な漢字になると正答することが難しそう。 


Kuzushiji-Kanjiを学習した所感は以下のとおりです。
 楷書に近い画像でも誤答が多いので、もっと学習データ数を増やす必要がありそう。
 学習結果を次に生かせるように、もっといい分析方法がありそう。あと、もっと綺麗にまとめられそう。
 やはり、漢字一文字だけだと、学習データを増やしても漢字の認識誤りは90%くらいが精一杯な感じ。
 漢字一文字の画像認識後に、文脈を考慮した文字のもっともらしさの推定が必要かも。

ひとまず、今回でくずし字認識に関する報告は終了します。
また、何か新しく面白い結果が出たら報告します。

スポンサーサイト



テーマ:プログラミング - ジャンル:コンピュータ

くずし字認識(その6) ~阿倍仲麻呂の和歌の解析~


 今回は、「くずし字認識(その6) ~阿倍仲麻呂の和歌の解析~」です。

 くずし字とは、「古典籍や古文書などで使われている文字のうち、楷書の点画を省略した手書き文字と、手書き文字をもとにした版本の文字」のことです。
 詳細は、こちらをご覧ください。
  https://www.nijl.ac.jp/pages/event/seminar/images/H26-kotenseki03.pdf

 くずし字認識とは、コンピュータを使って画像からくずし字を認識する技術です。
 OCR(Optical character recognition)技術が使われます。
 詳細は、こちらをご覧ください。
  https://ja.wikipedia.org/wiki/%E5%85%89%E5%AD%A6%E6%96%87%E5%AD%97%E8%AA%8D%E8%AD%98

 古典籍や古文書で使われる、くずし字の認識では、既存のOCRと同様な解析プロセスを用いることが想定されます。
 既存のOCRは以下のプロセスに従って解析されます。
  1:画像作成(書類をスキャナーでスキャン、カメラで撮影など)
  2:画像の前処理(コントラストや濃度調整、ノイズ除去、二値化など)
  3:レイアウト認識(文字領域や図形領域などの配置を認識)
  4:文字画像切り出し(文字領域から一つひとつの文字画像を切り出す)
  5:文字認識(文字画像から文字を推定)
  6:言語処理(文字認識結果の正しさを評価)
  7:文字データ化(解析結果を統合して文字データを出力)
 詳細は、こちらの記事をご参照ください。
  https://codezine.jp/article/detail/6607

 

 今回は、阿倍仲麻呂の和歌の解析について書きます。

 阿倍仲麻呂の百人一首の和歌の平仮名全てを解析してみます。
 実験には、前々回Kuzushiji-49を使って学習したモデルを使用します。
 Kuzushiji-49は、人文学オープンデータ共同利用センターが作成したデータセットです。
 特徴は以下のとおりです。
  1~9までの10クラス分類の手書き数字データセットMNISTと同じグレイスケース画像で、画像サイズ、ファイルフォーマットが同じ
  MNISTと異なる点は、平仮名のくずし字49個のクラス分類という点
  クリエイティブコモンズライセンス:『KMNISTデータセット』(CODH作成) 『日本古典籍くずし字データセット』(国文研ほか所蔵)を翻案 doi:10.20676/00000341 
 詳細は、こちらをご参照ください。
  http://codh.rois.ac.jp/kmnist/
 Kuzushiji-49は、こちらのGitHubのリンク先からダウンロードできます。
  https://github.com/rois-codh/kmnist
 Kuzushiji-49については、"Deep Learning for Classical Japanese Literature"というタイトルで、人文学オープンデータ共同利用センターなどの研究者が論文を発表しています。
  https://arxiv.org/pdf/1812.01718.pdf

 今回実験に使う画像は、『日本古典籍データセット』(国文学研究資料館等所蔵)の古今和歌集(国文研書誌ID:200003204)の阿倍仲麻呂の和歌です。
 百人一首にも入っている和歌です。
 『天の原 ふりさけ見れば 春日なる  三笠の山に 出でし月かも』
 黄色で囲んだ部分を解析します。
 下の画像では、以下の漢字と平仮名が使われています。
 『あまの原 ふりさけみれは かすかなる  みかさの山に 出し月かも』
 

 漢字を除いて、平仮名を文字認識した結果は、下の画像のとおりです。
 

 表示の意味は以下のとおりです。
  ans:正解(answer)のラベル
  pred:予測(prediction)のラベル
  prob:モデルが予測した確率(probability)
 ラベル番号と平仮名の対応関係は以下のとおりです。
label_dict = {'0': 'あ', '1': 'い', '2': 'う', '3': 'え', '4': 'お', '5': 'か', \
'6': 'き', '7': 'く', '8': 'け', '9': 'こ', '10': 'さ', '11': 'し', \
'12': 'す', '13': 'せ', '14': 'そ', '15': 'た', '16': 'ち', \
'17': 'つ', '18': 'て', '19': 'と', '20': 'な', '21': 'に', \
'22': 'ぬ', '23': 'ね', '24': 'の', '25': 'は', '26': 'ひ', \
'27': 'ふ', '28': 'へ', '29': 'ほ', '30': 'ま', '31': 'み', \
'32': 'む', '33': 'め', '34': 'も', '35': 'や', '36': 'ゆ', \
'37': 'よ', '38': 'ら', '39': 'り', '40': 'る', '41': 'れ', \
'42': 'ろ', '43': 'わ', '44': 'ゐ', '45': 'ゑ', '46': 'を', \
'47': 'ん', '48': 'ゝ'}
  ※ '0' = 'あ'、 '1' = 'い'、...、'48' = 'ゝ' の意味です。

 正答率は、約87%(23問中20問正解)でした。
 前々回紹介したKuzushiji-49を使って学習したモデルの正答率約93%と比べると、やや低めでした。
 画像の前処理の仕方の可能性や、問題数が少ないので評価バラツキの可能性がありますが、現時点では原因不明です。
 
 きっちり一文字ずつ画像を切り出すことができて、平仮名に限定すれば、そこそこ分類できると感じました。
 少なくとも、私以上にくずし字を分類できました。



 次回は、KMNISTデータセット(機械学習用くずし字データセット)のKuzushiji-Kanjiについて触れます。


テーマ:プログラミング - ジャンル:コンピュータ

くずし字認識(その5) ~画像の前処理~


 今回は、「くずし字認識(その5) ~画像の前処理~」です。

 くずし字とは、「古典籍や古文書などで使われている文字のうち、楷書の点画を省略した手書き文字と、手書き文字をもとにした版本の文字」のことです。
 詳細は、こちらをご覧ください。
  https://www.nijl.ac.jp/pages/event/seminar/images/H26-kotenseki03.pdf

 くずし字認識とは、コンピュータを使って画像からくずし字を認識する技術です。
 OCR(Optical character recognition)技術が使われます。
 詳細は、こちらをご覧ください。
  https://ja.wikipedia.org/wiki/%E5%85%89%E5%AD%A6%E6%96%87%E5%AD%97%E8%AA%8D%E8%AD%98

 古典籍や古文書で使われる、くずし字の認識では、既存のOCRと同様な解析プロセスを用いることが想定されます。
 既存のOCRは以下のプロセスに従って解析されます。
  1:画像作成(書類をスキャナーでスキャン、カメラで撮影など)
  2:画像の前処理(コントラストや濃度調整、ノイズ除去、二値化など)
  3:レイアウト認識(文字領域や図形領域などの配置を認識)
  4:文字画像切り出し(文字領域から一つひとつの文字画像を切り出す)
  5:文字認識(文字画像から文字を推定)
  6:言語処理(文字認識結果の正しさを評価)
  7:文字データ化(解析結果を統合して文字データを出力)
 詳細は、こちらの記事をご参照ください。
  https://codezine.jp/article/detail/6607

 

 今回は、画像の前処理について書きます。

 画像の前処理方法によって、文字認識の正答率がどのくらい変わるか実験してみます。
 実験には、前回Kuzushiji-49を使って学習したモデルを使用します。
 Kuzushiji-49は、人文学オープンデータ共同利用センターが作成したデータセットです。
 特徴は以下のとおりです。
  1~9までの10クラス分類の手書き数字データセットMNISTと同じグレイスケース画像で、画像サイズ、ファイルフォーマットが同じ
  MNISTと異なる点は、平仮名のくずし字49個のクラス分類という点
  クリエイティブコモンズライセンス:『KMNISTデータセット』(CODH作成) 『日本古典籍くずし字データセット』(国文研ほか所蔵)を翻案 doi:10.20676/00000341 
 詳細は、こちらをご参照ください。
  http://codh.rois.ac.jp/kmnist/
 Kuzushiji-49は、こちらのGitHubのリンク先からダウンロードできます。
  https://github.com/rois-codh/kmnist
 Kuzushiji-49については、"Deep Learning for Classical Japanese Literature"というタイトルで、人文学オープンデータ共同利用センターなどの研究者が論文を発表しています。
  https://arxiv.org/pdf/1812.01718.pdf

 今回実験に使う画像は、『日本古典籍データセット』(国文学研究資料館等所蔵)の古今和歌集(国文研書誌ID:200003204)の阿倍仲麻呂の和歌です。
 百人一首にも入っている和歌です。
 『天の原 ふりさけ見れば 春日なる  三笠の山に 出でし月かも』
 黄色で囲んだ部分はその中の「ふりさけ」に対応する部分です。
 

 文字認識する際には、綺麗な文字画像データが望ましく、前処理で裏写り部分や背景のノイズを除去する必要があります。
 「ふりさけ」の各文字について、前処理条件を変えて、Kuzushiji-49を使って学習したモデルで分類してみました。
 下の画像の前処理条件は以下のとおりです。
  ・1行目: グレイ画像変換のみ
  ・2行目: グレイ画像変換 + コントラスト弱
  ・3行目: グレイ画像変換 + コントラスト中
  ・4行目: グレイ画像変換 + コントラスト強
  ・5行目: グレイ画像変換 + コントラスト最強
 

 表示の意味は以下のとおりです。
  ans:正解(answer)のラベル
  pred:予測(prediction)のラベル
  prob:モデルが予測した確率(probability)
 ラベル番号と平仮名の対応関係は以下のとおりです。
label_dict = {'0': 'あ', '1': 'い', '2': 'う', '3': 'え', '4': 'お', '5': 'か', \
'6': 'き', '7': 'く', '8': 'け', '9': 'こ', '10': 'さ', '11': 'し', \
'12': 'す', '13': 'せ', '14': 'そ', '15': 'た', '16': 'ち', \
'17': 'つ', '18': 'て', '19': 'と', '20': 'な', '21': 'に', \
'22': 'ぬ', '23': 'ね', '24': 'の', '25': 'は', '26': 'ひ', \
'27': 'ふ', '28': 'へ', '29': 'ほ', '30': 'ま', '31': 'み', \
'32': 'む', '33': 'め', '34': 'も', '35': 'や', '36': 'ゆ', \
'37': 'よ', '38': 'ら', '39': 'り', '40': 'る', '41': 'れ', \
'42': 'ろ', '43': 'わ', '44': 'ゐ', '45': 'ゑ', '46': 'を', \
'47': 'ん', '48': 'ゝ'}
  ※ '0' = 'あ'、 '1' = 'い'、...、'48' = 'ゝ' の意味です。

 1行目の「グレイ画像変換のみ」では、全ての予測は合っていましたが、確率が低めでした。
 2行目の「グレイ画像変換+コントラスト弱」では、背景にノイズが強く残っていて、一つ予測が外れました。 
 3行目以降のコントラストが一定以上の条件では、全ての予測が合っていて、確率が高めでした。
 この結果から、二つのことが言えると思います。
  ・グレイ画像に変換した後で、強めのコントラスト調整が必要
  ・背景に少しくらいノイズがあったり、他の文字の一部が入っていても精度よく分類可能


 次回は、阿倍仲麻呂の和歌の全ての文字(漢字を除く)について、くずし字認識をやってみます。


テーマ:プログラミング - ジャンル:コンピュータ

くずし字認識(その4) ~Kuzushiji-49の機械学習~


 今回は、「くずし字認識(その4) ~Kuzushiji-49の機械学習~」です。

 くずし字とは、「古典籍や古文書などで使われている文字のうち、楷書の点画を省略した手書き文字と、手書き文字をもとにした版本の文字」のことです。
 詳細は、こちらをご覧ください。
  https://www.nijl.ac.jp/pages/event/seminar/images/H26-kotenseki03.pdf

 くずし字認識とは、コンピュータを使って画像からくずし字を認識する技術です。
 OCR(Optical character recognition)技術が使われます。
 詳細は、こちらをご覧ください。
  https://ja.wikipedia.org/wiki/%E5%85%89%E5%AD%A6%E6%96%87%E5%AD%97%E8%AA%8D%E8%AD%98

 古典籍や古文書で使われる、くずし字の認識では、既存のOCRと同様な解析プロセスを用いることが想定されます。
 既存のOCRは以下のプロセスに従って解析されます。
  1:画像作成(書類をスキャナーでスキャン、カメラで撮影など)
  2:画像の前処理(コントラストや濃度調整、ノイズ除去、二値化など)
  3:レイアウト認識(文字領域や図形領域などの配置を認識)
  4:文字画像切り出し(文字領域から一つひとつの文字画像を切り出す)
  5:文字認識(文字画像から文字を推定)
  6:言語処理(文字認識結果の正しさを評価)
  7:文字データ化(解析結果を統合して文字データを出力)
 詳細は、こちらの記事をご参照ください。
  https://codezine.jp/article/detail/6607

 

 今回は、Kuzushiji-49の機械学習について書きます。

 Kuzushiji-49は、人文学オープンデータ共同利用センターが作成したデータセットです。
 特徴は以下のとおりです。
  1~9までの10クラス分類の手書き数字データセットMNISTと同じグレイスケールの画像で、画像サイズ、ファイルフォーマットが同じ
  MNISTと異なる点は、平仮名のくずし字49個のクラス分類という点
  クリエイティブコモンズライセンス:『KMNISTデータセット』(CODH作成) 『日本古典籍くずし字データセット』(国文研ほか所蔵)を翻案 doi:10.20676/00000341 
 詳細は、こちらをご参照ください。
  http://codh.rois.ac.jp/kmnist/
 Kuzushiji-49は、こちらのGitHubのリンク先からダウンロードできます。
  https://github.com/rois-codh/kmnist
 Kuzushiji-49については、"Deep Learning for Classical Japanese Literature"というタイトルで、人文学オープンデータ共同利用センターなどの研究者が論文を発表しています。
  https://arxiv.org/pdf/1812.01718.pdf



 Kuzushiji-49の画像の例を表示します。
 左上から49種類の平仮名を、次の配置で表示しています。
あ い う え お
か き く け こ
さ し す せ そ
た ち つ て と
な に ぬ ね の
は ひ ふ へ ほ
ま み む め も
や ゆ よ ら り
る れ ろ わ ゐ
ゑ を ん ゝ

 やはり、ところどころ読めない文字がありました。



 機械学習用のスクリプトには、TensorFlowのCNNのチュートリアルを流用しました。
 Kuzushiji-49データ読み込みの部分、クラス数を49に変更した部分、学習後のデータ予測部分を書き換えました。
 CNNレイヤー構成は以下のとおりです。
 Building the CNN MNIST Classifier
  1:Convolutional Layer #1: Applies 32 5x5 filters (extracting 5x5-pixel subregions), with ReLU activation function
  2:Pooling Layer #1: Performs max pooling with a 2x2 filter and stride of 2 (which specifies that pooled regions do not overlap)
  3:Convolutional Layer #2: Applies 64 5x5 filters, with ReLU activation function
  4:Pooling Layer #2: Again, performs max pooling with a 2x2 filter and stride of 2
  5:Dense Layer #1: 1,024 neurons, with dropout regularization rate of 0.4 (probability of 0.4 that any given element will be dropped during training)
  6:Dense Layer #2 (Logits Layer): 49 neurons, one for each digit target class (0–48).
 詳細は、こちらをご参照ください。
  https://www.tensorflow.org/tutorials/estimators/cnn

 
 このCNNモデルを使って学習した結果、正答率は「0.9337」でした。
 本論文の"Keras Simple CNN Benchmark"の正答率が「0.8925」なので、論文よりも良い結果が得られました。
 ただし、原因は不明です。

 学習したモデルでクラス予測した例を挙げます。
 表示の意味は以下のとおりです。
  ans: 正解(answer)のラベル
  pred: 予測(prediction)のラベル
  prob: モデルが予測した確率(probability)
 ラベル番号と平仮名の対応関係は以下のとおりです。
label_dict = {'0': 'あ',  '1': 'い',  '2': 'う',  '3': 'え',  '4': 'お',  '5': 'か', \
'6': 'き',  '7': 'く',  8': 'け',  '9': 'こ',  '10': 'さ',  '11': 'し', \
'12': 'す',  '13': 'せ',  '14': 'そ',  '15': 'た',  '16': 'ち', \
'17': 'つ',  '18': 'て',  '19': 'と',  '20': 'な',  21': 'に', \
'22': 'ぬ', '23': 'ね',  '24': 'の',  '25': 'は',  '26': 'ひ', \
'27': 'ふ', '28': 'へ',  '29': 'ほ',  '30': 'ま',  '31': 'み', \
'32': 'む',  '33': 'め',  '34': 'も', '35': 'や',  '36': 'ゆ', \
'37': 'よ',  '38': 'ら',  '39': 'り',  '40': 'る',  '41': 'れ', \
'42': 'ろ',  '43': 'わ',  '44': 'ゐ',  '45': 'ゑ',  '46': 'を', \
'47': 'ん', '48': 'ゝ'}
  ※ '0' = 'あ'、 '1' = 'い'、...、'48' = 'ゝ' の意味です。

 下の例では、一番下の行の、左から二番目の画像のみモデルの予測が間違っていました。
 49個もクラスがある中で、93%の確率で当てられるのは結構すごいと感じました。



 次回は、日本古典籍データセットを使って、くずし字認識を手作業でやってみます。


テーマ:プログラミング - ジャンル:コンピュータ

くずし字認識(その3) ~Kuzushiji-MNISTの機械学習~


 今回は、「くずし字認識(その3) ~Kuzushiji-MNISTの機械学習~」です。

 くずし字とは、「古典籍や古文書などで使われている文字のうち、楷書の点画を省略した手書き文字と、手書き文字をもとにした版本の文字」のことです。
 詳細は、こちらをご覧ください。
  https://www.nijl.ac.jp/pages/event/seminar/images/H26-kotenseki03.pdf

 くずし字認識とは、コンピュータを使って画像からくずし字を認識する技術です。
 OCR(Optical character recognition)技術が使われます。
 詳細は、こちらをご覧ください。
  https://ja.wikipedia.org/wiki/%E5%85%89%E5%AD%A6%E6%96%87%E5%AD%97%E8%AA%8D%E8%AD%98

 古典籍や古文書で使われる、くずし字の認識では、既存のOCRと同様な解析プロセスを用いることが想定されます。
 既存のOCRは以下のプロセスに従って解析されます。
  1:画像作成(書類をスキャナーでスキャン、カメラで撮影など)
  2:画像の前処理(コントラストや濃度調整、ノイズ除去、二値化など)
  3:レイアウト認識(文字領域や図形領域などの配置を認識)
  4:文字画像切り出し(文字領域から一つひとつの文字画像を切り出す)
  5:文字認識(文字画像から文字を推定)
  6:言語処理(文字認識結果の正しさを評価)
  7:文字データ化(解析結果を統合して文字データを出力)
 詳細は、こちらの記事をご参照ください。
  https://codezine.jp/article/detail/6607

 

 今回は、Kuzushiji-MNISTの機械学習について書きます。

 Kuzushiji-MNISTは、人文学オープンデータ共同利用センターが作成したデータセットです。
 特徴は以下のとおりです。
  1~9までの10クラス分類の手書き数字データセットMNISTと同じグレイスケールの画像で、画像サイズ、ファイルフォーマット、ファイル数も同じ
  MNISTと異なる点は、平仮名のくずし字10個のクラス分類という点
  クリエイティブコモンズライセンス:『KMNISTデータセット』(CODH作成) 『日本古典籍くずし字データセット』(国文研ほか所蔵)を翻案 doi:10.20676/00000341 
 詳細は、こちらをご参照ください。
  http://codh.rois.ac.jp/kmnist/
 Kuzushiji-MNISTは、こちらのGitHubのリンク先からダウンロードできます。
  https://github.com/rois-codh/kmnist
 Kuzushiji-MNISTについては、"Deep Learning for Classical Japanese Literature"というタイトルで、人文学オープンデータ共同利用センターなどの研究者が論文を発表しています。
  https://arxiv.org/pdf/1812.01718.pdf



 Kuzushiji-MNISTの画像の例を表示します。
 上から下に「お、き、す、つ、な、は、ま、や、れ、を」の順に、横に10文字ずつ並べて表示しています。
 本当に、色々なくずし方があることが分かります。
   


 機械学習用のスクリプトには、TensorFlowのCNNのチュートリアルを流用しました。
 Kuzushiji-MNISTデータ読み込みの部分と、学習後のデータ予測部分だけ書き換えました。
 CNNレイヤー構成は以下のとおりです。
 Building the CNN MNIST Classifier
  1:Convolutional Layer #1: Applies 32 5x5 filters (extracting 5x5-pixel subregions), with ReLU activation function
  2:Pooling Layer #1: Performs max pooling with a 2x2 filter and stride of 2 (which specifies that pooled regions do not overlap)
  3:Convolutional Layer #2: Applies 64 5x5 filters, with ReLU activation function
  4:Pooling Layer #2: Again, performs max pooling with a 2x2 filter and stride of 2
  5:Dense Layer #1: 1,024 neurons, with dropout regularization rate of 0.4 (probability of 0.4 that any given element will be dropped during training)
  6:Dense Layer #2 (Logits Layer): 10 neurons, one for each digit target class (0–9).
 詳細は、こちらをご参照ください。
  https://www.tensorflow.org/tutorials/estimators/cnn

 
 このCNNモデルを使って学習した結果、正答率は「0.9554」でした。
 本論文の"Keras Simple CNN Benchmark"の正答率が「0.9512」なので、ほぼ同等の結果が得られました。

 学習したモデルでクラス予測した例を挙げます。
 表示の意味は以下のとおりです。
  ans:正解(answer)のラベル
  pred:予測(prediction)のラベル
  prob:モデルが予測した確率(probability)
 ラベル番号と平仮名の対応関係は以下のとおりです。
  '0' = 'お'
  '1' = 'き'
  '2' = 'す'
  '3' = 'つ'
  '4' = 'な'
  '5' = 'は'
  '6' = 'ま'
  '7' = 'や'
  '8' = 'れ'
  '9' = 'を'
 下の例では、左上の画像のみモデルの予測が間違っていました。
 この他にも間違っている画像を確認しましたが、人間でも判断に迷うものでした。
 


 次回は、平仮名全てを含んでいるデータセット"Kuzushiji-49"を機械学習してみます。


テーマ:プログラミング - ジャンル:コンピュータ

次のページ