コンテンツにスキップ

LayoutLM:文書画像理解の強力なモデルを深層解析

LayoutLM

1. 概要

デジタル時代において、私たちは毎日大量の文書(スキャン書類、表、領収書など)に接しています。これらのテキストとレイアウト情報を含む文書をコンピューターに理解させることは、AI 分野の研究重点でした。従来の自然言語処理(NLP)モデルは主にテキストコンテンツに注目し、文書のレイアウトや視覚情報を無視していたため、文書画像の処理においてボトルネックに直面していました。この問題を解決するために、マイクロソフトは 2020 年 6 月にLayoutLMモデルを発表しました。

  • 背景歴史:
    • LayoutLM 以前、NLP モデルは主にテキスト入力に、コンピュータービジョンモデルは主に画像入力に注目していました。
    • LayoutLM の登場により、初めて画像、テキスト、2D 位置情報を入力とし、マルチモーダル情報処理を実現しました。
  • 開発チーム: LayoutLM はYiheng Xu, Minghao Li, Lei Cui, Shaohan Huang, Furu Wei, Ming Zhouによって共同開発されました。
  • 機能:
    • LayoutLM は文書画像を理解することを目的としており、情報抽出、フォーム理解、領収書理解、文書分類などのタスクに適します。
    • テキストとレイアウト情報の間の相互作用を同時にモデル化することで、文書画像理解のパフォーマンスを大幅に向上させます。
    • LayoutLM はスキャン文書または画像から特定の重点情報を抽出できます。

2. アーキテクチャ設計

LayoutLM のアーキテクチャはBERT (Bidirectional Encoder Representations from Transformers) に基づいています。BERT の基础上に2 つの新しい入力埋め込みを追加しています:

  • 2D 位置埋め込み (2D Position Embeddings): 文書内のテキストの空間位置を表すために使用されます。単語の順序のみを考慮する従来の位置埋め込みとは異なり、2D 位置埋め込みは各単語のバウンディングボックス座標 (x0, y0, x1, y1) を使用してページ上の位置を定義します。文書の左上隅が座標系の原点 (0, 0) と見なされます。これらの座標は 0-1000 の範囲に正規化され、モデルが理解できる数値表現に埋め込まれます。
  • 画像埋め込み (Image Embeddings): 視覚情報を統合するために使用されます。LayoutLM は画像を OCR テキストに対応する領域に分割し、これらの領域の視覚的特徴を使用して画像埋め込みを生成します。画像埋め込みは、モデルが文書の視覚スタイルを理解するのに役立ち、文書理解能力を強化します。

事前トレーニング (Pre-training):

  • LayoutLM はMasked Visual-Language Model (MVLM) を使用して事前トレーニングされます。MVLM はマスク言語モデルからインスピレーションを受けた技術ですが、テキストと 2D 位置埋め込みの両方を入力として考慮します。モデルは、コンテキストのテキストと空間位置情報を使用して、マスクされた単語を予測することを学習します。
  • LayoutLM はMulti-label Document Classification (MDC) も使用して事前トレーニングされます。このタスクは、LayoutLM が複数のラベル付きスキャン文書を処理するようにトレーニングし、複数の分野から知識を集約してより良い文書レベルの表現を生成できるようにしますが、大規模モデルの事前トレーニングに必須ではありません。
  • LayoutLM の事前トレーニングにはIIT-CDIP Test Collection 1.0データセットが使用され、600 万份以上の文書と 1100 万份以上のスキャン文書画像が含まれています。

3. 処理できる文書タイプ

LayoutLM は、レイアウトと視覚情報がコンテンツ理解に重要な文書の処理に優れています。以下のタイプが含まれます:

  • フォーム (Forms): LayoutLM はフォーム理解タスクで非常に良い結果を残し、特定のフィールドとレイアウトを持つ構造化文書を正確に処理できます。FUNSD データセットは通常、LayoutLM のフォーム理解能力のトレーニングと評価に使用されます。
  • 領収書 (Receipts): LayoutLM は領収書理解タスクでも優れたパフォーマンスを発揮します。領収書からデータを抽出し、テキストとレイアウト情報を活用できます。SROIE データセットは LayoutLM の領収書データの微調整に使用されます。
  • スキャン文書 (Scanned documents): LayoutLM はスキャン文書を効果的に処理し、テキストとレイアウト情報の間の相互作用を同時にモデル化できます。
  • ビジネス文書 (Business Documents): LayoutLM はさまざまなビジネス文書に適用できます:
    • 購入注文書 (Purchase orders)
    • 財務報告書 (Financial reports)
    • ビジネスメール (Business emails)
    • 販売契約書 (Sales agreements)
    • 供給業者契約書 (Vendor contracts)
    • 手紙 (Letters)
    • 請求書 (Invoices)
    • 履歴書 (Resumes)
  • その他の視覚的に豊富な文書 (Other Visually Rich Documents): LayoutLM は、レイアウトが言語表現を大幅に強化する視覚的に豊富な文書に適します。

4. 使用テクニック

  • OCR エンジン: OCR (光学式文字認識) エンジン(Tesseract など)を使用して、文書画像からテキストと対応するバウンディングボックスを抽出します。
  • バウンディングボックスの正規化: バウンディングボックス座標を LayoutLM に入力する前に、0-1000 範囲に正規化します。バウンディングボックス座標を文書画像の元の幅と高さで割り、1000 を掛けて正規化します。
  • 特殊トークン: LayoutLM はテキストを処理するために特殊トークンを使用します:
    • [CLS]: 分類トークン、シーケンス分類に使用され、シーケンスの最初のトークンです。
    • [SEP]: 区切りトークン、複数のシーケンスを区別するために使用されます。
    • [PAD]: パディングトークン、異なる長さのシーケンスをパディングするために使用されます。
    • [MASK]: マスクトークン、マスク言語モデリングに使用されます。
    • [UNK]: 未知トークン、語彙表中に存在しない単語を表すために使用されます。
  • 適切な Tokenizer の選択: LayoutLMTokenizer または LayoutLMTokenizerFast を使用してトークン化します。LayoutLMTokenizerFast は、Hugging Face の tokenizers ライブラリに基づく高速バージョンです。

