CCCMKホールディングス TECH Labの Tech Blog

TECH Labスタッフによる格闘記録やマーケティング界隈についての記事など

画像形式のドキュメントの内容を理解する"LayoutLM"について調べてみました。

こんにちは、CCCMKホールディングス TECH LAB三浦です。

この前夕方過ぎに洗濯物を取り込むためにベランダに出たら、満月を見ることが出来ました。せっかくなのでそのまま近所を少し歩いてみたりしました。秋の夜は過ごしやすくて好きな時間です。もう少ししたら冬がきて寒くなってしまうので、今だけの秋の夜長を楽しみたいなと思います。

さて、身の回りには色々なドキュメントがあります。メール、マニュアル、契約書、議事録、請求書・・・。それらは電子データとして発生したものもあれば、紙として発生したものもあります。ドキュメントの内容を解析する場合、電子データ由来のドキュメントは比較的解析がしやすいです。一方で紙由来のドキュメントは一度スキャンし、画像形式のデータとして電子化してから解析する必要があります。スキャンの方法によってはスキャン後のデータから正しい情報を抽出することが困難になり、電子データ由来のものに比べると扱いに悩むことが多いです。 さらに正しく画像データとして取り込めたとしても、その中には会社のロゴが入っていたり、表が入っていたり、テキストの配置もドキュメントによって様々です。画像のどこに注目して情報を抽出するべきかを人手で一つ一つ指定することも、場合によっては必要になるかもしれません。

このことから、紙由来のドキュメントを解析する上で課題になる点として次の2つが挙げられます。

  1. 画像形式に変換した後、正しく文字情報を読み取ることが出来る
  2. 読み取った文字情報から必要な情報を取得することが出来る

最初の課題はOCRの精度を高めることで実現することが出来ます。2つ目の課題は紙由来のドキュメントから生成された画像形式のドキュメントの内容を理解するための方法が必要になります。

最近画像形式のドキュメントを解析する方法を色々調べているのですが、どちらの課題もなかなか難しい問題だと感じています。特に日本語で書かれたドキュメントの場合、OCRが上手く機能しないことが多いように思います。課題1をクリアしてから課題2に取り掛かる、と考えていたのですが、もしかしたら課題2を解決する方法から、課題1のOCR精度を高める方法が見つかるのではないか、と考えるようになりました。たとえば注文用紙の注文情報記入欄からOCRの結果、"注文"というテキストが抽出されたとします。もしドキュメントの内容を理解出来ていれば、これはOCRの読み取りミスで正しくは"注文"であると、補正をかけることが出来るかもしれません。

課題2を解決する方法として、"LayoutLM"というテクニックがあることを知り、提案論文や実装コードを読み、どんなテクニックなのかを調べてみました。今回の記事では"LayoutLM"がどのようなテクニックなのか、調べたことをまとめてみたいと思います。

提案論文

"LayoutLM"は現在後継のバージョンがいくつか発表されていますが、今回は最初のバージョンに焦点を当てています。"LayoutLM"が提案された論文は次の論文です。

Title: LayoutLM: Pre-training of Text and Layout for Document Image Understanding Authors: Yiheng Xu, Minghao Li, Lei Cui, Shaohan Huang, Furu Wei, Ming Zhou Submit: Submitted on 31 Dec 2019 (v1), last revised 16 Jun 2020
arXiv URL: https://arxiv.org/abs/1912.13318

LayoutLM: Pre-training of Text and Layout for Document Image Understanding

LayoutLMは論文のタイトルのとおり、大量にある画像形式のドキュメントで事前学習をするためのテクニックです。事前学習したモデルは、ドキュメント分類タスク(ドキュメントがどのカテゴリに属するかを判定)や、ドキュメントの中のテキストの種類の判定(たとえばこのテキストは文章の中のヘッダであるといった判定)、質問に対する回答生成(たとえば請求書の会社名、金額、注文日などを答えてもらう)といった別のタスクに、少量のデータでFine-Tuningすることで適用することが出来ます。

テクニックの概要

LayoutLMは、それ以前に発表された"BERT"の事前学習を拡張したテクニックであると言えます。BERTはTransfromerのEncoder構造のモデルで、大量のテキストデータを使ってMasked Language Modeling(MLM)Next Sentence Prediction(NSP)という2つの自己教師あり学習によって事前学習を施すことで、様々なタスクに少数のデータで適用することが出来るようになります。とくにMLMはテキスト中のいくつかのトークンをランダムに隠し、その隠されたトークンが何かを文脈から推計するタスクです。LayoutLMでは、MLMを拡張したMasked Visual-Language Model(MVLM)というテクニックを使って事前学習を行う点が大きな特徴です。

