4
2

進化するマルチモーダル:高性能ビジョン・ランゲージ・モデル Qwen2-VL で画像の説明とOCR、表データ抽出にチャレンジしてみる

Last updated at Posted at 2024-09-06

1000030945.jpg

このブログは何?

マルチモーダルな RAG(Retrieval-Augmented Generation:検索拡張生成) を実現するためには、画像やビデオ・動画に対する高い理解能力を持つビジョン・ランゲージ・モデルが必要となります。これまでは、商用のクローズウェイトドモデル(モデルのパラメータを非公開としているモデル)とオープンウェイトモデル(モデルのパラメータを公開しているモデル)では性能に大きな隔たりがありました。2024年8月にアリババクラウドから発表された Qwen2-VL は、商用モデルに匹敵する性能 を持っていると言われています。この記事は、その Qwen2-VL を Jupyter ノートブックと Gradio アプリケーションで試してみた際の記録です。Jupyterノートブックについてはコードの簡単な解説もつけています。また、Gradio を使った GUI アプリケーションを使って Qwen2 VL による 画像(図)の説明、2つの画像の比較、手書き文字の抽出、表データの抽出 の検証結果も紹介しています。

今回の小規模な検証の範囲での印象としては、画像の説明やテキスト抽出(日本語の手書きを含む)においては、2B モデルと7Bモデルに大きな性能差は無く 2B モデルでも実用になる用途はいろいろありそうです。一方で、表データの抽出では、7Bモデルに優位性がありそうです

Qwen2 VL には、パラメータ数が 2B(20億)、7B(70億)、72B(720億)の3つのモデルサイズがあります。この検証は2B と 7B モデルで行っています。これらのモデルでも良好な結果が得られていますが、最も大規模な 72B モデルではさらに優れた結果が期待できるのではないかと思います

Qwen2-VL とは?

Qwen2-VLは、Alibaba Cloudが開発した最新のビジョン・ランゲージ・モデルです。このモデルは、画像やビデオの理解能力に優れており、MMMU-Proベンチマークでは、商用のクローズドモデル(GPT-4o、Claude 3.5 Sonnet、Gemini 1.5 Pro)に匹敵する結果が出ています。また、20分以上の動画を高品質で理解することができます。さらに、複雑なオブジェクトの関係性や多言語のテキストを認識する能力も持ち合わせています

image.png
"MMMU-Pro: A More Robust Multi-discipline Multimodal Understanding Benchmark"の "Figure 1:Overview of different multimodal LLMs’ performance on MMMU-Pro and MMMU (Val)." から引用)

事前準備

テストプログラムの取得

テストプログラムは次の GitHub リポジトリで公開しています

次のコードでローカル(or クラウド)環境にクローンしてください

git clone https://github.com/kutsushitaneko/qwen2-vl-xb-instruct.git
cd qwen2-vl-xb-instruct

Python パッケージのインストール

PyTorch のインストール

CUDA 対応 の PyTorch をインストールします

PyTorch のインストール
pip install -U torch torchvision --index-url https://download.pytorch.org/whl/cu124

その他の依存ペッケージのインストール

pip install -r requirements.txt

requirements.txt では以下のパッケージをインストールしています(注意を要するものだけ一部紹介)

Hugging Face transformers のインストール

Qwen2 VL は、最新版の transformers でサポートされていますので、pip install transformers で PyPI からインストールするのではなく GitHub からインストールしています。 手動でインストールするときは以下のコマンドラインとなります。

transformers のインストール
pip install -U git+https://github.com/huggingface/transformers

Qwen2 の実行中に KeyError: 'qwen2_vl' というエラーメッセージが表示された場合は、最新版の transformers がインストールされていませんので、上のコマンドでインストールし直します

qwen-vl-utils のインストール

Qwen の ビジョン・ランゲージ・モデルに画像やビデオを入力する際の支援ツールをインストールしています。手動でインストールするときは以下のコマンドラインとなります。

qwen-vl-utils のインストール
pip install qwen-vl-utils

Jupyter ノートブックの場合

ノートブックの実行と解説を表示

ノートブックの実行と解説

お好みの Jupyter ノートブック環境で qwen2-vl-vqa.ipynb を上から順に実行します

from transformers import Qwen2VLForConditionalGeneration, AutoTokenizer, AutoProcessor
from qwen_vl_utils import process_vision_info
from ipywidgets import Dropdown
  • transformersライブラリからQwen2VLForConditionalGenerationモデル、AutoTokenizer、およびAutoProcessorクラスをインポートしています。これらは、Qwen2-VLモデルの読み込み、テキストのトークン化、および入力の前処理に使用されます
  • 次に、qwen_vl_utilsモジュールからprocess_vision_info関数をインポートしています。この関数は、Qwen2-VLモデルの視覚情報(画像やビデオ)を処理するために使用されます
  • 最後にipywidgets モジュールから Dropdown ウィジェットをインポートしています。これは、ノートブック中で、モデルを選択する際に使用しています
