Azure OpenAI 官方指南04|Codex的模型结构和应用场景

Posted 微软技术栈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Azure OpenAI 官方指南04|Codex的模型结构和应用场景相关的知识,希望对你有一定的参考价值。

Codex 是 OpenAI 公司推出的 GPT-3(Generative Pre-trained Transformer – 3)的多个派生模型之一。它是基于GPT语言模型,使用代码数据进行 Fine-Tune(微调)而训练出的专门用于代码生成/文档生成的模型。Codex 模型参数从12M到12B不等,是目前最强的编程语言预训练模型。Codex 能够帮助程序员根据函数名和注释自动补全代码、直接生成代码、自动补充测试样例,并支持多种编程语言。本期 Azure OpenAI 官方指南将详解 Codex 的模型结构如何帮助程序员实现自动代码生成。

Codex 的模型结构  01

Azure Codex 模型家族简介 ╱ 02

Codex 的应用场景示例 ╱ 03

Codex的模型结构

OpenAI CTO 兼联合创始人 Greg Brockman 表示,“Codex 将是一款能够施展程序员力量的重要工具”。Codex 项目负责人 Wojciech Zaremba 则将 Codex 视为编码历史演变的下一阶段。那么,Codex 是如何颠覆编码的?

编程主要分为两个阶段,第一个阶段是认真思考问题并尝试理解,第二个阶段是把这些小片段与现有代码映射起来,包括库、函数以及 API。通过自然语言模型结构与代码数据集训练,在第二个阶段,Codex 模型的优势显露无疑。“Codex 的出现,让专业程序员们告别了不少令人头痛的苦差事。”

模型结构 在GPT模型上加入额外token

Codex 的模型结构和 GPT 完全一样,为了尽可能地利用 GPT 的文本表示,Codex 使用了和 GPT-3 一样的分词器。但因为代码中词的分布和自然语言中词的分布有很大区别,GPT-3 的分词器在表示代码时可能不是非常有效。Codex 论文显示在 GPT-3 的分词器中加入了额外的一些 token 来表示不同长度的空格,这样在表示代码时可以少使用 30% 的 token。

推理时,使用核采样不断采样 Codex 生成的 token,直到碰见以下字符中的任何一个:"\\nclass","\\ndef","\\n#","\\nif" , '\\nprint'。这样可以大大减小模型第一和最后一层的参数量。实验证明 Codex 可以通过增加模型规模持续精进。如下图所示:

数据集 用于微调与评测

●  Fine-Tuning 数据集

首先是用来做 Fine-Tuning 的 code 数据集。在2020年5月,Codex 从 Github 的 54,000,000 个公开代码仓上收集了数据,包括 179 GB 大小在 1 MB 以下的独一无二的 python 文件,在经过过滤后,最终的数据集大小为 159GB。

●  评测数据集

Codex 将生成代码的功能正确性作为评测指标,关注从 docstrings 生成 python 函数的任务,并通过 unit tests 的方法来评测生成代码的正确性。评测指标采用的是 pass@k。评测数据集包含 HumanEval 和 APPS 两个数据集。

HumanEval 构建了一个包括164个人工手写的编程问题的数据集,其中每个编程问题包括函数头、docstrings、函数体和几个 unit tests。HumanEval 中的编程问题可以用来评估语言理解能力、推理能力、算法能力和简单的数学能力,该数据集已经开源。人工手写是非常重要的:因为如果直接从网上找,比如说从 leetcode 上去扒,很有可能导致数据穿越。

Codex、GPT-Neo、GPT-J 和 TabNine 在 HumanEval 上的实验结果对比如下图所示,可以发现 Codex-300M 的效果优于 GPT-J 6B。

Azure Codex 模型家族

Codex 擅长 Python,精通十多种语言,包括c#、javascript、Go、Perl、php、Ruby、Swift、TypeScript、SQL 和 Shell。Codex 的模型包含:code-davinci-002、code-cushman-001(按能力大小排列)。

●  Davinci

与 GPT-3 类似,Davinci 是最强大的 Codex 模型,可以执行其他模型能够执行的任何任务,而需要更少的指令。对于需要深入理解内容的应用程序,Davinci 可以产生最好的结果。更强大的功能需要更多的计算资源,因此 Davinci 的成本更高,速度也不如其它模型。

●  Cushman

很强大,同时速度很快。当谈到分析复杂任务时,Davinci 更强,而 Cushman 是许多代码生成任务的能干模型。Cushman 通常也比 Davinci 跑得更快、更便宜。

◉ 上图为 Azure Codex 模型概要

