Closed14

「InternVL3.5」を試す

kun432kun432

https://x.com/gm8xx8/status/1960076908088922147

InternVL3.5-241B-A28B:241B パラメータ、~28B アクティブ、Qwen3 および GPT-OSS バックボーンと InternViT-𝑩6 ビジョエンコーダを使用。InternVL3.5 ファミリーの一部で、1B から 241B までを網羅し、全てが同一の4段階パイプライン(CPT、SFT、CascadeRL、Flash向けにViCOを追加)で訓練済み。

Cascade RL(オフライン混合選好最適化MOPO、次にオンラインGSPO)による強化学習、ViCO経由で統合されたVisual Resolution Router (ViR)により適応的にトークン数を256から効率的なビジア処理のために最大64に削減(Flashバリアントの場合)、高速化された推論のための別々のGPU上でのDecoupled Vision-Language Deploymentも備えています。また、推論タスク向けのオプションのTest-Time Scaling(段階的深層思考と並列Best-of-NをVisualPRM-v1.1クリティックで、推論タスク用;ヘッドライン結果はTTS抜きで報告)も提供。新たなスキルとしてGUIおよびエージェント機能が含まれます。

InternVL 3よりも18.3%高い推論精度と1.05倍の高速推論を報告し、全オープン多モーダルモデルをリードし、GPT-5とのギャップを広範なベンチマークスイートで縮小

Apache-2.0 ライセンス

IInternvl3.5-241Bモデルカードが撤去される前に確認した

  • バリアント: 1B, 2B, 4B, 8B, 14B, 20B-A4B, 30B-A3B, 38B, および 241B-A28B
  • 量子化: BF16 / FP16, BNB 8-bit対応

公式からはまだ何も発表はないけども、すでにモデルはある様子

https://huggingface.co/collections/OpenGVLab/internvl35-68ac87bd52ebe953485927fb

kun432kun432

InternVL3は以前試していた

https://zenn.dev/kun432/scraps/df75970a343d09

その時の印象は

  • パラメータサイズのバリエーションが豊富で、1Bぐらいの超軽量サイズもあって使いやすそう。
  • 日本語の文字は結構読めるのでOCRに使えそうだけど、日本に関する知識はそんなに持ってなさそう
  • llama.cpp でも対応してて使いやすい。

という感じだったのだが3.5ではどうなっているか、気になるところ。

kun432kun432

モデルは以下にまとまっている。

https://huggingface.co/collections/OpenGVLab/internvl35-68ac87bd52ebe953485927fb

