庆云古诗词

庆云古诗词

如何实时录音并翻译 怎么用手机翻译音频的内容

互联资讯 0

2023年11月20日 每日一猜答案: 答案:ABC
每日一猜答案分析:

如何实时录音并播放,如何实时录音文件,实时录音app,手机实时录音怎么设置?

大家在旅行中,有没有遇到过听不懂异国语言的问题,这可能会成为我们旅行途中的一个难题。这种时候,录音翻译软件就可以派上用场了。它可以通过识别音频录音,实时将听不懂的语言转换成我们自己能够理解的文字,很适合我们在外旅行与外国居民沟通时使用。那么大家知道手机怎么录音翻译吗?我整理了三种翻译录音的方法,不懂怎么操作的小伙伴快快看过来吧!

方法一:使用微信翻译

我们经常使用微信来与家人、朋友、同事等进行实时沟通,还会进行语音、视频、图片等多样文件的传输。它除了能让我们与亲近的人分享信息,还可以被用来充当翻译软件哦。它配备的语音输入和翻译功能功能就能满足我们的翻译需求。下面来看看怎么操作。

首先,我们在微信中随机点开一个聊天框,在下方工具栏中我们可以找到“语音输入”按钮,然后我们点击按钮,进入功能页面输入语音。接下来我们将识别出的文字发送,长按该段文字消息后点击“翻译”按钮即可翻译。

方法二:使用配音工厂翻译

有没有小伙伴使用过这款APP呢?作为一款专用于配音的手机应用程序,它提供的配音服务拥有大量的声音素材和背景音乐资源,我们使用这款软件就能轻松完成视频的配音工作。除了主打的配音功能,它的录音翻译功能也十分实用。它提供十几种语言的翻译服务,翻译速度也很快,短短几秒便能完成翻译。下面我们来看看怎么操作吧。

第一步,我们需要打开软件,在主界面下方的导航栏中,我们可以找到“应用”按钮,然后我们点击按钮,进入“应用”界面。在界面中,我们需要找到并点击“趣味功能”按钮。

第二步,进入界面后,我们就能发现“录音翻译”按钮了。接下来我们需要点击按钮,进入功能界面后,我们设置好翻译语言就可以开始翻译操作了。

方法三:使用搜狗输入法翻译大家可能有用过搜狗输入法这个软件吧。这是一个支持多种语言和输入方式的输入法软件,提供的服务有智能输入、表情包与主题、声音输入、对话翻译等等,其中的对话翻译功能就可以被我们用来进行录音翻译操作啦。下面来看看怎么操作。

首先,我们打开并登录软件,然后我们在首页下方导航栏里点击“AI输入”选项。页面转跳后,我们在“翻译交流”栏中找到并点击“对话翻译”选项。进入功能页面后,我们在页面上方选择好翻译语言,接下来点击下方按钮即可进行录音翻译了。

到这里我为大家整理的三种方法就说明完毕了。大家有没有学会手机怎么录音翻译呢?近期有出国打算的小伙伴还不快快学起来!



chatgpt写一半就停了怎么办 chatgpt对哪些行业构成冲击

chatGPT写一半就停了

有些不太理解ChatGPT到底是什么,有没有简单明快的解释,比如:他就像我们的百度一样,只不过通过“想“就可以指挥他 她 它

【Datawhale】ChatGPT基础科普――知其一点所以然

Datawhale HuggingLLM开源项目组出品 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

经管窝窝搬运;搬运原因:由于源项目地址是在github上,社群有些小伙伴访问不方便,所以存到自己笔记系统里面,方便大家学习使用,不盈利非商用。同时,由于部分项目图片为本地图片,所以一并上传到了个人阿里云图床。

如果有图片出错,可以直接下载源文件或者到社群文档系统中访问 doc.jgww.net

如果您对社群感兴趣,欢迎加入。