LayoutLMの全体像

以下、論文に掲載されている、LayoutLMの全体像の図になります。

引用元: LayoutLM: Pre-training of Text and Layout for Document Image Understanding, Yiheng Xu, Minghao Li, Lei Cui, Shaohan Huang, Furu Wei, Ming Zhou, Figure 2

ポイントは2-D Position EmbeddingImage Embeddingです。

2-D Position Embedding

使用するモデルの構造はBERTと同じです。モデルに入力されるデータは、画像形式のドキュメントに対してOCR処理を実行して得られるテキストと、そのテキストが位置する座標情報です。BERTと同様に、テキスト情報はトークン化された後、対応するText Embeddingというベクトルデータに変換されます。オリジナルのBERTと違うのは、そのテキストが位置する座標情報に対応する2-D Position Embeddingという4つのベクトルがText Embeddingに合算されてモデルに入力される点です。

オリジナルのBERTでも、Text EmbeddingにPosition Embeddingという、テキストの中でそのトークンがどこに位置するのかを表す情報が加えられ、モデルに入力されます。2-D Position EmbeddingはPosition Embeddingを2次元の座標に拡張したもので、具体的にはそのトークンを囲む矩形の左上の点のx座標とy座標、右下の点のx座標とy座標に対応する4つのベクトルデータです。x軸方向とy軸方向では同じEmbedding Tableが使われるそうです。

モデルへの入力

LayoutLMはHuggingFaceに実装があるのですが、そちらの実装では矩形の左上/右上の点の座標だけでなく矩形の幅と高さの情報もEmbeddingを求め、Text Embeddingに加えられているようでした。

また、ドキュメントの分類の際に使用する"CLS"トークンも入力トークン列に加えます。"CLS"トークンに対応する2-D Position Embeddingは論文だとドキュメントの左上の原点(0, 0)とドキュメントの右下の点の座標のEmbeddingを加えているようですが、HuggingFaceの実装では(0, 0)と(0, 0)のEmbeddingを加えているようでした。

Image Embedding

トークンが含まれる矩形部分の画像には、テキストが例えば太字で強調されていたり、フォントに色が付いていたりといった画像的な特徴も含まれています。これらの画像における特徴をImage Embeddingとして使用します。先に掲載した論文から引用したLayoutLMの全体図からも分かるように、Image Embeddingは事前学習の段階では使用せず、事前学習したモデルを別のタスクに利用する際、事前学習済みモデルの出力に加える形で使用します。 Image Embeddingは、OCR処理で切り出されたトークンが含まれる矩形部分(ROI)に対するResNetなどのCNNモデルによる畳み込み処理後のfeature mapから抽出されます。その後全結合層を通してLayoutLMの出力と同じサイズに整えられ、加算されます。

HuggingFaceの実装においてはImage EmbeddingはLayoutLMの処理の中には含まれていません。必要な場合は自分で実装する必要があります。

事前学習について

LayoutLMの事前学習では、先ほど述べたMasked Visual-Language Model(MVLM)Multi-label Document Classification(MDC)の2つのタスクが実行されます。

MVLM

MVLMではMLMと同様にトークン列の1部をランダムにマスキングします。マスキング対象になるのはトークンのテキスト部分だけで、2-D Position Embeddingはそのまま維持されます。

MDC

論文で事前学習に使用されたデータセット"IIT-CDIP"には、各ドキュメントに対して複数のタグが付与されているそうです。ドキュメントからこのタグを予測するタスクがMulti-label Document Classification(MDC)です。ただし実際のデータセットではドキュメントにラベルが付いていないことの方が多いです。なのでMDCはLayoutLMの事前学習ではオプションという位置づけになっています。

OCRについて

LayoutLMでは最初に画像形式のドキュメントに対してOCR処理を加える必要があります。論文ではOCR処理にオープンソースの"tesseract"が使われています。tesseractは様々な言語に対応しており、日本語も対応しています。ただ今回試した限りだと日本語の読み取りはかなり難しそうな印象を受けました。矩形部分は認識出来ているようですが、テキストの内容の抽出が難しいようです。OCRについては日本語の場合はクラウドで提供されているサービスを活用することも検討した方が良いのかもしれません。

まとめ

ということで、今回は画像形式のドキュメントを理解するためのテクニックとしてLayoutLMについて調べたことをまとめてみました。日本語のドキュメントの場合、最初のOCR処理に大きな課題があるので利用するには少し工夫がいるのかもしれません。ただ、OCRが上手くいかなくてもそれらが何を表しているのか(たとえば会社名や金額、店舗名など)はトークン分類タスクで認識できる可能性も考えられます。面白いテーマだと思うので、今後実験してみたいと思います。