淘优惠

淘优惠

GPT-3保姆级教学(三):使用OpenAI Fine-tuning API微调GPT-3模型

热门文章 0
gpt3介绍,gpt3功能,gpt3的功能包括什么,gpt-3的功能
在这个视频中,我们将学习如何使用OpenAI Fine-tuning API来微调GPT-3模型。 微调 GPT-3 涉及三个步骤:1. 准备训练数据集, 2.训练一个新的微调模型, 3.使用新的微调模型。我会一一介绍上述每个步骤,并通过一个情感分类任务的示例,详细阐述如何在自己的数据集上训练新的微调模型。希望你在这个视频后对 OpenAI Fine-tuning API 以及如何在自己的任务上微调 GPT-3 模型有了很好的了解。

GitHub超1.5万星NLP团队热播教程:使用迁移学习构建顶尖会话AI

github多少星算高,github万星项目,github最多星,github星最多的项目

原标题:GitHub超1.5万星NLP团队热播教程:使用迁移学习构建顶尖会话AI

来源:Medium,新智元 编辑:鹏飞

【导读】本教程由著名NLP团队、Transformers开发者Huggingface深度学习和计算语言学C科学负责人Thom Wolf出品。几年前创建聊天机器人可能需要花几个月的时间,编写成千上万的答案以涵盖某些对话主题。随着NLP深度学习的最新进展,我们现在可以摆脱这项琐碎的工作,并在短短几个小时之内构建功能更强大的会话式AI,本文详细介绍了如何实现这一目标。

了解NLP的读者应该对Hugging Face这个名字非常熟悉了。他们制作了Transformers(GitHub超1.5万星)、neuralcoref、pytorch-pretrained-BigGAN等非常流行的模型。

即便你不是做人工智能的,也可能对这个名字有所耳闻,Hugging Face App在国外青少年中也有不小的影响力。

今天我们带来的是由Hugging Face团队深度学习和计算语言学C科学负责人Thomas Wolf教授撰写的利用迁移学习打造最前进的会话AI。本教程在非常受欢迎,今天新智元为大家译成中文。

可以来体验教程运行的Demo:

https://convai.huggingface.co/

读完本教程,你将学到:

  • 如何使用“迁移学习”功能基于OpenAI GPT和GPT-2 Transformer语言模型构建最先进的会话智能体
  • 如何重现在NeurIPS 2018对话竞赛ConvAI2中使用的模型
  • 如何在少于250行、带注释的训练代码(具有分布式和FP16选项)中提取3k+行竞争代码
  • 如何在云实例上以不到20美元的价格训练该模型,或者仅使用教程提供的开源预训练模型

随教程赠送的预训练模型

https://github.com/huggingface/transfer-learning-conv-ai

让人工智能拥有人格

首先会话智能体具有知识库,用来存储描述其身份(角色)和对话历史的句子。当从用户处接收到新的语音时,智能体将该知识库的内容与新接收的语音相结合,即可生成答复。

具体流程如下:

以端到端的方式训练基于深度学习的会话智能体,面临一个主要问题:对话数据集很小,很难从中学习语言和常识,从而无法进行流利的响应。

预训练模型自然是越大越好。本文使用GPT和GPT-2。GPT和GPT-2是两个非常类似的、基于Transformer的语言模型。这些模型称为解码器或因果模型,这意味着它们使用上下文来预测下一个单词。

在大型语料库上对这些模型进行预训练是一项昂贵的操作,因此,我们将从OpenAI预训练的模型和令牌生成器开始。令牌生成器负责将输入的字符串拆分为令牌(单词/子单词),并将这些令牌转换为模型词汇表的正确数字索引。

使语言模型适应对话任务

语言模型是通过单一输入来训练的:单词序列。

在对话设置中,模型将必须使用几种类型的上下文来生成输出序列:

  • 一或几个角色的句子,
  • 对话的历史记录,至少包含用户的最后一次讲话,
  • 自从逐字生成输出序列开始,已经生成的输出序列的标记。

如何从这些不同的上下文中为模型建立输入?

简单的方法之一就是将上下文段按单个顺序连接起来,然后将答案放在最后。然后可以通过继续执行序列来逐个令牌地生成答复令牌:

这个简单的设置有两个问题:transformer不能区分颜色也不能区分位置。添加以上信息的一种简单方法是为单词,位置和句段构建三个并行的输入序列,并将它们融合为一个序列,对三种类型的嵌入进行求和:单词,位置和句段的嵌入:

实例代码:

