ChatGLM:从GLM-130B到GLM-4全系列大语言模型
摘要
我们介绍了ChatGLM,这是一个不断进化的大语言模型系列,我们一直在持续开发中。本报告主要聚焦于GLM-4语言系列,包括GLM-4、GLM-4-Air和GLM-4-9B。它们代表了我们从ChatGLM前三代中汲取的所有见解和经验教训所训练出的最强大模型。迄今为止,GLM-4模型已在以中文和英文为主的数万亿个token以及24种语言的小规模语料库上进行了预训练,并主要针对中文和英文使用场景进行了对齐。高质量的对齐通过多阶段的后训练过程实现,包括监督微调和人类反馈学习。评估显示,GLM-4在以下方面表现优异:1)在MMLU、GSM8K、MATH、BBH、GPQA和HumanEval等通用指标上,与GPT-4不相上下甚至超越;2)在指令遵循方面,通过IFEval衡量,接近GPT-4-Turbo;3)在长上下文任务中,与GPT-4 Turbo(128K)和Claude 3相当;4)在中文对齐方面,通过AlignBench衡量,优于GPT-4。GLM-4全工具模型进一步对齐,能够理解用户意图并自主决定何时使用何种工具(包括网络浏览器、Python解释器、文本到图像模型和用户定义函数),以有效完成复杂任务。在实际应用中,它在通过网页浏览访问在线信息和使用Python解释器解决数学问题等任务上,与GPT-4全工具模型相当甚至超越。在此过程中,我们开源了一系列模型,包括ChatGLM-6B(三代)、GLM-4-9B(128K、1M)、GLM-4V-9B、WebGLM和CodeGeeX,仅在2023年就在Hugging Face上吸引了超过1000万次下载。
开源模型可通过https://github.com/THUDM和https://huggingface.co/THUDM访问。本报告主要关注语言模型,即ChatGLM。API公开于https://bigmodel.cn,开源模型可通过https://github.com/THUDM访问。
1 引言
ChatGPT的表现令人瞩目,其能力最初由2022年11月的GPT-3.5模型驱动,随后在2023年3月升级至GPT-4。根据OpenAI的说法,GPT-3.5系列通过引入指令调优、监督微调(SFT)和/或人类反馈强化学习(RLHF)改进了GPT-3。2020年发布的原始GPT-3[3]标志着从GPT-1的1.17亿参数和GPT-2的15亿参数显著扩展到了1750亿参数。这一扩展使GPT-3具备了上下文学习和泛化能力,推动了大型语言模型(LLMs)的兴起。
受GPT-3的启发,我们提出了通用语言模型(GLM)架构[11],其特点是自回归空白填充目标,并于2021年开源了GLM-10B模型(见图1中的GLM时间线)。从2021年底开始,我们开始预训练GLM-130B,目标是训练一个1000亿规模的模型以匹配或超越GPT-3(davinci),同时验证成功训练这种规模模型的技术,以及其他努力如OPT-175B[55]和BLOOM-176B。我们在7月完成了4000亿token的训练和评估,随后于2022年8月发布了模型和预训练细节。根据2022年11月的HELM评估,GLM-130B在各个维度上与GPT-3(davinci)相当。
此后,我们开始对GLM-130B进行指令调优。后来,ChatGPT进一步激励我们通过SFT和RLHF对齐基础模型。我们从零开始创建并精心制作了提示-响应对,并进行了SFT,同时开始研究如何有效应用RLHF。2023年3月14日,对齐后的模型ChatGLM-130B在https://chatglm.cn上线。此外,一个较小的版本ChatGLM-6B也在同一天开源,吸引了比预期更多的关注。它被设计为拥有62亿参数,
目的是1)促进预训练和后训练技术以及数据选择的快速迭代,2)使用INT4量化在消费级显卡上实现本地部署。从那时起,我们一直在快速探索和完善预训练和对齐技术,每隔三个月推出第二代和第三代ChatGLM系列,这两代都是从头开始预训练的。
ChatGLM-6B 在大约 1 万亿个中英文语料库的 token 上进行了预训练,上下文长度为 2048(2K),并主要通过监督微调(SFT)进行补充。6 月发布的 ChatGLM2-6B 使用了更多、更好的数据进行预训练和对齐,相比前代模型有了显著提升,包括在 MMLU 上提升了 23%,在 GSM8K 上提升了 571%,在 BBH 上提升了 60%。通过采用 FlashAttention 技术 [8],其上下文长度扩展到了 32K。此外,多查询注意力机制(Multi-Query Attention)的集成使推理速度提高了 42%。更进一步,我们的第二代代码模型 CodeGeeX2-6B 通过在额外的 6000 亿代码 token 上进行预训练而开发。它在 HumanEval-X 测试中相比初代模型 CodeGeeX-13B [58] 实现了显著提升,Python 提升了 57%,C++ 提升了 71%,Java 提升了 54%,JavaScript 提升了 83%,Go 提升了 56%。通过进一步实现更多样化的训练数据集、更充分的训练步骤和更优化的训练策略,ChatGLM3-6B 在语义、数学、推理、代码和知识等 42 个基准测试中名列前茅。从这一代开始,ChatGLM 还支持函数调用和代码解释器,以及复杂的智能体任务 。在这些开发过程中,我们还开发了具有 1.5B、3B、12B、32B、66B 和 130B 参数的模型,使我们能够验证观察结果并建立自己的扩展规律。
基于所有积累的经验和教训,我们启动了 GLM-4 的训练。第一个截止检查点随后经历了多阶段的后训练过程(例如 SFT、RLHF 安全对齐),目前主要针对中文和英文。随后,它被开发为两个不同的版本:GLM-4 和 GLM-4 全工具,两者均支持 128K 的上下文长度。自 2024 年 1 月 16 日起,GLM-4 (0116) 已通过 GLM-4 API 在 https://bigmodel.cn 上提供,而 GLM-4 全工具可通过网站 https://chatglm.cn 和支持创建自定义智能体 GLM 的移动应用程序访问。最新的模型是 GLM-4 (0520) 和 GLM-4-Air (0605),它们在预训练和对齐方面均进行了升级。GLM-4-Air 在延迟和推理成本更低的情况下,实现了与 GLM-4 (0116) 相当的性能。GLM-4 的评估在多种语言基准测试中进行。这些评估涵盖了 GLM-4 在英语中的通用能力、中英文指令遵循能力,以及中文的对齐、长上下文和智能体能力。
首先,在最常用的英语学术基准测试 MMLU、GSM8K、MATH、BBH、GPQA 和 HumanEval 上,GLM-4 (0520) 的表现与 GPT-4 (0613) 和 Gemini 1.5 Pro [40] 非常接近。例如,在 MMLU 上,它的得分为 83.3,而 GPT-4 和 Gemini 1.5 Pro 分别为 86.4 和 83.7,
其次,根据 IFEval的评估,GLM-4 在提示和指令层面的指令遵循能力在英文和中文中均与 GPT-4-Turbo 相当。第三,在中文语言对齐方面,GLM-4 在 AlignBench 的八个维度上优于 GPT-4,并与 GPT-4-Turbo 持平。最后,在长上下文任务中,GLM-4 (128K) 模型在 LongBench-Chat 测试中的表现与 GPT-4 Turbo 和 Claude 3 Opus 相当,分别为 87.3、87.2 和 87.7。
GLM-4 全工具模型经过专门对齐,能够更好地理解用户意图并自主选择最合适的工具来完成任务。例如,它可以通过网络浏览器以多轮方式访问在线信息,使用 Python 解释器解决数学问题,利用文本到图像模型生成图像,并调用用户自定义函数。图 2 展示了一个示例,GLM-4 全工具模型结合网络浏览器和 Python 解释器,用于解决用户查询“搜索 2000 年至 2023 年全球人口,然后计算年均增长率”。我们的实际测试表明,它在常见任务中不仅与 GPT-4 全工具模型相当,甚至常常超越其能力。
继我们开源的三代 ChatGLM-6B 模型之后,我们还开源了 GLM-4-9B(128K 和 1M 上下文长度)模型。GLM-4-9B 在大约 10 万亿个多语言语料库的 token 上进行了预训练,上下文长度为 8192(8K),并使用与 GLM-4 (0520) 相同的训练流程和数据进行了后训练。在较少的训练计算量下,它的表现优于 Llama-3-8B,并支持 GLM-4 中全工具模型的所有功能。我们还提供了一个实验模型 GLM-4-9B-Chat-1M,其上下文长度达到 100 万(1M)(约 200 万中文字符)。表 1 展示了两代 ChatGLM-6B 模型和 GLM-4-9B 的表现,展示了 ChatGLM 随时间的逐步改进。
图 3 总结了从 GLM-130B 到 GLM-4 全工具模型的主要改进和特性。在这一过程中,我们还为代码大语言模型(CodeGeeX)以及用于图像理解的视觉语言模型(CogVLM和 CogAgent )和文本到图像生成模型(CogView)的开源开发做出了贡献。开源模型和数据可通过 https://github.com/THUDM 和 https://huggingface.co/THUDM 访问。
2 ChatGLM 技术
在本节中,我们介绍了在 ChatGLM 中采用和开发的预训练和后训练技术,包括模型架构、预训练数据、对齐以及全工具功能。我们已发布详细的技术报告,介绍了我们为实现 GLM-4 所使用的主要技术。
预训练数据
我们的预训练语料库由来自不同来源的多语言(主要是英文和中文)文档组成,包括网页、维基百科、书籍、代码和论文。数据处理流程主要包括三个阶段:去重、过滤和分词。去重阶段通过删除重复或相似的文档来提高数据多样性,包括精确去重和模糊去重。过滤阶段通过删除包含攻击性语言、占位符文本、源代码等的噪声文档来提高数据质量。分词阶段将文本转换为 token 序列以便进一步处理。预训练数据中的 token 数量直接影响模型训练速度。为了优化这一点,我们采用字节级字节对编码(BPE)算法 [33] 分别学习中文和多语言 token,并将其与 tiktoken [26] 中的 cl100k_base 分词器合并为一个统一的词汇表,词汇表大小为 150,000。在最终训练集中,我们对不同来源的数据进行重新加权,以增加高质量和教育性来源(如书籍和维基百科)的比例。最终,预训练语料库包含约 10 万亿个 token。
在 ChatGLM 的四代开发过程中,我们的发现与现有研究 [60] 一致:数据质量和多样性对于构建有效的大型语言模型至关重要。尽管我们积累了许多经验教训和见解,但迄今为止,我们尚未找到一个能够指导数据收集、清理和选择过程的基本原则。
架构
GLM 系列大型语言模型基于 Transformer [43] 构建。在 GLM-130B [54] 中,我们探索了多种选项以稳定其预训练,同时考虑到当时面临的硬件限制。具体来说,GLM-130B 采用 DeepNorm [44] 作为层归一化策略,并使用旋转位置编码(RoPE)[38] 以及带有 GeLU [15] 激活函数的门控线性单元 [35] 作为 FFN 的组成部分。在我们的探索过程中,我们研究了不同的策略以提高模型性能和推理效率。最新的 GLM-4 模型采用了以下架构设计选择:
- 除 QKV 外无偏置:为了提高训练速度,我们移除了所有偏置项,仅保留注意力层中 Query、Key 和 Value(QKV)的偏置。在此过程中,我们观察到长度外推能力略有提升。
- RMSNorm 和 SwiGLU:我们采用 RMSNorm 和 SwiGLU 分别替代 LayerNorm 和 ReLU。这两种策略被观察到能够提升模型性能。
- 旋转位置编码(RoPE):我们将 RoPE 扩展为二维形式,以适应 GLM 中的二维位置编码。
- 分组查询注意力(GQA):我们用分组查询注意力(GQA)替代多头注意力(MHA),以减少推理过程中的 KV 缓存大小。由于 GQA 使用的参数比 MHA 少,我们增加了 FFN 的参数数量以保持相同的模型规模,即将 d_{\mathrm{ffn}} 设置为隐藏层大小的 10/3。
我们的模型的上下文长度从 2K(ChatGLM)扩展到 32K(ChatGLM2 和 ChatGLM3),再到 128K 和 1M(GLM-4)。这一扩展不仅通过上下文扩展——位置编码扩展 [30; 5] 和长文本的持续训练 [47]——实现,还通过长上下文对齐使 GLM-4 能够有效处理长上下文(技术细节参见 [1])。
对齐
预训练为大型语言模型奠定了基础,而后训练 [28] 则进一步优化这些模型以符合人类偏好,例如理解人类意图、遵循指令和促进多轮对话。对于 GLM-4,对齐主要通过监督微调(SFT)和人类反馈强化学习(RLHF)[17] 实现。在 SFT 中,我们发现真实的人类提示和交互(而非基于模板或模型生成的响应)对对齐质量至关重要。虽然 SFT 在很大程度上使基础模型与人类偏好对齐,但 RLHF 可以进一步帮助缓解响应拒绝、安全性、双语 token 混合生成以及多轮对话连贯性等问题。
对于第一代模型(ChatGLM-6B 和 ChatGLM-130B),提示-响应对主要由模型开发者标注。对于后续模型,对齐数据是内部标注数据和从第三方获取的专有数据的结合,并经过相对严格的质量控制措施。与现有实践 [42] 类似,标注者被指示从多个维度对模型响应进行评分,包括安全性、事实性、相关性、帮助性和人类偏好。
ChatGLM 技术
在 ChatGLM 的开发过程中,我们引入并将发布用于提升其性能的技术:
- 大型语言模型的涌现能力 [12]:我们研究了预训练损失与下游任务性能之间的关系,发现相同的预训练损失下,不同模型规模和训练 token 数量的大型语言模型生成相同的下游性能。我们还发现,在某些任务(如 MMLU 和 GSM8K)中,只有当预训练损失低于某个阈值时,性能才会超过随机水平。因此,我们将涌现能力重新定义为预训练损失较低的模型所表现出的能力 [12]。
- LongAlign [1]:为了扩展大型语言模型的上下文窗口大小,我们提出了 LongAlign,一种用于长上下文对齐的综合方案。它使 GLM-4 能够处理长上下文文本(最多 128K token),性能与 Claude 2 和 GPT-4 Turbo (1106) 相当。
- ChatGLM-Math [48]:为了提高大型语言模型解决数学问题的能力,我们引入了 ChatGLM-Math,它利用自我批评而非外部模型或人工标注进行数据选择。
- ChatGLM-RLHF [17]:为了将大型语言模型与人类反馈对齐,我们引入了 ChatGLM-RLHF,将 PPO 和 DPO 应用于大型语言模型的实践。
- Self-Contrast [22]:为了避免昂贵的人类偏好反馈数据需求,我们开发了一种无反馈的对齐策略 Self-Contrast。它利用目标大型语言模型自身生成大量负样本用于其 RLHF 对齐。
- AgentTuning [53]:为了提高大型语言模型的智能体能力,我们开发了 AgentTuning 框架,其中包含 AgentInstruct 指令调优数据集,该数据集包括智能体与环境之间的高质量交互轨迹。
- APAR [20]:为了提高大型语言模型对具有层次结构响应的推理速度,我们提出了一种自动并行自回归(APAR)生成方法。它利用指令调优训练大型语言模型规划其(并行)生成过程并执行 APAR 生成。
- 基准测试:我们还开发了多个开源大型语言模型基准测试,包括用于评估大型语言模型作为智能体的 AgentBench [23]、用于评估大型语言模型长上下文处理性能的 LongBench [2]、用于衡量 ChatGLM 与中文内容对齐质量的 AlignBench [1]、用于评估除 Python 外其他编程语言的 HumanEval [4] 问题的 HumanEval-X [58],以及用于衡量模型解决实际编程任务能力的 NaturalCodeBench (NCB)。
GLM-4 全工具
最新的 ChatGLM 模型是 GLM-4 和 GLM-4 全工具,两者均使用上述技术进行训练和对齐。GLM-4 全工具是一个进一步对齐以支持智能体及相关任务的模型版本。它能够自主理解用户意图,规划复杂指令,并调用一个或多个工具(例如网络浏览器、Python 解释器和文本到图像模型)以完成复杂任务。图 4 展示了 GLM-4 全工具系统的整体流程。
当用户发出复杂请求时,模型会分析任务并逐步规划解决过程。如果确定无法独立完成任务,它将依次调用一个或多个外部工具,利用其中间反馈和结果来帮助解决任务。
基于 GLM-4 的全工具能力,我们还开发了 GLMs 应用平台,允许用户创建和定制自己的智能体以完成特定任务。GLMs 不仅支持嵌入式 Python 解释器、网络浏览器、文本到图像模型,还支持用户定义的函数、API 和外部知识库,以更有效地满足用户需求。
3 GLM-4 能力
我们从多个角度评估 GLM-4 模型的能力,包括学术基准测试的基础能力、代码问题解决能力、英文环境中的智能体能力,以及中英文的指令遵循、长上下文处理能力,还有中文对齐能力。如前所述,GLM-4 主要在中文和英文上进行预训练,并主要针对中文进行对齐。在本节中,我们主要报告最新 GLM-4 版本(即 GLM-4 (0520) 和 GLM-4-Air (0605))的结果,因为 GLM-4 (0520) 在评估的基准测试中略优于其原始版本 (0116)。在评估过程中,GLM-4 和 GLM-4-Air 均以 BFloat16 精度部署。作为基线,我们展示了 GPT-4 (0603)、GPT-4 Turbo (1106, 2024-04-09)、Claude 2、Claude 3 Opus 和 Gemini 1.5 Pro 的结果,这些结果均从相应的技术报告中提取或通过其公共 API 测试获得。
总体而言,GLM-4 在标准基准测试、指令遵循、长上下文处理、代码问题解决以及英文环境中的智能体能力方面接近最先进的模型(如 GPT-4-Turbo、Gemini 1.5 Pro 和 Claude 3 Opus)。在中文对齐方面,GLM-4 在基础语言能力、高级中文理解、专业知识和开放式问题等多个领域表现出色,优于或与最先进的模型相当。总的来说,GLM-4 在中文任务中表现优异。尽管在中文数学和逻辑推理能力上略逊于 GPT-4 Turbo,但与 GPT-4 和 Claude 3 Opus 相当。
3.1 学术基准测试评估
为了评估基础模型的通用性能,我们选择了六个常用的基准测试,涵盖知识、数学、推理、常识和编程等领域:
- MMLU [14]:从各种考试中收集的多项选择题,包括数学、历史、计算机科学等。我们将所有答案呈现给模型,并要求其选择正确答案的字母。
- GSM8K [7]:8,500 个小学数学应用题(测试集包含 1,000 个),要求模型使用数学概念解决现实生活中的情境问题。我们使用链式思维提示(chain-of-thought prompting)[46] 进行测试。
- MATH:12,500 个具有挑战性的竞赛级数学问题(测试集包含 5,000 个)。我们使用链式思维提示 [46] 进行测试。
- BBH [39]:包含 23 个具有挑战性的 BIG-Bench [37] 任务。我们使用链式思维提示 [46] 进行测试。
- GPQA [31]:一个研究生级别的生物学、化学和物理多项选择题基准测试。
- HumanEval [4]:一个编程基准测试,通过自动测试用例检查来衡量合成函数的正确性。
我们将 GLM-4 的性能与原始 GPT-4 [27] 进行比较。结果如表 2 所示。我们可以观察到,GLM-4 在 MMLU 上的准确率达到 GPT-4 的 96.3%,并在其他基准测试中优于 GPT-4。总体而言,GLM-4 的基础能力接近 GPT-4-Turbo 和 Claude 3 Opus。
3.2 指令遵循能力评估
我们使用最近推出的 IFEval 数据集 [61] 评估 GLM-4 在遵循指令方面的能力。该数据集包含 541 个提示,这些提示源自 25 个不同的指令,这些指令可以通过明确的标准进行验证(例如,“在邮件结尾加上:PS. 我确实喜欢蛋糕”可以通过字符串匹配验证)。我们遵循 [61] 中概述的方法,计算严格模式和宽松模式下的提示级和指令级准确率。为了进一步评估模型在中文指令遵循方面的表现,我们将原始提示翻译成中文,省略了不适用于中文的指令(例如大小写规则),并调整评分脚本以适应中文数据。
表 3 中的英文和中文部分分别展示了模型在英文和中文上的表现。在宽松模式下,GLM-4 在英文和中文上的指令级准确率与 GPT-4 Turbo 相当。在严格模式下,GLM-4 在英文和中文上的指令级准确率分别达到 GPT-4 Turbo(2024-04-09)的 99.0% 和 98.6%。
3.3 对齐能力评估
AlignBench [21] 提供了一种自动化的“LLMs-as-Judge”方法,用于评估大型语言模型在中文语境下的对齐能力。它包含 683 个查询,涵盖 8 个不同类别,并使用基于 GPT-4 的多维规则校准的逐点参考评分方法对模型响应进行评判。我们在 AlignBench-v1.1 上进行评估,该版本进一步优化了参考生成质量,特别是通过为需要知识的查询(占总查询的 66.5%)补充从网页中收集的带 URL 的人类证据。在此版本中,几乎所有大型语言模型的得分都比之前的 AlignBench 版本有所下降。
结果如表 4 所示。GLM-4 在总体上优于 GPT-4 Turbo、Claude 3 Opus 和 Gemini 1.5 Pro,在基线模型中取得了最高的综合得分。特别是在中文逻辑推理和语言理解维度上,GLM-4 显著优于其他所有强大模型。这些结果展示了其对中文语言和知识的深刻掌握。
目前,GLM-4 与 GPT-4 Turbo(2024-04-09)之间的性能差距主要体现在数学维度上。我们一直在采用 ChatGLM-Math [48] 中引入的技术(如自我批评)来持续提升 GLM 模型的推理能力。
3.4 长上下文处理能力评估
为了评估 GLM-4 在长文本任务中的表现,我们在 LongBench-Chat [1] 上进行了测试。该基准测试集的上下文长度范围为 10-100k,涵盖了用户常用的多种长文本场景,例如文档问答、摘要生成和代码处理。为了更详细地比较 GLM-4 在不同语言中的表现,我们还根据语言将 LongBench-Chat 分为两部分:中文和英文。我们分别提供了这两部分的结果,以更细致地展示 GLM-4 的跨语言能力。
在具体的评估设置中,我们基于 GPT-4 对每个模型的输出进行评分,并在 LongBench-Chat 中采用少样本策略。此外,为了尽量减少评分波动并得出更可靠的统计结论,我们进行了多次重复评估。随后,我们计算这些多次评估的平均值,以确保最终的性能指标能够全面反映 GLM-4 在不同条件下的表现。
3.5 基于真实用户提示的编程评估
尽管 HumanEval [4] 已被广泛用于评估代码生成能力,但其大多数问题都属于基础算法范畴。然而,在实际应用中,真实用户出于生产目的提出的问题通常比 HumanEval 的范围复杂得多。此外,已有研究指出,某些大型语言模型在其训练数据中可能存在 HumanEval 污染 [27; 18; 50],这使得 HumanEval 的结果相对以往的可信度有所下降。
因此,除了 HumanEval 之外,我们还在 NaturalCodeBench (NCB) [56] 上评估了 GLM-4。NCB 是一个具有挑战性的双语编程基准测试,其问题源自真实用户提示,旨在反映现实世界编程任务的复杂性。结果如表 6 所示。结果表明,在实际场景中,GLM-4 的编程性能接近 Claude 3 Opus。尽管与 GPT-4 系列模型仍有一定差距,但考虑到 GLM-4 的双语平衡特性,通过改进训练策略和数据筛选,在后续迭代中提升其在 NCB 上的表现仍有很大潜力。
3.6 函数调用能力评估
为了评估 GLM 模型在函数调用方面的性能,我们在 Berkeley Function Call Leaderboard [49] 上进行了测试。该基准测试包含 2,000 个问题-函数-答案对,评估模型在以下三类函数调用中的能力:通过抽象语法树(AST)评估、通过执行 API 评估以及相关性检测。第一类通过 AST 分析将模型输出的函数与函数文档和可能的答案进行比较。第二类通过执行生成的函数调用来检查响应的正确性。相关性检测评估模型识别不适合回答用户问题的函数的能力。结果如表 7 所示。我们可以观察到,GLM-4 (0520) 的函数调用能力与 GPT-4 Turbo(2024-04-09)相当,而 GLM-4-9B-Chat 显著优于 Llama-3-8B-Instruct。另一个观察结果是,整体准确率并未随模型规模提升而提高,而 GLM-4-9B-Chat 甚至优于 GLM-4-Air。另一方面,我们注意到在执行摘要(评估真实 API 的执行结果)方面的性能随着模型规模的增加而稳步提升。
3.7 智能体能力评估
广泛观察到,大型语言模型(LLMs)能够在多种环境和场景中作为智能体运行 [29; 52],这被称为“LLMs-as-Agents” [23]。因此,我们在 AgentBench [23] 上对 GLM-4 及其他对比 LLMs 进行了评估。AgentBench 是一个全面的智能体基准测试,涵盖基于文本的 LLMs 在多种实际环境中的表现,包括基于代码、基于游戏和基于网页的场景。具体来说,我们评估了 AgentBench 中 8 个环境中的 7 个,排除了交互时间较长的数字卡牌游戏环境。总体得分使用 AgentBench [23] 中提供的原始数据集权重计算。
结果如表 8 所示。从表中可以看出,GLM-4 模型在智能体任务中表现非常出色,GLM-4-Air 的表现与 GPT-4 Turbo 和 Claude 3 Opus 相当,而 GLM-4 的得分则超过了它们。在具体环境中,我们发现 GLM-4 系列在数据库、家务管理和网络购物任务中表现尤为突出,但在操作系统、知识图谱和横向思维谜题方面仍与 GPT-4 系列存在一定差距。这一差距表明,GLM-4 在代码相关智能体任务和高度交互的语言任务中仍有改进空间。
3.8 全工具能力评估
GLM-4 进一步对齐以支持智能体和用户在 https://chatglm.cn 上自定义 GLMs 功能,其结果是 GLM-4 全工具模型。如前所述,GLM-4 全工具能够通过自主理解用户意图、规划分步指令并调用多种工具(包括网络浏览器、Python 解释器和文本到图像模型,例如 CogView3 [59])来完成复杂任务。表 9 显示,GLM-4 全工具(Web)在使用 Python 解释器解决数学问题和使用浏览器进行信息检索方面,分别与 ChatGPT-4(Web)表现相当。
4 安全性与风险
我们致力于确保 GLM-4 作为一个安全、负责任且无偏见的模型运行。除了解决常见的伦理和公平问题外,我们还仔细评估并减轻模型在现实场景中可能对用户造成的潜在危害。
风险缓解
在预训练阶段,我们通过删除包含敏感关键词的文本和预定义黑名单中的网页来仔细清理数据。在对齐阶段,我们评估每个训练样本的安全性,并删除任何可能带来潜在风险的样本。无害性也是在对齐多个模型输出时的重要标准。
我们有一个红队,不断用可能引发不安全答案的棘手问题挑战模型。我们从 GLM-4 中收集所有有害的问题-答案对,并通过人工标注进行改进,以进一步对齐模型。
安全性评估
我们在 SafetyBench [57] 数据集上评估 GLM-4 模型,该数据集从 7 个维度评估每个模型的能力:伦理与道德(不道德行为)、非法活动(法律基础知识)、心理健康(对心理健康的不利影响)、冒犯性(冒犯行为)、身体健康(可能导致身体伤害的危险行为)、隐私与财产(隐私泄露或财产损失)、不公平与偏见。我们在 SafetyBench 的中文子集上评估不同模型,该子集通过删除可能被屏蔽的高度敏感问题来创建,以减少不同 API 安全策略的干扰。
表 10 显示了 GLM-4 和最先进模型的安全性结果。在大多数维度上,GLM-4 (0520) 表现出具有竞争力的安全性,总体表现与 Claude 3 Opus 相当。GLM-4 在 GPT-4 系列模型之后略有落后,尤其是在身体健康维度上,该维度需要关于物理世界的强大常识知识以避免潜在风险。我们已在这一方向上投入更多努力,以开发更强大且安全的 GLM 模型。
5 结论
在本报告中,我们介绍了从 GLM-130B 到 GLM-4(全工具)的 ChatGLM 系列大型语言模型。在过去的一年半中,我们从第一手经验中对大型语言模型的各个方面有了更深入的理解。随着每一代模型的发展,团队在模型预训练和对齐方面学习并应用了更有效、更高效的策略。最近的 ChatGLM 模型——GLM-4 (0116, 0520)、GLM-4-Air (0605) 和 GLM-4 全工具——通过自主使用外部工具和功能,在理解和执行复杂任务方面取得了显著进展。这些 GLM-4 模型在性能上与最先进的模型(如 GPT-4 Turbo、Claude 3 Opus 和 Gemini 1.5 Pro)相当,甚至在某些情况下优于它们,尤其是在处理与中文相关的任务时。此外,我们致力于通过开源模型权重和开发的技术,促进大型语言模型的可访问性和安全性。我们的开源模型(包括语言、代码和视觉模型)仅在 2023 年就在 Hugging Face 上吸引了超过 1000 万次下载。目前,我们正在利用迄今为止学到的所有知识开发更强大的模型。未来,我们将继续通过开源推动前沿大型语言技术的民主化,并推动模型能力向“教会机器像人类一样思考”的使命迈进。
相关文章:
ChatGLM:从GLM-130B到GLM-4全系列大语言模型
摘要 我们介绍了ChatGLM,这是一个不断进化的大语言模型系列,我们一直在持续开发中。本报告主要聚焦于GLM-4语言系列,包括GLM-4、GLM-4-Air和GLM-4-9B。它们代表了我们从ChatGLM前三代中汲取的所有见解和经验教训所训练出的最强大模型。迄今为…...
EF Core分页
Skip(3).Take(8) 最好显式指定排序规则需要知道满足条件的数据的总条数: 用IQueryable的复用 LongCount和Count页数:long pageCount (long)Math.Ceiling(count * 1.0 / pageSize); class Program {static async Task Main(string[] args){using (MyDbC…...
一种ESP8266+OLED时间天气显示
在当今这个信息爆炸的时代,人们对于获取实时信息的需求日益增长,尤其是在时间与天气这两个与日常生活息息相关的方面。而将 ESP8266 与 OLED 显示屏相结合制作的时钟兼天气显示设备,凭借其便携性、实时性以及低成本等优势,成为了众…...
LabVIEW光流跟踪算法
1. 光流跟踪算法的概述 光流(Optical Flow)是一种图像处理技术,用于估算图像中像素点的运动。通过比较连续帧图像,光流算法可以分析图像中的运动信息,广泛用于目标跟踪、运动检测和视频处理等场景。该示例使用了NI Vi…...
Nacos 配置与服务注册问题排查指南
Nacos 配置与服务注册问题排查指南 1. Nacos 配置文件优先级 在 Spring Boot 应用中,配置文件的优先级从高到低依次为: bootstrap.propertiesbootstrap.ymlapplication.propertiesapplication.yml 2. Nacos 配置中心配置示例 以下是一个典型的 Naco…...
浅谈云计算06 | 云管理系统架构
云管理系统架构 一、云管理系统架构(一)远程管理系统(二)资源管理系统(三)SLA 管理系统(四)计费管理系统 二、安全与可靠性保障(一)数据安全防线(…...
system securiry: supervisor password required
报错解释: 这个错误表明系统安全模块(如SELinux或AppArmor)需要超级用户(通常是root)的密码来确认一个操作。这通常发生在尝试进行某些需要高级权限的系统更改时。 解决方法: 如果你拥有root权限࿰…...
【Python基础知识】pdb-Python的调试器的常用命令和使用示例
使用pdb的情形 多数时候,可以使用PyCharm、VSCode等现代化IDE进行代码的调试 对于远程服务器中运行的服务,本地无法复现时,可以使用 Python自带的pdb进行调试 1 代码中断点埋桩 中断进入调试器的典型用法是 在需要调试的地方插入以下代码: …...
C++ STL之容器介绍(vector、list、set、map)
1 STL基本概念 C有两大思想,面向对象和泛型编程。泛型编程指编写代码时不必指定具体的数据类型,而是使用模板来代替实际类型,这样编写的函数或类可以在之后应用于各种数据类型。而STL就是C泛型编程的一个杰出例子。STL(Standard …...
【向量数据库 Milvus】Milvus 2.5版本CPU 安装单机版
以下是Milvus 2.5版本单机安装的步骤: 前提条件 系统可以使用centos或者ubuntu。系统已经安装docker和docker-compose。 下载并编辑docker-compose.yml 进入Milvus的GitHub项目主页查看最新版本的Milvus,下载对应版本的docker-compose.yml文件&#…...
[Do374]Ansible一键搭建sftp实现用户批量增删
[Do374]Ansible一键搭建sftp实现用户批量增删 1. 前言2. 思路3. sftp搭建及用户批量新增3.1 配置文件内容3.2 执行测试3.3 登录测试3.4 确认sftp服务器配置文件 4. 测试删除用户 1. 前言 最近准备搞一下RHCA LV V,外加2.9之后的ansible有较大变化于是练习下Do374的课程内容. 工…...
系统认识数据分析
什么是数据分析? 数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,将它们加以汇总和理解并消化,以求最大化地开发数据的功能,发挥数据的作用。数据分析是为了提取有用信息和形成结论而对数据加以详细研究和概括总结的…...
Cherno C++学习笔记 P52 处理多返回值
在这篇文章当中,我们解决一下如何用C的函数处理多返回值的问题。 在有些情况下,我们希望我们的函数可以返回多个返回值,比如返回两个string或者是一个int加上一个string。如果我们用的是python之类的语言的话,那这个事情其实是很…...
Android车机DIY开发之学习篇(一)编译UBOOT以正点原子为例
Android车机DIY开发之学习篇(一)编译UBOOT以正点原子为例 1.代码在u-boot文件夹下 2.在 U-Boot 源码目录下执行如下命令编译 U-Boot: ./make.sh rk3588生成两个文件 ### uboot.img 对应<SDK>/uboot/uboot.img ### rk3588_spl_loader_v1.13.113.bin 对应<…...
扩散模型、原型网络以及肿瘤微环境解析等名词出现在基金立项名单中,它们各自的应用现状如何?|文献速递·25-01-10
小罗碎碎念 昨晚看到了云南省2025年自然科学基金立项的名单,今天把医工交叉的项目挑出来和大家分享一下。 今天分享的文献,灵感来源于2025年的基金,我会先简单分析一下基金的情况,然后再和大家分享三篇与立项基金相关的文献。 总共…...
【Java设计模式-4】策略模式,消灭if/else迷宫的利器
各位Java编程小伙伴们!今天咱们要一起探索一个超级厉害的Java设计模式——策略模式,它就像是一把神奇的魔法剑,专门用来斩断那些让我们代码变得乱糟糟的if/else语句迷宫! 一、if/else的烦恼 在编程的奇妙世界里,我们…...
10分钟快速了解OceanGPT(沧渊)
10分钟快速了解OceanGPT(沧渊) 海洋科学任务的大语言模型——OceanGPT OceanGPT是如何训练的?为了训练 OceanGPT (沧渊) ,收集了一个跨越多个领域的海洋科学语料库。由于每个子领域和主题都有其独特的数据特征和模式,因此提出了一个特定于领域的指令生成框架,称为 DoDirec…...
学习及笔记
1、计算md5 md5sum 文件名 2、跨服务器复制 scp 文件 目标用户名目标Ip:目标路径 3、curl curl -X POST http://10.105.2.46/getUerls -H "Content-Type: application/json" -d {"id": 379, "userId": "lyc", "password":…...
TensorFlow Quantum快速编程(基本篇)
一、TensorFlow Quantum 概述 1.1 简介 TensorFlow Quantum(TFQ)是由 Google 开发的一款具有开创性意义的开源库,它宛如一座桥梁,巧妙地将量子计算与 TensorFlow 强大的机器学习功能紧密融合。在当今科技飞速发展的时代,传统机器学习虽已取得诸多瞩目成就,然而面对日益…...
Vue.js组件开发-实现图片裁剪
在Vue.js中开发一个图片裁剪组件,可以使用cropperjs库,它是一个功能强大的JavaScript库,专门用于图片裁剪。在Vue项目中,可以通过vue-cropperjs这个Vue包装器来更方便地使用cropperjs。 步骤: 1. 安装依赖 首先&…...
Jira用例自动去除summary重复用例
title: Jira用例自动去除summary重复用例 tags: - jira - python categories: - python一、背景与需求二、解决方案思路三、实施步骤本文永久更新地址: 在使用 Jira 进行项目管理时,测试用例的维护至关重要。随着项目推进,用例数量增多,可能…...
2024年开发语言热度排名
随着技术的不断发展和变化,编程语言的热度也在不断演变。2024年即将到来,我们有必要回顾和展望当前和未来的开发语言市场。本文将基于多个因素,包括行业需求、社区支持、流行度以及新兴趋势,对2024年的开发语言热度进行排名和分析…...
【ArcGIS初学】产生随机点计算混淆矩阵
混淆矩阵:用于比较分类结果和地表真实信息 总体精度(overall accuracy) :指对角线上所有样本的像元数(正确分类的像元数)除以所有像元数。 生产者精度(producers accuracy) :某类中正确分类的像元数除以参考数据中该类的像元数(列方向),又称…...
OpenScholar助高效检索和整合科学文献?
从事科研的人都离不开读文献。然而,如今每年发表的论文数量已达数百万篇(例如,某位大佬在硕博期间就发表了178篇~)。在如此海量的文献中,如何高效利用宝贵的时间获取所需信息,显得尤为重要。 近…...
代码随想录Day34 | 62.不同路径,63.不同路径II,343.整数拆分,96.不同的二叉搜索树
代码随想录Day34 | 62.不同路径,63.不同路径II,343.整数拆分,96.不同的二叉搜索树 62.不同路径 动态规划第二集: 比较标准简单的一道动态规划,状态转移方程容易想到 难点在于空间复杂度的优化,详见代码 class Solution {public int uniq…...
非PHP开源内容管理系统(CMS)一览
在现代网站开发中,内容管理系统(CMS)是不可或缺的工具。虽然许多广泛使用的CMS(如WordPress和Joomla)是基于PHP开发的,但其他编程语言同样诞生了许多优秀的开源CMS,适用于不同需求和技术栈的项目…...
【Rust】常见集合
目录 思维导图 一、Rust常用集合 1. Rust标准库中的集合概述 2. 常用集合类型 2.1 向量(Vector) 2.2 字符串(String) 2.3 哈希映射(Hash Map) 二、向量(Vec) 1. 向量的概述…...
55. 跳跃游戏
题目 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 C #include <…...
关于 ThinkPHP 与 PostgreSQL 结合使用的一些要点
ThinkPHP 是一款流行的 PHP 开发框架,而 PostgreSQL 是功能强大的开源关系型数据库。它们可以结合使用来开发各类应用,以下是关于 ThinkPHP 与 PostgreSQL 结合使用的一些要点: 配置数据库连接 编辑配置文件:在 ThinkPHP 项目中&…...
【 PID 算法 】PID 算法基础
一、简介 PID即:Proportional(比例)、Integral(积分)、Differential(微分)的缩写。也就是说,PID算法是结合这三种环节在一起的。粘一下百度百科中的东西吧。 顾名思义,…...
介绍下不同语言的异常处理机制
Golang 在Go语言中,有两种用于处于异常的机制,分别是error和panic; panic panic 是 Go 中处理异常情况的机制,用于表示程序遇到了无法恢复的错误,需要终止执行。 使用场景 程序出现严重的不符合预期的问题&#x…...
Sprint Boot教程之五十八:动态启动/停止 Kafka 监听器
Spring Boot – 动态启动/停止 Kafka 监听器 当 Spring Boot 应用程序启动时,Kafka Listener 的默认行为是开始监听某个主题。但是,有些情况下我们不想在应用程序启动后立即启动它。 要动态启动或停止 Kafka Listener,我们需要三种主要方法…...
Linux服务器网络丢包场景及解决办法
一、Linux网络丢包概述 在数字化浪潮席卷的当下,网络已然成为我们生活、工作与娱乐不可或缺的基础设施,如同空气般,无孔不入地渗透到各个角落。对于 Linux 系统的用户而言,网络丢包问题却宛如挥之不去的 “噩梦”,频繁…...
2025年01月13日Github流行趋势
1. 项目名称:Jobs_Applier_AI_Agent 项目地址url:https://github.com/feder-cr/Jobs_Applier_AI_Agent项目语言:Python历史star数:25929今日star数:401项目维护者:surapuramakhil, feder-cr, cjbbb, sarob…...
贪心算法详细讲解(沉淀中)
文章目录 1. 什么是贪心算法?(贪婪鼠目寸光)经典例题1.1.1 找零问题1.1.2最小路径和1.1.3 背包问题 2.贪心算法的特点2.1 证明例1 3.学习贪心的方向心得体会 1. 什么是贪心算法?(贪婪鼠目寸光) 贪心策略&a…...
C/C++ 数据结构与算法【排序】 常见7大排序详细解析【日常学习,考研必备】带图+详细代码
常见7种排序算法 冒泡排序(Bubble Sort)选择排序(Selection Sort)插入排序(Insertion Sort)希尔排序(Shell Sort)归并排序(Merge Sort)快速排序(…...
Oracle Dataguard(主库为双节点集群)配置详解(4):配置备库
Oracle Dataguard(主库为双节点集群)配置详解(4):配置备库 目录 Oracle Dataguard(主库为双节点集群)配置详解(4):配置备库一、为备库配置静态监听1、配置 li…...
【Unity3D日常开发】Unity3D中打开Window文件对话框打开文件(PC版)
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群:398291828小红书小破站 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 这篇文章继续讲如何使用Unity3D打开Window文…...
STM32-RTC实时时钟
1.0 RTC简介 RTC(Real Time Clock)实时时钟 RTC是一个独立的定时器,可为系统提供时钟和日历的功能 RTC和时钟配置系统处于后备区域,系统复位时数据不清零,VDD(2.0~3.6V)断电后可借助VBAT&#x…...
QT跨平台应用程序开发框架(1)—— 环境搭建
目录 一,关于QT 二,关于应用程序框架 三,环境搭建 3.1 预备 3.2 下载Qt SDK 3.3 安装Qt SDK 3.4 配置环境变量 3.5 认识一些重要工具 四,Qt Creator 的基本使用 4.1 创建项目 4.2 代码解释 一,关于QT 互联网…...
HTB:Paper[WriteUP]
目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 对靶机进行子域…...
【数据可视化-12】数据分析岗位招聘分析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
UE材质节点Fresnel
Fresnel节点 ExponentIn 控制边缘透明度 BaseReflectFractionIn 控制中心透明度...
宁德时代C++后端开发面试题及参考答案
请阐述面向对象的三大特性。 面向对象编程有三大特性,分别是封装、继承和多态。 封装是指将数据和操作数据的方法绑定在一起,对数据的访问和操作进行限制。这样做的好处是可以隐藏对象的内部细节,只暴露必要的接口给外部。例如,我们可以把一个汽车类的内部引擎状态、速度等…...
opencv warpAffine仿射变换C++源码分析
基于opencv 3.1.0源代码 sources\modules\imgproc\src\imgwarp.cpp void cv::warpAffine( InputArray _src, OutputArray _dst,InputArray _M0, Size dsize,int flags, int borderType, const Scalar& borderValue ) {...if( !(flags & WARP_INVERSE_MAP) ){//变换矩阵…...
六十九:基于openssl实战验证RSA
RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,广泛应用于数据加密和数字签名领域。在实际开发和学习过程中,理解 RSA 的工作原理和使用场景非常重要。本文将以 OpenSSL 工具为基础,通过实例操作来验证和理解 RSA 的…...
Docker的CMD指令
CMD指令是Dockerfile中的一个重要指令,用于指定容器启动时执行的默认命令。CMD为容器运行时提供了一个默认的执行指令,可以在容器启动时自动运行该命令。 * CMD指令用于指定容器启动时的默认命令 CMD指令指定的命令通常是容器启动后要执行的主要进程。…...
redis缓存篇知识点总结
1.缓存雪崩 当大量缓存数据在同一时间过期(失效)或者 Redis 故障宕机时,如果此时有大量的用户请求,都无法在 Redis 中处理,于是全部请求都直接访问数据库,从而导致数据库的压力骤增,严重的会造成数据库宕机,从而形成一系列连锁反应,造成整个系统崩溃 发生缓存雪崩有两…...
onlyoffice编辑服务部署
下载官方镜像 下载onlyoffice_7.4.1.tar.gz镜像包 安装官方镜像 上传镜像包后执行 docker load -i onlyoffice_7.4.1.tar.gz 将镜像部署到本地仓库 下载onlyoffice编辑服务包 下载onlyoffice.zip包 启动onlyoffice编辑服务 上传包至服务器,解压包,…...
RPC实现原理,怎么跟调用本地一样
回答1 要让⽹络通信细节对使⽤者透明,我们需要对通信细节进⾏封装,我们先看下⼀个 RPC 调⽤的流程涉及到哪些通 信细节: 1. 服务消费⽅( client )调⽤以本地调⽤⽅式调⽤服务; 2. client stub 接收到调…...