Prompt设计与大语言模型微调
本文主要介绍了Prompt设计、大语言模型SFT和LLM在手机天猫AI导购助理项目应用。
ChatGPT基本原理
“会说话的AI”,“智能体”
简单概括成以下几个步骤:
预处理文本:ChatGPT的输入文本需要进行预处理。
输入编码:ChatGPT将经过预处理的文本输入到神经网络中进行编码处理,使用的是多层transformer编码器结构。
预测输出:ChatGPT通过对输入进行逐个token预测,输出下一个最可能出现的token序列,使用的是softmax函数进行概率预测。
输出解码:ChatGPT将预测的token序列作为输入,经过多层transformer解码器结构进行解码处理,最终输出模型的回答。
重复步骤3和4:ChatGPT在处理输入时会持续输出预测的token序列,直到遇到停止符号或达到最大输出长度为止。
算法内核——Transformer
由 Encoder 和 Decoder 两个部分组成
编解码动画
Prompt设计
▐ 什么是prompt?
看来跟我今天想分享的不太一样,加个具体的限定条件,然后呢?
这下对了!
Prompt的不同能直接决定模型是否能按我们的预期输出
▐ prompt基本技巧
1.清晰,明确,避免模糊的词语
bad case | good case |
产品描述不应该太短,用一些句子就行,也不用特别多 | 用3到5个短语描述这个产品 |
给手机天猫写首诗 | 给手机天猫写一首四句的古文诗,模仿李白的《早发白帝城》 |
2.用###或者"""或者<>或者'''将指令和待处理的内容分开
bad case | good case |
将下面内容总结为一句话。你应该提供尽可能清晰和具体的指令来表达你想让模型做什么。这将引导模型朝着期望的输出方向发展,并减少收到无关或不正确响应的可能性。不要混淆写一个清晰的提示和写一个简短的提示。在许多情况下,更长的提示提供更多的清晰度和上下文,这可以导致更详细和相关的输出。 | 将下面用三个引号括起来的内容总结为一句话: 需要总结的文本是: ''' 你应该提供尽可能清晰和具体的指令来表达你想让模型做什么。这将引导模型朝着期望的输出方向发展,并减少收到无关或不正确响应的可能性。不要混淆写一个清晰的提示和写一个简短的提示。在许多情况下,更长的提示提供更多的清晰度和上下文,这可以导致更详细和相关的输出。 ''' |
3.指定输出格式
bad case | good case |
生成三个虚构书名,包括它们的作者和类型。 | 生成三个虚构书名,包括它们的作者和类型。以JSON列表的格式提供,包括以下键:book_id、title、author、genre |
4.角色扮演,用扮演、担任等这一类词汇告诉大模型在对话中特定的人格或角色
bad case | good case |
给我推销一款男士洗面奶 | system:我想让你扮演一个专业的导购员。你可以充分利用你的电商知识、导购话术,生动活泼的帮顾客介绍推销商品。 user:给我推销一款男士洗面奶 |
▐ Few shot进阶
启用上下文in-context learning学习,在prompt中提供几个样例(这里只有一个例子one-shot)
▐ Chain of Thought(Cot)
思维链(CoT)是一种改进的提示策略,用于提高 LLM 在复杂推理任务中的性能,如算术推理、常识推理和符号推理。
one-shot | Cot |
model input: Q:小明有5个球,他又买了2筐,每一筐有3个球。那么他现在总共有几个球? A:答案是11 Q:小花有23个苹果,他们午餐用去了20个,又买了6个。那么现在还有多少个苹果? model output: | model input: Q:小明有5个球,他又买了2筐,每一筐有3个球。那么他现在总共有几个球? A:小明开始有5个球,又买了2筐球,每筐3个共6个球,合计11个球,答案是11 Q:小花有23个苹果,他们午餐用去了20个,又买了6个。那么现在还有多少个苹果? model output: |
上面的例子很好的激发了大模型的潜能,是否有prompt技巧无能为力的问题?
答案是肯定的,一些偏实时,模型训练过程中缺乏的语料知识,它也无能为力。
▐ Search API & GPT
"""
网页搜索结果:
{web_results}当前日期:{current_date}指令: 用给定的网络搜索结果,总结回复用户query用户Query: {query}回复语言: {reply_language}
"""
私有化知识库(嵌入式向量检索+LLM)
▐ ReAct框架
大模型Agent功能,大模型会自己分析问题,选择合适的工具,最终解决问题。
ReAct方式的作用就是协调LLM模型和外部的信息获取,与其他功能交互。如果说LLM模型是大脑,那ReAct框架就是这个大脑的手脚和五官。
关键概念 | 描述 |
Thought | 由LLM模型生成,是LLM产生行为和依据 |
Act | Act是指LLM判断本次需要执行的具体行为 |
Obs | LLM框架对于外界输入的获取。 |
尽可能回答以下问题,可以使用工具:
{工具名和描述}
使用以下格式回答:
问题:你必须回答的问题思考:你应该一致保持思考,思考要怎么解决问题
动作:{工具名}。每次动作只选择一个工具,工具列表{工具名和描述}
输入:{调用工具时需要传入的参数}
观察:{第三方工具返回的结果}【思考-动作-输入-观察】循环N次思考:最后,输出最终结果
最终结果:针对原始问题,输出最终结果
开始!
问题:上海最高楼是多少?它楼层高度的平方是多少?
思考:我需要知道上海最高楼,然后进行计算。
动作:搜索API
观察:632米
思考:我需要计算上海最高楼高度的平方,然后得到结果。
动作:计算器
输入:632^2
观察:399424
思考:
最终结果:上海最高楼632米,它的高度平方是399424
大模型SFT(supervised fine tuning)
▐ 预训练 VS 微调
预训练:模型以一种无监督的方式去训练,学习根据前文生成下一个单词。在海量数据下进行,让大模型具备语言理解和生成能力。
指令微调:有监督的方式进行学习,包括任务描述,输入等,去预测答案。目标是如何跟人类指令对齐,让模型更加适应专业化领域场景
业务数据从哪来?
人工标注
种子数据 + self-instruct(gpt 3.5构造)
▐ P-tuning
动机:Fine-tuning需要微调整个预训练语言模型,且额外添加了新的参数,而Prompting则可以将整个预训练语言模型的参数保持固定,而只需要添加prompt来预测结果即可;
P-tuning:将Prompt转换为可以学习的Embedding层,并用MLP+LSTM的方式来对Prompt Embedding进行一层处理。
P-tuning V2:每一层都加入可训练的prompts,只对Prompt部分的参数进行训练,而语言模型的参数固定不变。
▐ LoRA
Low-rank Adaption of LLM,利用低秩适配(low-rank adaptation)的方法,可以在使用大模型适配下游任务时只需要训练少量的参数即可达到一个很好的效果。在计算资源受限的情况下的弥补方案。
对于不同的下游任务,只需要在预训练模型基础上重新训练AB就可以了,这样也能加快大模型的训练节奏。
▐ LoRA VS 全参数微调
lora的优点在于轻量化,低资源。但缺点很明显,参与训练的模型参数量不多,在百万到千万级别的参数量,实验来看效果比全量微调差一些。
▐ C-Eval评估
C-Eval由上海交通大学,清华大学,爱丁堡大学共同完成,是构造了一个覆盖人文,社科,理工,其他专业四个大方向,52 个学科(微积分,线代 …),从中学到大学研究生以及职业考试,一共 13948 道题目的中文知识和推理型测试集。
C-Eval认为:一个模型要强,首先需要广泛的知识,然后在知识的基础上做推理,这样才能代表一个模型可以做复杂且困难的事情。
此外,还有一些公开评测集,用于评估模型在学科综合、语言能力、推理能力等。
手机天猫AI导购助理项目落地应用
▐ 项目背景
“AI形象”璇玑作为个人专属导购员,在交互式对话中进行用户理解、导购商品。
定位:交互式搜索导购产品
▐ 算法框架
▐ 语料收集
电商种子问题收集:端内会话日志、小红书sug收集电商领域种子问题:
问题泛化:明确场景问题定义,通过手猫核心query、种子问题等,设计prompt,通过gpt补充收集问题;
人工标注: 标注高质量语料;
self-instruction:通过prompt(few-shot)方法根据已有人工标注扩充新的instruction。通过gpt获取更多训练语料,解决标注人效瓶颈。
▐ 模型训练
base模型选型
中文评测
数学评测
训练平台:AOP/星云/PAI
基于达摩院模型基座qwen-14B,针对璇玑产品,新增电商领域的训练数据,增强模型的电商领域知识、安全、导购等能力。
params="--stage sft \
--model_name_or_path /data/oss_bucket_0/Qwen_14B_Chat_ms_v100/ \
--do_train \
--dataset_dir data \
--dataset xuanji \
--template chatml \
--finetuning_type full \
--output_dir file_path \
--overwrite_cache \
--per_device_train_batch_size 2 \
--gradient_accumulation_steps 4 \
--lr_scheduler_type cosine \
--logging_steps 5 \
--save_strategy epoch \
--save_steps 10000 \
--learning_rate 2e-6 \
--num_train_epochs 3.0 \
--warmup_ratio 0.15 \
--warmup_steps 0 \
--weight_decay 0.1 \
--fp16 ${fp16} \
--bf16 ${bf16} \
--deepspeed ds_config.json \
--max_source_length 4096 \
--max_target_length 4096 \
--use_fast_tokenizer False \
--is_shuffle True \
--val_size 0.0 \
"
pai -name pytorch112z
-project algo_platform_dev
-Dscript='${job_path}'-DentryFile='-m torch.distributed.launch --nnodes=${workerCount} --nproc_per_node=${node} ${entry_file}'
-DuserDefinedParameters=\"${params}\"
-DworkerCount=${workerCount}
-Dcluster=${resource_param_config}
-Dbuckets=${oss_info}${end_point}
训练中间过程
▐ 模型部署&调用
达摩院千问
模型基于allspark做量化加速,部署在dashscope平台,机器为双卡A10。
# For prerequisites running the following sampleimport dashscope
from dashscope import Generation
from http import HTTPStatusdashscope.api_key = 'your-dashscope-api-key'response_generator = Generation.call(model='model_name',prompt=build_prompt([{'role':'system','content':'content_info'},{'role':'user', 'content':'query'}]),stream=True,use_raw_prompt=True,seed=random_num
)for resp in response_generator:# when stream, you need to get the result through iterationif resp.status_code == HTTPStatus.OK:print(resp.output)else:print('Failed request_id: %s, status_code: %s, \code: %s, message:%s' %(resp.request_id, resp.status_code, resp.code, resp.message))# Result:
# {"text": "汝亦来", "finish_reason": "null"}
# {"text": "汝亦来哉,幸会。\n\n汝可", "finish_reason": "null"}
# {"text": "汝亦来哉,幸会。\n\n汝可唤我一声「百晓生", "finish_reason": "null"}
# {"text": "汝亦来哉,幸会。\n\n汝可唤我一声「百晓生」,不知可否?", "finish_reason": "null"}
# {"text": "汝亦来哉,幸会。\n\n汝可唤我一声「百晓生」,不知可否?", "finish_reason": "stop"}
Whale私有化
部署发布:
模型管理:
from whale import TextGeneration
import json# 设置apiKey
# 预发或线上请勿指定base_url
TextGeneration.set_api_key("api_key", base_url="api_url")# 设置模型生成结果过程中的参数config = {"pad_token_id": 0, "bos_token_id": 1, "eos_token_id": 2, "user_token_id": 0, "assistant_token_id": 0, "max_new_tokens": 2048, "temperature": 0.95, "top_k": 5, "top_p": 0.7, "repetition_penalty": 1.1, "do_sample": False, "transformers_version": "4.29.2"}
prompt = [{"role": "user","content": "content_info"}
]# 请求模型
response = TextGeneration.call(model="model_name",prompt=json.dumps(prompt),timeout=120,streaming=True,generate_config=config)# 处理流式结果
for event in response:if event.status_code == 200:print(event.finished)if event.finished is False:print(event.output['response'], end="")else:print('error_code: [%d], error_message: [%s]'% (event.status_code, event.status_message))
EAS
借助EAS,将代码和模型文件分离进行LLM服务部署,基于http协议提供流式输出。模型存储在oss上。
▐ 模型评测
基础能力评测:在公开评测集上评估模型中英文、推理、知识问答能力表现。
业务评测:以业务人工评测为主,每个大模型任务150个评测问题。
体验问题:埋点日志获取,定期review。
参考链接
1.https://www.semanticscholar.org/paper/Attention-is-All-you-Need-Vaswani-Shazeer/204e3073870fae3d05bcbc2f6a8e263d9b72e776
2.https://huggingface.co/Qwen/Qwen-14B-Chat
3.https://github.com/yuanzhoulvpi2017/zero_nlp
4.https://github.com/THUDM/ChatGLM-6B/tree/main/ptuning
5.https://www.bilibili.com/video/BV1jP411d7or/?spm_id_from=333.337.search-card.all.click
6.https://arxiv.org/pdf/2305.08322v1.pdf
7.https://zhuanlan.zhihu.com/p/630111535?utm_id=0
8.https://cdn.baichuan-ai.com/paper/Baichuan2-technical-report.pdf
9.https://github.com/tatsu-lab/stanford_alpaca
团队介绍
我们是淘天集团下FC技术部智能策略团队,主要负责手机天猫的推荐和广告算法的研发与优化工作,为用户提供更精准的推荐服务,提高用户体验和满意度。此外,团队还致力于AI技术的创新应用,如智能导购等领域,并积极探索创新性的业务实践。
¤ 拓展阅读 ¤
3DXR技术 | 终端技术 | 音视频技术
服务端技术 | 技术质量 | 数据算法
相关文章:

Prompt设计与大语言模型微调
本文主要介绍了Prompt设计、大语言模型SFT和LLM在手机天猫AI导购助理项目应用。 ChatGPT基本原理 “会说话的AI”,“智能体” 简单概括成以下几个步骤: 预处理文本:ChatGPT的输入文本需要进行预处理。输入编码:ChatGPT将经过预处理…...

修复VS2015没有代码提示的问题【已解决】
问题描述 在Visual Studio 中编写代码时,发现使用库函数的时候,在类对象后输入点后,并没有出现类对应的成员信息的提示。 解决过程 1)方法1: 百度“vs 没有代码提示”,搜索解决方案。 方案1࿱…...

DeepSpeed: 大模型训练框架 | 京东云技术团队
背景: 目前,大模型的发展已经非常火热,关于大模型的训练、微调也是各个公司重点关注方向。但是大模型训练的痛点是模型参数过大,动辄上百亿,如果单靠单个GPU来完成训练基本不可能。所以需要多卡或者分布式训练来完成这…...

暄桐推荐|学书法的必读书目
在暄桐教室,写字之外,读书、静坐也是桐学们修习的功课。今天,便向你推荐,关于学习书法,暄桐教室的那些必读书目: 暄桐推荐学书法必读书之初阶书目: 对零基础的小白同学或刚入门…...

