当前位置:首页 » 网页前端 » elmo怎么使用脚本
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

elmo怎么使用脚本

发布时间: 2022-11-13 13:15:15

❶ mdi文件怎么打开,急用

office不可以吗?

什么提示没有?

❷ 05-ELMo/BERT/GPT-NLP预训练模型

这里可以参考CSDN上的文章-BERT原理和实践: https://blog.csdn.net/jiaowoshouzi/article/category/9060488

在解释BERT,ELMO这些预训练模型之前,我们先看一下很久之前的计算机是如何读懂文字的?

每个字都有自己的独特的编码。但是这样是有弊端的,字和字之间的关联关系是无法得知的,比如计算机无法知道dog和cat都是动物,它反而会觉得bag和dog是比较相近的。

所以后来就有了Word Class,将一系列的词进行分类然后让一类词语和一类词语之间更有关联,但是这样的方法太过于粗糙,比如dog,cat,bird是一类,看不出哺乳动物鸟类的区别。

在这个基础之上,我们有了Word Embedding,Word Embedding我们可以想象成是一种soft的word class,每个词都用向量来表示,它的向量维度可能表示这个词汇的某种意思,如图中dog,cat,rabbit的距离相比其他更近。那么word embendding是如何训练出来的,是根据每个词汇的上下文所训练的。

每个句子都有bank的词汇,四个bank是不同的token,但是同样的type。(注:token-词例, type-词型, class-词类 or token是出现的总次数(还有种理解是token是具有一定的句法语义且独立的最小文本成分。 ),type是出现的不同事物的个数。)
对于典型的Word Embedding认为,每个词type有一个embedding,所以就算是不同的token只要是一样的type那么word embedding就是一样的,语义也就是一样的。

而事实上并非如此,1,2句bank指的是银行,3,4为水库。所以我们希望让机器给不同意思的token而且type还一致,给予不同的embedding。在这个问题上,之前的做法是从字典中去查找这个词包含几种意思,但是这样的做法显然跟不上现实中词语的一些隐含的含义。比如bank有银行的意思,与money一起是银行的意思,而与blood一起却是血库的意思。

所以我们想让机器今天进一步做到每一个word token都可以有自己的embedding(之前是每个type有一个embedding或者有固定的一个或多个embedding),那么怎么知道一个word应该有怎样的embedding呢?我们可以取决于该词的上下文,上下文越相近的token它们就会越相近的embedding。比如之前提到的bank,下面两个句子它们的word token的embedding可能是相近的,而和上面的word token的embedding是相远的。

所以我们想使用一种能够基于上下文的Contextual word Embedding来解决一词多义的问题。

这里使用ELMO可以做到这件事情,即每个word token拥有不同的word embedding。(右上角动物是芝麻街(美国公共广播协会(PBS)制作播出的儿童教育电视节目)里的角色)。
它是基于RNN的预训练模型,它只需要搜集大量语料(句子)且不需要做任何标注,就可以训练这个基于RNN的语言模型,预测下一个token是什么,学习完了之后就得到了上下文的embedding。因为我们可以将RNN的隐藏层中的某一节点拿出来(图中橙蓝色节点),它就是输入当前结点的词汇的word embedding。

从当计算识别到<BOS>,模型训练开始。首先输入"潮水",然后当作输入输出"退了",退了当做输入输出"就"。

假设当前要得到”退了”这个词的上下文embedding,首先,因为前边的RNN只考虑到了前文而没有考虑到后文,所以这里就使用了同前文一样的反向的RNN。然后,它从句尾开始进行,比如给它喂”知道”,它就要预测”就”,给它喂”就”,它就要预测”退了”。这时候就不仅考虑每个词汇的前文,还会考虑每个词的后文。最后将正向和逆向得到的两个不同的上下文embedding(因为方向不同训练结果也不一样)拼接起来。

现在我们训练的程度都会越来越深度,当层数增加,这样就会产生Deep的RNN,因为很多层,而且每一层都会产生上下文Embedding,那么我们到底应该使用哪一层?每一层这种深度LSTM中的每个层都可以生成潜在表示(方框处)。同一个词在不同的层上会产生不同的Embedding,那么我们应该使用哪一层呢?ELMo的策略是每一层得到的上下文embedding都要。