这些特殊令牌方法分别将我们的五个特殊令牌添加到令牌生成器的词汇表中,并在模型中创建五个附加嵌入。

现在,从角色,历史记录和回复上下文开始构建输入序列所需的一切都有了。一个简单的示例:

多任务损失

现在,我们已经初始化了预训练模型并建立了训练输入,剩下的就是选择在优化过程中要优化的损失。

下一句预测目标是BERT预训练的一部分。它包括从数据集中随机抽取干扰因素并训练模型,以区分输入序列是以满意回复或者胡乱回复结束。它训练模型以查看全局片段,而不只是局部上下文。

所以需要加载“双头”模型:一个负责将计算语言建模预测,而另一个负责将预测的下一句分类标签。让我们看一下如何计算损失:

总损失将是语言建模损失和下一句预测损失的加权总和,计算方式如下:

现在,我们有了模型所需的所有输入,并且可以对模型进行正向传递以获取两个损失和总损失(作为加权总和):

对话数据集训练

ConvAI2竞赛使用了Facebook去年发布的一个有趣的数据集:PERSONA-CHAT。

这是一个相当大的对话数据集(一万个对话),该数据集可在Facebook的ParlAI库中以原始标记化文本格式使用。本教程还上传了JSON格式的版本,可以使用GPT的令牌生成器下载和令牌化,如下所示:

PERSONA-CHAT的JSON版本可快速访问所有相关输入,可以将我们的模型训练为嵌套的列表字典:

借助令人敬畏的PyTorch ignite框架和NVIDIA apex提供的新的自动混合精度API(FP16 / 32),我们能够在少于250行的训练代码中使用分布和FP16选项提取+ 3k竞争代码!

train.py代码在这里:

https://github.com/huggingface/transfer-learning-conv-ai

在具有8个V100 GPU的AWS实例上训练该模型需要不到一个小时的时间(目前在最大的p3.16xlarge AWS实例上,该费用还不到25美元),其结果接近在ConvAI2比赛中获得SOTA的Hits@1(超过79), perplexity(20.5)furthermore1(16.5)。

与模型对话-解码器

对话模型的奇妙之处在于可以与他们交谈

为了与我们的模型进行交互,我们需要添加一个解码器,它将根据我们模型的下一个令牌预测来构建完整序列。

当前,成功进行beam-search/贪婪解码的两个最佳选择是top-k和nucleus (或top-p) 采样。这是我们如何使用top-k或nucleus/top-p)采样进行解码的方法:

示例:

大功告成!

参考链接:

https://medium.com/huggingface/how-to-build-a-state-of-the-art-conversational-ai-with-transfer-learning-2d818ac26313返回搜狐,查看更多

责任编辑:


ICBU可控文本生成技术详解

可控可查,可控能控,可控是什么,可控系统
简介:文本生成(Text Generation)是自然语言处理(Natural Language Processing,NLP)领域的一项重要且具有挑战的任务。顾名思义,文本生成任务的目的是生成近似于自然语言的文本序列,但仍可以根据输入数据进行分类。本文我们聚焦于输入文本生成文本的 Text-to-Text 任务,具体地包括神经机器翻译、智能问答、生成式文本摘要等。

作者 | 刘森来源 | 阿里技术公众号

可控文本生成技术大图

文本生成(Text Generation)是自然语言处理(Natural Language Processing,NLP)领域的一项重要且具有挑战的任务。顾名思义,文本生成任务的目的是生成近似于自然语言的文本序列,但仍可以根据输入数据进行分类。比如输入结构化数据的 Data-to-text Generation,输入图片的 Image Caption,输入视频的 Video Summarization,输入音频的 Speech Recognition 等。本文我们聚焦于输入文本生成文本的 Text-to-Text 任务,具体地包括神经机器翻译、智能问答、生成式文本摘要等。

随着深度学习的发展,众多新兴的技术已被文本生成任务所采用。比如,为了解决文本生成中的长期依赖、超纲词(Out-of-Vocabulary,OOV)问题,注意力机制(Attention Mechanism),拷贝机制(Copy Mechanism)等应运而出;网络结构上使用了循环神经网络(Recurrent Neural Networks),卷积神经网络(Convolutional Neural Networks),图神经网络(Graph Neural Networks),Transformer 等。为了顺应“预训练-精调”范式的兴起,在海量语料上自监督地训练出的大体量预训练语言模型(Pre-trained Language Model;PLM),也被广泛应用在文本生成任务中。

