pix2stract は fine tuning を行うことで様々なタスクに流用できますが、その前に事前学習と呼ばれる html 構造を理解するための学習を行います。
ここで使用された学習データは、80M の Web スクリーンショットと html のペアで自己教師あり学習を行います。自己教師あり学習なのですが、html をそのまま使用するのではなく、可視要素を持つノードに限定されています。論文中では可視要素のみでしたが、スタイルやタイトル、URL なども情報として保持することも可能なようです。
学習では、BERT と同じように画像にランダムな 50%のマスク処理を行います。
fine tuning
pix2stract では画像のような複数のタスクに対する fine tuning が行われます。この時に、入力画像と入力テキストは別々で処理するのではなく入力画像のヘッダーとして入力テキストを埋め込んだ画像として入力します。選択肢のある入力テキストに対してもヘッダーに埋め込み、あくまでも画像としてモデルに入力をします。
from PIL import Image
from pdf2image import convert_from_path, convert_from_bytes
import torch
from functools import partial
from transformers import Pix2StructForConditionalGeneration as psg
from transformers import Pix2StructProcessor as psp
3. モデルの読み込み
DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
model = psg.from_pretrained("google/pix2struct-docvqa-large").to(DEVICE)
processor = psp.from_pretrained("google/pix2struct-docvqa-large")
今回は、画像から構造を把握する pix2stract について紹介しました。論文中では、各タスクについて SOTA を達成していたことから今後さらに主流になりそうなモデルになります。今後、CLIP から unCLIP のようにテキストから Web ページを作成するモデルなどが出ることを個人的に期待しています。