# モデルの選択(2B モデルか 7B モデルかを選択)
model_options = ["Qwen/Qwen2-VL-2B-Instruct", "Qwen/Qwen2-VL-7B-Instruct"]
model_dropdown = Dropdown(options=model_options, value=model_options[0], description='Model:')

# ドロップダウンを表示
display(model_dropdown)

def get_model_id(change):
    global model_id
    model_id = change.new

# 値が変更されたときにget_model_id関数を呼び出す
model_dropdown.observe(get_model_id, names='value')

model_id = model_dropdown.value
  • 使用するモデルをドロップダウンから選択します
# モデルをロード
print(f"loading {model_id}...")
model = Qwen2VLForConditionalGeneration.from_pretrained(
    model_id, torch_dtype="auto", device_map="auto"
)
  • 選択したモデルをロードしています
# プロセッサの初期化
processor = AutoProcessor.from_pretrained("Qwen/Qwen2-VL-2B-Instruct")
  • 入力データ(テキストプロンプトと画像やビデオ)の前処理を行うプロセッサを初期化しています
messages = [
    {
        "role": "user",
        "content": [
            {
                "type": "image",
                "image": "chat_with_ai.jpg",
            },
            {"type": "text", "text": "Describe this image."},
        ],
    }
]
  • 入力画像とテキストプロンプトを設定しています
    • 入力画像:chat_with_ai.png
    • テキストプロンプト:「Describe this image.」

入力画像(chat_with_ai.jpg)

# プロンプトの準備
text = processor.apply_chat_template(
    messages, tokenize=False, add_generation_prompt=True
)
print(text)
  • テキストプロンプトにプロンプトテンプレートを適用してモデルが受け付けるプロンプトの形式に変換しています

テンプレート適用後のプロンプトの例

<|im_start|>system
You are a helpful assistant.<|im_end|>
<|im_start|>user
<|vision_start|><|image_pad|><|vision_end|>Describe this image.<|im_end|>
<|im_start|>assistant

# イメージの準備
image_inputs, video_inputs = process_vision_info(messages)
  • 画像の前処理をしています
# モデル入力の準備
inputs = processor(
    text=[text],
    images=image_inputs,
    videos=video_inputs,
    padding=True,
    return_tensors="pt",
)
inputs = inputs.to("cuda")
  • プロセッサで入力データの前処理をして、前処理済みの入力データを GPU へ転送しています
# 推論:出力の生成
generated_ids = model.generate(**inputs, max_new_tokens=128)
generated_ids_trimmed = [
    out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids)
]
output_text = processor.batch_decode(
    generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False
)
print(output_text)
  • モデルで推論を行い結果を表示しています
推論結果の例(クリックすると表示されます)
Qwen2 VLモデルの応答

The image depicts a futuristic scene where a humanoid robot and a human are engaged in a conversation. The robot, which appears to be made of glowing, light-emitting particles, is seated on the floor with its hands resting on its knees. The human, who is dressed in a formal outfit, is sitting upright and facing the robot. Both figures are illuminated by a warm, golden light that gives the scene a vibrant and otherworldly atmosphere. The background features a modern, high-tech environment with tall buildings and glowing lights, suggesting a high-tech or futuristic setting. The word "Chat" is prominently displayed in the center of the image,

その画像は、人間型ロボットと人間が会話している未来的なシーンを描いています。光り輝く発光粒子でできているように見えるロボットは、手を手首に乗せて床に座っています。人間はフォーマルな服装をしており、背筋を伸ばしてロボットに向き合って座っています。2人の姿は、シーンに活気と異世界的な雰囲気を与える温かみのある黄金色の光に照らされています。背景には、高い建物や輝く光など、近代的なハイテク環境が描かれ、ハイテクまたは未来的な設定であることを示唆しています。画像の中心には、目立つように『チャット』という言葉が表示されています。

Gradio による GUI 版の場合

GitHub からクローンしたリポジトリの中に Gradio による GUI版が入っています。上記の事前準備を実行した上で下記の手順でGUI版を実行します

GUI版の実行

ターミナルから Python スクリプト qwen2-vl-vqa.py を実行します

GUI版の実行
python qwen2-vl-vqa.py
  • "モデル選択"で 2B モデルか 7B モデル化を選択します
  • 画像1 に画像をアップロードします
  • 2枚の画像の比較などをする場合は、画像2 にもう一枚の画像をアップロードします
  • "質問"にプロンプトを入力します(例:画像を説明してください。)
  • "送信"をクリックします

検証(2Bモデル)

静止画の Visual Understanding の実験

英語プロンプト





Describe the image in detail. Also describe the positional relationships between objects.

