license: other
license_name: hyperclovax-seed
license_link: LICENSE
library_name: transformers

概要
HyperCLOVAX-SEED-Vision-Instruct-3Bは、NAVERが独自の基盤モデルをベースにポストトレーニングを施して開発したモデルです。テキストと画像の両方を理解し、テキストを生成することができます。
このモデルは、軽量なアーキテクチャに重点を置き、計算効率を最適化しています。視覚理解の面では、視覚的質問応答(VQA)、チャートや図表の解釈、さらにはコンテンツの理解が可能です。HyperCLOVAX-SEED-Vision-Instruct-3Bは、特に韓国語に特化したパレート最適なバランスを目指しており、推論シナリオにおいて類似サイズの他のモデルと比べて少ない視覚トークンを使用しながら競争力のある性能を発揮します。
特に、韓国語の入力処理において強みを示し、関連するベンチマークで類似サイズのオープンソースモデルを上回る性能を発揮しています。韓国初の視覚理解可能なオープンソースの視覚言語モデルとして、韓国の主権AI能力強化に大きく貢献することが期待されています。
基本情報
- モデルアーキテクチャ: LLaVAベースの視覚言語モデル
- LLMモジュール: Transformerベースのアーキテクチャ(Dense Model)
- 視覚エンコーダ: SigLIPベースのアーキテクチャで、グリッドあたり378x378pxの入力解像度をサポート。
- 視覚言語コネクタ: C-AbstractorベースのアーキテクチャでAnyResメカニズムを採用、9グリッドで合計1.29Mピクセルまでサポート。
- パラメータ数: 3.2B(LLMモジュール) + 0.43B(視覚モジュール)
- 入力/出力形式: テキスト + 画像 + 動画 / テキスト
- コンテキスト長: 16k
- 知識カットオフ日: 2024年8月以前に収集されたデータでトレーニングされています。
トレーニング
テキスト
ポストトレーニングにおいても高品質なデータの確保は不可欠ですが、人間が手作業で大規模なデータセットを作成または修正することは、コストとリソースの面で大きな制約がありました。さらに、専門知識を必要とするタスクは処理が難しく、人的ミスのリスクも高かったです。これらの課題を克服するため、HyperCLOVA Xを活用した自動検証システムを採用し、データ品質を向上させるとともにトレーニングプロセスを効率化しました。その結果、数学やコーディングなど明確な答えが存在する分野で大幅な性能向上が見られました。
データ収集コストの削減も重要ですが、効率的なトレーニング戦略の確立も同様に重要です。HyperCLOVAX-SEED-Vision-Instruct-3Bは、HyperCLOVAX-SEED-Text-Base-3Bを出発点とし、GRPOと呼ばれるオンライン強化学習アルゴリズムに基づいて、教師ありファインチューニング(SFT)と人間のフィードバックからの強化学習(RLHF)の両方を適用して開発されました。
視覚
モデルが画像と質問を入力として受け取り、テキストベースの回答を生成する「視覚理解」機能は、HyperCLOVA Xの当初の設計には含まれていませんでした。そのため、HCX LLMの既存の性能を損なうことなく、画像ベースの質問応答(VQA)やチャート/図表の解釈など、視覚関連タスクを処理する能力を追加するために、モデルアーキテクチャは慎重に設計されました。特にコンテキスト長を考慮した入力内の補助情報の処理に特別な注意が払われました。
HyperCLOVAX-SEED-Vision-Instruct-3Bは軽量モデルですが、基本的な画像VQAタスクを実行可能で、OCR不要の処理もサポートしています。この3Bモデルの主要な焦点の一つは、動画入力トークンの効率化でした。入力トークン長は計算コストに直結するため、フレームごとに抽出されるトークン数を慎重に調整し、可能な限り少ないトークンで効率的な動画理解を実現しました。また、RLHFトレーニングフェーズでは、テキスト領域と同様に、視覚特化のV-RLHFデータを使用してモデルの学習を強化しました。
ベンチマーク
テキスト
モデル |
KMMLU (5-shot, acc) |
HAE-RAE (5-shot, acc) |
CLiCK (5-shot, acc) |
KoBEST (5-shot, acc) |
HyperCLOVAX-SEED-Text-Base-3B |
0.4847 |
0.7635 |
0.6386 |
0.7792 |
HyperCLOVAX-SEED-Vision-Instruct-3B |
0.4422 |
0.6499 |
0.5599 |
0.7180 |
Qwen2.5-3B-instruct |
0.4451 |
0.6031 |
0.5649 |
0.7053 |
gemma-3-4b-it |
0.3895 |
0.6059 |
0.5303 |
0.7262 |
視覚
モデル名 |
動画あたりの最大トークン数 |
VideoMME (Ko) |
NAVER-TV-CLIP (Ko) |
VideoChatGPT (Ko) |
PerceptionTest (En) |
ActivityNet-QA (En) |
KoNet (Ko) |
MMBench-Val (En) |
TextVQA-Val (En) |
Korean VisIT-Bench (Ko) |
画像(4ベンチマーク) |
動画(5ベンチマーク) |
総合(9ベンチマーク) |
HyperCLOVAX-SEED-Vision-Instruct-3B |
1856トークン、108フレーム |
48.2 |
61.0 |
53.6 |
55.2 |
50.6 |
69.2 |
81.8 |
79.2 |
37.0 |
46.68 |
53.70 |
59.54 |
HyperCLOVAX-SEED-Vision-Instruct-3B (OCRなし) |
1856トークン、108フレーム |
48.2 |
61.0 |
53.6 |
55.2 |
50.6 |
36.6 |
80.7 |
76.0 |
43.5 |
56.74 |
53.70 |
55.05 |
Qwen-2.5-VL-3B |
24576トークン、768フレーム |
55.1 |
48.3 |
45.6 |
66.9 |
55.7 |
58.3 |
84.3 |
79.6 |
81.5 |
59.35 |
54.31 |
56.55 |
Qwen-2.5-VL-3B (2000トークン使用) |
2000トークン、128フレーム |
50.3 |
43.9 |
44.3 |
58.3 |
54.2 |
58.5 |
84.3 |
79.3 |
15.7 |
59.50 |
50.18 |
54.33 |
Qwen-2.5-VL-7B |
24576トークン、768フレーム |
60.6 |
66.7 |
51.8 |
70.5 |
56.6 |
68.4 |
88.3 |
84.9 |
85.6 |
69.34 |
61.23 |
64.84 |
Gemma-3-4B |
4096トークン、16フレーム |
45.4 |
36.8 |
57.1 |
50.6 |
46.3 |
25.0 |
79.2 |
58.9 |
32.3 |
48.91 |
47.24 |
47.98 |
GPT4V (gpt-4-turbo-2024-04-09) |
不明、オリジナル画像、8フレーム |
49.1 |
75.0 |
55.5 |
57.4 |
45.7 |
38.7 |
84.2 |
60.4 |
52.0 |
58.88 |
51.59 |
54.83 |
GPT4o (gpt-4o-2024-08-06) |
不明、512リサイズ、128フレーム |
61.6 |
66.6 |
61.8 |
50.2 |
41.7 |
60.6 |
84.2 |
73.2 |
50.5 |
67.15 |
56.42 |
61.19 |
InternV-2-2B |
4096トークン、16フレーム |
28.9 |
21.1 |
40.2 |
50.5 |
50.3 |
3.3 |
79.3 |
75.1 |
51.1 |
39.74 |
38.19 |
38.88 |
InternV-2-4B |
4096トークン、16フレーム |
33.8 |
36.0 |
22.8 |
54.2 |
52.0 |
22.7 |
83.0 |
76.9 |
51.6 |
46.11 |
39.75 |
42.58 |
InternV-2-8B |
4096トークン、16フレーム |
43.7 |
41.2 |
32.4 |
58.5 |
53.2 |
28.5 |
86.6 |
79.0 |
97.0 |
50.32 |
45.79 |
47.81 |
依存関係
使用例
from transformers import AutoModelForCausalLM, AutoProcessor, AutoTokenizer
model_name = "naver-hyperclovax/HyperCLOVAX-SEED-Vision-Instruct-3B"
model = AutoModelForCausalLM.from_pretrained(model_name, trust_remote_code=True).to(device="cuda")
preprocessor = AutoProcessor.from_pretrained(model_name, trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained(model_name)
chat = [
{"role": "system", "content": "you are helpful assistant!"},
{"role": "user", "content": "Hello, how are you?"},
{"role": "assistant", "content": "I'm doing great. How can I help you today?"},
{"role": "user", "content": "I'd like to show off how chat templating works!"},
]
input_ids = tokenizer.apply_chat_template(chat, return_tensors="pt", tokenize=True)
input_ids = input_ids.to(device="cuda")
output_ids = model.generate(
input_ids,
max_new_tokens=64,
do_sample=True,
top_p=0.6,
temperature=0.5,
repetition_penalty=1.0,
)
print("=" * 80)
print("LLM使用例")
print(tokenizer.batch_decode(output_ids)[0])
print("=" * 80)
vlm_chat = [
{"role": "system", "content": {"type": "text", "text": "System Prompt"}},
{"role": "user", "content": {"type": "text", "text": "User Text 1"}},
{
"role": "user",
"content": {
"type": "image",
"filename": "tradeoff_sota.png",
"image": "https://github.com/naver-ai/rdnet/blob/main/resources/images/tradeoff_sota.png?raw=true",
"ocr": "画像内の単語をラスター順にリスト化してください。読み取り順として不自然に感じても、ラスター順に従っていればモデルが処理します。",
"lens_keywords": "Gucci Ophidia, クロスバッグ, Ophidia small, GG, Supremeショルダーバッグ",
"lens_local_keywords": "[0.07, 0.21, 0.92, 0.90] Gucci Ophidia",
}
},
{
"role": "user",
"content": {
"type": "image",
"filename": "tradeoff.png",
"image": "https://github.com/naver-ai/rdnet/blob/main/resources/images/tradeoff.png?raw=true",
}
},
{"role": "assistant", "content": {"type": "text", "text": "Assistant Text 1"}},
{"role": "user", "content": {"type": "text", "text": "User Text 2"}},
{
"role": "user",
"content": {
"type": "video",
"filename": "rolling-mist-clouds.mp4",
"video": "freenaturestock-rolling-mist-clouds.mp4",
}
},
{"role": "user", "content": {"type": "text", "text": "User Text 3"}},
]
new_vlm_chat, all_images, is_video_list = preprocessor.load_images_videos(vlm_chat)
preprocessed = preprocessor(all_images, is_video_list=is_video_list)
input_ids = tokenizer.apply_chat_template(
new_vlm_chat, return_tensors="pt", tokenize=True, add_generation_prompt=True,
)
output_ids = model.generate(
input_ids=input_ids.to(device="cuda"),
max_new_tokens=8192,
do_sample=True,
top_p=0.6,
temperature=0.5,
repetition_penalty=1.0,
**preprocessed,
)
print(tokenizer.batch_decode(output_ids)[0])
- 最高レベルの画像理解性能を確保するためには、光学式文字認識(OCR)結果やエンティティ認識(Lens)などの追加情報を含めることが推奨されます。提供されている使用例は、OCRとLensの結果が利用可能であることを前提に記述されています。この形式でデータを入力すると、出力品質が大幅に向上することが期待できます。