前回、ご先祖様の古い手紙を読むためにNDL古典籍OCRが有用であることがわかり、別の筆記者の手紙に適用してみました。
完全に読めて(誤読文字が含まれない)そのまま翻刻文にできた行が36%、手作業で一部修正し翻刻文にできた行が47%で、計83%の行は翻刻できました。翻刻できた行のデータを用いて再学習した文字列認識モデルを適用したところ、翻刻できた行の割合が92%に向上(翻刻できなかった行が半減)しました。
特定の対象(筆記者など)へのファインチューニングが可能であると考えられ、翻刻の作業性改善に有用であると期待されます。
今まであきらめていた古い手紙が読めるようになり感謝しています。
対象
同一筆記者により比較的近い時期に書かれた5通の手紙を150dpiでスキャンした画像が対象です。行数は、NDL古典籍OCRの出力行からノイズ的なものを除いた数で、合計72行です。
| 日付 | 行数 | |
|---|---|---|
| 手紙1 | 大正11年10月21日 | 23 |
| 手紙2 | 大正11年11月22日 | 15 |
| 手紙3 | 大正12年5月4日 | 8 |
| 手紙4 | 大正12年5月8日 | 14 |
| 手紙5 | 大正14年8月10日 | 12 |
例として、手紙5は以下の通りです。
退役軍人の父親が、軍医である義理の息子の初めての昇級を祝ったものです。
(今回は、両者とも一定の知名度の人物のため氏名を削除していません)