在上下文embedding的训练模型中,每个词输入进去都会有一个embedding输出来。但是在ELMo中,每个词汇输入进去,都会得到不止一个embedding,因为每层的RNN都会给到一个embedding,ELMo将它们统统加起来一起使用。
以图中为例,这里假设ELMo有两层RNN,这里是将α1(黄色,第一层得到的embedding)和α2(绿色,第二层得到embedding)加起来得到蓝色的embedding,并做为接下来要进行不同任务的输入。

但是这里存在一些问题,α1和α2是学习得到的,而且它是根据当前要进行的任务(如QA,POS of tagging ),然后根据接下来要进行的这些任务一起被学习出来。所以就导致不同任务导向下的α1和α2也不一样。

ELMo的论文中提到,在不同任务下(SRL,Coref,SNLI,SQuAD,SST-5)。蓝色的上下文embedding在经过token(这里为没有经过上下文的embedding),LSTM1,LSTM2后,它在不同阶段需要的weight也不一样。

BERT相当于是Transformer的Encoder部分,它只需要搜集大量的语料去从中学习而不经过标注(不需要label),就可以将Encoder训练完成。如果之前要训练Encoder,我们需要通过一些任务来驱动学习(如机器翻译)。

BERT就是句子给进去,每个句子给一个embedding。
这里可以回忆下,Transformer的Enoder中有self-attention layer,就是给进去一个sequence,输出也得到一个sequence。

虽然图中使用是用词作为单元进行输入,但是在使用BERT进行中文的训练时,字会是一个更好的选择。比如,我们在给BERT进行输入时,用one-hot给词进行编码,但是词在中文中数量庞大,会导致维度过高。但是,字的话相对会少很多,特别是中文(大约几千个,可以穷举)。这样以字为单位进行输入会占很大优势。

共有两种方法,一种是Mask LM遮盖语言模型,另一种是Next Sentence Prediction下一句预测。

下面用上图的例子来理解BERT是怎么样来进行填空的:
1)这里假设在所有句子中的词汇的第2个位置上设置一个<MASK>;
2)接下来把所有的词汇输入BERT,然后每个输入的token都会得到一个embedding;
3)接下来将设置为<MASK>的embedding输入到Linear Multi-class Classifier中中,要求它预测被<MASK>的词汇是哪个词汇?

但是这个Linear Multi-class Classifier它仅仅是一个线性分类器,所以它的能力十分弱,这也就需要在之前的BERT模型中需要将它的层数等参数设计的相当好,然后得到非常出色的representation,便于线性分类器去训练。
那么我们怎么知道最后得到的embedding是什么样的呢?如果两个<MASK>下的词汇(输入时设置的<MASK>和最后预测的<MASK>)都放回原来的位置而且没有违和感(就是语句还算通顺),那它们就有类似的embedding(比如退下和落下)。

如图中,给定两个句子1)醒醒吧 和 2)你没有妹妹。其中特殊符号[SEP]是告诉BERT两个句子的分隔点在哪里。

特殊符号[CLS]一般放在句子的开头,它用来告诉BERT从这开始分类任务,[CLS]输入BERT后得到embedding然后通过Linear Binary Classifier得出结果说明:经过BERT预测后现在我们要预测的两个句子是接在一起 or 不应该被接在一起。

这里可能会有疑问,为什么不将[CLS]放在句尾,等BERT训练完两个句子再输出结果?

对于上图中的任务,BERT现在要做的事情就是给定两个句子,让BERT输出结果这两个句子是不是应该接在一起?
所以在语料库的大量句子中,我们是知道哪些句子是可以接在一起的,所以也需要我们告诉BERT哪些句子是接在一起的。

Linear Binary Classifier和BERT是一起被训练的,通过预测下一句这个任务,我们就可以把将BERT部分的最优参数训练出来。

现在我们知道了任务一和任务二,在原论文中两种任务是要同时进行的,这样才能将BERT的性能发挥到最佳。

现在我们知道了BERT要做什么事情,那么我们要如何去使用它?共有四种方法。论文中是将【BERT模型和接下来你要进行的任务】结合在一起做训练。

第一种,假设当前任务是Input一个sentence,out一个class,举例来说输入一句话来判断分类。