为了展示上述结构、模型、机制在文本生成任务上的应用,本章第一小节会简要梳理主流文本生成模型的结构,在第二小节会对于文本生成的评价指标的方案进行归纳。

1 文本生成模型的结构

文本生成模型的结构常来自于人类撰写文本的启发。此处按照模型结构的特征,将主流文本生成模型分为如下几种:

图1:各种文本生成模型结构图示

Encoder-Decoder Framework

“编码器-解码器框架”首先使用 encoder 编码文本,再使用 decoder 基于原文编码和部分解码输出,自回归地解码(Autoregressively Decoding)出文本。这类似于,人类首先理解素材(源文本、图片、视频等),然后基于对原文的理解和已写出的内容,逐字地撰写出文本。也是目前序列到序列任务中应用最广泛的框架结构。

Auto-regressive Language Model

标准的 left-to-right 的单向语言模型,也可以根据前文序列逐字地解码出文本序列,这种依赖于前文语境来建模未来状态的解码过程,叫做自回归解码(Auto-regressive Decoding)。不同于编码器-解码器框架”使用 encoder 编码源文本,用 decoder 编码已预测的部分序列,AR LM 用同一个模型编码源文本和已解码的部分序列。

Hierarchical Encoder-Decoder

对于文本素材,人类会先理解单个句子,再理解整篇文本。在撰写文本的过程中,也需要先构思句子的大概方向,再逐字地撰写出内容。这类模型往往需要一个层次编码器对源文本进行 intra-sentence 和 inter-sentence 的编码,对应地进行层次 sentence-level 和 token-level 的解码。在 RNN 时代,层次模型分别建模来局部和全局有不同粒度的信息,往往能够带来性能提升,而 Transformer 和预训练语言模型的时代,全连接的 Self-Attention 弱化了这种优势。

Knowledge-Enriched Model

知识增强的文本生成模型,引入了外部知识,因此除了针对源文本的文本编码器外,往往还需要针对外部知识的知识编码器。知识编码器的选择可以依据外部知识的数据结构,引入知识图谱、图片、文本作为外部知识时可以对应地选用图神经网络、卷积神经网络、预训练语言模型等。融合源文本编码与知识编码时,也可以考虑注意力机制,指针生成器网络(Pointer-Generator-Network),记忆网络(Memory Networks)等。

Write-then-Edit Framework

考虑到人工撰写稿件尚不能一次成文,那么文本生成可能同样需要有“修订”的过程。人工修订稿件时,需要基于原始素材和草稿撰写终稿,模型也需要根据源文本和解码出的草稿重新进行编解码。这种考虑了原文和草稿的模型能够产生更加合理的文本内容。当然也会增加计算需求,同时生成效率也会打折扣。

表1:各种文本生成模型结构及其代表性模型

2 文本生成的评价指标

针对文本生成的评价指标,已有多年研究。根据不同的维度,可以对现有评价指标有着不同的分类。比如,部分评价指标仅考虑所生成的文本,来衡量其自身的流畅度、重复性、多样性等;另一部分指标还考虑到了源文本或目标文本,来考察所生成的文本与它们之间的相关性、忠实度、蕴含关系等。

此处,我们从执行评价的主体类型进行分类,来梳理当前常用的文本生成的评价指标:

Human-centric evaluation metrics

文本生成的目标是获得人类能够理解的自然语言。因此,邀请专家或受训练的标注者来对生成内容进行评价,或者比较多个模型的输出文本,是最直观的评价方式。人工评价在机器难以判别的角度也能发挥作用,比如:衡量生成文本句间的连贯性(Coherence),衡量生成文本近似于自然语言程度的通顺度(Fluency),衡量生成文本中的内容是否忠实于原文的事实正确度(Factuality),以及风格、格式、语调、冗余等。此外,为了衡量人工打标的可靠性,可以让多个标注者对进行同一样本打标,并使用 IAA(Inter-Annotator Agreement)来对人工评价结果进行评估。常用的是 Fleiss' ,以及 Krippendorff's 。

Unsupervised automatic metrics

基于规则统计的无监督自动指标,能够适应大体量测试集上的文本评价。最常见的就是 ROUGE-N(Recall-Oriented Understudy for Gisting Evaluation)和 BLEU-N(BiLingual Evaluation Understudy),这两个指标考虑了 N-gram overlapping 的召回率和精确率,能够衡量文本的通顺度及与源文本的字面一致性。通常,为了衡量文本用词的多样性,Distinct-N 计算仅出现过一次的 N-gram 占生成文本中总 N-gram 个数的百分比。

Machine-learned automatic metrics

