模型简介
模型特点
模型能力
使用案例
🚀 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)过程的输出。
📄 许可证
开发团队