バリエーションなどは以下のような感じ

  • パラメータサイズは以下
    • 1B
    • 2B
    • 4B
    • 8B
    • 14B
    • 38B
    • 30B-A3B(MoE)
    • 241B-A28B(MoE)
  • ベース
    • 言語パートはQwen3ベース
    • ビジュアルパートはInternViTベースで、38B / 241B-A28B は InternViT-6B、それ以外は InternViT-300M
  • 学習ステージごとにモデルバリエーションあり
    • 事前学習済モデル(*-pretrained
    • Insturctモデル(*-Instruct: 事前学習済モデル+教師ありファインチューニング)
    • MPOモデル(*-MPO: 事前学習済モデル+教師ありファインチューニング+カスケード強化学習のうちMixed Preference Optimizationのみ)
    • カスケード強化学習モデル(サフィックスなし: 事前学習済モデル+教師ありファインチューニング+カスケード強化学習)
    • どのモデルを使うべきかわからない場合は「サフィックスなし」が推奨らしい
  • 上記に加えて、
    • 「ビジュアル解像度ルーター」というものを付与したFlashモデルというが更にリリースされる予定らしい。
    • 言語パートのベースが gpt-oss-20b と思われる GPT-OSS-20B-A4B-Preview というのがある。

相変わらず10B未満のバリーエションが豊富なのはいいね。上位モデルでMoEに対応したのがInternVL3との大きな違いに思える。あと、gpt-ossベースはちょっと気になる。

kun432kun432

ベンチマークとかを見た感じ、フラグシップ的な位置づけは、30B-A3B / 241B-A28B の MoEモデルのように思えるので、241B-A28B のモデルカードを少し見てみる。翻訳はGPT-5。

https://huggingface.co/OpenGVLab/InternVL3_5-241B-A28B-Pretrained


referred from https://huggingface.co/OpenGVLab/InternVL3_5-241B-A28B-Pretrained

はじめに

InternVL3.5 は、InternVLシリーズにおいて多様性、推論能力、推論効率を大幅に進化させた新しいオープンソースのマルチモーダルモデル群です。主要な革新点は カスケード強化学習(Cascade RL) フレームワークであり、これは2段階のプロセスを通じて推論を強化します。すなわち、安定した収束のためのオフラインRLと、精緻なアライメントのためのオンラインRLです。この粗から細への学習戦略は、MMMUやMathVistaなどの下流推論タスクにおいて大幅な改善をもたらします。効率の最適化のために、性能を損なうことなく動的にビジュアルトークンの解像度を調整する ビジュアル解像度ルーター(ViR) を提案します。さらに、ViRと組み合わせた分離型 ビジョン-言語デプロイメント(DvD) 戦略により、ビジョンエンコーダと大規模言語モデルを異なるGPU上に分離し、計算負荷を効果的に分散します。これらの貢献により、InternVL3.5は前世代のInternVL3と比較して、全体の推論性能で最大+16.0%の向上と4.05倍の推論速度向上を実現しました。さらに、InternVL3.5はGUI操作やエンボディドエージェンシーなどの新機能をサポートします。特筆すべきは、最大規模のモデルであるInternVL3.5-241B-A28Bが、汎用マルチモーダル、推論、テキスト、エージェントタスクにおいてオープンソースMLLM群の中で最先端の結果を達成し、GPT-5のような商用最先端モデルとの性能差を縮小した点です。すべてのモデルとコードは公開されています。


referred from https://huggingface.co/OpenGVLab/InternVL3_5-241B-A28B-Pretrained

ハッチングされた棒はクローズドソースの商用モデルを表します。マルチモーダル一般、推論、テキスト、エージェント系ベンチマーク群における平均スコアを報告しています:MMBench v1.1 (en)、MMStar、BLINK、HallusionBench、AI2D、OCRBench、MMVet、MME-RealWorld (en)、MVBench、VideoMME、MMMU、MathVista、MathVision、MathVerse、DynaMath、WeMath、LogicVista、MATH500、AIME24、AIME25、GPQA、MMLU-Pro、GAOKAO、IFEval、SGP-Bench、VSI-Bench、ERQA、SpaCE-10、OmniSpatial。

使用方法については クイックスタート を参照してください。

InternVL3.5 ファミリー

以下の表では、InternVL3.5シリーズの概要を示します。
以前の世代との一貫性を維持するために、2種類のモデルフォーマットを提供しています: GitHubフォーマット は従来リリースと同一であり、HFフォーマット は公式Transformers規格に準拠しています。

これら2種類のフォーマット間でチェックポイントを変換する場合は、custom2hf および hf2custom のスクリプトを参照してください。

モデル #ビジョン パラメータ #言語 パラメータ #総パラメータ HF リンク ModelScope リンク
InternVL3.5-1B 0.3B 0.8B 1.1B 🤗 link 🤖 link
InternVL3.5-2B 0.3B 2.0B 2.3B 🤗 link 🤖 link
InternVL3.5-4B 0.3B 4.4B 4.7B 🤗 link 🤖 link
InternVL3.5-8B 0.3B 8.2B 8.5B 🤗 link 🤖 link
InternVL3.5-14B 0.3B 14.8B 15.1B 🤗 link 🤖 link
InternVL3.5-38B 5.5B 32.8B 38.4B 🤗 link 🤖 link
InternVL3.5-20B-A4B 0.3B 20.9B 21.2B-A4B 🤗 link 🤖 link
InternVL3.5-30B-A3B 0.3B 30.5B 30.8B-A3B 🤗 link 🤖 link
InternVL3.5-241B-A28B 5.5B 235.1B 240.7B-A29B 🤗 link 🤖 link


referred from https://huggingface.co/OpenGVLab/InternVL3_5-241B-A28B-Pretrained

評価は VLMEvalkit を用いて行いました。モデルの Thinking モードを有効にするには、システムプロンプトを R1_SYSTEM_PROMPT に設定してください。 Thinking モードを有効化する際は、不要な繰り返しを軽減するために do_sample=True および temperature=0.6 の設定を推奨します。

私たちの学習パイプラインは4つの段階から構成されます:マルチモーダル継続事前学習(CPT)、教師あり微調整(SFT)、カスケード強化学習(CascadeRL)です。CascadeRLでは、まずオフラインRL環境下で混合選好最適化(MPO)を用いてモデルをファインチューニングし、その後オンラインRL環境下でGSPOを適用します。
InternVL3.5 の Flash バージョンでは、さらに軽量な学習段階として 視覚的一貫性学習(ViCO を導入しており、画像パッチを表現するために必要なトークンコストを削減します。


referred from https://huggingface.co/OpenGVLab/InternVL3_5-241B-A28B-Pretrained

ここで、研究利用を想定し、異なる学習段階を経たモデルの重みもオープンソース化しています。
どのバージョンを使うか迷った場合は、接尾辞のないモデルを選択してください。これは学習パイプラインを完全に終えたものです。

モデル 学習パイプライン HF リンク ModelScope リンク
InternVL3.5-1B-Pretrained CPT 🤗 link 🤖 link
InternVL3.5-1B-Instruct CPT + SFT 🤗 link 🤖 link
InternVL3.5-1B-MPO CPT + SFT + MPO 🤗 link 🤖 link
InternVL3.5-1B CPT + SFT + CascadeRL 🤗 link 🤖 link
InternVL3.5-2B-Pretrained CPT 🤗 link 🤖 link
InternVL3.5-2B-Instruct CPT + SFT 🤗 link 🤖 link
InternVL3.5-2B-MPO CPT + SFT + MPO 🤗 link 🤖 link
InternVL3.5-2B CPT + SFT + CascadeRL 🤗 link 🤖 link
InternVL3.5-4B-Pretrained CPT 🤗 link 🤖 link
InternVL3.5-4B-Instruct CPT + SFT 🤗 link 🤖 link
InternVL3.5-4B-MPO CPT + SFT + MPO 🤗 link 🤖 link
InternVL3.5-4B CPT + SFT + CascadeRL 🤗 link 🤖 link
InternVL3.5-8B-Pretrained CPT 🤗 link 🤖 link
InternVL3.5-8B-Instruct CPT + SFT 🤗 link 🤖 link
InternVL3.5-8B-MPO CPT + SFT + MPO 🤗 link 🤖 link
InternVL3.5-8B CPT + SFT + CascadeRL 🤗 link 🤖 link
InternVL3.5-14B-Pretrained CPT 🤗 link 🤖 link
InternVL3.5-14B-Instruct CPT + SFT 🤗 link 🤖 link
InternVL3.5-14B-MPO CPT + SFT + MPO 🤗 link 🤖 link
InternVL3.5-14B CPT + SFT + CascadeRL 🤗 link 🤖 link
InternVL3.5-30B-A3B-Pretrained CPT 🤗 link 🤖 link
InternVL3.5-30B-A3B-Instruct CPT + SFT 🤗 link 🤖 link
InternVL3.5-30B-A3B-MPO CPT + SFT + MPO 🤗 link 🤖 link
InternVL3.5-30B-A3B CPT + SFT + CascadeRL 🤗 link 🤖 link
InternVL3.5-38B-Pretrained CPT 🤗 link 🤖 link
InternVL3.5-38B-Instruct CPT + SFT 🤗 link 🤖 link
InternVL3.5-38B-MPO CPT + SFT + MPO 🤗 link 🤖 link
InternVL3.5-38B CPT + SFT + CascadeRL 🤗 link 🤖 link
InternVL3.5-241B-A28B-Pretrained CPT 🤗 link 🤖 link
InternVL3.5-241B-A28B-Instruct CPT + SFT 🤗 link 🤖 link
InternVL3.5-241B-A28B-MPO CPT + SFT + MPO 🤗 link 🤖 link
InternVL3.5-241B-A28B CPT + SFT + CascadeRL 🤗 link 🤖 link

Flash バージョンのモデルは可能な限り早く公開予定です。

モデルアーキテクチャ

InternVL3.5: このモデル群は、これまでのInternVLバージョンで採用された「ViT–MLP–LLM」パラダイムに従っています。言語モデルは Qwen3 シリーズおよび GPT-OSS で初期化され、ビジョンエンコーダは InternViT-300M および InternViT-6B で初期化されています。InternVL1.5 で導入された 動的高解像度戦略 も本設計で維持されています。

InternVL3.5-Flash: InternVL3.5 と比較すると、InternVL3.5-Flash は ビジュアル解像度ルーター(ViR) をさらに統合しており、リソース制約のあるシナリオに適した効率的なバリアント群を提供します。 具体的には、InternVL3.5 では各画像パッチがまず 1024 個のビジュアルトークンで表現され、ビジョンエンコーダに入力されます。その後、ピクセルシャッフルモジュールを通じて 256 個のトークンに圧縮され、大規模言語モデル(LLM)に渡されます。InternVL3.5-Flash では、下図に示すように、より高い圧縮率を持つ追加のピクセルシャッフルモジュールが導入され、ビジュアルトークンを 64 個まで圧縮可能となっています。各パッチに対して、パッチルーターがその意味的な豊かさを評価し、適切な圧縮率を決定して対応するピクセルシャッフルモジュールにルーティングします。このパッチ認識型の圧縮メカニズムにより、InternVL3.5-Flash はビジュアルトークン数を50%削減しつつ、InternVL3.5 とほぼ同等の性能を維持することができます。

kun432kun432

学習とデプロイ戦略

事前学習(Pre-Training)

事前学習段階では、大規模テキストおよびマルチモーダルコーパスを組み合わせ、すべてのモデルパラメータを共同で更新します。具体的には、マルチモーダルトークン列 \mathbf{x}=\left(x_1, x_2, \ldots, x_L\right) を含む任意の学習サンプルに対して、次トークン予測(NTP)損失を各テキストトークン上で以下のように計算します:

\mathcal{L}_{i}=-\log p_\theta\left(x_i \mid x_1, \ldots, x_{i-1}\right),

ここで x_i は予測トークンであり、プレフィックストークン集合 \{x_1, x_2, \ldots, x_{i-1}\} にはテキストトークンと画像トークンの両方を含むことができます。特に、対話形式のサンプルでは応答トークンのみを損失計算に用います。さらに、学習中に応答が長い場合や短い場合への偏りを軽減するため、平方平均を用いた重み付けを行います:

\mathcal{L}_{i}^{'} = \frac{w_i}{\sum_j w_j} \cdot \mathcal{L}_i, \quad w_i = \frac{1}{N^{0.5}},

ここで N は損失計算対象となる学習サンプルのトークン数を表します。また、ランダムJPEG圧縮も導入し、モデルの実世界性能を向上させています。

教師あり微調整(Supervised Fine-Tuning, SFT)

SFT段階では、事前学習と同じ目的関数を採用し、最終的な損失計算には平方根平均を利用します。この段階では、長文コンテキストへの適応のためにコンテキストウィンドウを32Kトークンに設定しています。InternVL3 と比較すると、InternVL3.5 の SFT 段階では、以下の3つのソースから得られた、より高品質で多様な学習データが追加されています:

  1. InternVL3 の命令追従データ:ビジョン–言語タスクの広範なカバレッジを保持するために再利用。

  2. 「Thinking」モードに基づくマルチモーダル推論データ:モデルに長期的思考能力を付与するために追加。これらのデータは、まず InternVL3-78B を用いて画像を記述し、その説明を DeepSeek-R1 に入力して詳細な推論過程を含むロールアウトを生成します。最終回答が誤っているロールアウトは除外されます。これらのデータセットの質問は数学や科学分野など専門領域を網羅し、さまざまな推論タスクでの性能を強化します。

  3. 能力拡張データセット:GUIベースの操作、エンボディドインタラクション、スケーラブルなベクトル操作など、新しいスキルを InternVL3.5 に付与。

カスケード強化学習(Cascade Reinforcement Learning)

Cascade RL の目的は、オフラインRLとオンラインRLの利点を組み合わせ、MLLMの事後学習を効率的に促進することです。具体的には、まずオフラインRLアルゴリズムを用いた効率的なウォームアップ段階としてモデルをファインチューニングし、十分に満足できる結果を得ることで、後続段階における高品質なロールアウトを保証します。その後、オンラインRLアルゴリズムを使用し、モデル自身が生成するロールアウトに基づいて出力分布をさらに精緻化します。単一のオフラインRLやオンラインRL段階と比較して、カスケードRLはGPU時間コストを大幅に削減しつつ、性能を大幅に改善します。

オフラインRL段階では、混合選好最適化(MPO)を用いてモデルをファインチューニングします。MPOの学習目的は、選好損失 \mathcal{L}_{p}、品質損失 \mathcal{L}_{q}、生成損失 \mathcal{L}_{g} の組み合わせとして定式化されます:

\mathcal{L}_{\text{MPO}}= w_{p} \mathcal{L}_{p} + w_{q} \mathcal{L}_{q} + w_{g} \mathcal{L}_{g},

ここで w_{*} は各損失成分に割り当てられる重みを表します。
それぞれ、DPO損失、BCO損失、LM損失が選好損失、品質損失、生成損失として機能します。

オンラインRL段階では、参照モデル制約を持たない GSPO をオンラインRLアルゴリズムとして採用します。これにより、密集モデルとMoE(Mixture-of-Experts)モデルの両方に対して効果的な学習が可能であることを確認しました。GRPOと同様に、アドバンテージは同一クエリからサンプリングされた応答群間で正規化された報酬として定義されます。GSPOの学習目的は次のように表されます:

>\mathcal{L}_{\mathrm{GSPO}}(\theta)=\mathbb{E}_{x \sim \mathcal{D},\left\{y_i\right\}_{i=1}^G \sim \pi_{\theta \text { old }}(\cdot \mid x)}\left[\frac{1}{G} \sum_{i=1}^G \min \left(s_i(\theta) \widehat{A}_i, \operatorname{clip}\left(s_i(\theta), 1-\varepsilon, 1+\varepsilon\right) \widehat{A}_i\right)\right], >

ここで重要度サンプリング比率は、トークンごとの比率の幾何平均として定義されます。

技術的および実験的な詳細については、論文 を参照してください。

視覚的一貫性学習(Visual Consistency Learning, ViCO)

我々はさらに、ビジュアル解像度ルーター(ViR) を InternVL3.5 に統合する追加の学習段階として ViCO を導入し、推論コストを削減しました。この効率化された InternVL3.5 のバリアントは InternVL3.5-Flash と呼ばれます。ViCO は特に2つの段階から構成されます:

一貫性学習(Consistency training): この段階では、異なる圧縮率で表現されたビジュアルトークンに基づく応答分布間の乖離を最小化するようモデル全体を学習します。実際には、InternVL3.5 で初期化し固定された参照モデルを追加で導入します。1つのサンプルに対し、各画像パッチは 256 トークンまたは 64 トークンで表現されます。学習目標は以下のように定義されます:

\mathcal{L}_\text{ViCO} = \mathbb{E}_{\xi \sim \mathcal{R}} \Bigg[ \frac{1}{N} \sum_{i=1}^{N} \mathrm{KL} \Big( \pi_{\theta_{ref}}\left(y_i \mid y_{<i}, I\right) \;\Big\|\; \pi_{\theta_{policy}}\left(y_i \mid y_{<i}, I_\xi\right) \Big) \Bigg],

ここで \mathrm{KL} はKLダイバージェンス、\xi は圧縮率を表し、集合 \{\tfrac{1}{4},\tfrac{1}{16}\} から一様にサンプリングされます。画像 I_\xi は、\xi=\tfrac{1}{4} の場合は256トークン、\xi=\tfrac{1}{16} の場合は64トークンで表現されます。参照モデルは常に \xi=\tfrac{1}{4} で推論を行います。

ルーター学習(Router training): この段階の目的は、ViR を訓練し、入力ごとに適切な解像度のトレードオフを選択させることです。ViR は二値分類器として定式化され、標準的なクロスエントロピー損失で学習されます。ルーティングターゲットの構築には、まず「非圧縮のビジュアルトークン(各パッチ256トークン)」に基づくモデル出力と、「圧縮されたビジュアルトークン(各パッチ64トークン)」に基づくモデル出力の間のKLダイバージェンスを計算します。この段階では、主要なMLLM(ViT、MLP、LLM)は固定され、ViRのみが訓練されます。各パッチについて損失比を次のように計算します:

r_i = \frac{\mathcal{L}_\text{ViCO}\big(y_i \mid I_{\tfrac{1}{16}}\big)}{\mathcal{L}_\text{ViCO}\big(y_i \mid I_{\tfrac{1}{4}}\big)},

この値は、ビジュアルトークンの圧縮によって引き起こされる損失の相対的な増加を定量化します。この比率に基づき、パッチルーターの二値ラベルは以下のように定義されます:

y_i^\text{router} = \begin{cases} 0, & r_i < \tau \; \text{(圧縮の影響が無視できる場合)} \\ 1, & r_i \ge \tau \; \text{(圧縮の影響が大きい場合)}, \end{cases}

ここで y_i^{\text{router}}=0\\) は圧縮率を \\(\tfrac{1}{16} に設定することを示し、y_i^{\text{router}}=1\\) は \\(\tfrac{1}{4} に設定することを示します。

技術的および実験的な詳細については、論文 を参照してください。

テスト時スケーリング(Test-Time Scaling, TTS)

テスト時スケーリング(TTS)は、特に複雑なタスクにおいてマルチステップ推論を必要とする場合、LLMやMLLMの推論能力を向上させる有効な手法であることが実証されています。本研究では、推論の深さ(deep thinking)と幅(parallel thinking)を同時に強化する包括的なTTSアプローチを実装しました。

Deep Thinking(深い思考): Thinkingモードを有効化することで、モデルにステップごとの推論を意図的に行わせます(すなわち、複雑な問題を論理的ステップに分解し、中間結論を検証した上で最終回答を生成する)。このアプローチは特にマルチステップ推論を必要とする複雑な問題において、解答の論理構造を体系的に改善し、推論の深さを強化します。

Parallel Thinking(並列思考): InternVL3に続き、推論タスクに対してはBest-of-N (BoN) 戦略を採用します。具体的には VisualPRM-v1.1 を批評モデルとして用い、複数の推論候補から最適な応答を選択します。この手法により、推論の幅が向上します。

特筆すべきは、我々の論文に報告された実験結果は特別な指示がない限りTTSを適用していない点です。これまでのところ、TTSを適用したのは推論系ベンチマークのみです。なぜなら、モデルが既に強力な知覚・理解能力を示しており、TTSを導入しても有意な改善が見られなかったためです。

分離型ビジョン–言語デプロイメント(Decoupled Vision-Language Deployment, DvD)

マルチモーダル推論において、ビジョンエンコーダと大規模言語モデルは異なる計算特性を持ちます。
画像を意味的特徴に変換するビジョンエンコーダは高い並列性を持ち、長期的な履歴状態に依存しません。一方で、言語モデルは自己回帰的に推論を行うため、次のトークンを計算する際に前の状態に依存します。この逐次的性質により、言語モデル部分はメモリ帯域幅やレイテンシに対して敏感になります。大規模にオンライン展開する際には、ビジョンモデルと言語モデルが互いにブロッキングを引き起こし、追加的な推論コストが発生します。特に、ビジョンモデルが大きい場合や高解像度画像を扱う場合に、この影響は顕著になります。


referred from https://huggingface.co/OpenGVLab/InternVL3_5-241B-A28B-Pretrained

上図に示すように、我々はこの問題を解決するために分離型ビジョン–言語デプロイメント(DvD)を提案します。これは特にプレフィル段階の最適化に焦点を当て、ビジョン処理と言語処理を分離します。ビジョンサブシステムは画像をバッチ処理し、コンパクトな特徴埋め込みを生成します。これを言語サブシステムに送信し、テキストコンテキストと融合した上でデコードを実行します。この分離によりブロッキングが解消され、マルチモーダルのプレフィル性能が純粋な言語モデルに近づきます。

実装においては、ViT と MLP(および InternVL3.5-Flash の場合は ViR)がビジョンサーバ上に配置され、言語サーバは LLM のみを実行します。通信は一方向であり、BF16形式のビジュアル特徴をTCPで送信します。さらに高速化が必要な場合はRDMAを利用可能です。ビジョン処理・特徴伝送・言語処理は非同期の3段階パイプラインとして組織され、並列実行が可能となり、パイプラインの停滞を最小化します。

DvD はビジョンサイドのGPU利用率と処理効率を高める一方で、言語サーバは LLM のプレフィルおよびデコードのみに集中でき、ビジョン計算によるブロッキングを受けません。この設計によりスループットと応答性が改善されます。さらに、このアーキテクチャはビジョンと言語モジュールのハードウェアコストを独立して最適化でき、新しいモジュールのシームレスな統合を言語サーバの再設計なしで可能にします。

kun432kun432

ということでクイックスタートを試してみる。モデルカードには以下とある。

InternVL3.5-8Btransformers を用いて実行するサンプルコードを以下に示します。パラメータ数が30Bまでのモデルは単一の A100 GPU 上で展開可能です。一方、38B モデルは2枚の A100 GPU、235B モデルは8枚の A100 GPU を必要とします。

ほとんどのケースでは LMDeployvLLM の両方でモデル展開が可能です。
ただし、InternVL3.5-20B-A4B に関しては、lmdeploy が GPT-OSS をまだサポートしていないため vLLM の使用を推奨します。

モデルが正常に動作するためには transformers>=4.52.1 を使用してください。
20B バージョンのモデルについては transformers>=4.55.0 が必要です。

例のごとくまずはColaboratoryで試そうと思うが、ハードウェア要件的にMoEモデルを試すには最低でもA100が必要。ちょうど試そうと思ったときにはA100ランタイムの空きがなかったので、今回はL4を使わざるを得ない。

また、それにあわせてモデルサイズも小さめのものを選択する必要があるので、一旦は4B(サフィックスなし)で試してみる。

https://huggingface.co/OpenGVLab/InternVL3_5-4B

あとライブラリについて。

まずTransformers。こちらは事前にインストールされているものが要件を満たしている。

!pip freeze | grep -i transformers
出力
transformers==4.55.2

なので、bitsandbytes と flash-attention だけインストールすれば良さそう。

!pip install -U bitsandbytes
!pip install flash-attn --no-build-isolation
出力
Successfully installed bitsandbytes-0.47.0
出力
Successfully installed flash-attn-2.8.3

あと、動画用に decordも追加。

!pip install decord
出力
Successfully installed decord-0.6.0

ではモデルとトークナイザーをロード。あとInternVL3と同様にヘルパー関数が多数用意されているので、それも定義。

import math
import numpy as np
import torch
import torchvision.transforms as T
from decord import VideoReader, cpu
from PIL import Image
from torchvision.transforms.functional import InterpolationMode
from transformers import AutoModel, AutoTokenizer

IMAGENET_MEAN = (0.485, 0.456, 0.406)
IMAGENET_STD = (0.229, 0.224, 0.225)

def build_transform(input_size):
    MEAN, STD = IMAGENET_MEAN, IMAGENET_STD
    transform = T.Compose([
        T.Lambda(lambda img: img.convert('RGB') if img.mode != 'RGB' else img),
        T.Resize((input_size, input_size), interpolation=InterpolationMode.BICUBIC),
        T.ToTensor(),
        T.Normalize(mean=MEAN, std=STD)
    ])
    return transform

def find_closest_aspect_ratio(aspect_ratio, target_ratios, width, height, image_size):
    best_ratio_diff = float('inf')
    best_ratio = (1, 1)
    area = width * height
    for ratio in target_ratios:
        target_aspect_ratio = ratio[0] / ratio[1]
        ratio_diff = abs(aspect_ratio - target_aspect_ratio)
        if ratio_diff < best_ratio_diff:
            best_ratio_diff = ratio_diff
            best_ratio = ratio
        elif ratio_diff == best_ratio_diff:
            if area > 0.5 * image_size * image_size * ratio[0] * ratio[1]:
                best_ratio = ratio
    return best_ratio

def dynamic_preprocess(image, min_num=1, max_num=12, image_size=448, use_thumbnail=False):
    orig_width, orig_height = image.size
    aspect_ratio = orig_width / orig_height

    # 既存の画像のアスペクト比を計算
    target_ratios = set(
        (i, j) for n in range(min_num, max_num + 1) for i in range(1, n + 1) for j in range(1, n + 1) if
        i * j <= max_num and i * j >= min_num)
    target_ratios = sorted(target_ratios, key=lambda x: x[0] * x[1])

    # ターゲットに最も近いアスペクト比を探す
    target_aspect_ratio = find_closest_aspect_ratio(
        aspect_ratio, target_ratios, orig_width, orig_height, image_size)

    # ターゲットの高さと横幅を計算
    target_width = image_size * target_aspect_ratio[0]
    target_height = image_size * target_aspect_ratio[1]
    blocks = target_aspect_ratio[0] * target_aspect_ratio[1]

    # イメージをリサイズ
    resized_img = image.resize((target_width, target_height))
    processed_images = []
    for i in range(blocks):
        box = (
            (i % (target_width // image_size)) * image_size,
            (i // (target_width // image_size)) * image_size,
            ((i % (target_width // image_size)) + 1) * image_size,
            ((i // (target_width // image_size)) + 1) * image_size
        )
        # イメージを分割
        split_img = resized_img.crop(box)
        processed_images.append(split_img)
    assert len(processed_images) == blocks
    if use_thumbnail and len(processed_images) != 1:
        thumbnail_img = image.resize((image_size, image_size))
        processed_images.append(thumbnail_img)
    return processed_images

def load_image(image_file, input_size=448, max_num=12):
    image = Image.open(image_file).convert('RGB')
    transform = build_transform(input_size=input_size)
    images = dynamic_preprocess(image, image_size=input_size, use_thumbnail=True, max_num=max_num)
    pixel_values = [transform(image) for image in images]
    pixel_values = torch.stack(pixel_values)
    return pixel_values

path = 'OpenGVLab/InternVL3_5-4B'    # 今回は4Bをチョイス
model = AutoModel.from_pretrained(
    path,
    torch_dtype=torch.bfloat16,
    load_in_8bit=False,
    low_cpu_mem_usage=True,
    use_flash_attn=True,
    trust_remote_code=True,
    device_map="auto").eval()
tokenizer = AutoTokenizer.from_pretrained(path, trust_remote_code=True, use_fast=False)

VRAM消費は9.3GB程度

出力
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15              Driver Version: 550.54.15      CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA L4                      Off |   00000000:00:03.0 Off |                    0 |
| N/A   47C    P0             28W /   72W |    9251MiB /  23034MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

でサンプルで使用する画像だけども、InternVL3のモデルレポジトリにはサンプル画像が含まれていたのだが、今回は含まれていない。そこで、InternVL3-2Bのモデルレポジトリにあったサンプル画像を使用させてもらう。

!wget --content-disposition https://huggingface.co/OpenGVLab/InternVL3-2B/resolve/main/examples/image1.jpg?download=true
!wget --content-disposition https://huggingface.co/OpenGVLab/InternVL3-2B/resolve/main/examples/image2.jpg?download=true

こんな感じの画像になっている。

from IPython.display import Image as IPY_Image

display(IPY_Image(filename="image1.jpg", width=400))
print()
display(IPY_Image(filename="image2.jpg", width=400))

生成時のパラメータを設定しておく。

generation_config = dict(max_new_tokens=1024, do_sample=True)

ではまずは画像を使わないテキストでのやり取り。

question = "こんにちは。あなたは誰?"
response, history = model.chat(
    tokenizer,
    None,
    question,
    generation_config,
    history=None,
    return_history=True
)
print(response)
出力
こんにちは!私はBookBot、AIアссISTANTで、質問や情報を提供两地に役立てることができ亭のアシスタントです。どのような質問やアドバイスが必要인 caseか教えてくださいね。

ちょっと回答が壊れ気味になっている・・・何度か実行してみた。

出力
こんにちは!私は「書き換えてください」、または「otomechi」の通称です。これは日本で広く使われる成人向けのテキスト챗システムです。このシステムは、ユーザーとユーザー間でのコミュニケーションを介して使用されます。この質問はAIと直接的な関係がありませんが、何か他に Helps できることがあれば教えてくださいね!
出力
こんにちは!私はAI-basedの chatbotです。ユーザーに質問に答えるか、リクエストを処理するためのプログラムです。お手伝いできることがあれば教えてくださいね!

うーん・・・InternVL3を試した時もちょいちょい日本語がおかしくなることはあったけど、ここまでおかしな感じになったことあったかなぁ・・・

もう一つ。

question = 'なにかストーリーを話して。'
response, history = model.chat(
    tokenizer,
    None,
    question,
    generation_config,
    history=history,
    return_history=True
)
print(response)
出力
옛날 옛적에 한 산脚下에 작은 마을이 있었습니다. 이 마을은 모든 사람이 친절하고 화를不出错了. 마을은 매우 조용했고, 풍경이 온전히 평화롭고 행복했습니다.

이 마을에 한 어린 소녀가 살았어요. 그녀의 이름은 아름답고 우아했습니다. 그녀는 가끔 마을에서 다른 사람들과 함께 농장에서 농사짓는 일을 하러 갔고, 밤이 되면 농장으로 돌아갔어요. 그러던 중 한idian, 그녀는 농번이 많이 많은 가을을 만났습니다.

그녀는 농사 지방에서 일하는 다른 사람들에게도 친절했습니다. 그녀는 자꾸 도움이 필요한 사람들을 돕고, 도움을 받게 되면 Always Remembered그 사람들을 Assisting and Helping.

이런 소녀가 있었고, 이 마을은 항상 행복하게 살 수 있었어요. 마을의 모든 사람이 그녀의 도움과爱를 받았어요. 그래서, 이 산脚下에 있는 작은 마을은 욕실에서 삶의 모든 것에 대한 지내는 사람들의 환희와 행복이 흘러들어왔어요.

이 작은 마을에 살던 소녀의 이야기가 어떻게 펼쳐지면 좋겠는지 생각해보며, 마음에 드는 이야기를 계속해 unsay 하였습니다.

이마을의 정신은 오늘날에도 이웃인을 돕고, 이웃에 대한 사랑과 친절을 염두에 두고 삶을 챙기는 사람들에게 영감을 주고 있는 것입니다.

もう一度。

出力
昔、遠く彼方の山の斜面で小野原という山寺址に、聖眼の菩提寺がありました。この寺は、数世紀にわたって多くの信者と参拝者に祝福와静謐を提供していました。

昔の時代の小野原寺には、数名の僧が住んでいましたが、その中で一人、特别に敏腕で知的な僧がいました。彼の名は仏尊、修行には大胆で、道場内的で大胆な實験を进行了。

某日、仏尊は、魔障が寺の境内に広がり、信徒が心の平靜を失って虚脱していることに気づきました。仏尊はこの魔障を除去するための計画を立案し、寺住人や信徒に宣伝し、皆一起に魔障除去に取り組むことにしました。

村民たちは準備が整 afterで、仏尊は魔剤と道具準備をした。そして、一夜が経過した頃、彼は魔障が現れた場所に着陸し、魔を面对しました。魔は大きなと闇の形で、住人や信徒を心魔にしました。

仏尊は、彼の能力と精神で魔を面对し、信仰と静かな運命으로魔を除去しました。この出来事で、信徒たちは仏尊の力と慈悲を感謝し、寺の評価が高まりました。

それ夜から、魔障は完全に消え、小野原寺はまた以前の静謐な状態に returning 합니다。信仰と修行の力で魔障除去に成功した此事案は、今も小野原寺で传wort传頼するにあたって尊重されています。

このように、仏尊は、信仰の力で魔障を除去し、寺の精神を維持し続けた結果、小野原寺が今後も信徒と参拝者を祝福してきました。このストーリーは、祈りと修行の力の証拠であり、心平静な生活をもたらす力であると教える了。

日本語が使えないというわけではないけど、色々苦しい感じがする。日本語に関しては前のバージョンよりもイマイチかも?

kun432kun432

画像を使ったシングルターンの推論を試す。一応こちらが本題なので。

レッサーパンダの画像を使う。

# `max_num`にタイルの最大数を設定する
pixel_values = load_image(
    'image1.jpg',
    max_num=12
).to(torch.bfloat16).cuda()

question = '<image>\n画像について簡潔に説明してください。'
response = model.chat(
    tokenizer,
    pixel_values,
    question,
    generation_config
)
print(response)
出力
この画像には、赤熊犠(こおりょうきょう)が木の结构にleaningしてる情景が捉えられています。赤 bearは、茶色と白く色付кた毛並び、特徴的な耳の形が見えます。背景には緑の葉が広がっており、自然な環境が伺えます。

うーん、なんかやっぱり日本語がダメダメな気がする・・・・

パンダの画像でも。

pixel_values = load_image(
    'image2.jpg',
    max_num=12
).to(torch.bfloat16).cuda()

question = '<image>\n画像について簡潔に説明してください。'
response = model.chat(
    tokenizer,
    pixel_values,
    question,
    generation_config
)
print(response)
出力
この画像は、大熊猫が竹を食べている様子を捉えています。大熊猫は白と黑の主色调で、顔には濃い黒い鼻と濃厚な黒い耳が特徴です。大熊猫は自然な環境で、竹の葉を口中に入れ饲iarっています。背景には茂密な緑の植物が配置され、温か而ationした雰囲気whichが醸し出されています。
kun432kun432

ちょっと厳しい感があるので、8Bでやりなおし。ランタイム再起動して以下の部分だけ修正して再実行していく。

(snip)

path = 'OpenGVLab/InternVL3_5-8B'    # 今回は8Bをチョイス
model = AutoModel.from_pretrained(
    path,
    torch_dtype=torch.bfloat16,
    load_in_8bit=False,
    low_cpu_mem_usage=True,
    use_flash_attn=True,
    trust_remote_code=True,
    device_map="auto").eval()
tokenizer = AutoTokenizer.from_pretrained(path, trust_remote_code=True, use_fast=False)

VRAMは16.5GB程度。まあしょうがない。

出力
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15              Driver Version: 550.54.15      CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA L4                      Off |   00000000:00:03.0 Off |                    0 |
| N/A   47C    P0             28W /   72W |   16493MiB /  23034MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

テキストだけの推論

question = "こんにちは。あなたは誰?"
(snip)
出力
こんにちは!私は「書生·万象(書生万象)」と申します。中科院上海人工智能实验室によって開発された大規模言語モデルです。あなたの質問や必要に応じて、様々な information または支援を提供できます。どのようにお手伝いしましょうか?
question = 'なにかストーリーを話して。'
(snip)
出力
もちろんです!あなた thích どのような题材のストーリーでしょうか?架空物語、歴史の事例、またはファンション相关人员の物など、いろいろな题材がありますね。あなたに合わせて選んでみ好吗?

レッサーパンダの画像

pixel_values = load_image(
    'image1.jpg',
    max_num=12
).to(torch.bfloat16).cuda()

question = '<image>\n画像について簡潔に説明してください。'
(snip)
出力
これは、パンダ関係ない動物ですが、パンダ科の生き物、紅熊猫を撮影した写真です。woodsapan。

パンダの画像

pixel_values = load_image(
    'image2.jpg',
    max_num=12
).to(torch.bfloat16).cuda()

question = '<image>\n画像について簡潔に説明してください。'
(snip)
出力
この画像には、成都の中国 Panda Research and Conservation Center で生活的に暮らすパンダが写っています。前景のパンダは、草や植物を食べ正在で、其の背後にはもう一只のパンダが木の陰に隠れて見えます。環境は緑豊かで自然に富んでおり、パンダが野生回归したかのように見えます。この様子はパンダ保護活動の一環として行われ、自然環境の中でパンダの生活研究を行っている场景の一景です。

うーん・・・

kun432kun432

確認のため、改めてInternVL3−8Bで同じことをしてみた。上と同じようにモデル部分だけを書き換えている。

(snip)
path = 'OpenGVLab/InternVL3-8B'
(snip)

テキストだけの推論

question = "こんにちは。あなたは誰?"
(snip)
出力
こんにちは!私はAIアシスタントで、さまざまな質問やリクエストに答えたり、情報を提供したりするためにここにいます。何か知りたいことがありますか?
question = 'なにかストーリーを話して。'
(snip)
出力
もちろんです。ここに一つ、想像のストーリーを話しますね。

---

タイトル:《迷路の星》

かつて、銀河の最果ての端に住む小さな惑星「レグオス」に、光る星である「アルファ・リグネス」と出会った小さな生き物「ティア」の物語があります。

ティアは、平和な日常だけを暮らしていた小さな町の住民でした。しかし、ある朝、その穏やかな日常は「星の力」の言葉に揺らぎました。星の力とは、神秘的な力で、銀河中の生命体が持っている特別な魔法のことで、それを掲げて使うと、驚くべき力が働くとされています。

ティアは、ある夜、星の力を体験することなく、銀河の最端にある神秘の星「アルファ・リグネス」を見たことに気づきました。というのも、それまでティアは星を見ることはできませんでしたが、その夜、不思議な光がアルファ・リグネスから溢れ、その光をティアは初めて見てしまいました。

驚きと恐れの気持ちが渦巻いていた時、ティアは星から声が聞こえるのを感じました。それは「銀河の守り星」と呼ばれる存在からのメッセージでした。

「ティアよ、あなたの星は、この力を静めてくれないか?」
「この力は、銀河を脅かす未知の危険をもたらしている。我々は力を抑え、この銀河を守りたい。あなたはその力を放つのかしら?」

ティアは、その問いに惑わされました。しかし、彼女は自分の星、レグオスの住民たちを守りたいという思いを胸に秘めていました。

そして、ティアは決断をしました。彼女は自分自身の力を取り、銀河を守るためにあらゆる試練と戦います。

ティアが星の力を放つと、銀河のバランスが戻り始め、無事に危険が退けられました。銀河の住民たちはティアに感謝し、彼女は「星の守り手」として永ね謳われるように、光る星を前に微笑んで見えなくなった。

---

このストーリーは想像でつたね、ですがティアのような優しい心を持つ者が、困難に立ち向かう姿はどんな銀河でも変わりませんね。何かもっと聞きたいことがあれば教えてくださいね。

レッサーパンダの画像

pixel_values = load_image(
    'image1.jpg',
    max_num=12
).to(torch.bfloat16).cuda()

question = '<image>\n画像について簡潔に説明してください。'
(snip)
出力
この画像は、ニホンツキノワグマ(レッドパンジー)の子が木製の横に頭をのせて見ている姿を捉えたものです。ニホンツキノワグマはツキノワグマの一種で、顔の色が赤いのが特徴です。この生物は、日本の国宝であり、保護が求められている生き物です。画像は自然な環境で捕らえてあり、そのクマの愛らしさが感じられます。

パンダの画像

pixel_values = load_image(
    'image2.jpg',
    max_num=12
).to(torch.bfloat16).cuda()

question = '<image>\n画像について簡潔に説明してください。'
(snip)
出力
この画像は、竹の木々の中にあるパンダが写っています。パンダは黒い耳とマスク模様の顔を持ち、竹を食べたりしている様子を捉えられています。周囲は緑豊かな環境で、まるで自然の森の中にいるかのようです。

やはり、InternVL3に比べると、InternVL-3.5は、日本語での使用に限っては、かなり精度が下がってるように思える。

kun432kun432

バージョンが上がって、以前のバージョンよりも思ったほど精度が上がっていない、とかはまああるかもしれないけど、大幅に精度が下がるなんてことあるんだろうか???

とはいえ日本語ネイティブのモデルというわけではないと思うので、なんとも言えないところだけど。

kun432kun432

MoEの方も試したいなーと思って見てみたら、GGUFがあった、しかも30B-A3Bもある

https://huggingface.co/lmstudio-community/InternVL3_5-30B-A3B-GGUF

https://huggingface.co/bartowski/OpenGVLab_InternVL3_5-30B-A3B-GGUF

LMStudioで見てみると、パラメータサイズが大きいモデルとGPT-OSSベースのもの以外はありそう。

とりあえず日本語が上手くいかなかった4Bで。量子化の影響をなるべく抑えるべく Q8_0で。

多少は漢字がおかしいところはあるけども、全然マシだなぁ・・・

なぜなのだろう・・・

kun432kun432

LM Studioで30B-A3B(Q4_K_M)を試してみた。パラメータはモデルカードの記載に合わせて temperature=0.6 だけセット、あとはLM Studioのデフォルトにおまかせ。

Reasoningなし

Reasoningあり。モデルカードに記載されているシステムプロンプトをセット。

システムプロンプト
You are an AI assistant that rigorously follows this response protocol:

1. First, conduct a detailed analysis of the question. Consider different angles, potential solutions, and reason through the problem step-by-step. Enclose this entire thinking process within <think> and </think> tags.

2. After the thinking section, provide a clear, concise, and direct answer to the user's question. Separate the answer from the think section with a newline.

Ensure that the thinking process is thorough but remains focused on the query. The final answer should be standalone and not reference the thinking section.

個人的な印象でしかないけど、基本的に日本語の扱いはあまり上手くないのかもしれない。あと日本語で使うなら temperature は推奨値よりも下げたほうが破綻が少ない気がする。

kun432kun432

一応、いつものごとく、手持ちの画像でも試しておく。引き続きLM Studioで30B-A3B。

  • プロンプトは全て共通、 この画像について詳しく説明して。
  • Reasoningは有効。上記で記載したシステムプロンプトをセット。ただしReasoning内容は割愛。
  • temperature は推奨値よりも下げて、とりあえず 0.3 で。

日本の風景

この画像は日本の神戸港の風景を捉えています。以下に詳細な説明をします:

  1. 中央の赤い塔

    • 神戸のランドマークである「摩耶山トゥルーズ(神戸港灯台)」が中心にあります。エiffel Towerを彷彿させるデザインで、高さ約108メートル。赤と白の縞模様が特徴的です。
  2. 周辺の建築物

    • 左側には「神戸 harborland 21」という複合施設の現代的な白い建物群があります。オフィスやホテル、商業施設が立ち並んでいます。
    • 右側の白い帆船型の建物は「神戸国際展示場(KOBE)」で、1995年の阪神・淡路大震災後の復興象徴として建てられました。
  3. 港の風景

    • 水面には穏やかな波紋が広がっており、小型船隻と大型クルーズ客船が停泊しています。神戸港は日本有数の繁忙な港です。
    • 背景には六甲山脈が見え、都市と自然が调和した風景を形成しています。
  4. 特徴的な要素

    • 天空は快晴で、日差しが建物に明るく当たっています。色彩の対比(赤い塔vs白い建築、青い空)が印象的です。
    • 画像全体から現代都市と自然環境が融合した神戸ならではの景観が伝わります。

この場所は観光客が訪れる名所であり、夜には灯りに彩られて美しく変身します。1981年に完成し、阪神地区の再建を象徴する存在として重要です。

書籍の表紙

この画像は、日本語で書かれたドキュメント作成に関する指南書の表紙です。以下に詳細を説明します:

1. タイトルとテーマ

  • 主なタイトル:「ドキュメント・コミュニケーションの全体観」
    • ドキュメント(文書)を通じたコミュニケーションの全体像や構造を捉えることを目指している本です。
  • 副題:「 document communication の全体観」
    • 文書作成の基本原则や構造を体系的に学べる指南書であることが強調されています。

2. 内容の特徴

  • 原则と手順

    • 読者に伝わりやすい文書を作るための「原則」と「手順」が明確化されています。
    • 具体的には、**「読者の立場を理解する」「要件を明確にする」「背景情報を整理する」**ことが重要とされています。
  • 図解

    • 中央に「読者(Reader)」を起点とした構造図があります。これにより、文書作成の要素が視覚的に把握できます。
    • 図は3つの要素で構成:
      • 要求(Request): readerが求める情報や目的
      • 想定(Assumption): readerの背景や知識 Level
      • 背景(Background): 文書の使用場面や文脈
    • これらが「Public(共有情報)」と「Private(内部情報)」に分かれる構造で、適切な信息選別的重要性が示されています。

3. 下部のメッセージ

  • キャッチコピー:「解・動・早で進めよ」
    • 文書作成を「理解する(解)」「実行する(動)」「迅速にする(早)」の3つ cardinality で進める方法を提案。
    • このアプローチにより、再提出や修正の手間が減り、効率的に仕事ができることが強調されています。

4. 対象読者

  • 職場での文書作成(報告書、メール、マニュアルなど)を改善したい人材や、
  • クリアーコミュニケーションを学びたいビジネスパーソンが想定されます。

5. 構成の特徴

  • 表裏の2色デザインで視覚的に區分され、内容の構造が明確。
  • 図解とテキストの组合により、理论的な説明と実践的なアドバイスがバランス良く詰められています。

この本は、文書作成を「読者の視点から逆算する」思考法を教えることで、無駄を省きながら効果的に情報を伝える方法を体系的に指南します。

ダミーの請求書

この画像は、日本語で記載された請求書の様式を示しています。以下に詳細な説明とポイントを整理します。


1. 構造と基本信息

  • タイトル: 御請求書(※「御」は丁寧な表現)
  • 会社名: 業商株式会社
  • 発行番号: IN-2024-0820
  • 住所: 東京都1000万円支店〒100-0001(※架装の住所)
  • 電話/fax: 電話 03-1234-5678 / fax 03-1234-5679

2. 請求内容

項目一覧

項目 単位 数量 単価(円) 合計(円)
特殊形材(A4尺寸) 1000 ¥30 ¥30,000
品名(木製) 20 ¥12,000 ¥240,000
補助金(木製) 50 ¥1,000 ¥50,000

合計

  • 小計: ¥314,000(※計算上は320,000円に見えるが、表記 inconsistencies)
  • 消費税 (10%): ¥15,700(※税率適用の根拠不明。小計が314,000円の場合、税金は31,400円應)
  • 合計 including tax: ¥329,700

3. 説明文のポイント

  • 備考:
    • 運送費・設置費等は別途請求。
    • 銀行振込の場合、口座情報を記載(※画像では省略)。
    • 次回以降の発注時にお願い。

4. 問題点と疑問

  1. 金額計算の不一致:

    • 各項目の合計は「30,000 + 240,000 + 50,000 = ¥320,000」だが、小計が¥314,000に記載されている。
    • 消費税も「10%の314,000円」應で¥31,400应が、表記では¥15,700となっている(半額)。
    • 推測: 計算ミスか割引適用の可能性。文書全体での整合性が疑われる。
  2. 項目名の曖昧さ:

    • 「特殊形材(A4尺寸)」は単位「㎡」but A4サイズの面積(約0.0821㎡)と照合困難。
    • 「補助金(木製)」の意味が不明(商品名か補助制度か?)。

5. 日本の請求書の特徴

  • 形式: 表計算が基本で、小計・税・合計が明確に分離される。
  • 消費税: 通常10%但、特殊な税率適用の場合あり(※本文には記載なし)。
  • 備考欄: 決済方法や注意点を記載する惯例。

6. 改善提案

  • 計算の再確認と説明文の明確化(例: 割引率の記載、商品詳細の追加)。
  • 金額の整合性をチェックし、銀行口座情報等を正確に記載する。

この請求書は基本的な構成は遵守しているが、金額計算の誤りが気掛かりです。実務では再確認が必要 likely。

うーん・・・

kun432kun432

まとめ

あくまでも個人で試した限りなのでもしかすると正しく試せていない可能性はあるが、やっぱり日本語に限っては InternVL3 よりも 精度が落ちているような印象。正直困惑してる。

とりあえず、自分と同じようにInternVL3.5がイマイチと感じた場合は、InternVL3を試してみることをオススメする。

このスクラップは24日前にクローズされました