AI-OCRでくずした手書き文字や数字は認証できるのか挑戦してみた

コロナ禍の影響で、全国各地のオフィスで巻き起こっているDX(デジタルトランスフォーメーション)の波。そのなかで大きな課題になるのが、契約書や請求書といった紙データの取り扱いです。「リモートワーク化したいけど、必要な書類がすべて紙だから出社しないと仕事ができない……」なんて会社さんも少なくないのだとか。

紙面の資料をデータとして取り扱うため、活躍するのが光学文字認識、いわゆる「OCR」(Optical Character Recognition)技術です。

精度の高いOCR技術を用いれば、印刷物や手書きの文字をテキストデータとして読み込み、膨大な資料から特定の言葉をすぐに検索、資料チェックが可能に。「書類を写真に撮っただけでPDFデータ化できるカメラアプリ」等でも活用されており、日常的にその恩恵にあずかっている人も少なくないのでは。

しかしこのOCR技術。様々な用途に対応した製品がリリースされているものの、実際のところ、どのくらい正確に文字をテキストデータ化してくれるのでしょうか。手書き文字も対応しているとのことですが、様々な個性がある文字をどういった方法で読み取っているのでしょう。

そこで今回は、請求書などの書面の文字の読み取りを行うAI-OCRサービス『DX Suite』を提供しているAI inside 株式会社に連絡。同社で開発を推進されている 竹内さんと、開発と営業の間で営業企画をされている川畑さんにお話を伺いました。技術への疑問からはじまったインタビューでしたが、OCR技術はすでに「かなり技術的に成熟してきている」ようで……?