经管窝窝是一个开放、互助的经管类学生的知识分享&互助社群,致力于让更多的经管人能够被看见。我们希望打造一个全维度覆盖的学习社群,能够为处在不同阶段的经管人提供学习资源、成长规划、讨论交流等全方位的服务。目前经管窝窝已形成交流社群3个,有来自不同高校/行业的300多名小伙伴;初步组建了社群运维团队,捣鼓了些小工具,积累了一点学习资源供大家学习使用和讨论交流,此外还会不定期的分享经管类资料资讯供大家学习使用。无论你是乐于分享的行业内资深大佬,还是刚入门的萌新小白,加入社群,相信你会收获不一样的新体验。

2022年底,ChatGPT突然间在AI圈开始流行,准确来说是搞自然语言处理(Natural Language Processing,NLP)圈子里先火起来了。遥想当时,本以为就会在圈内火一阵,结果现在……没想到居然成了AI的救命稻草,当然对AI工程师尤其是NLP工程师是什么就不好说了。海内外沸腾之后就是第一时间的跟进,结果自然是努力对齐而无功,连牛逼的Google和FaceBook都翻车了。不过总归是折腾出来一些东西,大伙儿也都有了目标,圈子又有了新活力。希望OpenAI继续发力,我等再多苟些日子。

无论是ChatGPT还是后来的模仿者,它们其实都是语言模型,准确来说――大语言模型。使用时,无论是调用API还是开源项目,总有一些参数可能需要调整。对大部分内行人士来说应该都不成问题,但对外行就有点玄乎了。基于此,本文将简要介绍ChatGPT相关技术基本原理,行文将站在外行人角度,尝试将内容尽量平民化。虽然不能深入细节,但知晓原理足以很好使用了。

本文共分为四个部分:

  • LM:这是ChatGPT的基石的基石,是一个最基本的概念,绕不开,逃不过,没办法。
  • Transformer:这是ChatGPT的基石,准确来说它的一部分是基石。
  • GPT:本体,从GPT-1,一直到现在的GPT-4,按OpenAI自己的说法,模型还是那个模型,只是它长大了,变胖了,不过更好看了。关于这点,大家基本都没想到。现在好了,攀不上了。
  • RLHF:ChatGPT神兵利器,有此利刃,ChatGPT才是那个ChatGPT,不然就只能是GPT-3。

LM,Language Model,语言模型,简单来说就是利用自然语言构建的模型。这个自然语言就是人常说的话,或者记录的文字等等,只要是人生产出来的文字,都可以看做语言。你现在看到的文字也是。模型就是根据特定输入,通过一定计算输出相应结果的一个东西,可以把它当做人的大脑,输入就是你的耳、眼听或看到的文字,输出就是嘴巴说出来或手写出来的文字。总结一下,语言模型就是利用自然语言文本构建的,根据输入的文字,输出相应文字的模型。

具体是怎么做的呢,方法有很多种,比如我写好一个模板:「XX喜欢YY」,如果XX=我,YY=你,那就是我喜欢你,反过来就是你喜欢我。我们这里重点要说的是概率语言模型,它的核心是概率,准确来说是下一个词的概率。这种语言模型的过程是通过已经有的词预测接下来的词。我们举个简单的例子,比如你只告诉模型:「我喜欢你」这句话,当你输入「我」的时候,它就知道你接下来要说「喜欢」了。为什么?因为它脑子里就只有这四个字,你没告诉它其他的呀。

好,接下来,我们要升级了。假设你给了模型很多很多句话,多到现在网上能找到的资料都给了它。这时候你再输入「我」,我敢打赌它大概不会说「喜欢」了。为什么?简单,见多了世面,眼里怎么可能只有喜欢你三个字。但因为我们考虑的是最大概率,很有可能它每次都会输出同样的话。对,没错,如果每次都只选择下个最大概率的词,你就是会得到同样的话。这种方法叫做Greedy Search(中文叫贪心搜索),很贪,很短视!所以,语言模型都会在这个地方做一些策略,让模型每一步多看几个可能的词,而不是就看那最高的一个,这样继续往下找的时候,你会发现到下一步时,刚刚最大概率的词,如果加上这一步的词,它的路径(两步概率乘积)可能没有刚刚小一点概率的词的路径。举个例子,请看下面这幅图:

(图1:如何预测下一个词)

先看第一步,如果只选概率最大的那个词,那就变成「我想」了,但是别急,我们给「喜欢」一点机会,同时考虑它们两个好不好。再往下看一步,最大概率的都是你,我们也选两个,最后有这么几句(以及我们附上它们的概率):

  • 「我喜欢你」概率:0.3×0.8=0.24
  • 「我喜欢吃」概率:0.3×0.1=0.03
  • 「我想你」概率:0.4×0.5=0.2
  • 「我想去」概率:0.4×0.3=0.12

多看一步大不一样!看看概率最大的成谁了,久违了,再说一句「我喜欢你」。上面这种方法叫做Beam Search(中文叫集束搜索),简单来说就是一步多看几个词,看最终句子(比如生成到句号、感叹号或其他停止符号)的概率。刚刚我们的例子中,num_beams=2(只看了2个),看的越多,约不容易生成固定的文本。

好了,其实在最开始的语言模型中,大家基本就到这里,上面介绍这两种也叫解码策略。当时更多被研究的还是模型本身,我们经历了从简单模型到复杂模型到巨复杂模型的变迁过程。简单模型就是把一句话切成一个个词,然后统计概率,这类模型叫做Ngram语言模型,是最简单的语言模型,这里的N表示每次用到的上下文长度。还是举个例子,看下面这句话:「我喜欢在深夜的星空下伴随着月亮轻轻地想你」。常用的N=2或3,等于2的叫Bi-Gram,等于3的叫Tri-Gram:

  • Bi-Gram:我/喜欢 喜欢/在 在/深夜 深夜/的 的/星空 星空/下……
  • Tri-Gram:我/喜欢/在 喜欢/在/深夜 在/深夜/的 深夜/的/星空 的/星空/下……

前者下一个词是根据上一个词来的,后者是根据上两个词来的,就是这个区别。这里有个小知识需要说明一下,实际中我们往往不叫一个词为「词」,而是「Token」,你可以将其理解为一小块,可以是一个字,也可以是两个字的词,或三个字的词,取决于你怎么Token化。也就是说,给定一个句子时,我有多种Token化方式,可以分词,也可以分字,英文现在都是分子词。比如单词Elvé【【微信】】,Token化后变成了:

[‘El’, ‘##vé’, ‘##ge’, ‘##zhet’, ‘##ite’, ‘##k’]

中文现在基本都是字+词的方式。我们不直接解释为啥这么做,但是可以想一下完全的字或词的效果,拿英文举例更直观。如果只是用26个英文字母,虽然词表很小(加上各种符号可能就100来个),但粒度太细,每个Token几乎完全没法表示语义;如果用词,这个粒度又有点太大,尤其英文还有不同时态,其实它们意思差不多,只是后面不一样。所以子词就应运而生――它把一个词拆成一定大小的语义单位,每个单位既可以表示一定含义,又能灵活组合。中文稍微简单一些,就是字+词,字就是一个字能独立表示意义,比如「是」、「有」、「爱」;词是这个词拆开就不太对劲了,比如「长城」、「情比金坚」。当然,中文你非要搞成一个一个字也不是不可以。我们主要还是从效果上来看。

Ngram模型有个致命缺陷――它的表示是离散的,稍微解释一下,在计算机中,只能用1和0表示某个词。假设词表大小为50000,刚刚在Bi-Gram中,「我喜欢」这个Gram就是49999个0和1个1组成的稀疏向量。这种表示方法使用起来有很多缺点,关于这部分内容,后面的《Embedding》部分会展开讲解。对,Embedding就是一种稠密表示方法,简单来说,一个Token(后面就都说Token了)是很多个小数(一般可以是任意多个,专业称呼为Embedding的维度,根据所用的模型和设定的参数来确定),一般数字越多,模型越大,表示能力越强。你说我就喜欢用一个小模型,搞一个很大的维度,那我只能说效果可能要让你失望了,911在乡村土路上可能跑不过拖拉机。

接下来,我们就假设每个词是一个一维向量,简单解释一下在这种设定下怎么预测下一个Token。其实还是算概率,但这次和刚刚有点不一样了,刚刚离散的那个就是统计出来有多少次除以总词数就是出现概率。但是稠密向量要稍微换个方式,也就是说,给你一个d维的向量,你最后要输出一个长度为N的向量,N是词表大小,N中每一个值都是一个概率值,表示Token的概率,加起来为1。写成简单的计算表达式如下:

X \\=[0.001, 0.002, 0.0052, …, 0.0341]# d维,加起来和1没关系,大小是1×dY \\=[0.1, 0.5, …, 0.005, 0.3]# N个,加起来=1,大小是1×NW・X \\=Y # W自然可以是 d×N 维的矩阵

上面的W就是模型的参数,其实X也可以看作是参数自动学习到。因为我们知道了输入和输出的大小,所以中间其实可以经过任意随意的计算,总之就是各种张量(三维以上数组)运算,只要保证最后的形式不变就行。这中间的各种计算就意味着各种不同的模型。

在深度学习的初期,最著名的语言模型是RNN,Recurrent Neural Network,中文叫循环神经网络。RNN 模型与其他神经网络不同的地方在于,它的节点之间存在循环连接,这使得它能够记住之前的信息,并将它们应用于当前的输入。这种记忆能力使得 RNN 在处理时间序列数据时特别有用,例如预测未来的时间序列数据、自然语言处理等。通俗地说,RNN 就像一个具有记忆功能的人,可以根据之前的经验和知识对当前的情况做出反应,并预测未来的发展趋势。如下图所示:

(图2:RNN,来自:)

右边是左边的展开,A就是参数,X是输入,h就是输出,由于自然语言是Token by Token的,所以就组成了一个序列。那这个参数怎么学习呢?这就要稍微解释一下学习过程,请看下面的图:

(图3:语言模型输入输出)

第一行就是X,第二行就是Y,SOS表示Start of Sentence,EOS就不多解释了。注意,上面的h并不是那个输出的概率,而是hidden state,如果需要概率,可以将h再做一个张量运算,归一化到整个词表即可。简单的演示一下代码:

import torch.nn as nn?rnn \\=nn.RNN(32, 64)input \\=torch.randn(4, 32)h0 \\=torch.randn(1, 64)output, hn \\=rnn(input, h0)output.shape, hn.shape# (torch.Size([4, 64]), torch.Size([1, 64]))

上面nn.RNN就是RNN模型,输入是一个4×32的向量,换句话说,4个Token,维度d=32,h0就是初始化的输出,也就是output4个里面的第一个,这里output的四个64维的向量就分别表示4个输出,hn就是最后一个Token的输出,也可以看成是整个句子的表示。如果要输出词的概率,需要先扩充到词表大小,再进行归一化:

wo \\=torch.randn(64, 1000) # 假设词表大小N=1000logits \\=output @ wo # 4×1000probs \\=nn.Softmax(dim\\=1)(logits) # 4×1000,每一行概率和为1

这里的probs每一行就是词表大小的概率分布,和为1,意思是这个Token到词表每个Token的概率。

因为我们知道接下来的Token是啥(就是上面图里的第二行Y),那我这里得到最大概率的那个Token如果正好是这个Token,说明预测对了,参数就不用怎么调整;反之,模型就会调整前面的参数(上面RNNh0input的参数和下面的wo)。你可能会疑惑为啥input也是参数,其实上面的input我们偷了懒,本来的参数是1000×32的大向量,4个是那四个Token对应位置的那一行向量。这个1000×32的向量其实就是词向量(每个词一行),开始时随机初始化,然后通过训练调整参数。

训练完成后,这些参数就不变了,然后就可以用和上面同样的步骤来预测了,也就是给定一个Token预测下一个Token。如果是Greedy Search,每次你给定同样Token时,生成的就一样。其余的就和前面讲的接上了。

好了,语言模型就介绍到这里,上面的代码看不懂没关系,能get到意思就行,这里面细节非常多,但大概意思已经到位了。你只需要大概了解每个Token是怎么表示、怎么训练和预测出来的就行。

接下来出场的是Transformer,一个刚开始在NLP领域,后来横跨到语音和图像领域,并最终统一几乎所有模态的架构。这是Google2017年发的一篇论文,标题叫《Attention Is All You Need》,其最重要的核心就是提出来的【【淘密令】】机制,中文也叫自注意力。简单来说,就是在语言模型建模过程中,把注意力放在那些重要的Token上。想来,Google在发表论文之初也没有料想到今天吧。

Transformer是一种Encoder-Decoder架构,简单来说就是先把输入映射到Encoder,这里大家可以把Encoder先想象成上面介绍的RNN,Decoder也可以想象成RNN。这样,左边负责编码,右边则负责解码。这里面不同的是,左边因为我们是知道数据的,所以建模时可以同时利用当前Token的历史Token和未来(前面的)Token;但解码时,因为是一个Token一个Token输出来的,所以只能根据历史Token以及Encoder的Token表示进行建模,而不能利用未来的Token。

Transformer的这种架构从更普遍的角度来看,其实是Seq2Seq架构,大家别慌,这简单来说就是序列到序列模型,也就是输入是一个文本序列,输出是另一个文本序列。翻译就是个很好的例子,我们看下面这个来自Google的GNMT(Google Neutral Machine Translation)的经典图片:

(图4:GNMT图示,来自GNMT GitHub:)

刚刚已经说了,Encoder和Decoder可以采用RNN,最终就是Encoder所有Token最终输出一个向量,作为整句话的表示。说到这里,整句话又怎么表示呢?刚刚上面我们也提到过,如果RNN这种结构,可以把最后一个Token的输出作为整个句子的表示。当然了,很符合直觉地,你也可以取每个Token向量的平均值,或第一个和最后一个的平均值,或后面N个的平均值。这些都可以,问题不大,不过一般取平均的情况比较多,效果要好一些。除了平均值,也可以求和、取最大值等,我们就不多深入讨论了。现在重点来了,看Decoder的过程,仔细看,其实它在生成每一个Token时都用到了Encoder每一个Token的信息,以及它已经生成的Token的信息。前面这种关注Encoder中Token的信息的机制就是Attention(注意力机制)。直观点解释,当生成Knowledge时,「知识」两个字会被赋予更多权重,其他也是类似。

让我们带着上面的记忆,看一下Transformer的结构,如下图所示:

(图5:Transformer,来自Transformer论文)

这个图更多的是体现了内部结构。左边是Encoder的一个Block(一共N个),右边是Decoder的一个Block(一共N个),简单起见,我们可以假设N=1,那左边这个结构就是一个Encoder,右边的就是Decoder。也可以把它们就想象成一个RNN,这样有助于从宏观上把握。现在,想象完了,我们回到现实,Transformer 用到的东西和RNN并没有关系,通过上图也可以看出来,它主要用了两个模块:Multi-Head Attention和Feed Forward。对于前者,我们不妨回顾一下GNMT的Attention,它是Decoder中的Token和Encoder中每一个Token的重要性权重。Multi-Head Attention中用到一个东西叫【【淘密令】】,和刚刚说的Attention非常类似,只不过它是自己的每一个Token和自己的每一个Token的重要性权重。简单来说,就是“一句话到底哪里重要”。这玩意儿可以说是非常精髓了,无论是ChatGPT,还是其他非文本的模型,几乎都用到了它,可以说是真正的一统江湖。Multi-Head是啥意思呢,简单来说,就是把刚刚的这种自己注意自己重复Multi次(Multi个Head),每个注意到的信息不一样,这样就可以捕获到更多信息。比如我们前面提过的这句话:「我喜欢在深夜的星空下伴随着月亮轻轻地想你」,有的Head「我」注意到「喜欢」,有的Head「我」注意到「深夜」,有的Head「我」注意到「想你」……这样看起来是不是更加【【微信】】。对于Feed Forward,大家可以把它当做「记忆层」,大模型的大部分知识都存在这里面,Multi-Head Attention则根据不同权重的注意提取知识。

实际中,大多数NLP任务其实并不是Seq2Seq的,最常见的主要包括这么几种:句子级别分类、Token级别分类(也叫序列标注)、相似度匹配和生成;而前三种应用最为广泛。这时候Encoder和Decoder就可以拆开用了。左边的Encoder在把句子表示成一个向量时,可以利用上下文信息,也就是说,可以把它看作是双向的;右边的Decoder不能看到未来的Token,一般只利用上文,是单向的。虽然它们都可以用来完成刚刚提到的几个任务,但从效果上来说,Encoder更加适合非生成类任务,Decoder更加适合生成类任务。在NLP领域,一般也会把它们分别叫做NLU(Natural Language Understanding,自然语言理解)任务和NLG(Natural Language Generation,自然语言生成)任务。

首先介绍NLU任务。句子级别分类是给定一个句子,输出一个类别。因为句子可以表示为一个向量,经过张量运算,自然可以映射到每个类的概率分布。这和前面语言模型提到过的搞法没有本质上的区别,只不过语言模型的类别是整个词表大小,而分类的类别是看具体任务的,有二分类、多分类、多标签分类等等。Token级别的分类是给定一个句子,要给其中每个Token输出一个类别。这个和语言模型就更像了,只不过把下一个Token换成是对应的类别,比如命名实体识别就是把句子中的实体(人名、地名、作品等你关注的词,一般是名词)给提取出来。它们的类别一般是类似,如果以人名(PER)举例的话,类似这样:B-PER表示开始、I-PER表示中间。举个例子:「刘亦菲好看」,此时,Token是字,对应的类别为「B-PER、I-PER、I-PER、O、O」,O表示Other。注意,对于分类任务,类别我们一般也叫它标签。相似匹配任务一般是给定两个句子,输出是否相似,其实也可以看作是特殊的分类问题。

接下来介绍NLG任务。除了生成外,常见的任务还有文本摘要、机器翻译、改写纠错等。这里Seq2Seq的结构就比较常见了,体现了一种先理解再输出的感觉。而纯生成类任务,比如写诗、写歌词、写小说几乎都是Decoder结构。这一类任务稍微麻烦一些的是自动评测,除生成的其他任务还好,一般都会提供参考答案(reference),可以看模型输出的和参考之间重叠程度或相似程度。但纯生成任务就有点麻烦,这个好不好有时候其实很难衡量。不过针对有具体目标的(如任务机器人对话生成),还是可以设计一些是否完成任务、达到目标之类的评测方法。但对于没有具体目标的(比如闲聊),这评测起来就见仁见智了,很多时候还是靠人工过一遍。

Transformer这个架构基于Seq2Seq,可以同时处理NLU和NLG任务,而且这种【【淘密令】】机制的特征提取能力很强。这就使得NLP取得了阶段性的突破,深度学习开始进入了微调模型时代。大概的做法就是拿着一个开源的预训练模型,然后在自己的数据上微调一下,让它能够搞定特定的任务。这个开源的预训练模型往往就是个语言模型,从大量数据语料上,使用我们前面讲的语言模型的训练方法训练而来。NLU领域的第一个工作是Google的BERT,相信不少人即便不是这个行业的也大概听过。BERT就是用了Transformer的Encoder架构,有12个Block(看上面那个图,这每一个Block也可以叫一层),1亿多参数,它不预测下一个Token,而是随机把15%的Token盖住,然后利用其他没盖住的Token来预测盖住的Token。其实和根据上文预测下一个Token是类似的,不同的是可以利用下文信息。NLG领域的第一个工作是OpenAI的GPT,用的是Transformer的Decoder架构,参数和BERT差不多。它们都发表于2018年,然后分别走上了两条不同的路。

GPT,Generati【【微信】】rmer,没错了,就是ChatGPT的那个GPT,中文叫「生成式预训练Transformer」。生成式的意思就是类似语言模型那样,Token by Token生成文本,也就是上面提到的Decoder。预训练刚刚也提过了,就是在大量语料上训练的语言模型。GPT模型从1到4,一共经历了5个版本,中间有个ChatGPT是3.5版,接下来我们分别介绍它们的基本思想。

GPT-1和BERT一样,走的是下游任务微调套路,也就是固定住预训练模型不动,然后在不同下游任务上微调一个模型,如下图所示:

(图6:GPT基本结构,来自GPT论文)

关于左边,我们上面已经介绍过了,用的就是Transformer的架构(GPT中是Decoder),具体里面的子模块可以不用关注。重点看看右边,这里有一个值得注意的地方,就是针对不同的任务输入,都拼接成文本序列,然后丢给Transformer Decoder再通过一个Linear+SoftMax输出结果。Linear是一种最基础的网络结构,SoftMax我们前面介绍过,主要用来把输出映射到概率分布(和为1)。这种拼接输入的方法在当时那个大模型时代非常流行的,紧跟其后的BERT也是类似的方式。这样统一的处理方法能够减少不同任务对模型的改动。反正不管什么任务,都想方设法搞成一个序列就行。

GPT这篇文章还有几个点在当时看起来可能没啥感觉,但现在回看却有点意思(就像乔布斯说的dot)。第一个是预训练层数和任务表现的关系,如左下图所示;第二个是训练参数数量和模型性能关系。

(图7:左图是GPT参数量与效果图,右图是Zero-Shot能力,来自GPT论文)

上图可以得出两个基本结论:第一,预训练模型中的每一层都包含用于解决目标任务的有用功能,说明多层有更多能力;第二,随着参数的增加,Zero-Shot获得更好的性能。简单总结来看就是,模型大了不仅能学到更多知识,有助于解决下游任务,还表现出了Zero-Shot能力。

Zero-Shot是指直接给模型任务输入让它输出任务结果;Few-Shot是给模型提供一些示例,然后再给出任务,让它给出输出结果。

好了,有了上面的结论,很自然会怎么样?是不是想看看更多层(更多参数)的表现如何?于是半年多后GPT-2来了,参数量从GPT的110M增加到了1.5B,十倍于前者。更有意思的是,在GPT论文的博客中有一个「未来工作」,位于第一个的就是扩大规模,还有两个分别是提升微调和更好地理解为什么生成式预训练能提升理解(NLU)能力。

GPT发表于2018年6月,GPT-2发表于2019年2月,就是前者的升级版:一个是扩大规模,再就是Zero-Shot。如果说前者是观察到了这个现象,那后者就是进一步研究这个现象。请看下面这张图:

(图8:参数量和Zero-Shot表现,来自GPT-2论文)

纵坐标是不同任务的评估指标,横坐标是参数量,效果一目了然。进一步验证了前面的想法,那下一步要做的就是继续扩大规模……不过且慢,在此之前我们不妨看一下GPT-2中的Token生成策略,也就是生成下一个Token时的方法。前面第一部分我们提到过比较优秀的Beam Search,不过它有两个比较明显的问题,第一是生成的内容容易重复;第二是高质量的文