共计 3608 个字符,预计需要花费 10 分钟才能阅读完成。
一夜之间,全新开源模型「OpenLLM」击败 ChatGPT 的消息,在网上引起轩然大波。
根据官方的介绍,OpenLLM:
– 在斯坦福 AlpacaEval 上,以 80.9% 的胜率位列开源模型第一
– 在 Vicuna GPT- 4 评测中,性能则达到了 ChatGPT 的 105.7%
最重要的是,如此卓越的性能,只需要 6K 的 GPT- 4 对话数据进行微调训练。
” alt=” 图片 ” width=”1″ height=”1″ align=”” border=”0″ data-cke-saved-src=”data:image/svg+xml,%3C%3Fxml version=’1.0′ encoding=’UTF-8’%3F%3E%3Csvg width=’1px’ height=’1px’ viewBox=’0 0 1 1′ version=’1.1′ xmlns=’http://www.w3.org/2000/svg’ xmlns:xlink=’http://www.w3.org/1999/xlink’%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=’none’ stroke-width=’1′ fill=’none’ fill-rule=’evenodd’ fill-opacity=’0’%3E%3Cg transform=’translate(-249.000000. -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=’249′ y=’126′ width=’1′ height=’1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E” />
项目地址:https://github.com/imoneoi/openchat
不过 Chatbot Arena 的「榜单主」提醒称,由于旧的 Vicuña eval 基准存在一些 bias,因此提倡大家迁移到新提出的 MT-bench 上——从而更好地测评 LLM 更多方面的能力。
” alt=” 图片 ” width=”1″ height=”1″ align=”” border=”0″ data-cke-saved-src=”data:image/svg+xml,%3C%3Fxml version=’1.0′ encoding=’UTF-8’%3F%3E%3Csvg width=’1px’ height=’1px’ viewBox=’0 0 1 1′ version=’1.1′ xmlns=’http://www.w3.org/2000/svg’ xmlns:xlink=’http://www.w3.org/1999/xlink’%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=’none’ stroke-width=’1′ fill=’none’ fill-rule=’evenodd’ fill-opacity=’0’%3E%3Cg transform=’translate(-249.000000. -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=’249′ y=’126′ width=’1′ height=’1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E” />
OpenLLM:只需 6K GPT- 4 对话微调
OpenLLM 是一个在多样化且高质量的多轮对话数据集上进行微调的开源语言模型系列。
具体来讲,研究人员从约 90K 的 ShareGPT 对话中,过滤出来约 6K 的 GPT- 4 对话。
经过 6k 数据微调后,令人惊讶的是,OpenLLM 已经被证明可以在有限的数据下实现高性能。
OpenLLM 有两个通用模型,它们是 OpenChat 和 OpenChat-8192.
OpenChat:基于 LLaMA-13B 微调,上下文长度为 2048
– 在 Vicuna GPT- 4 评估中达到 ChatGPT 分数的 105.7%
– 在 AlpacaEval 上取得了惊人的 80.9% 的胜率
OpenChat-8192:基于 LLaMA-13B 微调,上下文长度为 8192
– 在 Vicuna GPT- 4 评估中达到 ChatGPT 分数的 106.6%
– 在 AlpacaEval 上取得的 79.5% 胜率
此外,OpenLLM 还有代码模型,其性能如下:
OpenCoderPlus:基于 StarCoderPlus,原始上下文长度为 8192
– 在 Vicuna GPT- 4 评估中达到 ChatGPT 分数的 102.5%
– 在 AlpacaEval 上获得 78.7% 的胜率
模型评估
研究人员使用 Vicuna GPT- 4 和 AlpacaEval 基准评估了最新模型,结果如下图所示:
Vicuna GPT- 4 评估(v.s. gpt-3.5-turbo)
” alt=” 图片 ” width=”1″ height=”1″ align=”” border=”0″ data-cke-saved-src=”data:image/svg+xml,%3C%3Fxml version=’1.0′ encoding=’UTF-8’%3F%3E%3Csvg width=’1px’ height=’1px’ viewBox=’0 0 1 1′ version=’1.1′ xmlns=’http://www.w3.org/2000/svg’ xmlns:xlink=’http://www.w3.org/1999/xlink’%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=’none’ stroke-width=’1′ fill=’none’ fill-rule=’evenodd’ fill-opacity=’0’%3E%3Cg transform=’translate(-249.000000. -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=’249′ y=’126′ width=’1′ height=’1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E” />
Vicuna GPT-3.5-Turbo 评估(v.s. gpt-3.5-turbo)
另外,值得注意的是,研究者采用的评估模式与 Vicuna 的略有不同,还使用了证据校准 (EC)+ 平衡位置校准(BPC) 来减少潜在的偏差。
安装和权重
要使用 OpenLLM,需要安装 CUDA 和 PyTorch。用户可以克隆这个资源库,并通过 pip 安装这些依赖:
git clone git@github.com:imoneoi/OChat.gitpip install -r requirements.txt
目前,研究人员已经提供了所有模型的完整权重作为 huggingface 存储库。
用户可以使用以下命令在本地启动一个 API 服务器,地址为 http://localhost:18888.
” alt=” 图片 ” width=”1″ height=”1″ align=”” border=”0″ data-cke-saved-src=”data:image/svg+xml,%3C%3Fxml version=’1.0′ encoding=’UTF-8’%3F%3E%3Csvg width=’1px’ height=’1px’ viewBox=’0 0 1 1′ version=’1.1′ xmlns=’http://www.w3.org/2000/svg’ xmlns:xlink=’http://www.w3.org/1999/xlink’%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=’none’ stroke-width=’1′ fill=’none’ fill-rule=’evenodd’ fill-opacity=’0’%3E%3Cg transform=’translate(-249.000000. -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=’249′ y=’126′ width=’1′ height=’1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E” />
其中,服务器与 openai 包,以及 ChatCompletions 协议兼容(请注意,某些功能可能不完全支持)。
用户可以通过设置以下方式指定 openai 包的服务器:
openai.api_base = “http://localhost:18888/v1”
当前支持的 ChatCompletions 参数有:
” alt=” 图片 ” width=”1″ height=”1″ align=”” border=”0″ data-cke-saved-src=”data:image/svg+xml,%3C%3Fxml version=’1.0′ encoding=’UTF-8’%3F%3E%3Csvg width=’1px’ height=’1px’ viewBox=’0 0 1 1′ version=’1.1′ xmlns=’http://www.w3.org/2000/svg’ xmlns:xlink=’http://www.w3.org/1999/xlink’%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=’none’ stroke-width=’1′ fill=’none’ fill-rule=’evenodd’ fill-opacity=’0’%3E%3Cg transform=’translate(-249.000000. -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=’249′ y=’126′ width=’1′ height=’1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E” />
建议:使用至少 40GB(1x A100)显存的 GPU 来运行服务器。
数据集
转换后的数据集可在 openchat_sharegpt4_dataset 上获取。
项目中所使用的数据集,是对 ShareGPT 清洗和筛选后的版本。
其中,原始的 ShareGPT 数据集包含大约 90.000 个对话,而仅有 6.000 个经过清理的 GPT- 4 对话被保留用于微调。
清洗后的 GPT- 4 对话与对话模板和回合结束时的 token 相结合,然后根据模型的上下文限制进行截断(超出限制的内容将被丢弃)。
要运行数据处理流程,请执行以下命令:
./ochat/data/run_data_pipeline.sh INPUT_FOLDER OUTPUT_FOLDER
输入文件夹应包含一个 ShareGPT 文件夹,其中包含每个 ShareGPT 对话页面的.html 文件。
数据处理流程包括三个步骤:
– 清洗:对 HTML 进行清理并转换为 Markdown 格式,删除格式错误的对话,删除包含被屏蔽词汇的对话,并进行基于哈希的精确去重处理
– 筛选:仅保留 token 为 Model: GPT- 4 的对话
– 转换:为了模型的微调,针对所有的对话进行转换和分词处理
最终转换后的数据集遵循以下格式:
MODEL_TYPE.train.json / .eval.json
[[token_id_list, supervise_mask_list], [token_id_list, supervise_mask_list], …]
MODEL_TYPE.train.text.json / .eval.text.json 从 token_id_list 解码的纯文本
除此之外,研究人员还提供了一个用于可视化对话嵌入的工具。
只需用浏览器打开 ochat/visualization/ui/visualizer.html,并将 MODEL_TYPE.visualizer.json 拖放到网页中。点击 3D 图中的点,就可以显示相应的对话。
其中,嵌入是使用 openai_embeddings.py 创建的,然后使用 dim_reduction.ipynb 进行 UMAP 降维和 K -Means 着色。
模型修改
研究人员为每个基础模型添加了一个 EOT(对话结束)token。
对于 LLaMA 模型,EOT 的嵌入初始化为所有现有 token 嵌入的平均值。对于 StarCoder 模型,EOT 的嵌入以 0.02 标准差进行随机初始化。
对于具有 8192 上下文的 LLaMA-based 模型,max_position_embeddings 被设置为 8192. 并且进行了 RoPE(相对位置编码)代码的外推。
训练
训练模型时使用的超参数在所有模型中都是相同的:
使用 8xA100 80GB 进行训练:
NUM_GPUS=8
deepspeed –num_gpus=$NUM_GPUS –module ochat.training_deepspeed.train \ –model_type MODEL_TYPE \ –model_path BASE_MODEL_PATH \ –save_path TARGET_FOLDER \ –length_grouping \ –epochs 5 \ –data_path DATASET_PATH \ –deepspeed \ –deepspeed_config ochat/training_deepspeed/deepspeed_config.json
评估
要运行 Vicuna GPT- 4 评估,请执行以下步骤:
1. 生成模型答案
python -m ochat.evaluation.get_model_answer –model_type MODEL_TYPE –models_path PATH_CONTAINING_ALL_MODELS_SAME_TYPE –data_path ./ochat/evaluation/vicuna –output_path ./eval_results
2. 生成基线 (GPT-3.5) 答案
OPENAI_API_KEY=sk-XXX python -m ochat.evaluation.get_openai_answer –data_path ./ochat/evaluation/vicuna –output_path ./eval_baselines –model_types gpt-3.5-turbo
3. 运行 GPT- 4 评估
OPENAI_API_KEY=sk-XXX python -m ochat.evaluation.openai_eval –data_path ./ochat/evaluation/vicuna –baseline_path ./eval_baselines/vicuna_gpt-3.5-turbo.jsonl –input_path ./eval_results
4. 可视化和细节
要获得可视化和绘制评估结果,请使用浏览器打开 ochat/visualization/eval_result_ui/eval_result_visualizer.html,并选择./eval_results/eval_result_YYYYMMDD 文件夹中的所有文件以显示结果。
局限性
基础模型限制
尽管能够实现优秀的性能,但 OpenLLM 仍然受到其基础模型固有限制的限制。这些限制可能会影响模型在以下领域的性能:
– 复杂推理
– 数学和算术任务
– 编程和编码挑战
不存在信息的幻觉
OpenLLM 有时可能会产生不存在或不准确的信息,也称为「幻觉」。用户应该意识到这种可能性,并验证从模型中获得的任何关键信息。