ELMO

    原始论文:Deep contextualized word representations

    ELMO,是Embedding from Language Model的缩写( Peters等人,2018年),通过无监督预训练多层双向LSTM模型来学习带上下文信息的(Contextualized)单词表示。

双向语言模型

    双向语言模型( bi-LM )是ELMO的基础。模型的输入是由n个token构成的序列,( x1,…,xn),语言模型根据历史的序列预测(x1.....xi-1)下一个token xi的概率。

 在正向计算(forwar pass)过程中,根据历史之前的序列(x1.....xi-1)预测第i个token xi的概率,

在反向计算(backward pass)过程中,根据历史之后的序列(xi+1......xn)预测第i个token xi的概率,

两个方向上的预测过程都是由多层LSTMs建模的,给定输入token xi得到隐状态为h→i,ℓ和h←i,ℓ。最后一层的输出的隐状态为hi,L=[h→i,L;h←i,L]作为输出层的输入,用于得到最终的输出yi。模型共享embedding层和softmax层,分别由θe和θs参数化表示。

 

该模型的目标函数(loss function)是最小化两个方向的负对数似然( =最大化真实单词的对数似然) :

ELMO表示

在L层biLM之上,ELMO通过学习task-specific线性组合,将所有隐状态stack在一起。token xi的隐状态表示包含2L+1向量:

 Ri={hi,ℓ∣ℓ=0,…,l},其中,h0,ℓ代表embedding层的输出,且hi,ℓ=[h→i,ℓ;h←i,ℓ]。

    S(task)表示加权求和中每个任务的权重(通过softmax进行归一化)。缩放因子γ(task)用于校正biLM隐状态分布和task-specific表示分布之间的不一致性。

为了评估不同层的隐状态具体捕获了什么样的信息,ELMO分别被应用于语义密集型(semantic-intensive)和语法密集型(syntax-intensive)任务,使用biLM的不同层中的表示(Representation)处理:

语义(Semantic)任务:词义消歧( word sense disambiguation,WSD )任务强调给定语境下单词的含义。biLM最底层的输出的表示比第一层的输出的表示获得更好的效果。

    句法(Syntax)任务:词性标注任务(POS)旨在推断一个单词在一个句子中的语法角色。实验证明使用biLM第一层的输出的表示可以比最底层的输出表示获得更高的精度。

    对比研究表明,ELMO底层表示学习到了很多句法特征,而在高层表示学习到更多语义特征。

 语义(Semantic)任务:词义消歧( word sense disambiguation,WSD )任务强调给定语境下单词的含义。biLM最底层的输出的表示比第一层的输出的表示获得更好的效果。

    句法(Syntax)任务:词性标注任务(POS)旨在推断一个单词在一个句子中的语法角色。实验证明使用biLM第一层的输出的表示可以比最底层的输出表示获得更高的精度。

对比研究表明,ELMO底层表示学习到了很多句法特征,而在高层表示学习到更多语义特征。

因为不同的层倾向于学习不同类型的信息,所以将它们堆叠在一起会更有帮助。

 在下游任务中使用ELMO

在下游任务中使用ELMO

    类似于CoVe可以帮助不同类型的下游任务,ELMO embedding也可以嵌入到下游不同类型任务的模型中。此外,对于某些任务(如SNLI和SQuAD,但不是SRL ),把ELMO embedding加入到输出端也有帮助。

    ELMO提出的改进对于具有少量监督训练数据集的任务来说是非常有帮助的。有了ELMO,我们也可以用更少的标记数据来获得更好的性能。

    总结:语言模型的预训练是无监督的,理论上,由于无标签的文本语料库非常丰富,预训练可以尽可能地扩大规模。然而,它仍然依赖于task-specific的模型,因此这种改进只是渐进的,而为每个任务寻找一个好的模型架构仍然不是一件容易的事情。

ELMO仍然存在两个比较明显的不足

    1、使用Bi-LSTM模型构建语言模型,捕捉语义、长距离依赖和task-specific特征抽取、并行计算的能力弱于基于Self-Attention的Transformer模型。论文《Why Self-Attention? A Targeted Evaluation of Neural Machine Translation Architectures》,已经证明Transformer已经在捕捉长距离特征依赖、语义特征、任务相关特征和并行计算的能力,优于LSTM和CNN。关于CNN、LSTM和Transformer的详细对比,可以参考张俊林老师的文章:《放弃幻想,全面拥抱Transformer:自然语言处理三大特征抽取器(CNN/RNN/TF)比较》。

 2、通过拼接(word embedding,Forward hidden state,backward hidden state)方式融合特征的方式,削弱了语言模型特征抽取的能力。

    因此,GPT、BERT、MT-DNN和GPT-2基于Transformer构建LM,解决了问题一;对各种NLP任务进行改造,以适应pre-trained模型,即预训练的模型结构不变,只是改变输入的组织方式,很好的避免了问题2;具体的任务改造基本类似,这里以BERT为例简要介绍一下,后面会详细介绍。