The image depicts an animated scene featuring three characters: a young girl, a cat, and another cat. The background is a mystical, fairy-tale-like setting with soft, ethereal lighting and swirling, flowing patterns that give it a dreamlike quality.
  1. Young Girl: The central character is a young girl with blonde hair styled in a high ponytail. She is wearing a pink fairy costume with a delicate, flowing skirt and matching wings. The girl is holding a glowing wand with a spark of light emanating from it, suggesting she might be a fairy or a magical being. She has a cheerful expression on her face, with big blue eyes and a small smile.

  2. Cat: To the left of the girl, there is a white cat with large green eyes and a pink bow tie around its neck. The cat appears to be sitting or lying down, looking up at the girl with a curious or attentive expression.

  3. Another Cat: To the right of the girl, there is another white cat with smaller, round eyes. This cat is also sitting or lying down, looking up at the girl as well. It has a more relaxed posture compared to the first cat.

Positional Relationships:

  • The girl is positioned centrally, holding the wand and looking directly at the viewer.
  • The first cat is to the left of the girl, sitting or lying down.
  • The second cat is to the right of the girl, also sitting or lying down.

This image combines elements of fantasy and whimsy, likely intended for children, with the magical elements suggested by the girl's attire and the glowing wand. The positioning of the cats and the girl creates a sense of companionship and interaction, possibly indicating a story where the girl and the cats are part of a magical world.

日本語プロンプト





画像を詳細に説明してください。 また、オブジェクト間の位置関係も説明してください。

この画像は、魔法使いと2匹の猫のシーンを描いたアニメーションの様子を示しています。魔法使いは、金色の髪と大きな瞳を持つ、ピンクのドレスと透明な羽根を持つ少女です。彼女は魔法杖を持っており、その光が輝いています。

魔法使いの左右には、2匹の白い猫が座っています。左側の猫は、赤いネクタイを身につけた白い猫で、右側の猫は、小さな白い猫で、彼女は魔法使いの手元にいるようです。

背景には、青色の壁と、光るような模様が描かれています。これらの要素は、魔法使いや猫たちが魔法を発揮する場所を示しています。

図の理解





画像をできるだけ詳細に説明してください。

RAG(Retrieval-Augmented Generation: 検索拡張生成)は、行政やエンタープライズのデータ利活用のための技術です。以下に、RAGのプロセスとデータソースを説明します。
  1. 質問: データソースから必要な情報を取得します。
  2. クエリ: データソースから必要な情報を取得します。
  3. 検索結果: データソースから必要な情報を取得します。
  4. 回答生成指示: 大規模言語モデルから回答を生成します。
  5. 回答: 大規模言語モデルから回答を生成します。

データソースには、住民情報、防災情報、地理情報、電子申請、税務情報、福祉情報など、様々なデータソースがあります。これらのデータソースから必要な情報を取得し、クエリを生成し、検索結果を取得し、回答生成指示を生成し、回答を生成します。

このプロセスは、データの取り込み、同期、インデックス化を含みます。データソースから必要な情報を取得し、クエリを生成し、検索結果を取得し、回答生成指示を生成し、回答を生成します。

2つの画像の比較





2つの画像の共通点と異なっている点を教えてください。特に写っているオブジェクトに着目してください。

これらの画像にはいくつかの共通点と異なる点があります。
  1. キャラクター: 両方のキャラクターはアニメーションで描かれています。それぞれが美しい衣装を着ており、魔法杖を持っていて、猫がいる場面です。

  2. 背景: 両方の背景も同様に美しい宮殿や魔法の世界を示しています。背景は明るい色で、光が当たって輝いています。

  3. キャラクターアイコン: 両方のキャラクターとも、キャラクターアイコンとして描かれています。これは、キャラクターの特徴やデザインを表すために使用されるアイコンです。

  4. 魔法: 両方のキャラクターとも、魔法を発揮している状態で描かれています。魔法杖を持ち、魔法の光を放っています。

  5. : 両方のキャラクターとも、猫がいる場面で描かれています。猫は通常、魔法や魔法使いの要素を含むアニメーション作品でよく見られます。

しかし、異なる点としては以下のようになります:

  1. 髪型: 両方のキャラクターとも、髪型が異なる点があります。一つは長い髪をつけており、もう一つは短い髪をつけています。

  2. 服装: 一方のキャラクターは、ピンクのドレスを着ており、もう一方のキャラクターは、紫色のドレスを着ています。

  3. 表情: 一方のキャラクターは、笑顔で、もう一方のキャラクターは、少し悲しそうな表情をしています。

これらの違いは、それぞれのキャラクターの個性や設定に基づくものであり、アニメーションの視覚的な表現の一部と言えます。

魔法使いの左右には、2匹の白い猫が座っています。左側の猫は、赤いネクタイを身につけた白い猫で、右側の猫は、小さな白い猫で、彼女は魔法使いの手元にいるようです。

背景には、青色の壁と、光るような模様が描かれています。これらの要素は、魔法使いや猫たちが魔法を発揮する場所を示しています。

OCR の実験

日本語テキストの抽出(1)





画像からテキストを抽出してください。

以下はテキストの抽出結果です。

