GPT技术分享
June 12, 2022
GPT技术分享 #
先介绍几个名词 #
GPT 和 ChatGPT #
Generative Pre-Training Transformer
是一种基于Transformer
架构的预训练语言模型.
我们所接触到的chatgpt
是针对gpt3.5
模型的一种应用实例, 如今chatgpt
已经为会员用户切换为gpt4.0
模型. 未来短期时间内应该不会开放给免费用户使用.
GPT
模型本质是续写模型, 它根据输入的文本生成相应的续写文本, 从而实现对话、文章等自然语言文本的生成. 所以其并不具备实际的创新能力, 只能对以往的“经验”做出梳理.
LLMs #
Large language models (LLMs)
大语言模型, 包括GPT
和GLM
等, 是一个统称. 以下是这个统称下的不同模型架构:
主流预训练模型架构 #
autoregressive
自回归模型(AR模型):代表作GPT
. 本质上是一个left-to-right
的语言模型. 通常用于生成式任务, 在长文本生成方面取得了巨大的成功, 比如自然语言生成(NLG
)领域的任务:摘要、翻译或抽象问答. 当扩展到十亿级别参数时, 表现出了少样本学习能力. 缺点是单向注意力机制
, 在NLU任务中, 无法完全捕捉上下文的依赖关系.autoencoding
自编码模型(AE模型):代表作BERT. 是通过某个降噪目标(比如MLM)训练的双向文本编码器. 编码器会产出适用于NLU任务的上下文表示, 擅长领域主要是自然语言处理领域, 例如文本分类、命名实体识别、情感分析、问答系统等. 但无法直接用于文本生成.encoder-decoder
(Seq2seq模型):代表作T5. 采用双向注意力机制, 通常用于条件生成任务, 比如文本摘要、机器翻译等.GLM模型基于
autoregressive blank infilling
方法, 结合了上述三种预训练模型的思想, 代表有清华大学的ChatGLM
LoRA和Prompt #
Prompt
提示词, 是一种用于指导模型生成输出的文本片段,Prompt
通常包含一些关键词或短语, 用于提示模型生成特定类型的文本.Prompt
的使用可以提高模型的生成效果和准确性, 特别是在处理特定领域的文本时.通过使用Prompt
, 模型可以更好地理解输入文本的含义和上下文信息, 从而生成更加符合要求的输出文本.LoRA
英文全称Low-Rank Adaptation of Large Language Models
, 直译为大语言模型的低阶适应, 是一种PEFT(参数高效性微调方法), 这是微软的研究人员为了解决大语言模型微调而开发的一项技术. 当然参数高效性微调方法中实现最简单的方法还是Prompt tuning
, 固定模型前馈层参数, 仅仅更新部分embedding参数即可实现低成本微调大模型
LLMs如何产生“思维” #
这是在训练数据达到一定规模后, LLMs模型开始表现出一种现象. 应该有论文讨论这个, 没有细看. 不过如今模型所表现出的效果都是佐以大量的指令微调, 才得以最终呈现出来.
我们如何使用 #
因为并不能直接使用, 即使直接使用ChatGPT的API也需要对其进行一定的能力限制和格式化. 主要通过Prompt(提示词)
来实现. 如果使用GPT-4
或者GPT3.5
接口的话, 可以仅通过调整和开发提示词来实现比较好的效果.
但如果想要保证数据安全, 那必须使用可本地化部署的大语言模型. 如下《目前一些有有影响力的开源模型》中都是可本地化部署的大模型. 但是就使用体验来说, 距离ChatGPT
都有比较大的差距. 所以使用的话需要做垂类的微调, 即使用LoRA
.
LoRA, 是微软的研究人员为了解决大语言模型微调而开发的一项技术. 比如, GPT-3有1750亿参数, 为了让它能干特定领域的活儿, 需要做微调, 但是如果直接对GPT-3做微调, 成本太高太麻烦了. LoRA的做法是, 冻结预训练好的模型权重参数, 然后在每个Transformer(Transforme就是GPT的那个T)块里注入可训练的层, 由于不需要对模型的权重参数重新计算梯度, 所以, 大大减少了需要训练的计算量. 研究发现, LoRA的微调质量与全模型微调相当. 要做个比喻的话, 就好比是大模型的一个小模型, 或者说是一个插件.
目前一些有有影响力的开源模型 #
- Vicuna: a chat assistant fine-tuned from LLaMA on user-shared conversations by LMSYS
- WizardLM: an instruction-following LLM using evol-instruct by Microsoft
- GPT4All-Snoozy: A finetuned LLaMA model on assistant style data by Nomic AI
- Guanaco: a model fine-tuned with QLoRA by UW
- Koala: a dialogue model for academic research by BAIR
- RWKV-4-Raven: an RNN with transformer-level LLM performance
- Alpaca: a model fine-tuned from LLaMA on instruction-following demonstrations by Stanford
- ChatGLM: an open bilingual dialogue language model by Tsinghua University
- OpenAssistant (oasst): an Open Assistant for everyone by LAION
- LLaMA: open and efficient foundation language models by Meta Dolly: an instruction-tuned open large language model by Databricks
- StableLM: Stability AI language models
- MPT-Chat: a chatbot fine-tuned from MPT-7B by MosaicML
- FastChat-T5: a chat assistant fine-tuned from FLAN-T5 by LMSYS
- ChatYuan: 是由元语智能开发团队开发和发布的, 自称第一个国内最早的一个功能型对话大模型. 从披露的技术细节看, 底层采用7亿参数规模的T5模型, 并基于PromptClue进行了监督微调形成了ChatYuan
privateGPT 和 localGPT #
如果在我们的使用场景中, 需要进一步规范化和对输出结果有更可控的预期. 可以参考privateGPT
和localGPT
的方案. 这两者都不是模型, 而是一种大模型的使用方式.
其中privateGPT
使用GPT4All
大模型, localGPT
使用
Vicuna
大模型, 当然, 这localGPT
本真就是基于privateGPT
的架构和设计思路派生的, 我们完全可以使用ChatGLM
模型用来增强中文能力——这种方式比使用GPT4ALL
大模型借用Embeddings Model
实现的中文支持效果要好.
如上架构图所示, 这个架构分为两步式, 首先将我们提供的文档存储为知识库. 之后收到问题, 再将问题转换, 随后对存储文档进行搜索, 并对检索文档进行过滤, 随后返回文档摘要, 此种架构十分适合知识类问答. 但对有逻辑类问题处理不佳.
结合公司使用场景分析 #
再了解到以上知识之后, 可以得出以下几点:
- 数据处理需要处理哪些如何处理还不太了解
- 通过数据做报告是ChatGPT的强项, 不过对于输出格式每次输出都可能采取不同的格式, 每次关注的重点和排版都可能会有所变化. 如果使用的话还是需要多次的Prompt调试, 寻找到输出结果稳定, 符合我们预期的Prompt. 同时模型可能会对数据有所遗漏, 这个不太可控. - 对于代码安全优化的使用, 一是模型确实可以检测代码中的漏洞, 也可以对代码进行优化. - 二是模型可能会输出有漏洞的代码, 而我们再次反问它生成的代码是否有漏洞时, 它也会坦然承认
- 敏感数据识别、威胁语义检测、威胁定性分析、引导式运营分析、报告生成、以及处置建议都属于大模型适合处理的内容.
- 在攻击端的使用可能会有大的阻力, 因为生成钓鱼邮件和攻击内容, 是被模型训练方不断弱化的内容. 成熟的大模型都不会给出攻击建议.
- 知识提供也是适合模型去完成的内容.
综上, 在知识类问答中可以参考privateGPT
的实现方式, 提供稳定的知识问答. 而在数据分析上则不可采用privateGPT
的方法. 应该寻找效果好的模型进行Prompt tuning
或者LoRA
训练. 无论通过什么方法实现, 我们也应该同时注重模型基建
. 这类基建
任务, 无论是从头开始训练大模型还是在Prompt
应用, 以及LoRA
训练上都占有不下于百分之七十的工作量.