聊聊ChatGPT是如何组织对话的

【笔记】Ubuntu中Llama3中文微调,并加载微调后的模型:中文微调数据集介绍、如何使用Ollama 和 LM studio本地加载Fine Tuning后的模型,ollama的安装使用和卸载 【代码】【笔记】Llama3中文微调,并加载微调后的模型:中文Fine Tuning数据集介绍、如何使用Ollama 和 LM studio本地加载Fine Tuning后的模型。 阅读详情
AI摘要

文章介绍了ChatGPT如何通过ChatML组织对话数据,包括不同角色的文本拼接和specialtoken的使用,如<|im_start|>和<|im_end|>,用于标记对话边界。此外,提到了防止注入攻击的方法以及ChatML的版本演进,包括StarChat提供的另一种ChatML格式。

为什么要组织对话?

总所周知,ChatGPT的训练大致可分为下图中展示的几个阶段,其中,在Pretraining阶段,模型的训练数据是纯文本,目标是根据上文预测下一个token,而在后面的几个阶段中,为了让模型具备对话的能力,相应的就需要使用对话数据进行训练。而对话数据一般包含多个角色的文本,如何将这些文本有效地组织、拼接起来(openAI将其称之为Chat Markup Language,简称ChatML),是本文要聊的内容。

from Microsoft Build 2023 《State of GPT》

ChatGPT的ChatML

根据openAI的介绍[1],ChatML v0会将每个角色(system、user、assistant)的文本进行如下拼接:

<|im_start|>system
You are ChatGPT, a large language model trained by OpenAI. Answer as concisely as possible.
Knowledge cutoff: 2021-09-01
Current date: 2023-03-01<|im_end|>
<|im_start|>user
How are you<|im_end|>
<|im_start|>assistant
I am doing well!<|im_end|>
<|im_start|>user
How are you now?<|im_end|>

其中<|im_start|>、<|im_end|>是special token,进行tokenizer encode的时候他们会被编码成对应的单个token id,他们专门用来表示一个角色说话的start和end。

那么,如果对话文本中包含了<|im_end|>岂不是会造成模型的困扰?为了防止这种类型的注入攻击,似乎openAI会将对话文本中的<|im_start|>、<|im_end|>过滤掉。

可能是过滤了<|im_start|>,ChatGPT的回复中没有提到<|im_start|>

将<|im_start|>改成<im_start>,ChatGPT能够完整输出用户刚刚的问题

另外,值得注意的是system prompt中的小trick,其中包含了Current date的信息,在响应用户提问的时候进行动态的修改,使模型能够回复一些和当前日期相关的问题。

当这只是ChatML v0的格式,是3月份时候的版本了,最新版的gpt-3.5-turbo-0613中角色增加了function,目前ChatGPT的ChatML演进到了什么格式还是未知,一些眼尖的开发者也发现了当前的ChatML已经不是v0了[2]。

StarChat的ChatML

ChatML的格式不止openAI一种,StarChat提供了另一种思路[3]:

<|system|>
Below is a dialogue between a human and AI assistant called StarChat.
<|end|>
<|user|>
Is it possible to imagine a society without law?<|end|>
<|assistant|>
It is difficult to imagine ...<|end|>
<|user|>
It seems like you ...<|end|>
<|assistant|>
You are correct ...<|end|>
<|user|>
Yeah, but laws are complicated ...<|end|>

其中<|system|>、<|assistant|>、<|user|>、<|end|>是special token,[3]中很贴心地提供详细的代码,感兴趣的读者可以进一步了解。

将角色信息用special token表示,可以更好的避免注入攻击,但由于这些special token对应的embedding在预训练阶段是未经过训练的,在SFT过程中需要充分的训练才能有好的表现。

总结

ChatML是训练对话大模型的一个小细节,本文介绍的两种方式都是利用了special token来显式表示对话的边界,同时还能节约上下文的空间,相比于直接使用###user xxx ###assistant xxx是要更好的。

The devil is in the detail.

Reference

[1] openai-python/chatml.md

[2] ChatML update for th gpt-3.5-turbo-0613 and gpt-4

[3] 使用 StarCoder 创建一个编程助手

如何设置transformers的聊天模板chat_template? 如果您喜欢这个模板,下面是一行代码的模板形式,它可以直接复制到您的代码中。如果你对 Jinja 不熟悉,我们通常发现编写聊天模板的最简单方法是先编写一个简短的 Python 脚本,按照你想要的方式格式化消息,然后将该脚本转换为模板。在为已经训练过的聊天模型设置模板时,您应确保模板与模型在训练期间看到的消息格式完全匹配,否则可能会导致性能下降。然而,请注意 Jinja 是一个通用的模板引擎,它可能会将同一行上块之间的空格视为重要,并将其打印到输出中。即使默认的聊天模板适用于您的模型, 阅读详情

相关推荐

聊聊火出圈的ChatGPT

chatGPT爆火出圈,你玩了么?你知道它是怎么拥有黑魔法的么?