1 该模型仅可根据要求进行微调。目前我们不接受微调模型的新请求。

2 由于需求量大,美国东部目前无法为新客户提供微调服务。请使用美国中南部地区进行培训。

Codex 应用场景示例

Codex 模型主要应用在IT科技部门的代码研发流程自动化上。

●  编写程序

比如开发小游戏,准确率高达72%!Codex 不仅能够收到指令后自行编程,还能够开发小游戏。

● 辅助编程

微软、OpenAI、GitHub 联合推出了自动代码生成 AI Copilot,Copilot 能够在用户输入过程中随时提供补全代码行内容的建议。

企业级Azure OpenAI国际版官方指南

Vol.04 Codex 作者

陈珊珊 微软云大数据与人工智能架构师

Azure OpenAI 官方指南02|ChatGPT 的架构设计与应用实例

ChatGPT 作为即将在微软全球 Azure 公有云平台正式发布的服务,已经迅速成为了众多用户关心的服务之一。而由 OpenAI 发布的 ChatGPT 产品,仅仅上线两个月,就成为互联网历史上最快突破一亿月活的应用。本期从技术角度深度解析 ChatGPT 的架构设计与应用实例

ChatGPT的起源 ╱ 01

InsturctGPT的架构设计 ╱ 02

ChatGPT的技术应用场景及示例 ╱ 03

ChatGPT 的起源

ChatGPT 是由 OpenAI 公司在 2022年11月推出的一款智能聊天机器人程序,属于文本类AI应用。这里,Chat 即「聊天」,GPT 的全称为“Generative Pre-trained Transformer。由于采用 Transformer 架构,且 ChatGPT 在 GPT-3 大模型基础上专门针对 Chat 聊天能力做了性能上的调优,所以 ChatGPT 在自然语言的许多交互场景中表现出了卓越的性能。

Transformer 模型在2017年问世,能够同时并行进行数据计算和模型训练,训练时长更短,并且训练得出的模型可用语法解释,也就是模型具有可解释性。经过训练后,这个最初的 Transformer 模型在包括翻译准确度、英语成分句法分析等各项评分上都达到了业内第一,成为当时最先进的大型语言模型(Large Language Model, LLM)

2018年,在 Transformer 模型诞生还不到一年的时候,OpenAI 公司发表了论文“Improving Language Understanding by Generative Pre-training(用创造型预训练提高模型的语言理解力),并推出了具有1.17亿个参数的GPT-1(Generative Pre-training Transformers)模型。

这是一个用大量数据训练的、基于 Transformer 结构的模型。OpenAI 的工程师使用了经典的大型书籍文本数据集(BookCorpus)进行模型预训练。该数据集包含超过7000本从未出版的书籍,涵盖了冒险、奇幻、言情等类别。在预训练之后,工程师们又针对四种不同的语言场景、使用不同的特定数据集对模型进行进一步的训练(又称为微调,Fine-Tuning)。最终训练所得的模型在问答、文本相似性评估、语义蕴含判定,以及文本分类这四种语言场景,都取得了比基础 Transformer 模型更优的结果,成为了新的业内第一。

2019年,OpenAI 公布了一个具有15亿个参数的模型:GPT-2。该模型架构与 GPT-1 原理相同,主要区别在于 GPT-2 的规模更大(10倍)。同时,OpenAI 也发表了介绍该模型的论文“Language Models are Unsupervised Multitask Learners”

2020年,OpenAI 发表论文“Language Models are Few-Shot Learner”,并推出了最新的 GPT-3 模型——它有1750亿个参数。GPT-3 模型架构与 GPT-2 类似,但是规模大了整整两个数量级。GPT-3 的训练集也比前两款 GPT 模型要大得多:经过基础过滤的全网页爬虫数据集(4290亿个词符)、维基百科文章(30亿词符)、两个不同的书籍数据集(670亿词符)

2022年3月,OpenAI再次发表论文“Training Language Models to Follow Instructions with Human Feedback”,并推出了基于 GPT-3 模型并进一步微调的 InstructGPT 模型。InstructGPT 的模型训练中加入了人类的评价和反馈数据,而不仅仅是事先准备好的数据集,从而训练出更真实、更无害,且更好地遵循用户意图的语言模型。

2022年11月,ChatGP 横空出世,它是基于 GPT-3.5 架构开发的对话AI模型,是 InstructGPT 的兄弟模型。但两者在训练模型的数据量上,以及数据收集、数据如何设置用于训练方面有所不同。

InsturctGPT 的架构设计