为了衡量输出文本在语义上的属性,常需要用训练好的判别模型。比如,为了建模目标序列与预测序列之间的相似度,可以使用 BERTScore 先利用 BERT 给出两个文本序列的语境化向量表征,再进行相似度矩阵的计算;GeDi 中使用 RoBERTa 训练出一个 Toxicity Classifier 来判别模型生成的文本是否包含恶意中伤的内容;自然语言推理任务中的文本蕴含(Textual Entailment)模型也可以用于衡量生成的摘要与原文之间在内容上的忠实程度。

表2:各种测评指标的性能优劣势

从上表我们可以看出,人工评价指标虽然灵活,不适合用于对海量样本评价。而无监督的自动评价指标,虽然能低成本地解决评测问题,但能够完成评价的角度甚少。“用模型来衡量模型”则是效率和灵活性之间的 trade-off。

但前提要保证判别模型本身的性能,才能保证测评结果的可靠性。Amazon 的工作证明开箱即用的 NLI 模型并不能保证内容忠实度评测的良好效果,由此看来,该类型的评价指标仍需要向 task-specific 和 data-specific 的方向上深挖,来弥合训练域与应用域之间的鸿沟。

可控文本生成的目标,是控制给定模型基于源文本产生特定属性的文本。特定属性包括文本的风格、主题、情感、格式、语法、长度等。根据源文本生成目标序列的文本生成任务,可以建模为P(Target|Sourse);而考虑了控制信号的可控文本生成任务,则可以建模为P(Target|Sourse,ControlSignal)。

目前可控文本生成已有大量的相关研究,比较有趣的研究有,SongNet(Tencent)控制输出诗词歌赋的字数、平仄和押韵;StylePTB(CMU)按照控制信号改变句子的语法结构、单词形式、语义等;CTRL(Salesforce)在预训练阶段加入了 control codes 与 prompts 作为控制信号,影响文本的领域、主题、实体和风格。可控文本生成模型等方案也多种多样,此处按照进行可控的着手点和切入角度,将可控文本生成方案分为:构造 Control Codes、设计 Prompt、加入解码策略(Decoding Strategy),以及 Write-then-Edit 共四类。

构造 Control Codes 指的是引入一些符号或文本作为条件,训练条件语言模型;为预训练语言模型设计 Prompt 也能实现对 PLM 所执行文本任务的控制;通过在解码阶段使用采样策略,也能够采样出具有特定属性的文本;最后,Write-then-Edit 指的是 PPLM 引入属性判别模型来根据产生的草稿计算梯度并反向传播,基于更新后的隐含状态来产生最终文本序列。

图2:可控文本生成技术方案类型图示

此处,我们尝试从时间维度来分析可控文本生成技术的发展过程和趋势。

首先,在预训练语言模型的热度高涨之前,使用解码策略来控制文本属性的方案较为流行,比如,引入多个判别器影响 Beam Search 中的似然得分的 L2W,以及改进解码采样策略的 Nucleur Sampling(2019)。

随着 GPT-2(2019)、T5(2019)的提出,使得基于 Prompt 来控制同一预训练语言模型来完成多种任务成为可能。因其能够更有效地利用模型在预训练阶段习得的知识,Prompting LM 的方式受到了学术界的重视,Prefix-Tuning(2021)等也推动基于 Prompt 的文本生成向前一步。

而针对于如何基于预训练语言模型做可控文本生成,学术界也一直往“低数据依赖、低算力需求、低时间消耗”方向上推进。CTRL(2019)凭借海量数据和大体量结构成为文本生成领域的代表性模型;PPLM (2019)则引入属性判别器,仅需精调小部分参数起到了“四两拨千斤”的效果;而 GeDi(2020) 为了解决 PPLM 多次反传导致的解码效率低下,直接在解码阶段加入属性判别器来控制解码输出;CoCon(2021)同样仅精调插入 GPT-2 中的 CoCon 层来提高训练效率,并通过精巧的目标函数的设计来增强可控性能。

在本章,我们将针对上述提到的方案思路和模型细节,进行详细的介绍。

1 设计 Prompt

由于预训练任务与下游任务之间存在差距,为了充分利用模型在预训练阶段习得的知识,可以通过设计 prompt 的方法,将下游任务建模为预训练任务。下面是 Prompting PLM 在非生成任务上的应用,可以清晰地理解 prompt 相对于 fine-tuning 的价值。

