GPT技术分享

GPT技术分享

June 12, 2022

GPT技术分享 #

先介绍几个名词 #

GPT 和 ChatGPT #

Generative Pre-Training Transformer 是一种基于Transformer架构的预训练语言模型.

我们所接触到的chatgpt是针对gpt3.5模型的一种应用实例, 如今chatgpt已经为会员用户切换为gpt4.0模型. 未来短期时间内应该不会开放给免费用户使用.

GPT模型本质是续写模型, 它根据输入的文本生成相应的续写文本, 从而实现对话、文章等自然语言文本的生成. 所以其并不具备实际的创新能力, 只能对以往的“经验”做出梳理.

LLMs #

Large language models (LLMs)大语言模型, 包括GPTGLM等, 是一个统称. 以下是这个统称下的不同模型架构:

主流预训练模型架构 #

  1. autoregressive自回归模型(AR模型):代表作GPT. 本质上是一个left-to-right的语言模型. 通常用于生成式任务, 在长文本生成方面取得了巨大的成功, 比如自然语言生成(NLG)领域的任务:摘要、翻译或抽象问答. 当扩展到十亿级别参数时, 表现出了少样本学习能力. 缺点是单向注意力机制, 在NLU任务中, 无法完全捕捉上下文的依赖关系.

  2. autoencoding自编码模型(AE模型):代表作BERT. 是通过某个降噪目标(比如MLM)训练的双向文本编码器. 编码器会产出适用于NLU任务的上下文表示, 擅长领域主要是自然语言处理领域, 例如文本分类、命名实体识别、情感分析、问答系统等. 但无法直接用于文本生成.

  3. encoder-decoder(Seq2seq模型):代表作T5. 采用双向注意力机制, 通常用于条件生成任务, 比如文本摘要、机器翻译等.

  4. GLM模型基于autoregressive blank infilling方法, 结合了上述三种预训练模型的思想, 代表有清华大学的ChatGLM

LoRA和Prompt #

  1. Prompt 提示词, 是一种用于指导模型生成输出的文本片段, Prompt通常包含一些关键词或短语, 用于提示模型生成特定类型的文本. Prompt的使用可以提高模型的生成效果和准确性, 特别是在处理特定领域的文本时. 通过使用Prompt, 模型可以更好地理解输入文本的含义和上下文信息, 从而生成更加符合要求的输出文本.
  2. 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 #

如果在我们的使用场景中, 需要进一步规范化和对输出结果有更可控的预期. 可以参考privateGPTlocalGPT的方案. 这两者都不是模型, 而是一种大模型的使用方式.

其中privateGPT使用GPT4All大模型, localGPT使用 Vicuna大模型, 当然, 这localGPT本真就是基于privateGPT的架构和设计思路派生的, 我们完全可以使用ChatGLM模型用来增强中文能力——这种方式比使用GPT4ALL大模型借用Embeddings Model实现的中文支持效果要好.

localgpt架构

如上架构图所示, 这个架构分为两步式, 首先将我们提供的文档存储为知识库. 之后收到问题, 再将问题转换, 随后对存储文档进行搜索, 并对检索文档进行过滤, 随后返回文档摘要, 此种架构十分适合知识类问答. 但对有逻辑类问题处理不佳.

结合公司使用场景分析 #

再了解到以上知识之后, 可以得出以下几点:

  1. 数据处理需要处理哪些如何处理还不太了解
  2. 通过数据做报告是ChatGPT的强项, 不过对于输出格式每次输出都可能采取不同的格式, 每次关注的重点和排版都可能会有所变化. 如果使用的话还是需要多次的Prompt调试, 寻找到输出结果稳定, 符合我们预期的Prompt.  同时模型可能会对数据有所遗漏, 这个不太可控. - 对于代码安全优化的使用, 一是模型确实可以检测代码中的漏洞, 也可以对代码进行优化. - 二是模型可能会输出有漏洞的代码, 而我们再次反问它生成的代码是否有漏洞时, 它也会坦然承认
  3. 敏感数据识别、威胁语义检测、威胁定性分析、引导式运营分析、报告生成、以及处置建议都属于大模型适合处理的内容.
  4. 在攻击端的使用可能会有大的阻力, 因为生成钓鱼邮件和攻击内容, 是被模型训练方不断弱化的内容. 成熟的大模型都不会给出攻击建议.
  5. 知识提供也是适合模型去完成的内容.

综上, 在知识类问答中可以参考privateGPT的实现方式, 提供稳定的知识问答. 而在数据分析上则不可采用privateGPT的方法. 应该寻找效果好的模型进行Prompt tuning或者LoRA训练. 无论通过什么方法实现, 我们也应该同时注重模型基建. 这类基建任务, 无论是从头开始训练大模型还是在Prompt应用, 以及LoRA训练上都占有不下于百分之七十的工作量.