分子集合体を構成する発色団間の相互作用と光学活性の関係は古くから理論的に研究されてきた。

FanoとDevoe は古典電磁気学的に発色団間の相互作用と光学活性の関係を調べ、「Fano-Devoe model」と呼ばれる分極率理論を展開した。

この理論はその後、HertzenbergらのGreen関数法による量子力学的定式化等を経て発展してきた。

当研究室ではApplequistの線形応答理論をFano-Devoe modelに適用して分子集合体の光学活性の研究に応用してきた。

Fano-Devoe modelは発色団間の相互作用とL7 electric transition moment間のdipole-dipole相互作用だけを考えるもので、magnetic momentによる不斎場の効果やpermanent dipoleによるstaticな効果は完全に無視されている。

一方、BuckinghamとStilesは分極率理論に不斎場の効果を取り入れた式を導出したものである。

彼らの式はachiralな発色団からなるdimerについて相互作用を一次だけについて考えた式である。

そこで本研究では相互作用を無限次まで取り上げるように拡張し、α-helix polypeptideについて計算を行った。

またstatic effectについてはextended Fano-Devoe modelの新たなformulationに基づいて計算を行いFano-Devoe modelとの比較を行った。

さらにextended Fano-Devoe modelの中でもpolymerの波動関数の近似の程度によりRPA


このテキストは、日本語で書かれた手書きの文書です。

私の手書きの文字でも正しく認識できています

日本語テキストの抽出(2)





画像からテキストを抽出してください。

以下はテキストを抽出した画像です。

```plaintext
発行日 2023/09/16
【納品書】

受注番号
お届け先

数量
コード
商品名
金額
1
5621766
【小説】お隣の天使様にいつの間にか駄目人間にされた件(8.5)通常版
特典
1
288615
★A6サイズ4Pリーフレット お隣の天使様にいつの間にか駄目人間にされた件(8.5)通常版 アニメイト限定セット【あなたの元に天使様が給仕に来ていますが、これが何かが起こりません。】
特典
1
286281
★重要事項説明書 お隣の天使様にいつの間にか駄目人間にされた件(8.5)通常版 アニメイト限定セット【あなたの元に天使様が給仕に来ていますが、これが何かが起こりません。】
特典
1
3443762
【有償特典】お隣の天使様にいつの間にか駄目人間にされた件(8.5)通常版・特装版 アニメイト限定セット用あなたの元に
特典
1
3443786
【小説】お隣の天使様にいつの間にか駄目人間にされた件(8.5)通常版 アニメイト限定セット【あなたの元に天使様が給仕に来ていますが、これが何かが起こりません。】
特典
商品合計
送料・手数料
使用ポイント
お支払い金額
¥8,404
¥594
¥901
¥8,097
```

このテキストは、商品の詳細、数量、商品名、金額、商品合計、送料・手数料、使用ポイント、およびお支払い金額を示しています。

このテキスト抽出は一見正しく抽出できているように見えますが、コード= 286281 や 3443786 の商品名を見てみると原紙の印字が切れている部分を勝手に補完してハルシネーションしています(特典が夢のよう...幻覚ですから)

日本語の表の抽出





この表からテキストを抽出してください。

以下の通りです。

|科目| 金額|
|---|---|
|売上高| 50,000|
|売上原価| 30,000|
|売上総利益| 20,000|
|販売費及び一般管理費| 
|広告宣伝費| 2,000|
|給与手当| 5,000|
|減価償却費| 1,500|
|その他| 3,500|
|販管費計| 12,000|
|営業利益| 8,000|
|営業外収益| 
|受取利息| 100|
|受取配当金| 200|
|為替差益| 150|
|営業外収益計| 450|
|営業外費用| 
|支払利息| 300|
|雑損失| 150|
|営業外費用計| 450|
|経常利益| 8,000|
|特別利益| 
|固定資産売却益| 500|
|特別利益計| 500|
|特別損失| 
|災害損失| 200|
|特別損失計| 200|
|税引前当期純利益| 8,300|
|法人税等| 2,490|
|当期純利益| 5,810|

回答はマークダウンで返ってきました。出力のままレンダリングすると次のようになります

以下の通りです。

科目 金額
売上高 50,000
売上原価 30,000
売上総利益 20,000
販売費及び一般管理費
広告宣伝費 2,000
給与手当 5,000
減価償却費 1,500
その他 3,500
販管費計 12,000
営業利益 8,000
営業外収益
受取利息 100
受取配当金 200
為替差益 150
営業外収益計 450
営業外費用
支払利息 300
雑損失 150
営業外費用計 450
経常利益 8,000
特別利益
固定資産売却益 500
特別利益計 500
特別損失
災害損失 200
特別損失計 200
税引前当期純利益 8,300
法人税等 2,490
当期純利益 5,810

正しく抽出できているようです。
次に出力形式を HTML にしてみます。





この表からテキストを抽出してくHTML形式で出力してださい。

以下は、ABC株式会社の損益計算書のHTML形式です。