训练流程:1)将做要分类的句子丢给BERT;
2)需要在句子开始加上分类的特殊符号,这个特殊符号经过BERT输出的embedding经过线性分类器,输出结果为当前的句子属于的类别是真还是假。BERT和Linear Classifier的参数一起进行学习;
3)这里的Linear Classifier是Trained from Scratch是白手起家从头开始,即它的参数随机初始化设置,然后开始训练;
4)而BERT则是加上Fine-tune微调策略(一种迁移学习方式*),例如Generative Pre-trained Transformer(OpenAI GPT生成型预训练变换器)(Radford等,2018),引入了最小的任务特定参数,并通过简单地微调预训练参数在下游任务中进行训练。

*这里不得不提一下迁移学习中的Fine-tune,这里可以参考csdn的一篇文章: https://blog.csdn.net/u013841196/article/details/80919857

( https://arxiv.org/abs/1805.12471 )
第二种,假设当前任务是input一个sentence,输出这个句子中的每个词汇属于正例还是负例。举例现在的任务是slot filling填槽任务(填槽指的是为了让用户意图转化为用户明确的指令而补全信息的过程)(另一种解释是从大规模的语料库中抽取给定实体(query)的被明确定义的属性(slot types)的值(slot fillers))(槽可以理解为实体已明确定义的属性),输入的句子是 arrive Taipei on November 2nd输出的槽是other dest on time time
训练流程:
1)将句子输入BERT,句子中的每个词汇都会映射出一个embedding;
2)每个词汇的embedding输入Linear Classifier,输出结果;
3)Linear Classifier 白手起家和Bert微调的方式一起去做学习。

第三种,假设当前任务是input输入两个句子,输出class。举例现在要进行自然语言预测,让机器根据premise前提,预测这个hypothesis假设是True还是False还是unknown不知道。实际上,我们可以把这个任务当成三分类问题。
训练过程:
1)在一个sentence前设置特殊符号[CLS],然后在要输入的两个sentence中间设置[SEP]分隔符号;
2)将两个sentence连同特殊符号一起输入到BERT中;
3)将[CLS]输入BERT后得到的embedding,再把它输入linear Classifier中,得到class。

如图所示,假设gravity的token序号是17,即 ,我们现在有一个问题通过QA Model后得到的s=17,e=17,那么答案就是 为gravity;
同理,假设within a cloud的序号顺序是77到79,即 到 ,我们现在有一个问题通过QA Model后得到的s=77,e=79,那么答案就是 为within a cloud。

https://arxiv.org/abs/1905.05950
https://openreview.net/pdf?id=SJzSgnRcKX

这张图显示了BERT从0-24层的层数在针对不同的NLP任务上的表现。

https://d4mucfpksywv.cloudfront.net/better-language-models/language_models_are_unsupervised_multitask_learners.pdf

而所谓的GPT,它其实就是Transformer的Decoder。

我们简单的描述下GPT的训练过程:这里我们input<BOS>这个token和潮水,想要GPT预测输出“退了”这个词汇。

1)首先输入[BOS](begin of sentence)和潮水,通过Word Embedding再乘上matrix W变成a 1到a 4,然后把它们丢进self-attention 层中,这时候每一个input都分别乘上3个不同的matrix产生3个不同的vector,分别把它们命名为q,k,v。

q代表的是query (to match others用来去匹配其它的向量)
k代表的是key (to be matched用来去被query匹配的向量)
v代表的是value(information to be extracted用来被抽取的信息的向量)

2)现在要做的工作就是用每个query q 去对每个 key k做attention(吃2个向量,输出就是告诉你这2个向量有多么匹配或者可以说输入两个向量输出一个分数alpha(而怎么去吃2个向量output一个分数,有很多不同的做法))。这里要预测潮水的下一个词,所以乘 , 乘上 , 乘上 再经过soft-max分别得到 到 。

3)我们用 和每一个v相乘, 和 相乘加上 和 相乘。以此类推并相加,最终得到 。

4)然后经过很多层的self-attention,预测得到”退了”这个词汇。

同理,现在要预测”退了”的下一个词汇,按照前面的流程可以得到 ,然后经过很多层的self-attention层,得到”就”这个词汇。

GPT的神奇之处在于它可以在完全没有训练数据的情况下,就可以做到阅读理解,摘要,翻译。折线图中显示了它在参数量上升的情况下,F1的值的效果。

1.Transformer的问题:
word Embedding 无上下文
监督数据太少

解决方法:
Contextual Word Embedding