NDL古典籍OCR(リリース版の事前学習済みモデルを使用)の出力の文字列認識結果は以下の通りです。
| 行No. | 文字列認識結果 | 翻刻文 | ランク |
|---|---|---|---|
| 0 | 御昇進目出夏数は随分御 | 御昇進目出度数候随分御 | C |
| 1 | 寺遠きことなりしならん | 待遠きことなりしならん | B |
| 2 | か是は諸事の事何なれは | か是は諸軍の常例なれば | B |
| 3 | どこまで東観せられたと多 | どこまで東観せられたし多 | C |
| 4 | 来御勤暮の継果人々記の | 来御勤労の結果今次の | B |
| 5 | 先栄を見るに至り先生は | 光栄を見るに至り先生は勝 | C |
| 6 | 快禁する能はす候今後藤之 | 快禁する能はす候今後益々 | B |
| 7 | 御奉重深〻伝入候不古形 | 御奉重深く祷入候不古形 | C |
| 8 | 御歓申上候我具 | 御歓申上候敬具 | C |
| 9 | 二月十日 | 八月十日 | B |
| 10 | 仙波太郎 | 仙波太郎 | A |
| 11 | 堺生郡長七人殿 | 場生松長夫殿 | B |
文字列認識結果を翻刻文にコピーし、GoogleのAIで現代語訳できるか、文章として意味が通るか、各文字の形がおおよそ合っているか、などにより判断して翻刻文を校正しました。青色は修正できた箇所、赤色は修正できない(どう修正すべきかわからない、または修正したが意味が通らない)箇所です。
修正の状況により各行のランクを設定しました。
- ランクA 認識結果がすべて正しく修正不要
- ランクB 認識結果に誤りが含まれるが修正できた(校正完了)
- ランクC 認識結果に含まれる誤りをどう修正すべきかわからない(校正未完了)
修正は、類似した文字が他にないか探してその認識結果を参考にしたり、考えられる候補を片端からGoogle AIに入力するなどの方法によりましたが、非常に手間取り、今回の5通分で数日間を要しました。
各手紙の、ランク別の行数は以下の通りになりました。
| 対象 | ランクA | ランクB | ランクC | 合計 |
|---|---|---|---|---|
| 手紙1 | 7 | 13 | 3 | 23 |
| 手紙2 | 6 | 7 | 2 | 15 |
| 手紙3 | 5 | 3 | 0 | 8 |
| 手紙4 | 7 | 5 | 2 | 14 |
| 手紙5 | 1 | 6 | 5 | 12 |
| 合計 | 26 (36%) | 34 (47%) | 12 (17%) | 72 (100%) |
再学習
ランクCはすでに十分に少ないですが、わからない箇所があるのは気持ちが悪いので少しでも減らしたいと思います。そこでランクAとBを合わせた60行分のデータを用いて文字列認識モデルの再学習をしてみました。
ランクCの行は未学習になりますが、転移学習により対象に特化した何らかの最適化がなされることでランクCの行の読み取りが改善することを期待しました。
再学習のプログラムは前回同様、訓練データとテストデータを別々のフォルダに格納する(train_test_split関数を使わない)よう改造したものを用いました。ランクCの行の読み取りの改善が目標なので、訓練データとテストデータを分離する必要性は低いと考え、それぞれにランクAとBの全データを設定しました。
再学習はGPUとしてGeForce GTX 1070(RAM 8GB)を搭載したローカル環境で実行し、約17時間かかりました。GPUのメモリ不足に対応するため、BATCH_SIZEを24から20に変更する必要がありました。
CER(文字誤り率)とLoss(損失関数)の推移グラフは以下の通りになりました。
訓練データとテストデータが同一のため、CERは無視します。Lossはepoch数200あたりまでは減少傾向ですが、215から急上昇しています。過去の(AI以前の)OCRの学習系では、このような挙動は過学習のような好ましくない状態の発生を反映しているとの経験則があり、その手前でLossが極小となったepoch数185が最適と仮定しそのモデルをb、再学習の最終(epoch数299)のモデルをcとして、それぞれについて各手紙のランク別行数を求めて、リリース版の事前学習済みモデル(aとする)によるランク別行数と比較しました。
モデルbでは、以下の通りランクCが半減となり、顕著な改善が見られました。
| 対象 | ランクA | ランクB | ランクC | 合計 |
|---|---|---|---|---|
| 手紙1 | 19 | 2 | 2 | 23 |
| 手紙2 | 13 | 1 | 1 | 15 |
| 手紙3 | 7 | 1 | 0 | 8 |
| 手紙4 | 12 | 1 | 1 | 14 |
| 手紙5 | 7 | 3 | 2 | 12 |
| 合計 | 58 (81%) | 8 (11%) | 6 (8%) | 72 (100%) |
モデルcでも以下の通りランクCは減少しましたが、モデルbほど顕著ではありませんでした。
| 対象 | ランクA | ランクB | ランクC | 合計 |
|---|---|---|---|---|
| 手紙1 | 17 | 3 | 3 | 23 |
| 手紙2 | 12 | 2 | 1 | 15 |
| 手紙3 | 7 | 1 | 0 | 8 |
| 手紙4 | 11 | 1 | 2 | 14 |
| 手紙5 | 6 | 2 | 4 | 12 |
| 合計 | 53 (74%) | 9 (13%) | 10 (14%) | 72 (100%) |
手紙5のランクCの各行の、モデルごとの文字列認識結果と、それによる翻刻文とランクは以下の通りです。
| 行No. | モデル | 文字列認識結果 | 翻刻文 | ランク |
|---|---|---|---|---|
| 0 | a | 御昇進目出夏数は随分御 | 御昇進目出度数候随分御 | C |
| b | 御昇進目出度存候随な御 | 御昇進目出度極候随分御 | B | |
| c | 御昇進相成度候随分御 | 御昇進目出度数候随分御 | C | |
| 3 | a | どこまで東観せられたと多 | どこまで東観せられたし多 | C |
| b | どこまで楽歓せられたし多 | どこまで楽歓せられたし多 | A | |
| c | どこまで東歓せられたし多 | どこまで東観せられたし多 | C | |
| 5 | a | 先栄を見るに至り先生は | 光栄を見るに至り先生は勝 | C |
| b | 先栄を見るに至り先生は愉 | 光栄を見るに至り先生は勝 | C | |
| c | 先栄を見るに至り老生は | 光栄を見るに至り老生は勝 | B | |
| 7 | a | 御奉重深〻伝入候不古形 | 御奉重深く祷入候不古形 | C |
| b | 御奉重御祷入候不取願 | 御奉重深く祷入候不取願 | B | |
| c | 御奉重様に祷入候不取都 | 御奉重深く祷入候不取都 | C | |
| 8 | a | 御歓申上候我具 | 御歓申上候敬具 | C |
| b | 御歓申上候我具 | 御歓申上候敬具 | C | |
| c | 御歓申上候家具 | 御歓申上候敬具 | C |
モデルbでランクCの2行のうち、行No.5の『先生』はあとで他の手紙と見比べることで『老生』と判定できました。また行No.8の『敬具』は、もし敬具でなかったとしても現代語に訳す上で支障となりません。したがい実質上、手紙5はモデルbを用いることで完全に読めたと言えます。
特に、この手紙で特徴的な『是は諸軍の常例なればどこまで楽歓せられたし』(これは諸軍の決まり事なので存分に楽しみ歓喜してください)が解読できたことで、差出人の意図を良く理解することができました。(受取人が本職免除で大学院在学中に昇級となり恐縮しているのを、軍OBの差出人が気遣った、と理解できます)
検討課題など
- 最適なepoch数を合理的に求めるためには、CERを指標に使えるほうが良いので、(やはり)訓練データとテストデータは同一ではなく振り分けによるようにしたいと思います。
- 今回、手紙を読んで内容を把握するとの目的があり、ランクBとCの振り分けは翻刻できるか否かによりましたが、人が介在するのでスキルその他の影響を受けてしまいます。人が介在しない評価手法を検討したいと思います。