<!DOCTYPE html>
<html>
<head>
    <title>ABC株式会社 �益計算書</title>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>科目</th>
                <th>金額</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>売上高</td>
                <td>50,000</td>
            </tr>
            <tr>
                <td>売上原価</td>
                <td>30,000</td>
            </tr>
            <tr>
                <td>売上総利益</td>
                <td>20,000</td>
            </tr>
            <tr>
                <td>販売費及び一般管理費</td>
                <td>
                    <ul>
                        <li>広告宣伝費</li>
                        <li>給与手当</li>
                        <li>減価償却費</li>
                        <li>その他</li>
                        <li>販管費計</li>
                    </ul>
                </td>
            </tr>
            <tr>
                <td>営業利益</td>
                <td>8,000</td>
            </tr>
            <tr>
                <td>営業外収益</td>
                <td>
                    <ul>
                        <li>受取利息</li>
                        <li>受取配当金</li>
                        <li>為替差益</li>
                        <li>営業外収益計</li>
                    </ul>
                </td>
            </tr>
            <tr>
                <td>営業外費用</td>
                <td>
                    <ul>
                        <li>支払利息</li>
                        <li>雑損失</li>
                        <li>営業外費用計</li>
                    </ul>
                </td>
            </tr>
            <tr>
                <td>経常利益</td>
                <td>8,000</td>
            </tr>
            <tr>
                <td>特別利益</td>
                <td>
                    <ul>
                        <li>固定資産売却益</li>
                        <li>特別利益計</li>
                    </ul>
                </td>
            </tr>
            <tr>
                <td>特別損失</td>
                <td>
                    <ul>
                        <li>災害損失</li>
                        <li>特別損失計</li>
                    </ul>
                </td>
            </tr>
            <tr>
                <td>税引前当期純利益</td>
                <td>8,3000</td>
            </tr>
            <tr>
                <td>法人税等</td>
                <td>2,4900</td>
            </tr>
            <tr>
                <td>当期純利益</td>
                <td>5,8100</td>
            </tr>
        </tbody>
    </table>
</body>
</html>

※"広告宣伝費" などの階層の深い項目の金額が消えてしまっています。また、金額の桁を間違えている項目もあります(税引前当期純利益、法人税等、当期純利益)

出力からヘッダー部分を除外してレンダリングすると次のようになります

以下は、ABC株式会社の損益計算書のHTML形式です。

科目 金額
売上高 50,000
売上原価 30,000
売上総利益 20,000
販売費及び一般管理費
  • 広告宣伝費
  • 給与手当
  • 減価償却費
  • その他
  • 販管費計
営業利益 8,000
営業外収益
  • 受取利息
  • 受取配当金
  • 為替差益
  • 営業外収益計
営業外費用
  • 支払利息
  • 雑損失
  • 営業外費用計
経常利益 8,000
特別利益
  • 固定資産売却益
  • 特別利益計
特別損失
  • 災害損失
  • 特別損失計
税引前当期純利益 8,3000
法人税等 2,4900
当期純利益 5,8100

※"広告宣伝費" などの階層の深い項目の金額が消えてしまっていることや金額の桁数間違いがあることが明確にわかります。

少ない試行回数ですが出力形式による影響があるようです。実利用では出力形式の吟味が必要なようです。

検証(7Bモデル)

静止画の Visual Understanding の実験

英語プロンプト





Describe the image in detail. Also describe the positional relationships between objects.

The image depicts a whimsical scene featuring a young girl and two cats in what appears to be a magical or fantasy setting. The girl is standing in the center, holding a glowing wand with a golden handle and a bright, star-like tip. She is dressed in a pink outfit that includes a dress, tights, and shoes, and she has a tiara on her head. Her hair is styled in pigtails with butterfly clips.

To her left, there is a white cat sitting upright, facing forward. This cat has orange ears and a pink bow tie around its neck. To her right, another white cat is also sitting, but it is turned slightly towards the girl, looking at her with a content expression.

The background features a blurred, ethereal setting with soft blue lighting and what appears to be a large window or portal, suggesting a connection to another world or dimension. The floor is adorned with intricate patterns, adding to the magical atmosphere of the scene. The overall composition suggests a playful and enchanting narrative.

なお、A40 で推論時間は14秒でした。

日本語プロンプト





画像を詳細に説明してください。 また、オブジェクト間の位置関係も説明してください。

この画像には、魔法使いのような衣装を着た女の子と2匹の白い猫が描かれています。女の子はピンクのドレスを着ており、金色の靴を履いています。彼女の頭には金色の冠があり、肩からは紫色の翼が見えます。彼女は右手で魔法の杖を持ち、杖先には光が放射されています。

左側の猫は正面を向いており、右側の猫は女の子の足元に座っています。背景には青い色調の光が差し込み、光の下に大きな石柱が見えます。全体的に幻想的な雰囲気があります。

なお、A40 で推論時間は12秒でした。

図の理解