取材協力:AI inside株式会社(https://inside.ai/
ビジネス書類を高精度でデジタルデータ化する「DX Suite」、パワフルなAIを稼働させるためのコンピュータ「AI inside Cube」など、自社開発の汎用性の高いAIを活用したソフトウエア、およびハードウエアを提供している。2021年4月にはユーザ自らコードを書かずAIの開発ができるサービス「Learning Center」を発表。「誰もが手軽にAIを作り、使える世界」の実現を目指している。

▲竹内さん(VP of AI&Research Unit)。ご本人の都合により似顔絵でご出演(イラストはご本人提供)

▲川畑秀和さん(VP of Strategic Operations Unit, VP of Automatic Operations Unit)

OCR技術、実は学生時代からそばにあった

——近年は、AIが注目を集め、DXの文脈でOCR技術についての話題をよく目にするようになりましたよね。

世間一般では「AIを活用した技術のいち分野」というイメージだと思うんですけど、実はOCRって歴史がかなり古いんです。たとえば私たちは学生のころにもOCR技術に触れているはずなんですが、どこだかわかりますか?

——どこでしょう? 全然検討がつかないです。

大手予備校の模擬試験や資格試験でマークシートと一緒に記入する、「このマスのなかに、カタカナで氏名を書いてください」というのがありませんでしたか?

——ありました! では、あれもAIで読み取っていた……?

いえ、違います。あれは元データと書かれた文字の一致率を見るだけのシンプルなものなので。ひらがなやカタカナ、アルファベットって、OCR技術でもだいぶ読み取りやすい部類の文字なんですよ。

しかし一致率を見るこの方式は、活用の幅が狭いんです。文字の大きさや形、書く場所までを指定しないと読み取ることができませんから。そこでAIを導入することで、汎用性を高めて、読める文字の種類や形に幅をもたせたのが、近年のAI-OCR技術です。これにより手書き文字も読み取れるようになりました。

——具体的に、AI-OCRってどのような仕組みなのでしょう?

シンプルに説明すると、ある文字を認識するときに、読み取る対象の文字の形とAIがすでに学んだ全ての文字の特徴を照らし合わせて文字を判別しています。たとえばひらがなの「あ」を見たとき、書く人によって多少なり形は変わっても、絶対に変わらない特徴があるじゃないですか。

——「上に横棒があって、下半分がくるっとなっている」というような。

そういった「あ」の特徴をあらかじめAIに学ばせておいて、その特徴と読み取った文字を照らし合わせるイメージですね。

これはいわゆるディープラーニングにおける「教師あり学習」(※)と呼ばれる手法です。AIに「これは“あ”だよ」と教えたうえでたくさんのデータを読み込ませることで、「“あ”の特徴」をAIが自動的にルール化して、学んでいきます。

※ AIに、ある内容に対して複数パターンの正解データを与えることで、その傾向やルールを学習させる手法。学習のもととなるデータは「教師データ」と呼ぶ



ひらがなよりも形は複雑ですが、漢字についても学び方は同じです。基本的には、人間が文字の形を覚えていくのと同様のプロセスだと思ってもらって大丈夫ですよ。

——たとえばアルファベット26文字で構成される英文と違って、日本語は漢字も膨大な量があります。それはどういった基準で処理されているんでしょう?

それは、JIS規格で定められた漢字水準(※)に沿ってインプットしています。漢字の使用頻度ごとに第1水準から第4水準までがあって、弊社のAI-OCRは第3水準までカバーしています。

※ 日本産業規格(JIS)によって定められた、日本語において使用される漢字を、使用頻度の高さからランク付けしたもの。使用頻度の高いものから順に第1水準〜第4水準まであり、第1水準が2965字、第2水準が3390字、第3水準が1259字、第4水準が2436字。「第3水準および第4水準は、特殊な職業や状況下で使用される漢字が中心」とされている

複雑な漢字よりも、シンプルな文字のほうが難しい

——本日はお話を伺うにあたって、我々で事前に準備した手書き文字をAI-OCRにかけていただいています。

▲検証のため用意した手書き文字。手書き特有の「くずし字」や省略などが行われている。書き手には、「人に見せることを意識したメモ程度の感覚で」とオーダーした

——くずした文字など、ちょっといじわるな仕掛けもしているのですが……結果はいかがだったでしょうか?

ほぼ、そのまま拾えていますよ。こちらをご覧ください。

▲AI insideさんによるAI-OCRの認証画面(画像は掲載用に加工済み)。認証結果はオレンジ色の枠内

▲最後部「聞きましたが」の「き」を「さ」と読み違えていたが、「これは文字が小さすぎたからかもしれない」とのこと

——本当だ、すごい! AI-OCRは「Z(アルファベットのゼット)」と「2(数字のニ)」を見分けるのが苦手、という情報を目にしていたのですが、そんな前評判をもろともせず、ですね。

しかし、その2つは難しいのは事実です。これも「Z」の真ん中に点が入っているから読み取れたんだと思います。そういった手がかりから精度を高めています。

▲問題の「Zと2」。直後の「シとツ」も難しいかもと思い用意したが、「これくらいなら全然問題ない」のだとか

——そういった判別が難しい文字を見分けるため、どのような処理を行うのでしょう?

判別が難しい箇所の前後の文字を判断材料にするんです。たとえば、わからない文字の前と後ろがアルファベットだったら、「ここは2(ニ)じゃなくてZ(ゼット)だろうな」と類推できます。逆にこの文字列が電話番号だったら、ここには英字が入るはずはないから数字、という形ですね。

でも、Zと2って、人が見ても見分けがつかないときがあるじゃないですか。やっぱりそういう文字はAIでも難しいんですよ。

▲一緒にAI-OCRにかけてもらった手書き文字。こちらは先の文字のようなヒントがなかったため、「Z」を「2」と誤認識。しかし「聞」の略字などは問題なく、それ意外は完璧にテキストデータ化していた。すごい!

同じように、数字の「1(イチ)」とアルファベット小文字の「l(エル)」、記号の「/(スラッシュ)」の判別もめちゃくちゃ難しいんです。これはすべて線1本で構成されている記号で、特徴がないからです。

▲同じ理由で「I(アイ)」と「O(オー)」も難しいはずだが、この場では前後のアルファベットを読むことで難なくクリアしていた

——となると、もしかしてAI-OCR的には、複雑な漢字より「1とl」のほうが読み取るのが難しい?

おっしゃるとおりです。線1本で構成されていて、シンプルだからこそ一番難しいんです。人も、メールアドレスなどを書くときは読み間違いがないよう無意識に書き方を工夫していると思います。弊社では前後の文字から判断させたり、「数字」の読み取り設定を使用したりすることで、その部分は数字として読み取れるよう工夫しています。

自然言語処理との重ね技で、文字認識精度を向上させる

——AI insideさんのAI-OCR技術は、請求書のようなビジネス書類に特化したものと伺っています。他にはどのような機能や特徴があるんでしょう?

たとえば、「訂正印や二重線を読み飛ばし」だったり、「くりかえしFAX送信したことでかすれてしまった文字の読み取り」だったり、「画像データの取込みで発生する画像の傾きを自動調整するズレ補正機能」だったり、日常的に請求書や帳票を扱う上で目にするシチュエーションはカバーできるようにしています。

請求書にしても、フォーマットが様々で、企業名が書かれている場所に上から社印が押されていることもあります。たくさんの情報がまとまっている書類のなかから、いかに正しく文字を読み取るかを、僕がお客さまから吸い上げた情報を開発チームに伝えて、実装できないか試してもらうんです。

——なるほど、そういった使用用途にあわせた調整も必要になってくるんですね。

先ほどの「1とlの見分けが難しい」問題も、プロダクト側で読み間違いを防ぐ仕組みを作っています。AI-OCRをかけるときに、書かれている文字の内容や用途にあわせたモデルをいくつか用意しているんですよ。

たとえば「電話番号」のモデルでAI-OCRをかければ、どんなに見分けるのが難しい文字があっても、最終的には数字しかアウトプットされなくなります。ユーザ側が、AIに「この文字列には数字しかないよ」と教えてあげる、というイメージですね。他にも「住所」や「名前」といったモデルがあるので、用途に合わせて使えば、そういった読み間違いも最小限に抑えられます。

▲AI insideさんによるAI-OCRサービス「DX Suite」製品ページより。文字のかすれや訂正印のほか、「複数行にわたる記載」「白抜き文字」など、ビジネス書類で想定しうる様々なパターンの表記方法に対応している

——お客さまに使ってもらうなかで、開発側からしてみたら全く想像もできないような要望がやってくることもあるかと思うのですが。

そういったご要望は非常に貴重です。以前には、「名字と名前との間にスペースを入れてほしい」というお客さまがいましたよね。

実際に「書かれた文字と文字の間にスペースが空いていたら、出力されるテキストにもスペースを入れる」ということは技術的には可能なんですよ。でも書き手によって文字間のスペースはまちまちなので、「正しい場所を狙ってスペースを入れる」のは意外と難しいんです。

——シンプルですが、大変そうな依頼ですね。それはどのように対処されたのでしょう?

「読み取った文字を名字か名前か判断する」のはさすがにAI-OCRだけではどうしようもないです。その時はAI-OCRをかけたあとに、読み取った文字に自然言語処理(※)をかけて解決しました。そうすれば、どこまでが名字でどこからが名前かがわかるようになります。

※ 人間が日常的に使う言語をPCで分析・処理する、言語学とAIにまたがった研究分野。文章の単語分割、構文解析、意味解析など、研究対象が複雑であるがゆえに解析すべき要素も多い

——AI-OCRだけでは完結しない処理も行っているんですね。

先ほどの「数字とアルファベットを前後の文字や文脈から読み取る」ように、自然言語処理を使った精度の向上は名前以外でも行うようにしています。シンプルに1文字1文字にそれぞれAI-OCRをかけると結果がバラつく場合でも、それぞれの前後を見ながら整合性を取っていくと精度が上がるんですよね。

まずは、AI-OCRをかけて文字を識別する。そうすると、ある文字に対して「この文字なのでは」という候補がいくつか並びます。しかし、それだけではどれが正しい文字なのかわからない。そんなときに前後の文字との関連をチェックすることで、候補の順位付けが変わって、最終的に一番自然な流れの文字がアウトプットできるんですよ。

「ルール無視」の文字を覚えさせると、AIのバランスが崩れる?

——他に、対応に苦労した依頼はありましたか?

「病院のカルテにお医者さんが書いた文字を読み取ってほしい」という依頼もありました。あのときは竹内さんにだいぶ頑張ってもらいました。

——え、御社のAIであれば手書き文字は難なく読み取れるのでは?

ええと……。お医者さんって、すごく特徴的、かつ個性的な文字を書く方もいらっしゃるんですよ。

——そうなんですか?

患者さんの診察と並行して行うので、すごく急いで文字を書くんですよ。結果として「医療の知識がある人がよく見れば、ようやく読める」レベルの文字になってしまうんです。それをAIでなんとかしてほしい、という依頼でした。

——「AIが人間と同じ仕組みで文字を覚える」のであれば、かなりの難易度だと思うのですが。

やり方はこれまでと同じで、お医者さんの様々な手書き文字を教師データとしてAIに覚え込ませていきます。しかしそう簡単にはいきませんでした。新しく「お医者さんの手書き文字」をAIに学ばせたことで、これまでは問題なかったはずの一般的な手書き文字の認識率が下がってしまったんです

——不思議な現象ですね。どうしてそんなことに?

これは非常に複雑な話になります。人でも読みづらい文字って、要するに「一般的なその文字の特徴を、全く当てはめることができない形になっている」ということなんです。そんな文字でもきちんと読めるようにすると、一般的な文字を読むためすでにAI側で組み立てていた「文字の特徴」のルールが崩れてしまうんですよ。

——「せっかく覚えた文字の特徴が、意図していない形で上書きされてしまう」ということでしょうか。あちらを立てればこちらが立たずというか。

ディープラーニングにおいて、「教師データのどこを参考にして、どのようにルール化を行うか」はAIが独自ですべて判断して行っています。その結果、アウトプットされたものに対して、どういった経緯でAIがその判断をしたのかが、開発者側にも定かではない状況なんですよ。これはAI-OCRや弊社のプロダクトに限らず、AIの思考がブラックボックス化してしまっていることが、いま研究者のなかで大きな課題になっているんです(※)。

お医者さんの文字を覚えるにしても、「これは今までに覚えたものをベースにして、追加で覚えてね」という指示が出せればベストです。しかし文字をどう覚えていくのかは、AIが決めているため、両者が混ぜ込まれてしまうんですよね。

※ 解析のプロセスや判断の根拠をAI自身が示せない弊害として、「患者をAIに診断させたら◯◯病という結果が出たが、当のAIではその根拠を説明できない」という事態に。こういったAIの思考がブラックボックス化している状況を受け、その判断の経緯を自ら示せる、いわば「説明できるAI」に研究者の間で注目が集まっている



基本的に弊社が提供しているのは、お客さまの用途に特化したものというよりも、汎用的なものなので、「業務をサポートするためのAI」という視点で開発・提供しています。お客さまの要望をかなえつつ、いかに汎用的なAIとしての精度を高めていくかということが重要です。お客さまからの新しい要望があるたびに、開発チームにはかなり頑張ってもらっていますね。

文字識別の精度向上ではなく、「よりプロダクトを使いやすくしていく」

——では、最後に「AI-OCR技術の今後」についてお伺いさせてください。「文字読み取りの精度を上げていく」という点においては、もう相当なところまで来ちゃってる、という感じでしょうか?

そうですね。もちろん「1」と「l」がまだ完全に判別できない状況ではあるんですが、先ほど申し上げたさまざまな工夫をして、読取精度を高める努力をしています。それと同時に、プロダクトをどれだけより手軽に使えるようにできるかを考えていければと思っています。

いま弊社では、フォーマットが違うものから特定の情報を取り出すAI-OCR技術に取り組んでいるんですよ。たとえば請求書って、書類の目的は同じでも、重要な金額が書かれている場所がフォーマットによってまちまちだったりするじゃないですか。「非定形帳票」と呼んでいるのですが、レイアウトが違う請求書でも、AIによって請求額を探し出すことができるようなアプローチをしています。

——そうやって、さまざまな種類の帳票に対応して、使い勝手の幅が広がっていくのでは、と。

先にお伝えしたように弊社が開発しているのは汎用的なAIなんですが、使う人が増えれば増えるほど、「我が社の業務には、こういったAIが必要」というような、専門性に特化しなければいけない場合が出てくるんです。

そんなお客さまのために、自社の業務にあわせたAIを自分で開発できるサービス(※)も、AI inside で提供するようになりました。これで「開発者でなくてもAI開発ができる」社会を目指していきたいな、と。

※ AI insideよるサービス、「Learning Center」。これまでは専門の技術者のサポートが必要だったAIを、ノーコードで開発できるサービスとしてリリース。業種や業態にあわせて、専門領域に特化したAIをユーザ側で開発することができる。くわしくはこちら

——今日はとにかくサービスの精度の高さに驚きました。取材前に手書き文字をお渡ししたときも、AI-OCRにかける前から「これくらいなら楽勝だよ」と思っていたのでは?

営業活動でもいつもいろいろな文字で試しているので……。お客さまに商談の場で試しに書いてもらってその場で読み取ってみる、というようなことも読取精度やプロダクトの使用感を体験していただくためにやっています。今回ご依頼いただいた手書き文字は、正直「これなら読めるだろう」という感じでしたね(笑)

——もうちょっとギリギリを攻めればよかったです。本日はありがとうございました!

文=伊藤 駿 / 編集=神田 匠(ノオト)

この記事が気に入ったらいいね!しよう

いいね!するとi:Engineerの最新情報をお届けします

プライバシーマーク