因此,GPT、BERT、MT-DNN和GPT-2基于Transformer构建LM,解决了问题一;对各种NLP任务进行改造,以适应pre-trained模型,即预训练的模型结构不变,只是改变输入的组织方式,很好的避免了问题2;具体的任务改造基本类似,这里以BERT为例简要介绍一下,后面会详细介绍。

NLP中的任务多种多样,大约有60多种,基本可以分为4类

    分类任务:句子分类、情感分类.....

    序列标注任务:词性标注(POS)、实体识别(NER)、分词、语义角色标注(SRL)....

    句子关系推理任务:蕴含关系判断、问答、自然语言推理......

    文本生成任务:机器翻译、摘要抽取、机器创作......

分类任务,输入整个句子,输出一个类别标签;序列标注任务,输入一个token,输出一个类别标签;关系推理,则是将两个句子拼接到一起作为输入,输出两个句子直接的关系。Bert没有给出文本生成的处理方法,GPT-2中给出了Auto-Regressive的方法来训练语言模型,用于文本生成LM的训练,简单来说,输入一句上文,输出一个下一个token,再把该token作为输入,不停地迭代生成一段话。

GPT、BERT、MT-DNN的训练都分成两步,第一步是无监督的预训练,这和ELMO一致,目的是通过无监督的学习,充分利用海量的单语数据学习关于source language的词法、句法和语义相关的feature;第二步是有监督的fine-tuning,将更多地task-specific相关的信息融合到模型表示中,使学习到的只是更加professional,比如BERT当中的Next Sentence预测问题、MT-DNN中给出的Multi-Task的Fine-tuning等等。

因此,对于ELMO的改进主要有两个重要的思路

    1、Task-Specific相关的Multi-Task微调(Fine Tuning),典型代表微软的MT-DNN。

    2、基于Transformer的Generative Pretrain(生成式预训练),典型代表GPT

    这两个思路又是如何产生的呢?首先要介绍下Cross-View训练和ULMFiT模型

     

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

极化码(Polar Code)是由土耳其科学家Erdal Arıkan在2009年提出的一种新型纠错编码技术。它通过利用信道的极化现象,将虚拟信道分为误码率接近0和接近1/2的两类。在编码设计中,数据被放置在误码率极低的信道上,从而实现高效的数据传输。极化码的主要优势在于其理论编码容量能够达到香农限,并且构造方法较为简单。 MATLAB是一种功能强大的数学计算和编程工具,广泛应用于科学研究和工程领域。在极化码的研究中,MATLAB可用于构建编码和解码算法,模拟数据在不同信道条件下的传输效果,验证理论性能,并优化相关参数。 SC(Successive Cancellation,逐位取消)译码是极化码的基本解码方法。它从最可靠的比特开始,依次解码每个虚拟信道,且每个比特的解码结果会影响后续比特的解码,因为它们之间存在依赖关系。虽然SC译码的实现较为简单,但其计算复杂度较高,随着码长的增加,解码时间会线性增长。 SCL(Successive Cancellation List,逐位取消列表)译码是SC译码的改进版本。它通过引入列表机制,同时处理多个路径,从而增强了错误校正能力,并在一定程度上降低了错误率。与SC译码相比,SCL译码虽然需要消耗更多的计算资源,但能够提供更好的性能。 一个完整的MATLAB仿真资源通常包含以下内容: 编码模块:用于实现极化码的生成,包括码字构造和极化矩阵操作等。 信道模型:用于模拟各种通信信道,例如AWGN(加性高斯白噪声)信道或衰落信道。 SC/SCL译码模块:包含SC译码和SCL译码的算法实现。 误码率(BER)计算:通过比较发送和接收的码字,计算误码率,以评估编码性能。 性能曲线绘制:绘制误码率与信噪比(SNR)之间的关系曲线,展示不同译码策略的性能差异。 使用说明:指导用户如何运行仿真,理解代码结构,以及如何调整参数以进行自定义实验。 代码注
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值