我们对在 Masked Language Model 任务上预训练出的 BERT进行精调,做实体类型识别(Entity Typing)任务。常规地,需要向 BERT 输入[CLS]He is from New York.,然后用分类器根据[CLS]的隐含状态对 New York 的实体类型做分类。然而,精调过程中的知识迁移无法避免地会造成知识损失,另外,为了训练新引入的分类器需要大量的训练样本,不适应 few-shot 场景。

将训练数据嵌入 prompt,下游的分类任务即可被转化为预训练的 MLM 任务。通过向模型输入He is from New York. In this sentance, New York is a[MASK].,利用模型更能胜任的 MLM 任务预测[MASK]对应的单词,即判断生成 New York 的实体类型。通过设计好的 prompt,可避免 fine-tuning。即不必调整 PLM 的结构和参数,完整保留预训练阶段的知识。也可以通过 prompt 的设计规避将下游任务训练样本的依赖,更适合 few-shot 和 zero-shot 场景。

Prompting 在非生成类任务上常用 Cloze-style 的 prompts 来适应用 MLM 预训练任务。而对于生成类任务,更常用的是 Prefix-style 的 prompts。相对于前者更侧重于充分利用 PLM,后者还能够对文本生成的任务实现可控。

GPT-2 作为通用的多任务模型,不仅要考虑源文本的信息,还要考虑将执行的任务,故被建模为P(Taget|Sourse,Task)。比如,将源文本嵌入模板[Sourse]TL;DR:作为 GPT-2 的输入,模型能够知晓下游任务是文本摘要,进而根据源文本自回归地续接出摘要。

T5 希望将多个自然语言处理任务整合成 text-to-text 的形式,来统一模型在预训练、精调阶段的任务。为了向 T5 模型明确所需执行的任务,源文本需要被嵌入模板。比如,输入summarize:[Sourse]来生成摘要,或输入translate English to German:[Sourse]来生成翻译等。T5 论文提到,任务前缀也是超参数,它们的 word,structure 对于下游任务的性能有潜在影响。这近似于预言了后来 prompting 的研究方向,Prompt Designing 也成为研究热点。通常对于不同的任务和数据集针对性设计 prompts 来适应,图2中展示了针对各生成相关任务的常用 prompts:

图3:不同任务下常用的 prompts,[X]是源文本,[Z]是以期生成的答案

2 构造 Control Codes

此处,Control Codes 指的是输入模型的控制信号。控制信号的数据类型选择非常广泛,包括符号、单词、文本段落等。为了使得模型在训练阶段能捕捉并拟合控制信号的作用,进而能泛化到推理阶段,控制信号需要与目标序列高度相关。

构造训练数据

GSum(Guided Summarization)引入了四种控制信号,包括重要句子、关键单词、显著实体三元组,以及检索到的相关摘要。结构上,GSum 基于 Transformer 改进。源文本和文本类型的控制信号共享编码器,在编码器顶层两者各自有一层专属编码器。解码器部分包含两个 Multihead Cross Attention 分别关注源文本编码和引导信号编码。

图4:GSum 模型结构图

为了保证控制信号与目标序列中存在可被捕捉的联系,实现摘要内容的可控,如何获取控制信号就显得尤为重要,即所构造的控制信号必须与目标序列高度相关。GSum 的训练和测试数据集中的控制信号的获取方式如下表所示:

表2:GSum 的训练、测试集上中控制信号的构造方法

通过构造与目标序列高度相关的控制信号作为训练数据,模型实现了内容上的可控。然而,如果将训练数据集中控制信号的构造方法替换为上述测试集的方法,导致模型性能下降。究其原因是相较于训练阶段的控制信号的构造方法,推理阶段的方案获得的控制信号与目标序列之间的联系更弱了。更强的控制信号与目标序列属性之间的相关性,可能带来更好的控制性能。

类似地,CTRLsum 为了控制输出摘要的和内容长度,也考虑了如何在控制信号中体现目标序列的长度属性。针对内容可控,CTRLsum 首先根据原文中的句子与目标序列之间的 ROUGE 得分抽取出关键句子,然后筛选出关键句子与目标序列中的最长公共子序列,去除重复和停用词后获得关键词作为控制信号。

但 CTRLsum 并没有显式地给定控制信号,而是通过关键词的个数来“暗示”。首先,将训练集中的样本按照目标摘要的长度排序后平分为 5 桶;然后,统计各桶中的平均关键词个数。

在训练样本中,仅保留目标摘要所在桶所对应个数的关键词作为控制信号,测试阶段即可利用所输入关键词的个数来控制摘要长度,利用关键词的内容来控制摘要