目前 Azure OpenAI 还没有官方公开资源详细说明 ChatGPT 的技术原理,因此我们将以 ChatGPT 的兄弟模型 InstructGPT 为对象,深度解析其算法架构设计。

如上图所示,开发人员将提示分为三个阶段,并以不同的方式为每个阶段创建响应和训练:

第 1 阶段 训练监督策略模型

在这个阶段,工程师会在数据集中随机抽取问题,由专门的标注人员给出高质量答案,然后用这些人工标注好的数据来微调 GPT-3.5 模型。这些标注人员会在应聘前进行筛选测试,训练数据大约有1万3千个。相较于第二、三阶段,这里用到的数据量较少。

标注人员根据提示 (prompt) 编写质量可靠的输出响应 (demonstrations)。这里采用的是 Supervised Fine-Tuning(SFT)模型有监督的策略来进行微调。微调之后,SFT 模型在遵循指令/对话方面已经优于 GPT-3.5,但不一定符合人类偏好。

第 2 阶段 训练奖励模型

这一阶段主要是训练一个奖励模型Reward Modeling (RM)。这里的训练数据是怎么得到的呢?首先通过在数据集中随机抽取问题,使用第一阶段生成的模型,对每个问题生成多个不同的回答,然后再让标注人员对这些回答进行排序。对于标注人员来说,对输出进行排序比从头开始打标要容易得多,因此这一过程可以扩展数据量,大约产生3万3千个训练用的数据。

接下来,再使用这个排序结果来训练奖励模型。对于多个排序结果,两两组合,形成多个训练数据对。RM 模型接受输入后,给出评价回答质量的分数。对于一对训练数据,通过调节参数使得高质量回答的打分比低质量的打分要高。奖励模型学会了为评分高的响应计算更高的奖励,为评分低的回答计算更低的奖励。

第 3 阶段 采用 PPO 强化学习进行优化

PPO (Proximal Policy Optimization,近端策略优化)是一种用于在强化学习中训练 agent 的策略,这里被用来微调 SFT 模型。这一阶段利用第二阶段训练好的奖励模型,靠奖励打分来更新预训练模型参数。在数据集中随机抽取问题后,使用 PPO 模型生成回答,并用上一阶段训练好的 RM 模型计算奖励,给出质量分数,然后用这个奖励来继续更新 PPO 模型。奖励依次传递,由此产生策略梯度,通过强化学习的方式更新 PPO 模型参数

不断重复第二和第三阶段,通过迭代,会训练出更高质量的 InstructGPT 模型。我们将来自于人类反馈的强化学习简称为 RLHF(reinforcement learning from human feedback):使用人类的偏好作为奖励信号来微调模型。这也是 ChatGPT 在实际对话过程中的输出更符合人类偏好的原因。

ChatGPT 的技术应用场景及示例

总的来说,ChatGPT 有如下几大类技术应用的领域——

⦿ 对话机器人:可以用于生成自然语言对话,实现人机交互。

⦿ 文本生成:可以用于生成摘要、文章、诗歌等文本。

⦿ 问答系统:可以用于回答用户提出的问题,提供相关信息。

⦿ 自动翻译:可以用于实现自动翻译,将文本从一种语言翻译为另一种语言。

⦿ 情感分析:可以用于分析文本的情感倾向,实现情感分析。

⦿ 语音合成:可以用于生成语音,将文本转换为语音。

场景示例 1 NLP 领域

⦿ 生成摘要

 

⦿ 情感分析(小样本或零样本)

few-shot or zero-shot

 

⦿ 开放领域问答

 

⦿ 由文字生成表格

 

⦿ 数据集生成(小样本或零样本)

few-shot or zero-shot

 

场景示例 2 代码领域

⦿ 代码生成

 

⦿ 解释代码

 

⦿ 知识库生成

 

Azure OpenAI 官方指南 Vol.02 ChatGPT 作者

Annie Hu 微软云 AI 高级技术专家

以上是关于Azure OpenAI 官方指南04|Codex的模型结构和应用场景的主要内容,如果未能解决你的问题,请参考以下文章

Azure OpenAI 官方指南03|DALL-E 的图像生成功能与安全过滤机制

正式发布丨Azure OpenAI Service

企业级 Azure OpenAI ChatGPT 服务发布(国际预览版)

极客日报:OpenAI升级Codex,直接将书面语言转为计算机代码;区块链网站被黑客偷走6亿美元加密货币

OpenAI升级Codex,直接将书面语言转为计算机代码;区块链网站被黑客偷走6亿美元加密货币|极客头条...

OpenAI升级Codex,直接将书面语言转为计算机代码;区块链网站被黑客偷走6亿美元加密货币|极客头条...