2.ELMo( E mbeddings from L anguages Mo del)
- 多层双向的LSTM的NNLM
- RNN-based language models(trained from lots of sentences)
ELMo的问题:
Contextual Word Embedding作为特征
不适合特定任务

3.OpenAI GPT的改进
根据任务Fine-Tuning
使用Transformer替代RNN/LSTM

OpenAI GPT的问题:
单向信息流的问题
Pretraining(1)和Fine-Tuning(2)不匹配
解决办法:
Masked LM
NSP Multi-task Learning
Encoder again

Tips:
- 使用中文模型
- max_seq_length可以小一点,提高效率
- 内存不够,需要调整train_batch_size
- 有足够多的领域数据,可以尝试Pretraining

❸ BERT详解(附带ELMo、GPT 介绍)

首先我会详细阐述 BERT 原理,然后简单介绍一下 ELMO 以及 GPT

BERT 全称为 B idirectional E ncoder R epresentation from T ransformer,是 Google 以 无监督的方式利用大量无标注文本 “炼成”的语言模型,其架构为 Transformer 中的 Encoder(BERT=Encoder of Transformer)

我在 Transformer 详解 中已经详细的解释了所有 Transformer 的相关概念,这里就不再赘述

以往为了解决不同的 NLP 任务,我们会为该任务设计一个最合适的神经网络架构并做训练,以下是一些简单的例子

不同的 NLP 任务通常需要不同的模型,而设计这些模型并测试其 performance 是非常耗成本的(人力,时间,计算资源)。如果有一个能 直接处理各式 NLP 任务的通用架构 该有多好?

随着时代演进,不少人很自然地有了这样子的想法,而 BERT 就是其中一个将此概念付诸实践的例子

Google 在预训练 BERT 时让它同时进行两个任务:
1. 漏字填空
2. 下个句子预测

对正常人来说,要完成这两个任务非常简单。只要稍微看一下前后文就知道完形填空任务中 [MASK] 里应该填 退了 ;而 醒醒吧 后面接 你没有妹妹 也十分合理(?)

接下来我会分别详细介绍论文中这两个任务的设计细节

在 BERT 中,Masked LM(Masked Language Model)构建了语言模型,简单来说,就是 随机遮盖或替换 一句话里面的任意字或词,然后让模型通过上下文预测那一个被遮盖或替换的部分,之后 做 Loss 的时候也只计算被遮盖部分的 Loss ,这其实是一个很容易理解的任务,实际操作如下:

这样做的好处是,BERT 并不知道 [MASK] 替换的是哪一个词,而且 任何一个词都有可能是被替换掉的,比如它看到的 apple 可能是被替换的词 。这样强迫模型在编码当前时刻词的时候 不能太依赖当前的词 ,而要考虑它的上下文,甚至根据上下文进行 "纠错"。比如上面的例子中,模型在编码 apple 时,根据上下文 my dog is,应该 把 apple 编码成 hairy 的语义而不是 apple 的语义

我们首先拿到属于上下文的一对句子,也就是两个句子,之后我们要在这两个句子中加一些特殊的 token: [CLS]上一句话[SEP]下一句话[SEP] 。也就是在句子开头加一个 [CLS] ,在两句话之间和句末加 [SEP] ,具体地如下图所示

可以看到,上图中的两句话明显是连续的。如果现在有这么一句话 [CLS] 我的狗很可爱 [SEP] 企鹅不擅长飞行 [SEP] ,可见这两句话就 不是连续的 。在实际训练中,我们会让这两种情况出现的数量为** 1:1**

Token Embedding 就是正常的词向量,即 PyTorch 中的 nn.Embedding()
Segment Embedding 的作用是用 embedding 的信息让模型 分开上下句 ,我们给上句的 token 全 0,下句的 token 全 1,让模型得以判断上下句的起止位置,例如

Position Embedding 和 Transformer 中的不一样,不是三角函数,而是 学习出来的

BERT 预训练阶段实际上是将上述两个任务结合起来,同时进行,然后将所有的 Loss 相加,例如

BERT 的 Fine-Tuning 共分为 4 种类型,以下内容、图片均来自台大李宏毅老师 Machine Learning 课程 (以下内容 图在上,解释在下)

