🚀 360Zhinao (360智脑)
360Zhinaoは、奇虎360が開発したAIモデルシリーズです。高品質なコーパスを用いて学習され、競争力のある性能を持ち、長文対応のチャットモデルも用意されています。
もっと体験するには、360Zhinaoの公式ウェブサイト https://ai.360.com をご覧ください。
🚀 クイックスタート
依存関係のインストール
- python >= 3.8
- pytorch >= 2.0
- transformers >= 4.37.2
- CUDA >= 11.4
pip install -r requirements.txt
オプションとして、パフォーマンス向上とメモリ使用量削減のためにFlash-Attention 2をインストールすることをおすすめします。
flash-attn >= 2.3.6
FLASH_ATTENTION_FORCE_BUILD=TRUE pip install flash-attn==2.3.6
🤗 Transformers
基本モデル推論のデモ
from transformers import AutoTokenizer, AutoModelForCausalLM
from transformers.generation import GenerationConfig
MODEL_NAME_OR_PATH = "qihoo360/360Zhinao-7B-Base"
tokenizer = AutoTokenizer.from_pretrained(
MODEL_NAME_OR_PATH,
trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME_OR_PATH,
device_map="auto",
trust_remote_code=True)
generation_config = GenerationConfig.from_pretrained(
MODEL_NAME_OR_PATH,
trust_remote_code=True)
inputs = tokenizer('中国二十四节气\n1. 立春\n2. 雨水\n3. 惊蛰\n4. 春分\n5. 清明\n', return_tensors='pt')
inputs = inputs.to(model.device)
pred = model.generate(input_ids=inputs["input_ids"], generation_config=generation_config)
print("outputs:\n", tokenizer.decode(pred.cpu()[0], skip_special_tokens=True))
チャットモデル推論のデモ
from transformers import AutoTokenizer, AutoModelForCausalLM
from transformers.generation import GenerationConfig
MODEL_NAME_OR_PATH = "qihoo360/360Zhinao-7B-Chat-4K"
tokenizer = AutoTokenizer.from_pretrained(
MODEL_NAME_OR_PATH,
trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME_OR_PATH,
device_map="auto",
trust_remote_code=True)
generation_config = GenerationConfig.from_pretrained(
MODEL_NAME_OR_PATH,
trust_remote_code=True)
messages = []
messages.append({"role": "user", "content": "介绍一下刘德华"})
response = model.chat(tokenizer=tokenizer, messages=messages, generation_config=generation_config)
messages.append({"role": "assistant", "content": response})
print(messages)
messages.append({"role": "user", "content": "他有什么代表作?"})
response = model.chat(tokenizer=tokenizer, messages=messages, generation_config=generation_config)
messages.append({"role": "assistant", "content": response})
print(messages)
🤖 ModelScope
基本モデル推論のデモ
from modelscope import AutoModelForCausalLM, AutoTokenizer
from modelscope import GenerationConfig
MODEL_NAME_OR_PATH = "qihoo360/360Zhinao-7B-Base"
tokenizer = AutoTokenizer.from_pretrained(
MODEL_NAME_OR_PATH,
trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME_OR_PATH,
device_map="auto",
trust_remote_code=True)
generation_config = GenerationConfig.from_pretrained(
MODEL_NAME_OR_PATH,
trust_remote_code=True)
inputs = tokenizer('中国二十四节气\n1. 立春\n2. 雨水\n3. 惊蛰\n4. 春分\n5. 清明\n', return_tensors='pt')
inputs = inputs.to(model.device)
pred = model.generate(input_ids=inputs["input_ids"], generation_config=generation_config)
print("outputs:\n", tokenizer.decode(pred.cpu()[0], skip_special_tokens=True))
チャットモデル推論のデモ
from modelscope import AutoModelForCausalLM, AutoTokenizer
from modelscope import GenerationConfig
MODEL_NAME_OR_PATH = "qihoo360/360Zhinao-7B-Chat-4K"
tokenizer = AutoTokenizer.from_pretrained(
MODEL_NAME_OR_PATH,
trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME_OR_PATH,
device_map="auto",
trust_remote_code=True)
generation_config = GenerationConfig.from_pretrained(
MODEL_NAME_OR_PATH,
trust_remote_code=True)
messages = []
messages.append({"role": "user", "content": "介绍一下刘德华"})
response = model.chat(tokenizer=tokenizer, messages=messages, generation_config=generation_config)
messages.append({"role": "assistant", "content": response})
print(messages)
messages.append({"role": "user", "content": "他有什么代表作?"})
response = model.chat(tokenizer=tokenizer, messages=messages, generation_config=generation_config)
messages.append({"role": "assistant", "content": response})
print(messages)
CLIデモ
ターミナルでコマンドラインインターフェイスを使用します。
python cli_demo.py
Webデモ
streamlit run web_demo.py
✨ 主な機能
モデルシリーズのリリース
- 360Zhinao-7B-Base
- 360Zhinao-7B-Chat-4K
- 360Zhinao-7B-Chat-32K
- 360Zhinao-7B-Chat-360K
特筆すべき機能
- 基本モデル:主に中国語、英語、コードからなる3.4兆トークンの高品質コーパスを活用し、他の7Bモデルと比較して関連ベンチマークで競争力のある性能を達成しました。
- チャットモデル:強力なチャット機能と4K、32K、360Kの3つのコンテキスト長を備えています。360K(約50万字)は、リリース時点(2024年4月11日)で中国語のオープンソースモデルの中で最長のコンテキスト長です。
📦 インストール
依存関係のインストールについては、「クイックスタート」の「依存関係のインストール」を参照してください。
💻 使用例
基本的な使用法
Transformersライブラリを使用した基本モデルとチャットモデルの推論のコード例は、「クイックスタート」の「🤗 Transformers」セクションを参照してください。
高度な使用法
長文対応のチャットモデルの学習方法や、CLIデモ、Webデモの実行方法は、「クイックスタート」の各セクションを参照してください。
📚 ドキュメント
ニュースと更新情報
- [2024.04.12] 360Zhinao-7B v1.0をリリースしました。基本モデルとコンテキスト長が4K、32K、360Kの3つのチャットモデルを含みます。
ダウンロードURL
サイズ |
モデル |
BF16 |
Int4 |
7B |
360Zhinao-7B-Base |
🤖 🤗 |
|
7B |
360Zhinao-7B-Chat-4K |
🤖 🤗 |
🤖 🤗 |
7B |
360Zhinao-7B-Chat-32K |
🤖 🤗 |
🤖 🤗 |
7B |
360Zhinao-7B-Chat-360K |
🤖 🤗 |
🤖 🤗 |
モデル評価
基本モデル
モデルはOpenCompass上で評価されており、具体的にはC-Eval、AGIEval、MMLU、CMMLU、HellaSwag、MATH、GSM8K、HumanEval、MBPP、BBH、LAMBADAなどのベンチマークで評価されています。これらのベンチマークは、自然言語理解、知識、数学、コード生成、論理推論などの能力をテストします。
結果は以下の通りで、OpenCompassのリーダーボードで確認または再現できます。
モデル |
AVG |
CEval |
AGIEval |
MMLU |
CMMLU |
HellaSwag |
MATH |
GSM8K |
HumanEval |
MBPP |
BBH |
LAMBADA |
Baichuan2-7B |
41.49 |
56.3 |
34.6 |
54.7 |
57 |
67 |
5.4 |
24.6 |
17.7 |
24 |
41.8 |
73.3 |
Baichuan-7B |
31.94 |
44.7 |
24.6 |
41.5 |
44.6 |
68.4 |
2.5 |
9.6 |
9.1 |
6.4 |
32.8 |
67.1 |
ChatGLM3-6B |
58.67 |
67 |
47.4 |
62.8 |
66.5 |
76.5 |
19.2 |
61 |
44.5 |
57.2 |
66.2 |
77.1 |
DeepSeek-7B |
39.8 |
45 |
24 |
49.3 |
46.8 |
73.4 |
4.2 |
18.3 |
25 |
36.4 |
42.8 |
72.6 |
InternLM2-7B |
58.01 |
65.7 |
50.2 |
65.5 |
66.2 |
79.6 |
19.9 |
70.6 |
41.5 |
42.4 |
64.4 |
72.1 |
InternLM-7B |
39.33 |
53.4 |
36.9 |
51 |
51.8 |
70.6 |
6.3 |
31.2 |
13.4 |
14 |
37 |
67 |
LLaMA-2-7B |
33.27 |
32.5 |
21.8 |
46.8 |
31.8 |
74 |
3.3 |
16.7 |
12.8 |
14.8 |
38.2 |
73.3 |
LLaMA-7B |
30.35 |
27.3 |
20.6 |
35.6 |
26.8 |
74.3 |
2.9 |
10 |
12.8 |
16.8 |
33.5 |
73.3 |
Mistral-7B-v0.1 |
47.67 |
47.4 |
32.8 |
64.1 |
44.7 |
78.9 |
11.3 |
47.5 |
27.4 |
38.6 |
56.7 |
75 |
MPT-7B |
30.06 |
23.5 |
21.3 |
27.5 |
25.9 |
75 |
2.9 |
9.1 |
17.1 |
22.8 |
35.6 |
70 |
Qwen1.5-7B |
55.12 |
73.57 |
50.8 |
62.15 |
71.84 |
72.62 |
20.36 |
54.36 |
53.05 |
36.8 |
40.01 |
70.74 |
Qwen-7B |
49.53 |
63.4 |
45.3 |
59.7 |
62.5 |
75 |
13.3 |
54.1 |
27.4 |
31.4 |
45.2 |
67.5 |
XVERSE-7B |
34.27 |
61.1 |
39 |
58.4 |
60.8 |
73.7 |
2.2 |
11.7 |
4.9 |
10.2 |
31 |
24 |
Yi-6B |
47.8 |
73 |
44.3 |
64 |
73.5 |
73.1 |
6.3 |
39.9 |
15.2 |
23.6 |
44.9 |
68 |
360Zhinao-7B |
56.15 |
74.11 |
49.49 |
67.44 |
72.38 |
83.05 |
16.38 |
53.83 |
35.98 |
42.4 |
43.95 |
78.59 |
チャットモデル
4Kと32Kのモデルは、同じ4KのSFTデータで別々に学習されています。
長文対応のモデルを学習するために、2段階のアプローチを採用しています。
第1段階:RoPEベースを増やし、コンテキスト長を32Kに拡張します。
- まず、32Kのコンテキストウィンドウで約50億トークンの継続的事前学習を行います。
- 次に、SFT段階で、様々なソースからの長文データ(高品質な人間ラベル付きの32Kデータを含む)を使用してモデルを微調整します。
第2段階:コンテキスト長を360Kに拡張し、以下のデータで学習します。
- 少量の高品質な人間ラベル付きの超長文データ。
- 注釈付きの超長文データが不足しているため、様々な形式の合成データを構築しました。
- マルチドキュメントQA:Ziya-Readerと同様に、360のデータベースに基づいてマルチドキュメントQAペアを生成します。1行のマルチドキュメントQAデータ入力に対して複数のQAペアを構築し、マルチターン形式にすることで、学習効率を大幅に向上させます。
- シングルドキュメントQA:LLama2 Longと同様に、1行の長文入力内の異なるセグメントに基づいてマルチターンQAデータを構築します。
モデルは様々な長さとベンチマークで評価されています。
長文ベンチマーク
LongBenchという長文用のマルチタスクバイリンガルベンチマークで、32Kと360Kのモデルを評価しています。下流アプリケーションに最も関連する中国語タスク(シングル/マルチドキュメントQA、要約、フェデレーションラーニング、コード補完)の結果を報告しています。
モデル |
AVG |
シングルドキュメントQA |
マルチドキュメントQA |
要約 |
フェデレーションラーニング |
コード補完 |
GPT-3.5-Turbo-16k |
37.84 |
61.2 |
28.7 |
16 |
29.2 |
54.1 |
ChatGLM2-6B-32k |
37.16 |
51.6 |
37.6 |
16.2 |
27.7 |
52.7 |
ChatGLM3-6B-32k |
44.62 |
62.3 |
44.8 |
17.8 |
42 |
56.2 |
InternLM2-Chat-7B |
42.20 |
56.65 |
29.15 |
17.99 |
43.5 |
63.72 |
Qwen1.5-Chat-7B |
36.75 |
52.85 |
30.08 |
14.28 |
32 |
54.55 |
Qwen1.5-Chat-14B |
39.80 |
60.39 |
27.99 |
14.77 |
37 |
58.87 |
360Zhinao-7B-Chat-32K |
45.18 |
57.18 |
48.06 |
15.03 |
44 |
61.64 |
360Zhinao-7B-Chat-360Kの "NeedleInAHaystack" での評価
NeedleInAHaystackは、長文中の異なる位置に小さな情報を配置し、この情報をクエリすることで、LLMの長文対応能力をテストするベンチマークです。
360Zhinao-7B-Chat-360Kは、英語と中国語の両方のNeedleInAHaystackタスクで98%以上の精度を達成しています。
-
英語版(NeedleInAHaystackと同じ)
needle:The best thing to do in San Francisco is eat a sandwich and sit in Dolores Park on a sunny day.
query:What is the best thing to do in San Francisco?
-
中国語版
中国語版はSuperCLUE-200Kベンチマークに基づいて構築されています。
haystack:Chinese novels.
needle:(in Chinese) 王莽是一名勤奋的店员,他每天凌晨就起床,赶在第一缕阳光照亮大地之前到达店铺,为即将开始的一天做准备。他清扫店铺,整理货架,为顾客提供方便。他对五金的种类和用途了如指掌,无论顾客需要什么,他总能准确地找到。\n然而,他的老板刘秀却总是对他吹毛求疵。刘秀是个挑剔的人,他总能在王莽的工作中找出一些小错误,然后以此为由扣他的工资。他对王莽的工作要求非常严格,甚至有些过分。即使王莽做得再好,刘秀也总能找出一些小问题,让王莽感到非常沮丧。\n王莽虽然对此感到不满,但他并没有放弃。他知道,只有通过自己的努力,才能获得更好的生活。他坚持每天早起,尽管他知道那天可能会再次被刘秀扣工资。他始终保持微笑,尽管他知道刘秀可能会再次对他挑剔。
query:(in Chinese) 王莽在谁的手下工作?
📄 ライセンス
このプロジェクトはApache-2.0ライセンスの下で公開されています。