当前位置: 首页 > news >正文

云南住房和城乡建设局网站网站开发 模块

云南住房和城乡建设局网站,网站开发 模块,重庆艺叮点网络科技有限公司,东莞最新消息今天一 指令微调数据集形式太多 大家有没有分析过 prompt对模型训练或者推理的影响#xff1f;之前推理的时候#xff0c;发现不加训练的时候prompt#xff0c;直接输入模型性能会变差的#xff0c;这个倒是可以理解。假如不加prompt直接训练#xff0c;是不是测试的时候不加… 一 指令微调数据集形式太多 大家有没有分析过 prompt对模型训练或者推理的影响之前推理的时候发现不加训练的时候prompt直接输入模型性能会变差的这个倒是可以理解。假如不加prompt直接训练是不是测试的时候不加prompt也可以还有一个就是多轮prompt和单轮prompt怎么构造的问题好多模型训练方式不统一 包括指令数据形式有所不同选择困难症又来了。。 先说一些观点假如我们在微调一个大模型单次实验微调所用的指令微调数据集应该选取“质量高、多样性”,在训练资源充足的情况可以加入数量更多长度更大的数据集。可以基于多个质量比较高的数据做一份格式统一的多样性数据用来做sft一次性微调完比较好多次微调效果可能会折扣。 或者有继续微调比较合适的方案也可以不损失之前模型的效果或者损失比较小目前可以尝试Lora或者Qlora的方式微调底座模型然后将训练好的Lora权重合并到原始模型这样可以减轻多次微调对模型的影响。 二 常见指令微调模板 目前常见微调数据集的格式包括以下几种指令跟随格式、多轮对话格式以及其他辅助格式。 1. 指令跟随格式 指令跟随形式是指用户输入指令模型按照指令的要求输出结果的格式。这种形式的数据集通常采用json文件格式存储典型的如Alpaca-52k数据集[1]。Alpaca-52k是一个开源的遵循指令的最初用来微调LLaMA模型以得到Alpaca-7B模型的数据集包含了52000条指令数据。这里的52k代表的是共有五万两千对指令与输出对。 Alpaca的格式有两类一类是instruction/output格式例如     #instruction什么是三原色     #output三原色是红、蓝、黄。这些颜色被称为原色因为它们不能通过混合其他颜色来创建而所有其他颜色都可以通过以不同比例组合它们来制作。在用于光的加法色彩系统中原色是红、绿、蓝RGB。 另一类为instruction/input/output格式例如 #instruction检查这个句子的拼写和语法错误 #input他吃完饭离开了餐厅。 #output这句话中有两个拼写错误。正确的句子应该是“他吃完饭离开了餐厅。 然而由于生成Alpaca数据集的self-instruct [2] 技术得到的数据集本身存在一些瑕疵因此数据集需要进一步清洗和改进例如alpaca-cleaned [3] 和alpaca-gpt4 [4]。此外还有中文翻译版本[5]。这些数据集通常包含几万个指令对文件大小约为40MB左右的json格式文件。 这里补充一句在相关研究中数据集长度通常采用token数或指令条数进行计算。由于token数与tokenizer相关而指令数会因文本长度的不同而有大的影响。为了直观起见在本文的数据集规模评估中选择文件存储大小作为评估指标。 2. 多轮对话格式 多轮对话形式是指用户和模型之间以对话的形式进行模型将通过与用户进行多轮的交互最终来达到用户的需求。典型的如训练Vicuna模型 [6] 所使用的ShareGPT数据集ShareGPT本身是一个与ChatGPTGPT-4模型的聊天记录分享平台它托管了大量由用户挑选的对话数据集这些聊天记录通常展示的是聊天机器人自然流畅、具有创意的回答。Vicuna模型通过收集该平台的数据数据大小为 673MB [7]其训练出来的模型具有较好的多轮对话能力具体格式如下 [6] 将所有数据集格式化为遵循聊天机器人风格的模式以统一指令数据集的各种风格和格式如下图所示。分别在用户指令和助手回复之前添加了特殊token |user|和|assistant|。并且在每个助手的回复末尾添加一个文本结束标记/s在推理时该标记用以停止模型每轮的响应。 3. 其他形式 除了上述提到的数据格式还有一些数据格式不易转化为对话形式例如纯文本文档。另外还有一些针对特定用途的数据集例如文本总结数据集以及根据纯文本生成对话的数据集如RefGPT [8] 文章提到的方案。根据文本的不同功能它们还包括调用API的格式 [9] 和调用数据库语言的格式 [10] 等。当然除非以纯文本的形式存在否则这些格式都可以转换为指令跟随或多轮对话的格式。需要注意的是这里所提到的微调数据集的格式并不包括基于强化学习训练的所使用的RLHF数据集。 4. 一些常见的模板 stanford_alpaca中模板 PROMPT_DICT {prompt_input: (Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.\n\n### Instruction:\n{instruction}\n\n### Input:\n{input}\n\n### Response:),prompt_no_input: (Below is an instruction that describes a task. Write a response that appropriately completes the request.\n\n### Instruction:\n{instruction}\n\n### Response:), }if example.get(input, ) :prompt PROMPT_DICT[prompt_no_input].format_map(example) else:prompt PROMPT_DICT[prompt_input].format_map(example) example2 prompt example[output]Llama2中的模板 instruction [INST] SYS\nYou are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature.If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you dont know the answer to a question, please dont share false information.\n/SYS\n\n{} [/INST] text_1 f.join([[INST] SYS\n    You are a helpful, respectful and honest assistant. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature.\n\n    If a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you dont know the answer to a question, please dont share false information.\n/SYS\n\n{0} [/INST] ]).format(data_point.get(instruction, ).strip() \t data_point.get(input, ).strip())缩短后为 text_1 f[INST] SYS\n    You are a helpful, respectful and honest assistant./SYS \f\n\n{0} [/INST] .format(data_point.get(instruction, ).strip() \t data_point.get(input, ).strip())[f[INST] SYS\n{system_message.strip()}\n/SYS\n\n prompt [/INST] response for prompt, response in zip(examples[prompt], examples[response])] Linly-AI中模板 ### Instruction:{prompt.strip()} ### Response: OpenLLM 排行榜top1的NousResearch 和alpaca模板差不多 ### Instruction: prompt### Response: leave a newline blank for model to respond ### Instruction: prompt### Input: additional context### Response: leave a newline blank for model to respond Yayi模板 https://huggingface.co/wenge-research/yayi-7b-llama2 prompt 你是谁 formatted_prompt f|System|: You are a helpful, respectful and honest assistant named YaYi developed by Beijing Wenge Technology Co.,Ltd. Always answer as helpfully as possible, while being safe. Your answers should not include any harmful, unethical, racist, sexist, toxic, dangerous, or illegal content. Please ensure that your responses are socially unbiased and positive in nature.\n\nIf a question does not make any sense, or is not factually coherent, explain why instead of answering something not correct. If you dont know the answer to a question, please dont share false information.|Human|: {prompt}|YaYi|:StableBeluga2的模板 ### System: This is a system prompt, please behave and help the user.### User: Your prompt here### Assistant: The output of Stable Beluga 2 比如 system_prompt ### System:\nYou are Stable Beluga, an AI that follows instructions extremely well. Help as much as you can. Remember, be safe, and dont do anything illegal.\n\nmessage Write me a poem please prompt f{system_prompt}### User: {message}\n\n### Assistant:\n Guanaco数据集常用模板 ### Human: {prompt} ### Assistant: prompt Introduce yourself formatted_prompt (fA chat between a curious human and an artificial intelligence assistant.fThe assistant gives helpful, detailed, and polite answers to the users questions.\nf### Human: {prompt} ### Assistant: ) 三 多轮对话输入和输出构造 参考yangjianxin1/Firefly项目和LinkSoul-AI/Chinese-Llama-2-7b项目一般采用的方式是 在计算loss时我们通过mask的方式input部分的loss不参与参数更新只有“target”部分的loss参与参数更新。 这种方式充分利用了模型并行计算的优势训练更加高效且多轮对话中的每个target部分都参与了训练训练更充分。 否则就需要把一个n轮对话拆分成n条数据且只计算最后一个target的loss大大降低了训练效率。 具体实现方式1 # https://github.com/LinkSoul-AI/Chinese-Llama-2-7b/blob/main/train.py def tokenize(item, tokenizer):roles {human: user, gpt: assistant}input_ids []labels []if instruction in item and len(item[instruction]) 0:system item[instruction]else:system dummy_message[system]system B_SYS system E_SYS# add system before the first content in conversationsitem[conversations][0][value] system item[conversations][0][value]for i, turn in enumerate(item[conversations]):role turn[from]content turn[value]content content.strip()if role human:content f{B_INST} {content} {E_INST} content_ids tokenizer.encode(content)labels [IGNORE_TOKEN_ID] * (len(content_ids))else:# assert role gptcontent f{content} content_ids tokenizer.encode(content, add_special_tokensFalse) [tokenizer.eos_token_id] # add_special_tokensFalse remove bos token, and add eos at the endlabels content_idsinput_ids content_idsinput_ids input_ids[:tokenizer.model_max_length]labels labels[:tokenizer.model_max_length]trunc_id last_index(labels, IGNORE_TOKEN_ID) 1input_ids input_ids[:trunc_id]labels labels[:trunc_id]if len(labels) 0:return tokenize(dummy_message, tokenizer)input_ids safe_ids(input_ids, tokenizer.vocab_size, tokenizer.pad_token_id)labels safe_ids(labels, tokenizer.vocab_size, IGNORE_TOKEN_ID)return input_ids, labels具体实现方式1 # https://github.com/yangjianxin1/Firefly/blob/master/component/dataset.py class SFTDataset(Dataset):def __init__(self, file, tokenizer, max_seq_length):self.tokenizer tokenizerself.bos_token_id tokenizer.bos_token_idself.eos_token_id tokenizer.eos_token_idself.eos_token tokenizer.eos_tokenself.bos_token tokenizer.bos_tokenself.max_seq_length max_seq_lengthlogger.info(Loading data: {}.format(file))with open(file, r, encodingutf8) as f:data_list f.readlines()logger.info(there are {} data in dataset.format(len(data_list)))self.data_list data_listdef __len__(self):return len(self.data_list)def __getitem__(self, index):# 每条数据格式为: sinput1/starget1/sinput2/starget2/s...data self.data_list[index]data json.loads(data)conversation data[conversation]# 收集多轮对话utterances []for x in conversation:utterances.append(x[human])utterances.append(x[assistant])utterances_ids self.tokenizer(utterances, add_special_tokensFalse).input_ids# 模型的输入格式为sinput1/starget1/sinput2/starget2/s...input_ids [self.bos_token_id]target_mask [0] # 用于对input进行mask只计算target部分的lossfor i, utterances_id in enumerate(utterances_ids):input_ids (utterances_id [self.eos_token_id])if i % 2 0:target_mask [0] * (len(utterances_id) 1)else:target_mask [1] * (len(utterances_id) 1)assert len(input_ids) len(target_mask)# 对长度进行截断input_ids input_ids[:self.max_seq_length]target_mask target_mask[:self.max_seq_length]attention_mask [1] * len(input_ids)assert len(input_ids) len(target_mask) len(attention_mask)inputs {input_ids: input_ids,attention_mask: attention_mask,target_mask: target_mask}return inputs核心代码就是通过IGNORE_INDEX(-100)遮蔽掉input对应的目标输出即可。 四  微调数据的基本处理 微调数据集需要经过一系列的处理步骤包括数据收集、数据清洗和数据增强等。数据收集是文本处理的基础可通过公共数据集、自定义数据集和行业数据集等多种方式获得。在获得数据集后需要进行数据清洗去除噪声、重复和低质量的数据将其统一转化为可训练的格式。另外为了提高数据集的质量和丰富性可以采用数据增强技术如翻译、摘要、同义词替换、随机插入等操作当然由于大模型本身已经有了很强的文本处理能力这些数据增强技术都可以使用大模型来辅助完成。 通常微调数据集的规模比预训练数据集小得多。典型的相比于几个TB的预训练文本数据预训练的存储大小通常在几MB到1GB左右。在收集和整理数据后可以将自定义数据集与其他开源数据集混合训练。此外微调数据集通常还包含一个用于自身认知的数据集典型的如训练Vicuna模型时提到的Dummy数据集 [6]。自定义数据集与其他开源数据集混合训练有助于提高模型效果和泛化性 五 如何高效率微调大模型 如何短时间、高效率的训练出实际效果不错、综合能力比较强的大模型呢从指令微调数据集处理工作上个人认为可以从以下方式进行 1 事先准备多种高质量的指令微调数据集每个数据集尽量保持差异性。那高质量如何定义呢我们可以从一些效果不错的模型收集它们训练使用的指令数据集 2笔者在实验过程中发现加入多伦对话的数据有助于提升模型生成能力如果仅用单轮对话或者单轮指令训练出的模型生成长度可能偏短。 3另外通过实验发现如果模型微调的时候使用模板那么推理的时候应该也使用模板否则效果会影响直观上就是生成效果不理想生成比较短甚至“驴唇不对马嘴”训练使用了英文模板推理的时候未使用提示模板的情况下会出现中英文混杂现象。 六 微调数据构建方式的探索 在上述的讨论中可以看到微调数据集的构建非常重要可以说是定制化自有模型时最核心的环节了。微调的目的是以一个预训练的模型为基础利用一个小数据集以打磨细节的方法重新微调一个更为定制化的模型。 在构建微调数据集时有一些值得注意的事项和构建方法例如可以基于现有的大模型进行self-instruct以及利用一些基本原则通过结合self-instruct方法来构建微调数据如Dromedary-65B模型的微调方法 [13]。虽然从已有模型中构建数据是一种简便的方法但并不一定能得到高质量的数据集。加之数据量大小不是唯一的评判标准例如根据LIMA [14] 文章的结果表明一定数量的微调数据就可以激活大模型预训练的数据关键在于数据的质量和对模型的启发。基于LIMA文章的思想出现了一个有意思的模型称为based [15]该模型的指导思想是大模型本身已经拥有对各种事物的看法了仅仅需要教会它如何说话就可以了。该模型有意思的地方在于其微调数据的文件大小仅72.8KB就可以让大模型流畅表达它的观点了作为对比LIMA的微调数据文件大小有2.97MB。 构建微调数据集的目的是一方面是告知大模型一些新的知识另一方面是调整大模型以我们期待的方式回复我们。如果需要告诉大模型一种新的知识可能需要用高质量教导式的方式进行数据扩充。在这里已有的文章提供了许多启示例如Orca模型 [16] 的训练方式从GPT-4获得丰富的解释轨迹进行逐步思维从而使得LLaMA-13B模型训练出具有ChatGPT相当的效果。又如 Textbook is all you need [17] 文章所提出的尽管这篇文章讨论的并非是微调过程可以构建更加具有教育意义的知识例如采用教科书级别的数据集这样能使大模型在编程领域上达到更高的水平。当然为了增加微调数据的复杂度也可以基于大模型根据已有的数据通过演化的方法来生成更加复杂的微调数据 [18][19]。 另外微调数据集的构建和tokenizer也有关系。其中最大的影响是tokenizer会影响到大模型的学习例如文章 [20][21] 提到的不恰当的tokenizer影响会影响大模型在两位数的加法正确性。当然如果不想更改已经训练好的tokenizer那么在构建微调数据集时最好使用tokenizer中已有的词汇。当然tokenizer本身会影响到token的长度例如带有更多中文词汇的tokenizer可以使得中文文本经过tokenizer之后更短。同时在数据集处理过程加入StartTokenPadTokenEndToken等标记也可以帮助模型更好地理解数据或者帮助下游应用进行编码一个具体的例子如Vicuna模型在版本更新后他们在微调数据集中加入了新的对话结束的标记/s使模型能有效地预测何时停止生成字符。 综上在构建微调数据集时需要考虑方方面面的问题不仅需要注重数据质量和数量的平衡同时也要让模型了解我们的期望以及在专有的定制领域获得相应的知识从而达到在定制领域具有更高的预测准确性。由于微调数据的重要性因此这方面的努力都是值得的。 本文主要讨论了大语言模型的微调数据集构建技术并阐述了微调数据集的格式、数据增强和数据整理等步骤。与预训练数据集相比微调数据集的构建需要更加精益求精。在实践中采用自定义数据集与其他开源数据集混合训练的方式可以帮助微调模型提高效果和泛化性。然而构建高质量微调数据集是一项庞杂琐碎的任务需要耗费大量的时间和精力。期待在未来出现更加友好易用的GUI工具帮助我们更好地构建微调数据集。 【LLM系列之指令微调】长话短说大模型指令微调的“Prompt” - 知乎 (zhihu.com)大语言模型微调定制自己的微调数据集-云海天教程 (yht7.com)
http://www.pierceye.com/news/573984/