为什么要用CLS?
这里李宏毅老师有一点没讲到,就是为什么要用第一个位置,即 [CLS] 位置的 output。这里我看了网上的一些博客,结合自己的理解解释一下。因为 BERT 内部是 Transformer,而 Transformer 内部又是 Self-Attention, 所以 [CLS] 的 output 里面肯定含有整句话的完整信息 ,这是毋庸置疑的。但是 Self-Attention 向量中,自己和自己的值其实是占大头的,现在假设使用 的 output 做分类,那么这个 output 中实际上会更加看重 ,而 又是一个有实际意义的字或词,这样难免会影响到最终的结果。但是 [CLS] 是没有任何实际意义的,只是一个占位符而已,所以就算 [CLS] 的 output 中自己的值占大头也无所谓。当然你 也可以将所有词的 output 进行 concat,作为最终的 output

首先将问题和文章通过 [SEP] 分隔,送入 BERT 之后,得到上图中黄色的输出。此时我们还要训练两个 vector,即上图中橙色和黄色的向量。首先将橙色和所有的黄色向量进行 dot proct,然后通过 softmax,看哪一个输出的值最大,例如上图中 对应的输出概率最大,那我们就认为 s=2

同样地,我们用蓝色的向量和所有黄色向量进行 dot proct,最终预测得 的概率最大,因此 e=3。最终,答案就是 s=2,e=3

你可能会觉得这里面有个问题,假设最终的输出 s>e 怎么办,那不就矛盾了吗?其实在某些训练集里,有的问题就是没有答案的,因此此时的预测搞不好是对的,就是没有答案

以上就是 BERT 的详细介绍,参考以下文章

ELMo是Embedding from language Model的缩写,它通过无监督的方式对语言模型进行预训练来学习单词表示

这篇论文的想法其实非常简单,但是效果却很好。它的思路是用 深度的双向 Language Model 在大量未标注数据上训练语言模型 ,如下图所示

在实际任务中,对于输入的句子,我们使用上面的语言模型来处理它,得到输出向量,因此这可以看作是一种 特征提取 。但是 ELMo 与普通的 Word2Vec 或 GloVe 不同,ELMo 得到的 Embedding 是 有上下文信息

具体来说,给定一个长度为 N 的句子,假设为 ,语言模型会计算给定 的条件下出现 的概率:

传统的 N-gram 模型 不能考虑很长的历史 ,因此现在的主流是使用 多层双向 LSTM 。在时刻 ,LSTM 的第 层会输出一个隐状态 ,其中 , 是 LSTM 的层数。最上层是 ,对它进行 softmax 之后得到输出词的概率

类似的,我们可以用 一个反向 来计算概率:

通过这个 LSTM,我们可以得到 。我们的损失函数是这两个 LSTM 的 加和 :

这两个 LSTM 有各自的参数 和 ,而 Word Embedding 参数 和 Softmax 参数 是共享的

为了用于下游(DownStream)的特定任务,我们会把不同层的隐状态组合起来,具体组合的参数是根据不同的特定任务学习出来的,公式如下:

GPT 得到的语言模型参数不是固定的,它会根据特定的任务进行调整(通常是微调),这样的到的句子表示能更好的适配特定任务。它的思想也很简单,使用 单向 Transformer 学习一个语言模型 ,对句子进行无监督的 Embedding,然后 根据具体任务对 Transformer 的参数进行微调 。GPT 与 ELMo 有两个主要的区别:

这里解释一下上面提到的 单向 Transformer 。在 Transformer 的文章中,提到了 Encoder 与 Decoder 使用的 Transformer Block 是不同的。在 Decoder Block 中,使用了 Masked Self-Attention ,即句子中的每个词都只能对 包括自己在内的前面所有词进行 Attention ,这就是单向 Transformer。GPT 使用的 Transformer 结构就是将 Encoder 中的 Self-Attention 替换成了 Masked Self-Attention ,具体结构如下图所示

训练的过程也非常简单,就是将 n 个词的词嵌入 ( ) 加上位置嵌入 ( ),然后输入到 Transformer 中,n 个输出分别预测该位置的下一个词

这里的位置编码没有使用传统 Transformer 固定编码的方式,而是动态学习的

Pretraining 之后,我们还需要针对特定任务进行 Fine-Tuning。假设监督数据集合 的输入 是一个词序列 ,输出是一个分类的标签 ,比如情感分类任务

