uni-3 log

    Search by

    視覚的な文書構造の理解 LayoutLMv2 動かしてみた

    LayoutLMv2ドキュメント文書の構造理解を行うモデル。microsoftが開発したモデルで、文書画像理解のタスクに用いられる。azureのformrecognizerに用いられているそう

    transformersにモデルが入ったとのことなので見てみた

    https://twitter.com/huggingface/status/1432717997232295945

    モデルの概要

    ビジネス文書などでは、テキストの情報だけでなく、ドキュメントの構造の視覚的な情報も重要な意味を持つ(エクセルのような表構造の列、行が意味を持つなど)。そのような構造含めて解析を行うタスクをVrDU(Visually-rich Document Understanding)という

    先行研究にはNLPとCVを用いた個々のモデルを統合することで実現されているものがあるが、テキスト、レイアウト情報を統合し、end-to-endで学習するようなモデルとしてLayoutLMというモデルを提案している

    従来の単体のモデルを組み合わせる方法は精度は担保されるい、ドキュメントの種類に対して限定的なモデルである。そのため別なドキュメントなら再度一から学習し直す必要があり、一般的なレイアウト構造(key-valueペア的な表、グリッドレイアウトな表など)の知識を転移できないなどの問題がある

    そこで、まとめて情報を扱うようなVrDUに対する汎用的なモデルとなる事前学習済みモデルを作成するアプローチを取っている。そのようなモデルであるLayoutLMの改良版であるLayoutLMv2を作成し、SOTAを達成した

    v1とv2の違いは事前学習時にCV的な埋め込みを行うことにあるらしい(https://huggingface.co/transformers/model_doc/layoutlmv2.html にかいてあった)

    事前学習済みモデルとは、事前に大規模なデータで学習したモデルのこと。特定のタスクを解く際に事前学習モデルを用いることで、学習データが少量であっても精度の高いモデルを作成することができる

    FUNSDのデータセットのnotebookを試す

    例で上がってる中で一番それっぽいデータだったので

    ほぼ公開されたnotebookを試して、公式ページを読み解いただけである

    https://github.com/NielsRogge/Transformers-Tutorials/blob/master/LayoutLMv2/FUNSD/TrueinferencewithLayoutLMv2ForTokenClassification%2BGradiodemo.ipynb

    https://huggingface.co/transformers/model_doc/layoutlmv2.html

    データ準備の方法は色々ある

    • すべて自前で用いるときは

    トークンの境界を表すbbox(x0, y0, x1, y1 )の値。それに紐づくトークンが必要となる

    以下のようにして単語と対応するbboxをいれることで入力データをつくることができる

    image = Image.open("name_of_your_document - can be a png file, pdf, etc.").convert("RGB")
    words = ["hello", "world"]
    boxes = [[1, 2, 3, 4], [5, 6, 7, 8]] # make sure to normalize your bounding boxes
    encoding = processor(image, words, boxes=boxes, return_tensors="pt")
    print(encoding.keys())
    • 画像に対して、必要な特徴量を抽出する関数(transformers.LayoutLMv2FeatureExtractor)を使う

    https://huggingface.co/transformers/model_doc/layoutlmv2.html#layoutlmv2featureextractor

    特徴抽出とトークナイザーを組み合わせたものを用いて、入力データを作成することができる

    トークン抽出はtesserctを使うので、日本語は未対応

    • 学習の前準備

    LayoutLMv2Processorに必要な特徴量を与える

    • 予測

    トークンの種類を予測する。huggingfaceでもおなじみ。pretrained modelを読み込んで予測する 他にも文章のラベル付などもできる

    https://huggingface.co/transformers/model_doc/layoutlmv2.html#layoutlmv2fortokenclassification

    日本語対応させるには(できなかった)

    手元の日本語の請求書(画像のみ入力)でやってみたら、数値はちゃんとそれらしくラベルを付与できた(個人情報満載なので結果は載せない)

    公開されている日本語のビジネス文書データセットはなさそう。また、画像に合わせた矩形検出、OCRやトークナイザを行う機構が必要である

    マルチモーダルなモデルというから部分的なデータとかから判定できると思いきや、解けるタスクは単一である。事前学習モデルなので、ファインチューニング前提なのかも

    参考

    2021, Built with Gatsby. This site uses Google Analytics.