モデル概要
モデル特徴
モデル能力
使用事例
🚀 Qwen-7B-Chat
**通义千问-7B(Qwen-7B)**は、アリババクラウドが開発した通义千问大規模言語モデルシリーズのうち、70億パラメータ規模のモデルです。これはTransformerベースの大規模言語モデルで、大量の事前学習データを用いて訓練されています。事前学習データには、多様な種類のデータが含まれ、ウェブテキスト、専門書籍、コードなどがあります。また、Qwen-7Bをベースに、アライメント機構を用いて、大規模言語モデルベースのAIアシスタントであるQwen-7B-Chatを開発しました。このリポジトリはQwen-7B-Chatに関するものです。
Qwen-7B 🤖 | 🤗  | Qwen-7B-Chat 🤖 | 🤗  |  Demo  |  Report
🚀 クイックスタート
必要条件
- python 3.8以上のバージョン
- pytorch 1.12以上のバージョン、推奨は2.0以上
- CUDA 11.4以上の使用を推奨(GPUユーザー、flash-attentionユーザーなどはこのオプションを考慮する必要があります)
依存ライブラリのインストール
Qwen-7B-Chatを実行するには、上記の要件を満たした後、以下のpipコマンドを実行して依存ライブラリをインストールしてください。
pip install transformers==4.31.0 accelerate tiktoken einops
また、より高い効率と低いメモリ使用量を実現するために、flash-attention
ライブラリのインストールを推奨します。
git clone -b v1.0.8 https://github.com/Dao-AILab/flash-attention
cd flash-attention && pip install .
# 以下のインストールはオプションで、インストールに時間がかかる場合があります。
# Below are optional. Installing them might be slow.
pip install csrc/layer_norm
pip install csrc/rotary
コード例
以下に、Qwen-7B-Chatモデルを使用した多輪対話のサンプルを示します。
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig
# Note: The default behavior now has injection attack prevention off.
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True)
# use bf16
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, bf16=True).eval()
# use fp16
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True, fp16=True).eval()
# use cpu only
# model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="cpu", trust_remote_code=True).eval()
# use auto mode, automatically select precision based on the device.
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True).eval()
# Specify hyperparameters for generation
model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True) # 可指定不同的生成长度、top_p等相关超参
# 第一轮对话 1st dialogue turn
response, history = model.chat(tokenizer, "你好", history=None)
print(response)
# 你好!很高兴为你提供帮助。
# 第二轮对话 2nd dialogue turn
response, history = model.chat(tokenizer, "给我讲一个年轻人奋斗创业最终取得成功的故事。", history=history)
print(response)
# 这是一个关于一个年轻人奋斗创业最终取得成功的故事。
# 故事的主人公叫李明,他来自一个普通的家庭,父母都是普通的工人。从小,李明就立下了一个目标:要成为一名成功的企业家。
# 为了实现这个目标,李明勤奋学习,考上了大学。在大学期间,他积极参加各种创业比赛,获得了不少奖项。他还利用课余时间去实习,积累了宝贵的经验。
# 毕业后,李明决定开始自己的创业之路。他开始寻找投资机会,但多次都被拒绝了。然而,他并没有放弃。他继续努力,不断改进自己的创业计划,并寻找新的投资机会。
# 最终,李明成功地获得了一笔投资,开始了自己的创业之路。他成立了一家科技公司,专注于开发新型软件。在他的领导下,公司迅速发展起来,成为了一家成功的科技企业。
# 李明的成功并不是偶然的。他勤奋、坚韧、勇于冒险,不断学习和改进自己。他的成功也证明了,只要努力奋斗,任何人都有可能取得成功。
# 第三轮对话 3rd dialogue turn
response, history = model.chat(tokenizer, "给这个故事起一个标题", history=history)
print(response)
# 《奋斗创业:一个年轻人的成功之路》
より詳細な使用方法については、Github repoを参照してください。
✨ 主な機能
多言語対応
Qwen-7B-Chatは、多様な言語に対応しており、中文、英文、コードなどのデータを効率的にエンコードすることができます。また、一部の多言語にも友好的で、ユーザーは語彙を拡張することなく一部の言語の能力を強化することができます。
多輪対話
モデルは多輪対話に対応しており、会話の文脈を理解し、自然な応答を生成することができます。
ツール使用能力
Qwen-7B-Chatは、ReAct Promptingを通じてプラグイン/ツール/APIを呼び出すことができます。また、HuggingFace Agentとしても使用できます。
📦 インストール
必要条件
- python 3.8以上のバージョン
- pytorch 1.12以上のバージョン、推奨は2.0以上
- CUDA 11.4以上の使用を推奨(GPUユーザー、flash-attentionユーザーなどはこのオプションを考慮する必要があります)
依存ライブラリのインストール
pip install transformers==4.31.0 accelerate tiktoken einops
flash-attention
ライブラリのインストールを推奨します。
git clone -b v1.0.8 https://github.com/Dao-AILab/flash-attention
cd flash-attention && pip install .
# 以下のインストールはオプションで、インストールに時間がかかる場合があります。
# Below are optional. Installing them might be slow.
pip install csrc/layer_norm
pip install csrc/rotary
💻 使用例
基本的な使用法
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig
# Note: The default behavior now has injection attack prevention off.
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True)
# use auto mode, automatically select precision based on the device.
model = AutoModelForCausalLM.from_pretrained("Qwen/Qwen-7B-Chat", device_map="auto", trust_remote_code=True).eval()
# Specify hyperparameters for generation
model.generation_config = GenerationConfig.from_pretrained("Qwen/Qwen-7B-Chat", trust_remote_code=True)
# 第一轮对话 1st dialogue turn
response, history = model.chat(tokenizer, "你好", history=None)
print(response)
高度な使用法
# 多輪対話の例
# 第一轮对话 1st dialogue turn
response, history = model.chat(tokenizer, "你好", history=None)
print(response)
# 第二轮对话 2nd dialogue turn
response, history = model.chat(tokenizer, "给我讲一个年轻人奋斗创业最终取得成功的故事。", history=history)
print(response)
# 第三轮对话 3rd dialogue turn
response, history = model.chat(tokenizer, "给这个故事起一个标题", history=history)
print(response)
📚 ドキュメント
Tokenizer
注:用語としての「tokenization」は日本語で共通の概念対応がないため、本文書では英語表現を使用して説明します。
tiktokenベースのトークナイザは、他のトークナイザ(sentencepieceトークナイザなど)とは異なります。特に微調整段階では、特殊トークンの使用に注意する必要があります。トークナイザの詳細情報や微調整時の関連使用方法については、ドキュメントを参照してください。
モデル詳細
Qwen-7B-Chatモデルのアーキテクチャの詳細は以下の通りです。
ハイパーパラメータ | 値 |
---|---|
n_layers | 32 |
n_heads | 32 |
d_model | 4096 |
語彙サイズ | 151851 |
シーケンス長 | 2048 |
位置エンコーディング、FFN活性化関数、正規化の計算方法については、現在最も一般的な方法を採用しています。具体的には、RoPE相対位置エンコーディング、SwiGLU活性化関数、RMSNorm(flash-attentionによる加速をオプションでインストール可能)です。
トークナイゼーションに関しては、現在の主流のオープンソースモデルが主に中英語の語彙に基づいているのに対し、Qwen-7B-Chatは約15万トークンの語彙を使用しています。この語彙は、GPT-4が使用するBPE語彙cl100k_base
をベースに、中文、多言語に対して最適化されており、中、英、コードデータの効率的なエンコードを考慮しつつ、一部の多言語にも友好的です。また、数字を1桁ごとに分割し、tiktokenトークナイザライブラリを呼び出して効率的なトークナイゼーションを行います。
評価結果
Qwen-7B-Chatモデルについて、通常の中文理解(C-Eval)、英文理解(MMLU)、コード(HumanEval)、数学(GSM8K)などの権威あるタスクを評価し、長シーケンスタスクの評価結果も含めています。また、Qwen-7B-Chatモデルはアライメント後に強力な外部システム呼び出し能力を持つようになったため、ツール使用能力に関する評価も行っています。
中文評価(C-Eval)
検証セット
モデル | 平均精度 |
---|---|
LLaMA2-7B-Chat | 31.9 |
LLaMA2-13B-Chat | 40.6 |
Chinese-Alpaca-2-7B | 41.3 |
Chinese-Alpaca-Plus-13B | 43.3 |
Baichuan-13B-Chat | 50.4 |
ChatGLM2-6B-Chat | 50.7 |
InternLM-7B-Chat | 53.2 |
Qwen-7B-Chat | 54.2 |
テストセット
モデル | 平均 | STEM | 社会科学 | 人文科学 | その他 |
---|---|---|---|---|---|
Chinese-Alpaca-Plus-13B | 41.5 | 36.6 | 49.7 | 43.1 | 41.2 |
Chinese-Alpaca-2-7B | 40.3 | - | - | - | - |
ChatGLM2-6B-Chat | 50.1 | 46.4 | 60.4 | 50.6 | 46.9 |
Baichuan-13B-Chat | 51.5 | 43.7 | 64.6 | 56.2 | 49.2 |
Qwen-7B-Chat | 54.6 | 47.8 | 67.6 | 59.3 | 50.6 |
英文評価(MMLU)
モデル | 平均精度 |
---|---|
ChatGLM2-6B-Chat | 45.5 |
LLaMA2-7B-Chat | 47.0 |
InternLM-7B-Chat | 50.8 |
Baichuan-13B-Chat | 52.1 |
ChatGLM2-12B-Chat | 52.1 |
Qwen-7B-Chat | 53.9 |
コード評価(Coding Evaluation)
モデル | Pass@1 |
---|---|
LLaMA2-7B-Chat | 12.2 |
InternLM-7B-Chat | 14.0 |
Baichuan-13B-Chat | 16.5 |
LLaMA2-13B-Chat | 18.9 |
Qwen-7B-Chat | 24.4 |
数学評価
モデル | Zero-shot精度 | 4-shot精度 |
---|---|---|
ChatGLM2-6B-Chat | - | 28.0 |
LLaMA2-7B-Chat | 20.4 | 28.2 |
LLaMA2-13B-Chat | 29.4 | 36.7 |
InternLM-7B-Chat | 32.6 | 34.5 |
Baichuan-13B-Chat | - | 36.3 |
ChatGLM2-12B-Chat | - | 38.1 |
Qwen-7B-Chat | 41.1 | 43.5 |
長シーケンス評価(Long-Context Understanding)
NTK補間、LogNアテンションスケーリングを導入することで、Qwen-7B-Chatのコンテキスト長を拡張することができます。長文要約データセットVCSUM(テキストの平均長は約15K)でのQwen-7B-ChatのRouge-L結果は以下の通りです。
(これらの手法を有効にするには、config.jsonのuse_dynamc_ntk
とuse_logn_attn
をtrueに設定してください)
モデル | VCSUM (zh) |
---|---|
GPT-3.5-Turbo-16k | 16.0 |
LLama2-7B-Chat | 0.2 |
InternLM-7B-Chat | 13.0 |
ChatGLM2-6B-Chat | 16.3 |
Qwen-7B-Chat | 16.6 |
ツール使用能力の評価(Tool Usage)
ReAct Prompting
千問は、ReAct Promptingを通じてプラグイン/ツール/APIを呼び出すことができます。ReActは、LangChainフレームワークが採用する主要な方法の1つでもあります。ツール使用能力を評価するためのオープンソースの評価ベンチマークでの千問の性能は以下の通りです。
モデル | ツール選択(精度↑) | ツール入力(Rouge-L↑) | 誤検知率↓ |
---|---|---|---|
GPT-4 | 95% | 0.90 | 15% |
GPT-3.5 | 85% | 0.88 | 75% |
Qwen-7B-Chat | 99% | 0.89 | 9.7% |
評価ベンチマークに登場するプラグインは、千問の訓練データセットには含まれていません。このベンチマークは、複数の候補プラグインから正しいプラグインを選択するモデルの精度、プラグインに渡されるパラメータの合理性、および誤検知率を評価しています。誤検知率(False Positive)は、プラグインを呼び出す必要のないリクエストを処理する際に、誤ってプラグインを呼び出した場合に定義されます。
ReAct Promptingのプロンプトの書き方や使用方法については、ReActサンプル説明を参照してください。ツールを使用することで、モデルはタスクをより適切に実行することができます。千問のツール使用能力に基づいて、以下の画像に示すような効果を実現することができます。
Huggingface Agent
千問は、HuggingFace Agentとしても使用できます。HuggingFaceが提供するrunモードのベンチマークでの性能は以下の通りです。
モデル | ツール選択↑ | ツール使用↑ | コード↑ |
---|---|---|---|
GPT-4 | 100 | 100 | 97.41 |
GPT-3.5 | 95.37 | 96.30 | 87.04 |
StarCoder-15.5B | 87.04 | 87.96 | 68.89 |
Qwen-7B | 90.74 | 92.59 | 74.07 |
🔧 技術詳細
量子化
より低精度の量子化モデル(4ビットや8ビットのモデル)を使用する場合は、簡単な例を提供しています。始める前に、bitsandbytes
をインストールしてください。bitsandbytes
のインストール要件は以下の通りです。
**要件** Python >=3.8。Linuxディストリビューション(Ubuntu、MacOSなど) + CUDA > 10.0。
Windowsユーザーは、特定のバージョンのbitsandbytes
をインストールする必要があります。選択肢にはbitsandbytes-windows-webuiがあります。
AutoModelForCausalLM.from_pretrained
に量子化設定を追加するだけで、量子化モデルを使用することができます。例を以下に示します。
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
# quantization configuration for NF4 (4 bits)
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type='nf4',
bnb_4bit_compute_dtype=torch.bfloat16
)
# quantization configuration for Int8 (8 bits)
quantization_config = BitsAndBytesConfig(load_in_8bit=True)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen-7B-Chat",
device_map="cuda:0",
quantization_config=quantization_config,
max_memory=max_memory,
trust_remote_code=True,
).eval()
この方法により、Qwen-7B-ChatをNF4
およびInt8
精度のモデルとして読み込むことができ、メモリ使用量を節約することができます。また、関連する性能データも提供しています。モデルの性能には若干の損失がありますが、メモリ使用量は大幅に削減されます。