2023年赋能更多的人
最近接触到一些新人,是真正的网络新人,慢慢理解了新人的困惑。 对于新人,每天获取的信息五花八门,这是好的也是极其不好的。因为他们不知道如何筛选,到底适不适合自己去做。 我一直在劝大家去做一些内容创造性的事情…...

量子计算与量子密码(入门级)
量子计算与量子密码 写在最前面一些可能带来的有趣的知识和潜在的收获 1、Introduction导言四个特性不确定性(自由意志论)Indeterminism不确定性Uncertainty叠加原理(线性)superposition (linearity)纠缠entanglement 虚数的常见基本运算欧拉公式&#x…...

将安全作为首要目标 — Venus 的现状和前景展望
DeFi 的全面爆发将上一轮牛市推向巅峰。在不断的演化中,DeFi 领域也产生了很多新兴的细分领域,比如收益聚合器、合成资产、各种 DeFi 收益工具,以及最近整个市场都在讨论的 RWA 等。 DeFi 在不断进化,不变的是,DEX 和借…...

『第七章』翩翩起舞的雨燕:顺序与并发执行
在本篇博文中,您将学到如下内容: 1. 顺序执行2. 主线程 Main Thread 的秘密3. 并发执行:GCD 与分发队列(DispatchQueue)4. 延时执行5. 数据竞争(Data Race)6. 线程间的同步7. 避免线程爆炸8. RunLoop 与定时器总结楚客自相送,沾裳春水边。 晚来风信好,并发上江船。 花映…...