我们把 输入 Transformer 模型,得到最上层最后一个时刻的输出 ,将其通过我们新增的一个 Softmax 层(参数为 )进行分类,最后用 CrossEntropyLoss 计算损失,从而根据标准数据调整 Transformer 的参数以及 Softmax 的参数 。这等价于最大似然估计:

正常来说,我们应该调整参数使得 最大,但是 为了提高训练速度和模型的泛化能力 ,我们使用 Multi-Task Learning,同时让它最大似然 和

这里使用的 还是之前语言模型的损失(似然),但是使用的数据不是前面无监督的数据 ,而是使用当前任务的数据 ,而且只使用其中的 ,而不需要标签

针对不同任务,需要简单修改下输入数据的格式,例如对于相似度计算或问答,输入是两个序列,为了能够使用 GPT,我们需要一些特殊的技巧把两个输入序列变成一个输入序列

ELMo 和 GPT 最大的问题就是 传统的语言模型是单向的 —— 我们根据之前的历史来预测当前词。但是我们不能利用后面的信息。比如句子 The animal didn’t cross the street because it was too tired 。我们在编码 it 的语义的时候需要同时利用前后的信息,因为在这个句子中, it 可能指代 animal 也可能指代 street 。根据 tired ,我们推断它指代的是 animal 。但是如果把 tired 改成 wide ,那么 it 就是指代 street 了。传统的语言模型,都 只能利用单方向的信息 。比如前向的 RNN,在编码 it 的时候它看到了 animal 和 street ,但是它还没有看到 tired ,因此它不能确定 it 到底指代什么。如果是后向的 RNN,在编码的时候它看到了 tired ,但是它还根本没看到 animal ,因此它也不能知道指代的是 animal 。 Transformer 的 Self-Attention 理论上是可以同时关注到这两个词的,但是根据前面的介绍,为了使用 Transformer 学习语言模型,必须 用 Mask 来让它看不到未来的信息 ,所以它也不能解决这个问题的

根据上文内容预测下一个可能跟随的单词,就是常说的自左向右的语言模型任务,或者反过来也行,就是根据下文预测前面的单词,这种类型的LM被称为自回归语言模型。(GPT,ELMO)GPT 就是典型的自回归语言模型。ELMO尽管看上去利用了上文,也利用了下文,但是本质上仍然是自回归LM,这个跟模型具体怎么实现有关系。ELMO是做了两个方向(从左到右以及从右到左两个方向的语言模型),但是是分别有两个方向的自回归LM,然后把LSTM的两个方向的隐节点状态拼接到一起,来体现双向语言模型这个事情的。所以其实是两个自回归语言模型的拼接,本质上仍然是自回归语言模型。

自回归语言模型有优点有缺点,缺点是只能利用上文或者下文的信息,不能同时利用上文和下文的信息,当然,貌似ELMO这种双向都做,然后拼接看上去能够解决这个问题,因为融合模式过于简单,所以效果其实并不是太好。它的优点,其实跟下游NLP任务有关,比如生成类NLP任务,比如文本摘要,机器翻译等,在实际生成内容的时候,就是从左向右的, 自回归语言模型天然匹配这个过程 。而Bert这种DAE模式,在生成类NLP任务中,就面临训练过程和应用过程不一致的问题,导致 生成类的NLP任务到目前为止都做不太好

自回归语言模型只能根据上文预测下一个单词,或者反过来,只能根据下文预测前面一个单词。相比而言,Bert通过 在输入X中随机Mask掉一部分单词 ,然后预训练过程的主要任务之一是根据上下文单词来预测这些被Mask掉的单词,如果你对Denoising Autoencoder比较熟悉的话,会看出,这确实是典型的DAE的思路。那些被Mask掉的单词就是在输入侧加入的所谓噪音。类似Bert这种预训练模式,被称为DAE LM。

这种DAE LM的优缺点正好和自回归LM反过来,它能比较自然地融入双向语言模型,同时看到被预测单词的上文和下文,这是好处。缺点是啥呢? 主要在输入侧引入[Mask]标记,导致预训练阶段和Fine-tuning阶段不一致的问题 ,因为Fine-tuning阶段是看不到[Mask]标记的。DAE吗,就要引入噪音,[Mask] 标记就是引入噪音的手段,这个正常。