jh1988abc的专栏 2万+

Qwen-audio-chat模型代码学习之模型代码

Qwen-audio-chat模型通过多模态信息融合技术,有效地结合了音频特征和文本提示信息,从而提升了模型的理解和生成能力。在这一过程中,模型首先提取音频信号的特征,并对文本信息进行向量化处理。接着,利用一个特定的替换机制,将音频特征嵌入到文本的向量表示中,确保两种信息在同一个语义空间内进行有效融合。这种融合策略不仅增强了模型对于多模态输入的处理能力,也使其能够在执行诸如自动生成字幕、多模态情感分析等任务时,更加准确和全面地理解上下文信息。

weixin_46103454的博客 2646

跟ChatGPT,聊聊ChatGPT

跟ChatGPT,聊聊ChatGPT

IT199508的博客 2万+

ChatML(Chat Markup Language)格式

flyfish

二分掌柜的 3076

聊聊ChatGPT真实体验

深入探索全球AI巨头们的发展历程,从技术演变到用户体验的全面升级

weixin_45611008的博客 1296

OpenAI - tiktoken ⏳ | fast BPE tokeniser

关于 ⏳ tiktoken 性能表现 安装 tiktoken 如何计算 token Encodings Tokenizer libraries 对不同编程语言的支持 How strings are typically tokenized 使用 编解码 比较 encodings 计算chat API调用的tokens 拓展 tiktoken

AI工程化、开源分享、文档翻译、代码笔记 9953

聊聊ChatGPT

然后就是强化学习的部分,还是提出问题,让SFT模型生成多个答案,不同是的是,之前是人类来排名,现在交给奖励模型打分,如果对一个答案分数比较高,则这个答案的所有token都会强化,就是概率会增加,而如果分数比较低,则所有的token出现的概率会降低。ChatGPT出来的时候,我就很好奇它是怎么做到的,又是怎么突然出现的,所以我搜集了一些资料,在这里跟大家交流一下,因为我也不是专业的,所以也没法讲得很深入,当然可能也有错误的地方,希望大家可以指出。再进一步,我们可以调整a/b/c的值,可以更加接近这些数据。

程序猿进阶 1456

7、提示在ChatGPT对话中的作用

本文详细探讨了在与ChatGPT进行对话时,提示设计的重要性及其对对话方向和响应质量的影响。文章通过具体示例介绍了如何通过明确性、相关性和连贯性的原则来优化提示,并提供了实际操作步骤和高级技巧,帮助用户提升与ChatGPT交互的效果和质量。

lake5的博客 261

ChatGPT提问技巧——对话提示

ChatGPT提问技巧——对话提示

Bruce_xiaowei的博客 868

【ChatGPT】聊聊 ChatGPT 如何为开发者所用

ChatGPT 是一款基于人工智能的工具,经过对来自异构源的 45TB 文本数据的训练。OpenAI 推出了这个受欢迎的聊天机器人或语言模型,它可以根据给定的输入生成类似于人类的文本。客户向开发人员提供了一长串的需求。例如,GitHub Copilot 利用 OpenAI Codex,在代码编辑器编写代码时提供建议代码和其他功能。代码格式化可以提高源代码的可读性,为将来读代码和修改代码提供好的基础。在编写代码时,ChatGPT 会提供代码重构的建议,在不影响现有源代码功能或外部行为的情况下调整代码结构。

AI天才研究院 2万+

FFmpeg 部署与使用(含Docker部署)

ffmpeg 部署以及使用

weixin_38584583的博客 909

ChatGPT不止是对话机器人

首先是效率方面,ChatGPT的人机对话与传统的搜索引擎截然不同,它并不是严格根据“关键词”来为用户进行问题解答,而是能够按照人类自然说话的习惯,对用户提供的的问题进行精准理解,并能给出让用户“满意”的答案。”之类的词句对ChatGPT进行提问,而不需要像使用传统搜索引擎那样,为了“迁就”系统的非人格化交互模式,而不得不把问题拆解成“我们公司的经营范围、市场口碑”,或者“某品牌手机的销量数据”之类的细分问题。可以预见的是,随着版本的迭代,ChatGPT的模型能力将更为强大。出品 | 何玺 排版 | 叶媛。

hexi008的博客 3601

DRAM内存模拟持久化设备的方法