c语言进制的转换10进制转换16进制
c语言进制的转换10进制转换16进制 c语言的进制的转换 c语言进制的转换10进制转换16进制一、16进制的介绍二、10进制转换16进制的方法 一、16进制的介绍 十六进制: 十六进制逢十六进一,所有的数组是0到9和A到F组成,其中A代表10,B代…...

js中的Formdata数据结构
这里写目录标题 一、基本概念二、常用方法1.append(name, value)、set(name, value)2.get()、getAll()3.has(name)4.delete(name)5.keys(),values(),entries() 三、其他细节1.for of遍历2.转为对象3.结合 URLSearchParams 转为queryString 一、基本概念 FormData 提供了一种表…...

Spring MVC 执行流程
前言 Spring MVC 是一个非常强大的框架,它能够帮助开发人员快速构建高效的 Web 应用程序。然而,要理解 Spring MVC 的执行流程并不容易,因为它涉及到多个组件和模块。在本文中,我们将介绍 Spring MVC 的执行流程,帮助…...

JAVA毕业设计104—基于Java+Springboot+Vue的医院预约挂号小程序(源码+数据库)
基于JavaSpringbootVue的医院预约挂号小程序(源码数据库)104 一、系统介绍 本系统前后端分离带小程序 小程序(用户端),后台管理系统(管理员,医生) 小程序: 预约挂号,就诊充值&…...