XLNet的出发点就是:能否 融合自回归LM和DAE LM两者的优点 。就是说如果站在自回归LM的角度,如何引入和双向语言模型等价的效果;如果站在DAE LM的角度看,它本身是融入双向语言模型的,如何抛掉表面的那个[Mask]标记,让预训练和Fine-tuning保持一致。当然,XLNet还讲到了一个Bert被Mask单词之间相互独立的问题。

❹ OP是什么的缩写

OP(片头曲(OpeningSong))

片头曲(オープニングテーマ/ソング, Opening Theme/Song, 简称OP)是电视剧或电视动画剧初播放的乐曲、歌曲,(但日本动画和电视剧常在前情提要前)。

数目如多于一首歌的,在随后发行的原声CD、及动画资料中会以OP1、OP2或主题曲(片头曲)一、主题曲(片头曲)二等来表示。

部分作品的片头曲里会显示原作或编剧、导演、制作、赞助商、片头曲词曲歌手等讯息。有些没有片尾曲的作品,会加上脚本、声优或演员等(因此有像海贼王片头曲一样长达2分30秒的)。

这些只是常例,依作品会有不同情形,一首片头曲通常会用13~26集(一季到两季份),超长番的话有可能持续一年。

此外,部分电视公司在播放外购电视剧或动画时会将其剪片,或是不播出,也有转为其他歌曲的。

(4)elmo怎么使用脚本扩展阅读

在不同国家上演、播放的作品,有时会由于不同的风俗民情等因素,会另请填词人以本土语言重新填写歌词,并会另请歌手、配音演员或其他人士代唱。

例如欧美地区,几乎都会把歌曲与歌词重新改写,影像则是会和原作品有部分差异。台湾、香港动画歌曲中,亦有部分歌曲有改唱(使用原曲,以本地语言填词和主唱)。

一般而言,主题曲是指片头曲;但有时主题曲是另外一首,而非片头曲;而且有时片尾曲(或插曲)也被视为主题曲。

❺ 一文看尽2018全年AI技术大突破:NLP跨过分水岭、CV研究效果惊人

量子位 出品 | 公众号 QbitAI

2018,仍是AI领域激动人心的一年。

这一年成为NLP研究的分水岭,各种突破接连不断;CV领域同样精彩纷呈,与四年前相比GAN生成的假脸逼真到让人不敢相信;新工具、新框架的出现,也让这个领域的明天特别让人期待……近日,Analytics Vidhya发布了一份2018人工智能技术总结与2019趋势预测报告,原文作者PRANAV DAR。量子位在保留这个报告架构的基础上,对内容进行了重新编辑和补充。这份报告总结和梳理了全年主要AI技术领域的重大进展,同时也给出了相关的资源地址,以便大家更好的使用、查询。报告共涉及了五个主要部分:

下面,我们就逐一来盘点和展望,嘿喂狗~

2018年在NLP 历史 上的特殊地位,已经毋庸置疑。

这份报告认为,这一年正是NLP的分水岭。2018年里,NLP领域的突破接连不断:ULMFiT、ELMo、最近大热的BERT……

迁移学习成了NLP进展的重要推动力。从一个预训练模型开始,不断去适应新的数据,带来了无尽的潜力,甚至有“NLP领域的ImageNet时代已经到来”一说。

正是这篇论文,打响了今年NLP迁移学习狂欢的第一枪。论文两名作者一是Fast.ai创始人Jeremy Howard,在迁移学习上经验丰富;一是自然语言处理方向的博士生Sebastian Ruder,他的NLP博客几乎所有同行都在读。两个人的专长综合起来,就有了ULMFiT。想要搞定一项NLP任务,不再需要从0开始训练模型,拿来ULMFiT,用少量数据微调一下,它就可以在新任务上实现更好的性能。

他们的方法,在六项文本分类任务上超越了之前最先进的模型。详细的说明可以读他们的论文:https://arxiv.org/abs/1801.06146Fast.ai网站上放出了训练脚本、模型等:http://nlp.fast.ai/category/classification.html

这个名字,当然不是指《芝麻街》里那个角色,而是“语言模型的词嵌入”,出自艾伦人工智能研究院和华盛顿大学的论文Deep contextualized word representations,NLP顶会NAACL HLT 2018的优秀论文之一。

ELMo用语言模型(language model)来获取词嵌入,同时也把词语所处句、段的语境考虑进来。

这种语境化的词语表示,能够体现一个词在语法语义用法上的复杂特征,也能体现它在不同语境下如何变化。