画像をできるだけ詳細に説明してください。

この画像は、RAG(Retrieval-Augmented Generation)のプロセスを説明している図です。RAGは、検索と生成を組み合わせたテクノロジーで、特に行政やエンタープライズのデータ利活用に用いられます。
  1. 質問:ユーザーが質問を提出します。
  2. クエリ:アプリケーションが質問を解析し、検索用のクエリを作成します。
  3. 検索結果:クエリがデータベースに送られ、関連するデータが検索されます。
  4. 回答生成指示:大規模言語モデルが検索結果を分析し、回答の指示を生成します。
  5. 回答:アプリケーションが指示に基づいて回答を生成します。
  6. 回答:ユーザーが回答を受け取ります。

データソースには、非構造化データと構造化データがあります。非構造化データには、住民情報、防災情報、ゴミ収集管理、文書管理、Workday、議会情報、税務情報、福祉情報、公共施設予約などが含まれます。構造化データには、JSON、リレーショナル、ベクトル、グラフ、テキストサーチ、地理空間データなどが含まれます。

このプロセスは、データの取り込み、同期、インデックス化を含みます。データの取り込みは、さまざまなデータソースから行われ、同期はデータの更新を管理し、インデックス化はデータの検索を効率化します。

図中では、ナレッジベースの例として記載されている「JSON、リレーショナル、ベクトル、グラフ、テキストサーチ、地理空間データ」が構造化データとなっている点は間違えていますが、2B モデルでは拾えていなかったこれらの単語を認識できています。マルチモーダルRAGを構成する際に、ビジョン・ランゲージ・モデルによる説明文をベクトル検索やキーワード検索の検索対象とするようなアプローチをする場合には、この図を見つけ出せる可能性が高まりますので有益です。

2つの画像の比較





2つの画像の共通点と異なっている点を教えてください。特に写っているオブジェクトに着目してください。

これらの2つの画像には以下の共通点があります:
  1. 両方の画像には猫がいます。
  2. 両方の画像のキャラクターは魔法棒を持っています。

異なる点は以下の通りです:

  1. 第1つの画像では、キャラクターはピンクのドレスを着用していますが、第2つの画像では黒髪のキャラクターがピンクのドレスを着用しています。
  2. 第1つの画像では、キャラクターは金の魔法棒を持っていますが、第2つの画像ではキャラクターはピンクの魔法棒を持っています。
  3. 第1つの画像では、背景は青い色調で、キャラクターの後ろには大きな窓がありますが、第2つの画像では背景は暖かい色調で、キャラクターの後ろには壁とカーテンがあります。

この1回の画像比較に関しては 2B の方が良いようです。

OCR の実験

日本語テキストの抽出(1)





画像からテキストを抽出してください。

以下は、画像から抽出したテキストです。

序論

分子集合体を構成する発色団間の相互作用と光学活性の関係は古くから理論的に研究されてきた。
Fano と Devoe は古典電磁気学的に発色団間の相互作用と光学活性の関係を調べ、「Fano-Devoe model」と呼ばれる分極率理論を展開した。
この理論はその後、Hertzenbergらの Green 関数法による量子力学的定式化等を経て発展してきた。
当研究室では Applequist の線形応答理論を Fano-Devoe model に適用して分子集合体の光学活性の研究に応用してきた。

Fano-Devoe model は発色団間の相互作用と electric transition moment 間の dipole-dipole 相互作用だけを考えるもので、magnetic moment による不斎場の効果や permanent dipole による static な効果は完全に無視されている。
一方、Buckingham と Stiles は分極率理論に不斎場の効果を取り入れた式を導出している。彼らの式は achiral な発色団からなる dimer について相互作用を一次だけについて考えた式である。
そこで本研究では相互作用を無限次まで取り扱い、α-helix polypeptide について計算を行った。
また static effect については extended Fano-Devoe model の新たな formulation に基づいて計算を行い、Fano-Devoe model との比較を行った。さらに extended Fano-Devoe model 中でも polymer の波動関数の近似の程度により RPA,


このテキストは、大学の電気通信大学院の研究報告書の一部を示しています。

推論時間は、13秒でした。

日本語テキストの抽出(2)





画像からテキストを抽出してください。

以下は画像から抽出したテキストです。

発行日 2023/09/16

【納品書】

受注番号:[受注番号]

お届け先:[お届け先]

決済方法:[決済方法]

数量 コード 商品名 金額
1 5621766 【小説】お隣の天使様にいつの間にか駄目人間にされた件(8.5)通常版 ¥0 特典
1 288615 ★A6サイズ4Pリーフレット お隣の天使様にいつの間にか駄目人間にされた件(8.5)通常版 アニメイト限定セット【あなたの元に天使様が給仕してくれる魔法のリーフレット】 ¥0 特典
1 286281 ★重要事項説明書 お隣の天使様にいつの間にか駄目人間にされた件(8.5)通常版 アニメイト限定セット【あなたの元に天使様が給仕してくれる魔法のリーフレット】 ¥0 特典
1 3443762 【有償特典】お隣の天使様にいつの間にか駄目人間にされた件(8.5)通常版・特装版 アニメイト限定セット用あなたの元に天使様が給仕してくれる魔法のリーフレット ¥0 特典
1 3443786 【小説】お隣の天使様にいつの間にか駄目人間にされた件(8.5)通常版 アニメイト限定セット【あなたの元に天使様が給仕してくれる魔法のリーフレット】 ¥8,404