5. 実行環境要件

LayoutLM の実行環境要件には主に以下の側面が含まれます:

  • プログラミング言語とフレームワーク:LayoutLM はPyTorchまたはTensorFlowフレームワークを使用して実装およびトレーニングできます。
    • PyTorch はオープンソースの機械学習ライブラリで、ニューラルネットワークとディープラーニングモデルの実装に一般的に使用されます。
    • TensorFlow は別の人気のオープンソース機械学習ライブラリで、ニューラルネットワークとディープラーニングモデルの実装にも使用されます。
  • Hugging Face Transformers ライブラリ:これは LayoutLM を使用するコアライブラリで、事前トレーニングモデル、tokenizer、その他のツールを提供します。
    • このライブラリは、LayoutLMModel、LayoutLMForMaskedLM、LayoutLMForSequenceClassification、LayoutLMForTokenClassification、LayoutLMForQuestionAnswering など、さまざまなタスク用のバリエーションを含む LayoutLM モデルのさまざまな実装を提供します。
  • OCR エンジン:文書画像からテキストと対応するバウンディングボックスを抽出するOCR(光学式文字認識)エンジンが必要です。
    • 一般的な OCR エンジンはTesseractです。
    • OCR エンジンは画像内のテキストを機械可読テキストに変換し、位置埋め込みに必要な座標を提供します。
  • 画像処理ライブラリPillow (PIL) など、文書画像を処理するための画像処理ライブラリが必要です。
  • データ処理ライブラリ:データ処理のためにNumPyPandasなどのデータ処理ライブラリが必要です。
  • ハードウェア要件:モデルのトレーニングを行う場合、GPUはトレーニング速度を大幅に加速できます。
  • Python 環境:必要なライブラリをインストールした Python プログラミング環境が必要です。
  • Tokenizer:トークン化のためにLayoutLMTokenizerまたはLayoutLMTokenizerFastが必要です。LayoutLMTokenizerFastは、Hugging Face の tokenizers ライブラリに基づく高速バージョンです。
    • Tokenizer は、テキストをモデルが理解できるトークンに分割する責任があります。
  • データセット:異なるタスクには異なるデータセットが必要です。例えば、FUNSD データセットはフォーム理解に、SROIE データセットは領収書理解に、RVL-CDIP データセットは文書画像分類に使用されます。

要約すると、LayoutLM を使用するには、適切なライブラリ(Transformers、PyTorch または TensorFlow、OCR エンジンなど)を構成した Python 環境と、データ前処理とモデルトレーニングを実行できるプラットフォームが必要です。

6. コード例

以下は、LayoutLM を使用してシーケンス分類を実行する PyTorch コード例です:

import os
import numpy as np
import pandas as pd
from tqdm.auto import tqdm
from sklearn.model_selection import train_test_split
import pytesseract
from PIL import Image, ImageDraw, ImageFont
import torch
from datasets import Dataset, Features, Sequence, ClassLabel, Value, Array2D
from transformers import LayoutLMTokenizer, LayoutLMForSequenceClassification, AdamW

# データセットの読み込み
# 'image_path'、'words'、'bbox'、'label' 列を持つ 'df' というデータフレームがあると仮定
# バウンディングボックス座標は正規化されている必要があります

# ラベルからインデックスへのマッピング辞書を作成
labels = df['label'].unique().tolist()
label2idx = {label: idx for idx, label in enumerate(labels)}

# tokenizer とモデルを読み込み
tokenizer = LayoutLMTokenizer.from_pretrained("microsoft/layoutlm-base-uncased")

# トレーニング例をエンコードする関数を定義
def encode_training_example(example, max_seq_length=512, pad_token_box=[0, 0, 0, 0]):
    words = example['words']
    normalized_word_boxes = example['bbox']
    assert len(words) == len(normalized_word_boxes)
    token_boxes = []
    for word, box in zip(words, normalized_word_boxes):
        word_tokens = tokenizer.tokenize(word)
        token_boxes.extend([box] * len(word_tokens))
    special_tokens_count = 2
    if len(token_boxes) > max_seq_length - special_tokens_count:
       token_boxes = token_boxes[: (max_seq_length - special_tokens_count)]
    token_boxes = [tokenizer.cls_token_box] + token_boxes + [tokenizer.sep_token_box]
    encoding = tokenizer(' '.join(words), padding='max_length', truncation=True)
    input_ids = tokenizer(' '.join(words), truncation=True)["input_ids"]
    padding_length = max_seq_length - len(input_ids)
    token_boxes += [pad_token_box] * padding_length
    encoding['bbox'] = token_boxes
    encoding['label'] = label2idx[example['label']]
    assert len(encoding['input_ids']) == max_seq_length
    assert len(encoding['attention_mask']) == max_seq_length
    assert len(encoding['token_type_ids']) == max_seq_length
    assert len(encoding['bbox']) == max_seq_length
    return encoding

7. まとめ

LayoutLM は、テキストとレイアウト情報を同時にモデル化することで、文書画像理解タスクの性能を大幅に向上させた画期的なモデルです。フォーム処理、領収書認識、請求書処理などのビジネスシーンで広く応用されており、デジタル文書処理の効率を大幅に向上させます。