模型概述
模型特點
模型能力
使用案例
🚀 Stockmark-2-VL-100B-beta
Stockmark-2-VL-100B-beta 是一款具有1000億參數的日語專用視覺語言模型,具備思維鏈(CoT)推理能力,可用於文檔閱讀理解。該模型使用了由 Qwen2.5-VL-72B 生成的合成數據,因此按照 Qwen 許可證 提供。
作為測試版發佈,Stockmark-2-VL-100B-beta 仍在進行改進和評估。用戶的反饋和見解將有助於完善未來版本。
詳情請見 我們的博客。
本項目由 GENIAC 提供支持。
✨ 主要特性
- 專為日語設計:針對日語場景進行優化,適用於日語文檔閱讀理解等任務。
- 思維鏈推理:具備 CoT 推理能力,提升文檔理解和回答的邏輯性。
- 多模態處理:結合圖像和文本信息,實現更豐富的交互。
📦 安裝指南
使用 🤗Transformers 進行推理時,請確保安裝 transformers>=4.45.0
:
pip install transformers>=4.45.0 accelerate torchvision pillow
💻 使用示例
基礎用法
使用 🤗Transformers 進行推理
import requests
from PIL import Image
import torch
from transformers import AutoProcessor, LlavaOnevisionForConditionalGeneration
from huggingface_hub import hf_hub_download
model_id = "stockmark/Stockmark-2-VL-100B-beta"
model = LlavaOnevisionForConditionalGeneration.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
trust_remote_code=True,
low_cpu_mem_usage=True,
device_map="auto"
)
processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True)
conversation = [
{
"role": "system",
"content": "あなたは誠実で優秀な日本人のアシスタントです。"
},
{
"role": "user",
"content": "<image>30歳未満の社員に対するアンケート回答結果で、最も割合が高かった「使用頻度」は何ですか?",
},
]
prompt = processor.apply_chat_template(conversation, add_generation_prompt=True)
img_path = hf_hub_download(
repo_id=model_id,
filename="assets/demo.png"
)
raw_image = Image.open(img_path)
inputs = processor(images=raw_image, text=prompt, return_tensors="pt").to("cuda").to(torch.bfloat16)
output_ids = model.generate(**inputs, max_new_tokens=255, do_sample=False)
generated_ids = [
output_ids[len(input_ids) :] for input_ids, output_ids in zip(inputs.input_ids, output_ids)
]
answer = processor.batch_decode(
generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True
)[0].strip()
print(answer)
使用 vLLM 進行推理
import os
import requests
from PIL import Image
from transformers import (
AutoProcessor,
)
from huggingface_hub import hf_hub_download
from vllm import LLM, SamplingParams
os.environ["VLLM_WORKER_MULTIPROC_METHOD"] = "spawn"
def main():
model_id = "stockmark/Stockmark-2-VL-100B-beta"
processor = AutoProcessor.from_pretrained(
model_id,
trust_remote_code=True
)
message = [
{
"role": "system",
"content": "あなたは誠実で優秀な日本人のアシスタントです。"
},
{
"role": "user",
"content": "<image>30歳未満の社員に対するアンケート回答結果で、最も割合が高かった「使用頻度」は何ですか?"
}
]
prompt = processor.apply_chat_template(message, add_generation_prompt=True)
print(prompt)
llm = LLM(
model=model_id,
tensor_parallel_size=2,
limit_mm_per_prompt={"image": 1},
trust_remote_code=True,
dtype="bfloat16",
)
img_path = hf_hub_download(
repo_id=model_id,
filename="assets/demo.png"
)
image = Image.open(img_path)
inputs = {
"prompt": prompt,
"multi_modal_data": {
"image": image
},
}
sampling_params = SamplingParams(
temperature=0,
max_tokens=256
)
outputs = llm.generate(
inputs,
sampling_params=sampling_params,
)
answer = outputs[0].outputs[0].text
print(answer)
if __name__ == "__main__":
main()
使用 llm-jp-eval-mm
進行評估
模型類
```python # -*- coding: utf-8 -*- """ @File : stockmark_vl.py @Description : The VLM model class for Stockmark-2-VL-100B-beta. """import torch from PIL import Image from transformers import LlavaOnevisionForConditionalGeneration, AutoProcessor from base_vlm import BaseVLM from utils import GenerationConfig
DEFAULT_IMAGE_TOKEN = "
class VLM(BaseVLM): def init(self, model_id) -> None: self.model_id = model_id self.model = LlavaOnevisionForConditionalGeneration.from_pretrained( self.model_id, torch_dtype=torch.bfloat16, trust_remote_code=True, low_cpu_mem_usage=True, device_map="auto" ) self.processor = AutoProcessor.from_pretrained(self.model_id)
def generate(
self,
images: list[Image.Image],
text: str,
gen_kwargs: GenerationConfig = GenerationConfig(),
) -> str:
content = DEFAULT_IMAGE_TOKEN * len(images) + "\n" + text
messages = [
{
"role": "system",
"content": "あなたは誠実で優秀な日本人のアシスタントです。"
},
{
"role": "user",
"content": content,
},
]
prompt = self.processor.apply_chat_template(
messages, add_generation_prompt=True
)
if len(images) == 0:
images = None
inputs = self.processor(images=images, text=prompt, return_tensors="pt").to(
"cuda"
).to(torch.bfloat16)
output_ids = self.model.generate(**inputs, **gen_kwargs.__dict__)
generated_ids = [
output_ids[len(input_ids) :] for input_ids, output_ids in zip(inputs.input_ids, output_ids)
]
answer = self.processor.batch_decode(
generated_ids, skip_special_tokens=True, clean_up_tokenization_spaces=True
)[0].strip()
return answer
請確保在 `llm-jp-eval-mm/examples/model_table.py` 的 `MODEL_ID_TO_CLASS_PATH` 中包含 Stockmark-2-VL-100B-beta 的信息:
```python
MODEL_ID_TO_CLASS_PATH = {
"stockmark/Stockmark-2-VL-100B-beta": "stockmark_vl.VLM",
}
依賴組
使用以下代碼在 llm-jp-eval-mm 中為 Stockmark-2-VL-100B-beta 創建依賴組: ```bash uv add --group stockmark_vl transformers>=4.49.0 torch>=2.5.1 torchvision>=0.20.1 flash-attn>=2.7.3 accelerate>=0.27.2 sentencepiece>=0.2.0 pillow>=10.4.0 protobuf>=5.29.3 ```📚 詳細文檔
模型架構
Stockmark-2-VL-100B-beta 的架構遵循與 LLaVA-OneVision 相同的框架:
- 大語言模型(LLM):在之前的架構和數據實驗中,我們最初使用了參數較少的 Qwen/Qwen2-7B-Instruct。最終,在正式訓練中採用了 stockmark/Stockmark-2-100B-Instruct-beta。
- 視覺編碼器:與原始 LLaVA-OneVision 中使用的 google/siglip-so400m-patch14-384 不同,我們採用了新開發的 google/siglip2-so400m-patch14-384 作為視覺編碼器,它具有更好的多語言性能。在消融實驗中,我們觀察到使用 SigLIP2 的模型比使用 SigLIP 的模型表現更好。
- 投影器:我們對投影器的兩層多層感知器(MLP)使用了隨機初始化的權重。
評估
日語文檔閱讀理解性能評估
我們使用以下三個基準測試來評估文檔閱讀理解性能:
- JDocQA:共有 1175 個問題。我們使用 llm-jp-eval-mm 評估 Stockmark-2-VL-100B-beta,並採用大語言模型評判分數作為比較指標(使用
gpt-4o-2024-11-20
作為評判模型)。除 Stockmark-2-VL-100B-beta 之外的模型分數來自截至 2025 年 5 月 15 日的 llm-jp-eval-mm 排行榜。 - BusinessSlideVQA:這是一個用於評估理解複雜日語商務幻燈片圖像能力的基準測試,共有 220 個問題,由我們的團隊構建。評估指標與 JDocQA 相同,由大語言模型評判打分(使用
gpt-4o-2024-11-20
作為評判模型)。 - JChartQA:我們從 ChartQA-val 中隨機抽取 100 個問題,將問題中的英文文本和圖像翻譯成日語,構建了一個基準測試。
性能比較結果如下表所示。Stockmark-2-VL-100B-beta 在所有性能指標上都顯著優於其他國內視覺語言模型(VLM)。此外,在 BusinessSlideVQA 和 JChartQA 中,Stockmark-2-VL-100B-beta 的得分高於 GPT-4o,表明其在文檔閱讀理解性能方面總體上優於 GPT-4o。
模型 | BusinessSlideVQA /LLM | JChartQA /Acc | JDocQA /LLM |
---|---|---|---|
Heron-NVILA-Lite-15B | 2.8 | 0.41 | 2.7 |
sarashina2-vision-14b | 3.3 | 0.52 | 3.1 |
llm-jp-3-vila-14b | 2.0 | 0.23 | 2.5 |
gpt-4o-2024-11-20 | 4.1 | 0.77 | 3.6 |
Stockmark-2-VL-100B-beta | 4.2 | 0.88 | 3.5 |
日語通用領域視覺問答(VQA)
我們選擇以下三個常用的基準測試來評估模型在日語通用領域視覺問答中的性能:
我們使用 llm-jp-eval-mm 評估這三個基準測試。所有生成參數都設置為默認值,用於打分的評判模型是 gpt-4o-2024-11-20
。
Stockmark-2-VL-100B-beta 在 Heron-Bench 和 JA-VG-VQA500 上取得了最高分,在 JA-VLM-Bench-In-the-Wild 上也名列前茅。這表明 Stockmark-2-VL-100B-beta 目前是用於日語通用領域任務的最先進的國內模型。
模型 | Heron-Bench /LLM | JA-VLM-Bench-In-the-Wild /LLM | JA-VG-VQA500 /LLM |
---|---|---|---|
Heron-NVILA-Lite-15B | 73.5 | 4.4 | 4.0 |
sarashina2-vision-14b | 60.1 | 4.0 | 3.7 |
llm-jp-3-vila-14b | 68.0 | 4.1 | 3.9 |
Stockmark-2-VL-100B-beta | 78.8 | 4.1 | 4.1 |
🔧 技術細節
由於該模型是測試版發佈,尚未完全校準以確保符合社會規範、道德標準和法律法規。
由於 Stockmark-2-VL-100B-beta 是一個視覺推理模型,它可能會忽略提示中的格式要求,並保留思維鏈(CoT)過程的輸出。
📄 許可證
開發團隊