由于持久化内存介质NVM技术的发展,越来越多的科研工作者投身到NVM相关的研究当中。但由于目前工业界并没有推出广泛使用的NVM介质设备,所以科研工作都需要自己以现有的条件,模拟NVM设备使用场景。一个简单的方法是:通过修改DRAM模拟器,达到模拟NVM的目的(可以参考:DRAMSim2模拟器分析与应用)。更高端的方式是:在真实系统中,将内存划分出一块儿,用来模拟NVM设备(类似于传统的ramdis

酷炫人笨笨熊 1898

理性聊聊ChatGPT

每天给你送来NLP技术干货!来自:CS的陋室最近的ChatGPT可谓是非常火,但是目前看的信息来看都更像是一些外宣类的文章,对于一些技术的讲解和解读,却是比较少的,这对于在做技术的我们来说其实挺尴尬,为了让大家更好地理解这个模型,给大家讲一些ChatGPT的技术细节以及我的理解和分析,而不是看热闹就完了。懒人目录:简单说说原理。有关里面的细节讨论。优点和缺点。他真就那么强吗?简单说说原理先叠甲,我...

zenRRan的博客 2569

FUXA实战:5步搞定基于Web的SCADA系统搭建(含Node.js版本避坑指南)

本文提供了一份基于开源工具FUXA搭建Web版SCADA系统的实战指南。文章重点解析了从环境准备到生产部署的五个核心步骤,并特别强调了Node.js版本选择对西门子S7 PLC通信兼容性的关键影响,帮助开发者避开常见陷阱,快速构建工业监控界面。

weixin_29172963的博客 138

【AutoSar CP】SoAd模块

比如对于特定的PDU,其PduId在程序编译时就确定了,但是在代码运行中,该PduId可能需要发送到不同的远端ip,这时就需要用SoAd来设置连接远端地址信息。SoAdSocketConnectionGroup(连接参数)SoAdSocketRoute(接收数据)SoAdRoutingGroup(开关)SoAdPduRoute(发送数据)

至道无难,唯嫌拣择。 1684

聊聊 ChatGPT

可以看到这个模型好像有点笨,有点像人工智障,但是绝对不要小看了这个模型,这个模型就可以理解为读了世界上所有的文本,掌握了所有语言的内在规律,但是还不知道人类的喜好,只知道续写文本,就像小说里面天赋异禀的主角,突然得到了深厚的内力,却不知道招式,不知道如何使用内力。如果只看后半句,其实都一样,决定下一次词的关键,是前面的上下文。有个缺点:计算是顺序进行的,如果我们要得到最后一个单词的处理结果,就必须要先计算前面9个单词的处理结果,这样就存在信息的衰减,很难处理相隔比较远的两个单词之间的信息。

程序猿进阶 1599

【数学模型】灰色关联分析

数学模型-灰色关联分析

suic009的博客 1万+

聊聊ChatGPT的本质

阶段性总结下我对ChatGPT的基础理解,算是一篇学习思考笔记吧。其中难免有很多不准确的,或过于简略的地方,将来再迭代学习

Eyemon的博客 1656

tar解压报错 gzip: stdin: unexpected end of file tar: Unexpected EOF in archive

错误现象: [root@centos7-xinsz08 ~]# tar xf prometheus-2.7.2.linux-amd64.tar.gz gzip: stdin: unexpected end of file tar: 归档文件中异常的 EOF tar: 归档文件中异常的 EOF tar: Error is not recoverable: exiting now 错误原因排查 ...

互联网老辛 2万+

24、水下传感器网络中混合LEACH协议与遗传算法获取路由节点

本文提出了一种结合遗传算法与LEACH协议的混合路由方案,用于提升水下无线传感器网络(UWSN)的能量利用效率和数据传输稳定性。通过遗传算法优化簇头选择与路径规划,有效避免节点过早死亡,减少能量消耗,在200个节点场景下显著提升网络寿命。相比传统LEACH协议,该方案具有更高的能量利用率、更强的环境适应性,并支持传输历史记录与并行传输序列。实验结果显示,该方案在总能量为2000焦耳时剩余能量达75.6%,远优于LEACH的34.8%能耗表现。适用于海洋监测、石油平台监控及水下灾害预警等复杂环境应用。

i8j9k0l1的博客 112

【松叶漫话】来聊聊ChatGPT 和文心一言吧

ChatGPT和文心一言各自在智能回复、语言准确性和知识库丰富度等方面都有着独特的优势。选择合适的AI助手取决于用户的具体需求。如果需要处理更为复杂的对话和跨领域问题,ChatGPT可能更适合;而如果注重中文语境下的简洁回答,文心一言也是一个不错的选择。在未来,期待两大AI助手在各自缺陷领域能有所完善,专长处则能有更大的突破,相应地带来国内人工智能大模型更长足的发展,更好地造福广大站友(*╹▽╹*)

Kirara的博客 996

MAX30102心率血氧传感器原理图设计,已量产(e-Health传感器)

在最近的便携健康监测设备项目中,我们采用了集成算法的 MAX30102 心率血氧模块 —— 这类带内置 MCU 算法的传感器能直接输出心率 / 血氧数值,大幅降低了主控资源占用。但硬件电路的稳定性直接决定了 PPG 信号的采集精度,下面结合实际项目里的原理图,拆解下这个模块的设计细节。

不脱发的程序猿 1276
上一篇: 【OJ比赛日历】快周末了,不来一场比赛吗? #07.01-07.07 #11场
下一篇: 【数据科学赛】2023大模型应用创新挑战赛 #¥10万 #百度
CompHub
博客等级 码龄4年 365粉丝 117原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值