一文了解独立站黑科技:clock斗篷技术
FP产品作为高利润高回报的产品,它热度在出海商品中是一直居高不下的。但这类产品在独立站的运营中往往会遇到很多问题,例如最让商家头疼的投流问题,FP产品的推广营销很容易遭到平台的管控封禁,这时候往往会用到市面上现在很火的黑…...

Java IDEA controller导出CSV,excel
Java IDEA controller导出CSV,excel 导出excel/csv,亲测可共用一个方法,代码逻辑里判断设置不同的表头及contentType;导出excel导出csv 优化:有数据时才可以导出参考 导出excel/csv,亲测可共用一个方法&…...

FFmpeg编译安装(windows环境)以及在vs2022中调用
文章目录 下载源码环境准备下载msys换源下载依赖源码位置 开始编译编译x264编译ffmpeg 在VS2022写cpp调用ffmpeg 下载源码 直接在官网下载压缩包 这个应该是目前(2023/10/24)最新的一个版本。下载之后是这个样子: 我打算添加外部依赖x264&a…...

gRPC之gateway集成swagger
1、gateway集成swagger 1、为了简化实战过程,gRPC-Gateway暴露的服务并未使用https,而是http,但是swagger-ui提供的调用服 务却是https的,因此要在proto文件中指定swagger以http调用服务,指定的时候会用到文件 prot…...

Pytorch从零开始实战07
Pytorch从零开始实战——咖啡豆识别 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——咖啡豆识别环境准备数据集模型选择训练模型可视化模型预测其他问题总结 环境准备 本文基于Jupyter notebook,使用Python3.8,Pytor…...

大数据知识扫盲
MapReudece作业启动和运行机制 MapReduce是一种分布式计算框架,最初由Google开发,用于处理大规模数据集的批处理任务。其核心思想是将数据划分为小的块,然后并行处理这些块,最后将结果合并。以下是MapReduce作业的启动和运行机制…...