商品合計:¥8,404
送料・手数料:¥594
使用ポイント:¥901
お支払い金額:¥8,097

【注意事項】
・返品交換や返金については、当社ウェブサイトをご確認ください。


このテキストは、納品書の一部であり、商品の詳細や価格、配送方法などが記載されています。

2Bモデルと同様に、このテキスト抽出は一見正しく抽出できているように見えますが、原紙の印字が切れている商品はいずれも切れている部分を勝手に補完してハルシネーションしています(「魔法のリーフレット」という表現は原紙にはありません。プロンプトの工夫で改善できることを期待したいのですが「画像からテキストを抽出してください。次に、抽出したテキストと画像を突き合わせて抽出されたテキストと画像が一致することを確認します。一致していない場合は、抽出テキストを修正します。最後に修正したテキストを出力します。」としても特に改善は見られませんでした。また、これを英語にした「Extract the text from the image. Next, check the extracted text against the image to ensure that the extracted text and image match. If they do not match, modify the extracted text. Finally, output the corrected text.」も効果はありませんでした。さらに工夫が必要なようです。)

日本語の表の抽出





この表からテキストを抽出してください。

以下は、画像から抽出したテキストです。

---

ABC株式会社 損益計算書

2024年4月1日から2025年3月31日まで(単位:百万円)

| 科目 | 金額 |
| --- | --- |
| 売上高 | 50,000 |
| 売上原価 | 30,000 |
| 売上総利益 | 20,000 |
| 販売費及び一般管理費 |  |
| 広告宣伝費 | 2,000 |
| 給与手当 | 5,000 |
| 減価償却費 | 1,500 |
| その他 | 3,500 |
| 販管費計 | 12,000 |
| 営業利益 | 8,000 |
| 営業外収益 |  |
| 受取利息 | 100 |
| 受取配当金 | 200 |
| 為替差益 | 150 |
| 営業外収益計 | 450 |
| 営業外費用 |  |
| 支払利息 | 300 |
| 雑損失 | 150 |
| 営業外費用計 | 450 |
| 経常利益 | 8,000 |
| 特別利益 |  |
| 固定資産売却益 | 500 |
| 特別利益計 | 500 |
| 特別損失 |  |
| 災害損失 | 200 |
| 特別損失計 | 200 |
| 税引前当期純利益 | 8,300 |
| 法人税等 | 2,490 |
| 当期純利益 | 5,810 |

---

この表は、ABC株式会社の2024年4月1日から2025年3月31日までの損益計算書です。各科目とその金額が記載されています。

回答はマークダウンで返ってきました。出力のままレンダリングすると次のようになります

以下は、画像から抽出したテキストです。


ABC株式会社 損益計算書

2024年4月1日から2025年3月31日まで(単位:百万円)

科目 金額
売上高 50,000
売上原価 30,000
売上総利益 20,000
販売費及び一般管理費
広告宣伝費 2,000
給与手当 5,000
減価償却費 1,500
その他 3,500
販管費計 12,000
営業利益 8,000
営業外収益
受取利息 100
受取配当金 200
為替差益 150
営業外収益計 450
営業外費用
支払利息 300
雑損失 150
営業外費用計 450
経常利益 8,000
特別利益
固定資産売却益 500
特別利益計 500
特別損失
災害損失 200
特別損失計 200
税引前当期純利益 8,300
法人税等 2,490
当期純利益 5,810

この表は、ABC株式会社の2024年4月1日から2025年3月31日までの損益計算書です。各科目とその金額が記載されています。

正しく抽出できているようです。

推論時間は、14秒でした。

次に出力形式を HTML にしてみます。





この表からテキストを抽出してくHTML形式で出力してださい。

以下は、テキストを抽出したHTML形式です。