相关文章:

  • 中企动力做网站一次性付款零基础学室内设计
  • 企炬网站wordpress会员付费插件
  • 在哪里购买虚拟空间建设网站网页设计培训机构培训费
  • 网站建设的色彩搭配做网站赚钱吗 怎么赚
  • 门头沟富阳网站建设西安企业电话
  • 电子商务网站建设概括湘潭专业seo优化推荐
  • 炫彩发光字制作免费网站动漫制作就业方向
  • 阿里巴巴可以做网站吗网站的可用性
  • 云虚拟主机怎么做2个网站装饰工程施工
  • 网站备案查询流程wordpress手机页面没有注册
  • 辽宁城乡建设集团官方网站精品课程网站建设
  • 威海 网站建设个人做网站可以盈利么
  • 机关网站源码网站建设 备案什么意思
  • 做理财的网站有哪些怎么弄数据库备份做网站
  • 网站不接入备案易企互联网站建设
  • 那种网站打不开北京网站建设找华网天下
  • 网站建设seo优化浙江网站名称怎么收录
  • 天津网站制作工具想自己做网站 有免费的吗
  • 宝塔织梦网站建设求网站备案照片
  • 聊城住房和城乡建设厅网站研发项目管理软件
  • 国投集团网站开发杭州网站界面设计
  • 做关于什么的网站莆田网站建设解决方案
  • 湖南长沙做网站那些网站可以做反链
  • 成都金牛网站建设公司高端网站配色
  • 做喜报的网站设计师的工作内容
  • 济南网站建设工作wordpress 资讯
  • 网站调用数据库平台公司名单
  • 移动网站怎么做成都设计公司名字
  • 杭州最好的网站设计公司服务器域名解析
  • 做试用网站的原理塘沽网吧开门了吗