Pix2Struct
この度、自然言語処理に関するR&Dを担当することになった新卒2年目の新米が、私的注目論文を要約していこうと思います。(chatGPTで要約した記事とどっちが分かりやすいかな〜)
概要
- 要約:「webページのスクリーンショットからhtmlパース結果を予測する事前学習と、入力の工夫を2つ導入したらViTが高精度に!」
- 注目ポイント
- web系データに特化した、multimodal系
- OCR非依存で高性能なimage2textモデル
- スクリーンショットパースタスクの提案
- Donut越えのパフォーマンス
- 2つのViTに関する改善手法
- ViTのアスペクト比を保存する手法「可変解像度」
- 入力画像中にテキストプロンプトを描画する方法
- 課題
- 長い文章については、高解像度aspect比の画像が必要
- 画像中のテキスト理解タスクはドメイン特化型が多い(OCRありき、アンドロイドなどの特定プラットフォームありきなどのモデルが多い)
アーキテクチャ
- Vision Transformer (ViTとも。image encoder/text encoder)とモデル構造は同じ
- ViTとの違いは入力アスペクト比を保存して学習すること、及び、タスクの設計のみ!
- オリジナルViTは固定値の比率に画像を縮小する→fine tune時に解像度の違う画像を使うことになるのは不自然だから
- 入力画像を「受け付けるシーケンス長の定数倍サイズになるように拡大縮小」
- 入力パッチ画像埋め込みに配置座標を表す2次元データを付加
- データフロー
- 画像→テキスト(ViT、Donutなどと同じ)
データセット
- 学習
- C4 corpus: 80Mの(webページスクショ画像, html構造情報)のペア(非公開)
- データセットのhtmlのhtmlツリー構造について
- 孫ノードは削除
- 視覚的に効果のない子ノードも削除
- タグ情報とかも(本当は学習に使えそうだけど本研究ではとりあえず)削除
- スクショには出力ターゲット部分のDOMtreeを表すhtmlに対応する領域がbounding boxとして画像に追加されてる。さらに部分DOMtree中のテキストをマスクして当てさせるタスクを定義する。
- BooksCorpus(Zhu2015): Warmup時に使用
- 事前学習で上のデータセットをいきなり使って学習してもむず過ぎて学習が進行しないので、簡単なデータセットを最初のうちは学習させる。その際に用いるのがこのデータセット。文字を読むだけで良いタスク設計となっている。
- データセットのhtmlのhtmlツリー構造について
- C4 corpus: 80Mの(webページスクショ画像, html構造情報)のペア(非公開)
学習と実行方法
- 学習
- 事前学習
- BART同様の学習を行う。50%テキストをマスクし、画像→サブツリー構造へとdecodeする
- タスクの内訳(以下タスクに対応する損失関数の最適化を行う)
- マスク領域以外のDOMtreeに対応するhtmlを予測するタスク
- マスクした画像領域に書いてあるはずのテキストを当てるタスク
- alt-text属性の値を予測するタスク
- ←image captioningの文脈でよく使われる手法。画像やテキストが表示されない時に大体テキストとして表示される値。そこにあるべき内容を表現している。
- hyperparameter
- 2048 patch size
- Adafactor
- lr schedule: linear 10000steps to 0.01 followed by cosine decay to 0
- 282Mサイズモデルで、
- 270Kstep, batch size 3072, 64 GCP TPU
- 1.3Bサイズモデルで
- 170step, batch size 1024, 128 GCP TPU
- Warmup学習
- いきなり上の学習をしても学習はうまくいってくれない難しさなので、学習の序盤では簡単なデータセットで学習を行う
- 「白背景でただテキストが並んでいるだけの画像を生成し、テキストを当てさせるだけの学習」
- 30Ksteps, 128patchサイズ
- fine tuning
- 各モデルごとのhyperparameters
- base :4096patch長、5kstep, batch(32,128,256)のいずれ
- large:3072patch長、10kstep, batch(32,128,256)のいずれ
- multimodal 対応
- 入力が(疑問文+画像)の時は疑問文をhtmlのheader部分に入れて表示した画像を入力とする→結局入力は画像だけ!別入力チャンネルとしてtext inputを利用するわけではない
- 選択肢タイプの問題もheaderに選択肢テキストを追加した画像を入力とすることで対応可能
- 各モデルごとのhyperparameters
- リソース
- GCP TPUを 64台(base)、128台(large)
- 学習時間
- 記載なし
- 事前学習
コード
- github
- 公開なし
## 評価
- 4ジャンルのタスクで評価、どれもSotaのDonutモデルを凌駕する性能
- illustration
- テーブルデータなどのQA
- 化学関連の図に関するQA
- 本のカバーからメタデータを当てる
- UIs
- テキストの指示内容・アプリのスクショ・コンポーネントのセットからテキストの参照するコンポーネントがどれかを当てる。アプリのスクショないのbounding boxがどのコンポーネントかを説明する。アプリのスクショからページの機能を当てる。
- Natural Images
- TextCaptioning。OCRソフトを利用したpipelineモデルには精度及ばないものの健闘
- Documents
- DocVQA。LayoutLMv3には勝てず。
- 総評:善タスクでDonutは超えてる。
- illustration
- ablation
- 全要素大事だけど、「スクショパースタスク」が一番学習精度に貢献している模様