2021/10/15-16に開催されたPyCon JP 2021にて「Pythonで始めるドキュメント・インテリジェンス入門」という題で登壇しました。
ドキュメント・インテリジェンスとは、ビジネス書類を解析し内容を理解する技術やアプリケーションの総称です。紙に印字された文字をOCRで認識し、文書解析や意味理解などの技術を組み合わせて、タスクに応じて解析システムを構築する画像認識と自然言語処理の融合分野です。今回の私の発表では、ドキュメント・インテリジェンスの全体観を紹介するとともに、レシート読み取り機能の実装というシンプルな具体事例を元にして、OCRや情報抽出のイメージを掴んでもらうような内容にしました。
ソースコード: https://github.com/yagays/di-pyconjp2021
具体の内容は発表資料を参照いただくとして、この記事ではどのような経緯で登壇に至ったかを振り返ってみようと思います。
CfPへの応募
私が所属しているUbie Discoveryでは、ブログ執筆やカンファレンス登壇といった対外的なプレゼンス向上施策に力を入れています。そういった取り組みの中でPyCon JPのCall for Proposal(発表募集)が2021年6月頃に公開され、社内でも何かアクションを取れないかという話になりました。私も何か発表できるものがないかといろいろ検討した結果、Ubie入社から1年ほど仕事で取り組んでいたトピックである、紙に書かれた文書の解析について応募してみようと考えました。
ドキュメント・インテリジェンスという言葉
ドキュメント・インテリジェンスという言葉は、 Proposalの投稿に際して何か発表内容を一言で表す端的かつキャッチーな言葉が必要だと考え、NeurIPS 2019の“First Workshop on Document Intelligence”というワークショップの名前から持ってきたものです。このワークショップは2021年のKDDで2回目が開かれるほどまだ歴史が浅く、タイトルをGoogleで検索しても先進的なスタートアップが自社商品の説明に利用する例が散見されるくらいで、おそらくdocument intelligence自体アメリカでもまだ広く浸透していない単語ではないかと思います。当然ながら日本語でドキュメント インテリジェンスと検索しても、本家document intelligenceと同じ概念として説明されたウェブページなどは出てきません。こうした言葉を使うことは、新しい単語を無闇矢鱈に発明せず先例に倣うというアカデミックの流儀からは外れるものではありましたが、色々とサーベイする中で適する言葉が見つからなかったこともあり、最終的に採用するに至りました。
ちなみに、概念としてはDocument Analysis and Recognitionが最も近いと思いますが、ドキュメント・インテリジェンスを含むもう少し大きな概念かと思います。ビジネス文書の解析はコンピュータを使ったタイポグラフィにより生成された書類を対象とし内容理解に重点を置くあたり、情景画像からのOCRであったり、手書き文書や歴史文書の解析、小説などの文字情報が全てを表す文書の解析とは、用いる手法やタスク設計が少し異なる印象があります。
投稿そして採択
そんなことを考えながらProposalを締め切りギリギリで書き上げて7月中旬に投稿し、結果が出る8月中旬まで待つことに。その当時slackでは以下のような呑気なことを書いており、こういった目論見は途方もなく間違っていたことをこの後実感します。
登壇に向けて
採択結果が8月10日にわかると、これはいよいよ頑張らないといけないなと締め切り駆動で動き始めます。発表は2ヶ月後。発表内容はProposal時点で章立てレベルで提出していることもあって大まかに出来上がっていたものの、やはり入門と題して発表するからにはある程度体系立てた知識としてお伝えする必要があるだろうと考えて、分野全体のサーベイを始めました。と言っても、ドキュメント・インテリジェンスという真新しい言葉でサーベイ論文が出ているわけでもなく、ICDARなどの色々な学会の論文やビジネス文書解析がらみのブログ記事を漁ったり、前職の同僚に話を聞いたりと、散らばった情報をかき集めるのはかなり大変でした。特にOCRに関しては、古くからある技術で、ソフトウェアエンジニアに限らず多くの人にとって馴染みある技術だと思うのですが、その技術を日本語で解説した書籍は全くと言っていいいほど見当たりません(私の探し方が悪いのかもしれませんが)。見つけた書籍も出版が30年近く前のもので、逆に古典を知る機会になって興味深いということがありました。
最近OCRの歴史について調べていて、1994年出版の文献を見つけて入手できました。電気情報通信学会がまとめた音声や文字認識のパターン認識に関する本で手法自体はあまり書いてないですが、フォントどう対応するかなどの課題が書いてあって面白いです。 pic.twitter.com/RYKCuvIbvo
— やぐ (@yag_ays) October 6, 2021
こうしたサーベイなどの取り組みの中で今回の資料作成に直接的に寄与した部分は少ないですが、それでも自分の中で分野全体を体系立てて理解するきっかけになったと思います。資料に盛り込めなかった細かな話などは、またどこかブログなどでアウトプットできればと思います。
レシート読み取りという題材
PyCon JPという場所で登壇するからには、あくまでPythonのコードが主役にならなければいけないと考え、チュートリアル的に分析するコードを紹介することにしました。ドキュメント・インテリジェンスは様々なビジネス書類を題材とする都合上、取り組む題材によってやることがかなり変わってきます。なるべく共通した要素を紹介でき、かつ解析の奥深さも伝えられるくらいに難しいもの、そして親しみを持てるトピックを考えた結果、レシートの解析を選択しました。レシートというのはインターネットでも様々な方がブログ記事にしているくらいありふれた題材であり、私が改めて解説するほどのものなのかとかなり悩んだのですが、いざストーリーを構築するなかで簡単な文字列操作から固有表現抽出、暗黙的な表形式などを盛り込むことができ、結果的には私が話したいことを一通り網羅できる良い題材だったと思います。
最後に
今回発表したトピックは自分自身のなかでまだ体系立てて理解していなかった領域だったため、サーベイをしたり説明のためのストーリーを練る作業が本当に大変でした。私にとっては未踏の地の開拓という感じで手探り状態でなんとか完成させた発表ですが、ビジネス書類の解析をふくめ、OCRや周辺領域がもっと活発になり、新しく取り組みたいと思った方にとって多くの情報が得られるようになればいいなと思います。私もサービス開発の中で得られた知見を公開できるよう、これからも頑張りたいと思います。