使用Ubuntu虚拟机离线部署RKE2高可用集群
环境说明 宿主机和虚拟机的OS与内核相同,如下 $ cat /etc/issue Ubuntu 22.04.3 LTS \n \l$ uname -sr Linux 6.2.0-34-generic虚拟化软件版本 $ kvm --version QEMU emulator version 6.2.0 (Debian 1:6.2dfsg-2ubuntu6.14) Copyright (c) 2003-2021 Fabrice Be…...

记一次任意文件下载到Getshell
任意文件下载(Arbitrary File Download)是一种常见的 Web 攻击技术,用于窃取服务器上任意文件的内容。攻击者利用应用程序中的漏洞,通过构造恶意请求,使应用程序将任意文件(如配置文件、敏感数据等…...

java异常处理
异常处理分为三类: 检查性异常 用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。 运行时异常 运行时异常是可能被程序员避免的异常…...

递归为什么这么难?一篇文章带你了解递归
递归为什么这么难?一篇文章带你了解递归 美国计算机科学家——彼得多伊奇(L Peter Deutsch)在《程序员修炼之道》(The Pragmatic Programmer)一书中提到“To Iterate is Human, to Recurse, Divine”——我理解的这句话为:人理解迭代,神理解…...

X86(32位)汇编指令与机器码转换原理
X86(32位)汇编指令与机器码转换原理 1 32位寻址形式下的ModR/M字节2 汇编指令转机器码2.1 mov ecx,[eaxebx*2]2.1.1 查Opcode和ModR/M2.1.2 查SIB 2.2 mov ecx,[eaxebx*210h]2.3 mov ecx,[eaxebx*200000100h] 本文属于《 X86指令基础系列教程》之一&…...

ES 全字段模糊检索时分词方式对检索结果的影响
文章目录 背景创建索引指定 _all 分词为空格创建索引插入索引数据全字段的模糊检索 创建索引指定 _all 分词为 keyword索引创建插入数据模糊检索 创建索引不配置 _all不同分词的结果启示录 背景 2018年参与使用 ES 和 Kafka 项目的开发,当时主要是做前端开发&#…...

基于Python Django 的微博舆论、微博情感分析可视化系统(V2.0)
文章目录 1 简介2 意义3 技术栈Django 4 效果图微博首页情感分析关键词分析热门评论舆情预测 5 推荐阅读 1 简介 基于Python的微博舆论分析,微博情感分析可视化系统,项目后端分爬虫模块、数据分析模块、数据存储模块、业务逻辑模块组成。 Python基于微博…...

python读取Excel到mysql
常见问题: 1.数据库密码有特殊字符 使用urllib.parse.quote_plus 编译密码 mysql_engine create_engine((f"mysqlpymysql://root:%s10.0.0.2:3306/mydb")%urllib.parse.quote_plus("passaaaa")) 2.设置字段类型 设置特定类型,和指…...

C++八股文面经
1.介绍一下你对面向对象的理解, 面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将数据和操作数据的方法组合成一个对象,以此来描述现实世界中的事物和概念。在面向对象编程中&#…...

【Linux】静态库和共享库一分钟快速上手
Linux 前言对比创建静态库动态库 前言 程序库,对于程序原来说是非常重要的。但不少人对其不太了解,接下来一起学习其中的奥秘吧! 简单来说,程序库可以分为静态库和共享库。它们包含了数据和执行代码的文件。其不能单独执行&#…...

C++继承总结(下)——菱形继承
一.什么是菱形继承 菱形继承是多继承的一种特殊情况,一个类有多个父类,这些父类又有相同的父类或者祖先类,那么该类就会有多份重复的成员,从而造成调用二义性和数据冗余。 class Person {public:Person(){cout << "P…...

CCF CCSP2023参赛记 + 算法题题解
大家好啊,时隔多年,作为大四老年人,再次来到这个地方记录算法竞赛相关,可能也是最后一次参加这种算法赛事了,我觉得还是很有纪念意义的。虽然我高中搞OI被强基背刺,以至于到了大学有点躲着竞赛,…...