当然,ELMo也在试验中展示出了强大功效。把ELMo用到已有的NLP模型上,能够带来各种任务上的性能提升。比如在机器问答数据集SQuAD上,用ELMo能让此前最厉害的模型成绩在提高4.7个百分点。

这里有ELMo的更多介绍和资源:

https://allennlp.org/elmo

它由Google推出,全称是 B idirectional E ncoder R epresentations from T ransformers,意思是来自Transformer的双向编码器表示,也是一种预训练语言表示的方法。从性能上来看,没有哪个模型能与BERT一战。它在11项NLP任务上都取得了最顶尖成绩,到现在,SQuAD 2.0前10名只有一个不是BERT变体:

如果你还没有读过BERT的论文,真的应该在2018年结束前补完这一课:https://arxiv.org/abs/1810.04805另外,Google官方开源了训练代码和预训练模型:https://github.com/google-research/bert如果你是PyTorch党,也不怕。这里还有官方推荐的PyTorch重实现和转换脚本:https://github.com/huggingface/pytorch-pretrained-BERT

BERT之后,NLP圈在2018年还能收获什么惊喜?答案是,一款新工具。

就在上周末,Facebook开源了自家工程师们一直在用的NLP建模框架PyText。这个框架,每天要为Facebook旗下各种应用处理超过10亿次NLP任务,是一个工业级的工具包。

(Facebook开源新NLP框架:简化部署流程,大规模应用也OK)

PyText基于PyTorch,能够加速从研究到应用的进度,从模型的研究到完整实施只需要几天时间。框架里还包含了一些预训练模型,可以直接拿来处理文本分类、序列标注等任务。

想试试?开源地址在此:

https://github.com/facebookresearch/pytext

它能主动打电话给美发店、餐馆预约服务,全程流畅交流,简直以假乱真。Google董事长John Hennessy后来称之为“非凡的突破”,还说:“在预约领域,这个AI已经通过了图灵测试。”Duplex在多轮对话中表现出的理解能力、合成语音的自然程度,都是NLP目前水平的体现。如果你还没看过它的视频……

NLP在2019年会怎么样?我们借用一下ULMFiT作者Sebastian Ruder的展望:

今年9月,当搭载BigGAN的双盲评审中的ICLR 2019论文现身,行家们就沸腾了: 简直看不出这是GAN自己生成的

在计算机图像研究史上,BigGAN的效果比前人进步了一大截。比如在ImageNet上进行128×128分辨率的训练后,它的Inception Score(IS)得分166.3,是之前最佳得分52.52分 3倍

除了搞定128×128小图之外,BigGAN还能直接在256×256、512×512的ImageNet数据上训练,生成更让人信服的样本。

在论文中研究人员揭秘,BigGAN的惊人效果背后,真的付出了金钱的代价,最多要用512个TPU训练,费用可达11万美元,合人民币76万元。

不止是模型参数多,训练规模也是有GAN以来最大的。它的参数是前人的2-4倍,批次大小是前人的8倍。

研究论文:https://openreview.net/pdf?id=B1xsqj09Fm

前前后后,Fast.ai团队只用了16个AWS云实例,每个实例搭载8块英伟达V100 GPU,结果比Google用TPU Pod在斯坦福DAWNBench测试上达到的速度还要快40%。这样拔群的成绩,成本价只需要 40美元 ,Fast.ai在博客中将其称作人人可实现。

相关地址: Fast.ai博客介绍:

今年8月,英伟达和MIT的研究团队高出一个 超逼真 高清视频生成AI。

只要一幅动态的语义地图,就可获得和真实世界几乎一模一样的视频。换句话说,只要把你心中的场景勾勒出来,无需实拍,电影级的视频就可以自动P出来:

除了街景,人脸也可生成:

这背后的vid2vid技术,是一种在生成对抗性学习框架下的新方法:精心设计的生成器和鉴别器架构,再加上时空对抗目标。

这种方法可以在分割蒙版、素描草图、人体姿势等多种输入格式上,实现高分辨率、逼真、时间相干的视频效果。

好消息,vid2vid现已被英伟达开源。

研究论文:https://tcwang0509.github.io/vid2vid/paper_vid2vid.pdf

GitHub地址https://github.com/NVIDIA/vid2vid

相关地址

相关地址