```html
<table>
  <thead>
    <tr>
      <th>科目</th>
      <th>金額</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>売上高</td>
      <td>50,000</td>
    </tr>
    <tr>
      <td>売上原価</td>
      <td>30,000</td>
    </tr>
    <tr>
      <td>売上総利益</td>
      <td>20,000</td>
    </tr>
    <tr>
      <td>販売費及び一般管理費</td>
      <td></td>
    </tr>
    <tr>
      <td>広告宣伝費</td>
      <td>2,000</td>
    </tr>
    <tr>
      <td>給与手当</td>
      <td>5,000</td>
    </tr>
    <tr>
      <td>減価償却費</td>
      <td>1,500</td>
    </tr>
    <tr>
      <td>その他</td>
      <td>3,500</td>
    </tr>
    <tr>
      <td>販管費計</td>
      <td>12,000</td>
    </tr>
    <tr>
      <td>営業利益</td>
      <td>8,000</td>
    </tr>
    <tr>
      <td>営業外収益</td>
      <td></td>
    </tr>
    <tr>
      <td>受取利息</td>
      <td>100</td>
    </tr>
    <tr>
      <td>受取配当金</td>
      <td>200</td>
    </tr>
    <tr>
      <td>為替差益</td>
      <td>150</td>
    </tr>
    <tr>
      <td>営業外収益計</td>
      <td>450</td>
    </tr>
    <tr>
      <td>営業外費用</td>
      <td></td>
    </tr>
    <tr>
      <td>支払利息</td>
      <td>300</td>
    </tr>
    <tr>
      <td>雑損失</td>
      <td>150</td>
    </tr>
    <tr>
      <td>営業外費用計</td>
      <td>450</td>
    </tr>
    <tr>
      <td>経常利益</td>
      <td>8,000</td>
    </tr>
    <tr>
      <td>特別利益</td>
      <td></td>
    </tr>
    <tr>
      <td>固定資産売却益</td>
      <td>500</td>
    </tr>
    <tr>
      <td>特別利益計</td>
      <td>500</td>
    </tr>
    <tr>
      <td>特別損失</td>
      <td></td>
    </tr>
    <tr>
      <td>災害損失</td>
      <td>200</td>
    </tr>
    <tr>
      <td>特別損失計</td>
      <td>200</td>
    </tr>
    <tr>
      <td>税引前当期純利益</td>
      <td>8,300</td>
    </tr>
    <tr>
      <td>法人税等</td>
      <td>2,490</td>
    </tr>
    <tr>
      <td>当期純利益</td>
      <td>5,810</td>
    </tr>
  </tbody>
</table>

このHTMLコードを使用して、テキストを抽出した表を表示することができます。

※2Bモデルでは消えてしまっていた"広告宣伝費" などの階層の深い項目の金額も拾えています。また、金額の桁の間違いもないようです

今回は、出力には HEADタグなどは含まれていませんでした。レンダリングすると次のようになります

以下は、ABC株式会社の損益計算書のHTML形式です。

以下は、テキストを抽出したHTML形式です。

科目 金額
売上高 50,000
売上原価 30,000
売上総利益 20,000
販売費及び一般管理費
広告宣伝費 2,000
給与手当 5,000
減価償却費 1,500
その他 3,500
販管費計 12,000
営業利益 8,000
営業外収益
受取利息 100
受取配当金 200
為替差益 150
営業外収益計 450
営業外費用
支払利息 300
雑損失 150
営業外費用計 450
経常利益 8,000
特別利益
固定資産売却益 500
特別利益計 500
特別損失
災害損失 200
特別損失計 200
税引前当期純利益 8,300
法人税等 2,490
当期純利益 5,810

このHTMLコードを使用して、テキストを抽出した表を表示することができます。

少ない試行回数ですが表の抽出は 7B の方が優位性がありそうです

えっと、あとがきです

ついにオープンウェイトのビジョン・ランゲージ・モデルでも実用に近いモデルが出て来たなという感じですね。画像や表はまだまだ難しい問題がありますが楽しみになってきました。

日本語テキストの抽出(2)のアニメショップの納品書ではハルシネーションに加えて、GPU VRAM 消費量も注意点であることが見えてきました。扱う画像によってGPU メモリの消費量が大きく異なるようです。このタスクでは、A100 40GB ではエラーとなってしまいました(エラーメッセージがOOMではないのですが)。A40 48GB で GPUメモリ使用率91%に達していますので、メモリ不足に起因して引き起こされたエラーのようです。ということで、Hugging Face Spaces の Zero GPU A100(40GB) で始めたお試しですが途中から RunPod の A40(48GB) に切り替えてやり直しています。

なお、Gradio アプリケーションは、AI Editor の Cursor を使って以下の手順で開発しています。

  • Hugging Face の Model Card に掲載されているサンプルコードを Jupyter ノートブックへコピペ
  • Jupyter ノートブックで Qwen2-VL の動作を一通り確認
  • Python スクリプトにエクスポート
  • Cursor(LLM は、Claude 3.5 Sonnet) に Chat 窓(Ctrl-L)で Gradio アプリ化を指示(UIの部品はざっくり指示)してコード生成
  • ひととおり斜め読みして致命的な問題はなさそうなので全部アクセプト
  • 動作確認
  • 微調整(これも手作業はなく Cursor の AI 機能に指示して生成、生成結果の確認、アクセプト、動作確認)

ところで、LLM でもオープンウェイトで Claude 3.5 Sonnet、GPT-4o、Gemini 1.5 Pro をベンチマークでは凌駕するモデル Reflection 70B が登場しましたね。こちらもさらなる進化が楽しみです。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2