精华内容
下载资源
问答
  • 不同类型分布式电源并网数学模型对比分析,王园媛,秦文萍,分布式发电(Distributed Generation)技术可以提高能源转换和利用效率并充分利用可再生能源。不同种类的分布式电源发电原理不同,需要�
  • Windows与Linux下的select网络模型对比分析-附件资源
  • 软件工程生命周期模型对比分析 2018年3月29日2018年3月28日 由 xyjisaw 本文共1515个字,预计阅读时间需要5分钟。 文章目录 迭代-递增生命周期模型 增量模型 进化树模型 编码-修补生命周期模型...

    软件工程生命周期模型对比分析

    本文共1515个字,预计阅读时间需要5分钟。

    正如任何事物一样,软件也有其孕育、诞生、成长、成熟和衰亡的生存过程,一般称其为“软件生命周期”。软件生命周期一般分为6个阶段,即制定计划、需求分析、设计、编码、测试、运行和维护。软件开发的各个阶段之间的关系不可能是顺序且线性的,而应该是带有反馈的迭代过程。在软件工程中,这个复杂的过程用软件开发模型来描述和表示。

    迭代-递增生命周期模型

    长处:

    ①与现实世界软件开发最接近的模型,蕴含统一过程方法
    ②为检查软件产品提供多个机会,每个迭代包括测试流
    ③在早期可以确定其蕴含的结构的健壮性
    ④能够较早地减轻风险
    ⑤我们总是有该软件的一个工作版

    关键词:米勒法则、逐步求精

    增量模型

    在有限的时间内,在一套功能有限的版本的基础上不断扩充。

    使用条件:开发时间有限、开发人员不足、有明确的初期模型

    任务流:线性、并行(需求不断地加入任务流)

    注意点

    ①第一个增量是核心产品,满足用户基本需求。
    ②根据客户使用进行评价、制定增量计划。
    ③每个增量都是可运行的产品。

    进化树模型

    长处:与现实世界软件开发最接近的模型,与迭代递增模型等价。

    编码-修补生命周期模型

    长处:适用于不需要任何维护的小程序

    短处:总的来说不适合重要的程序

    注意点:维护工作昂贵

    瀑布生命周期模型

    系统顺序的开发方法

    使用条件:①可以清楚地了解用户的需求②需求必须准确定义和相对稳定

    任务流:线性任务流

    注意点:

    ①不适用项目的不断变更
    ②不适用需求不确定的项目
    ③不可违反开发顺序
    ④文档驱动(也是弱点)

    长处:纪律性强制的方法、文档驱动(也是弱点)

    短处:交付的产品可能不符合客户的要求

    快速原型开发生命周期模型

    每次迭代都会产生一个更加完整的版本

    使用条件:①用户提出最基本的需求,没有定义更加具体的功能特性②对算法效率,操作系统不确定。

    任务流:迭代/(线性)

    注意点:① 开发者对原型随意搭建②为了加速构建,使用不合适的OS③速度是关键

    长处:确保交付的产品符合客户的要求

    短处:还没有证明无懈可击

    开源生命周期模型

    关键词:

    ①报告并纠正缺点是纠正性维护
    ②添加额外功能是完善性维护
    ③为该程序向一个新环境转换接口是适应性维护

    长处:少量实例中工作得相当好(Linux、Apache、gcc)

    短处:实用性有限,通常不起作用

    同步-稳定生命周期模型

    关键词:同步、稳定化、冻结

    长处:能满足未来用户的要求,确保各组件能够成功集成

    短处:除了在Microsoft公司,还没有广泛应用

    敏捷过程

    有效响应变化+哲学思想

    关键:①有效沟通②强调最终产品快速交付③将客户融入团队④可以灵活调整计划

    特点:

    ①团队小——小而高度自主
    ②产品快——可以快速交付成功的系统
    ③过程灵——最小化软件工作产品,对整体精简开发,对变更有更良好的响应。

    关键词:

    ①测试驱动开发(TDD):制定出任务的测试用例
    ②结对编程(pair programming)
    ③时光盒(timeboxing):频繁交付软件
    ④站立会议(stand-up meeting)

    长处:客户需求模糊时能很好地工作

    短处:似乎只适合小项目

    螺旋生命周期模型

    长处:风险驱动

    短处:只适合用于大型的内部软件产品,开发者必须精通风险分析和风险排除

    径坐标代表迄今累计的成本,角坐标代表螺旋型的进展,螺旋的每一圈对应一个阶段,每个阶段开始于(左上)确定该阶段的目标、实现办法、限制条件,如果成功减少风险,则进入下一个阶段(右下)

    总结

    参考资料

    https://wenku.baidu.com/view/718cb107aaea998fcc220e70.html

    http://www.docin.com/p-1165870498.html

    http://blog.sina.com.cn/s/blog_75f397940101dgmj.html

    本文评分
    评分人数: 1 平均分: 5
    展开全文
  • 基于北京房山探空数据的大气加权平均温度模型对比分析,李丽华,,大气加权平均温度的精度是影响GNSS水汽反演的关键因素之一,因此本文主要对大气加权平均温度时空特征和模型进行了研究。首先利用�
  • 通过放散模型和实验结果的对比,表明渗透模型中的新解吸式与实验结果的拟合度最高;然后绘制了4种煤样在不同初始瓦斯压力下新解吸式和实测结果的对比曲线,发现两者在各种条件下都比较吻合。因此,新解吸式可较准确地...
  • 零售业销售数据库开发中模型对比分析 摘要E-R模型EntityRelationshipDiagram即实体-联系模型也称E-R图是数据库开发过程中继需求分析之后的首要步骤E-R模型的合理性直接影响数据库结构的合理性进而影响整个系统的性能...
  • NLP这两年:15个预训练模型对比分析与剖析 https://www.toutiao.com/i6742415474396496387/ 前言 在之前写过的《NLP的游戏规则从此改写?从word2vec, ELMo到BERT》一文中,介绍了从word2vec到ELMo再到BERT...

    NLP这两年:15个预训练模型对比分析与剖析

     

    https://www.toutiao.com/i6742415474396496387/

     

    前言

     

    在之前写过的《NLP的游戏规则从此改写?从word2vec, ELMo到BERT》一文中,介绍了从word2vec到ELMo再到BERT的发展路径。而在BERT出现之后的这大半年的时间里,模型预训练的方法又被Google、Facebook、微软、百度、OpenAI等极少数几个玩得起游戏的核心玩家反复迭代了若干版,一次次的刷新我们这些吃瓜群众的案板上的瓜。

    有没有感觉出瓜速度太快以至于吃速跟不上?不用担心,小编帮你们找来了这篇总结的恰到好处的文章,对ELMo以来的15个代表性的预训练语言模型进行了多维度的对比和分析。尤其是近期找工作的小伙伴们注意啦,这篇文章里面提出来的一些问题很适合作为面试考点(划掉,交流点)噢~

     

    首先上一张镇楼专用图,看一下ELMo以来的预训练语言模型发展的概况

     

     

    然后上本文正餐,一个高能的question list,这也是本文写作的主线。

     

    Question List

    • Q1:从不同维度对比各【预训练语言模型】?
    • Q2:基于深度学习的NLP特征抽取机制有哪些?各有哪些优缺点?
    • Q3:自回归和自编码语言模型各有什么优缺点?
    • Q4:单向模型的内核机制是怎样的?有哪些缺点?
    • Q5:Transformer内部机制的深入理解:
    • 为什么是缩放点积,而不是点积模型?
    • 相较于加性模型,点积模型具备哪些优点?
    • 多头机制为什么有效?
    • Q6-Q10:BERT内核机制探究
    • BERT为什么如此有效?
    • BERT存在哪些优缺点?
    • BERT擅长处理哪些下游NLP任务?
    • BERT基于“字输入”还是“词输入”好?(对于中文任务)
    • BERT为什么不适用于自然语言生成任务(NLG)?
    • Q11-Q15:针对BERT原生模型的缺点,后续的BERT系列模型是:
    • 如何改进【生成任务】的?
    • 如何引入【知识】的?
    • 如何引入【多任务学习机制】的?
    • 如何改进【mask策略】的?
    • 如何进行【精细调参】的?
    • Q16:XLNet提出的背景是怎样的?
    • Q17:XLNet为何如此有效:
    • 为什么PLM可以实现双向上下文的建模?
    • 怎么解决没有目标(target)位置信息的问题?
    • Q18:Transformer-XL怎么实现对长文本建模?

    下面本文将从以下几个方面来对上述问题一一探讨

     

    一. 不同视角下的预训练语言模型对比

    二.预训练语言模型的基础:特征抽取机制+语言模型的分类

    三.单向模型回顾+内核机制探究

    四.BERT的内核机制探究

    五.BERT系列模型进展介绍

    六.XLNET的内核机制探究

    七.预训练语言模型的未来

     

    一、不同视角下的预训练语言模型对比

     

    Q1:从不同维度对比【预训练语言模型】

    从特征抽取、预训练语言模型目标、BERT系列模型的改进方向、特征表示4个视角,对比预训练语言模型:

     

    • 不同的特征抽取机制
    • RNNs:ELMO/ULMFiT/SiATL;
    • Transformer:GPT1.0/GPT2.0/BERT系列模型;
    • Transformer-XL:XLNet;
    • 不同的预训练语言目标
    • 自编码(AutoEncode):BERT系列模型;
    • 自回归(AutoRegression):单向模型(ELMO / ULMFiT / SiATL / GPT1.0 / GPT2.0)和XLNet;
    • BERT系列模型的改进
    • 引入常识:ERNIE1.0 / ERNIE(THU) / ERNIE2.0(简称为“ERNIE系列”);
    • 引入多任务学习:MTDNN/ERNIE2.0;
    • 基于生成任务的改进:MASS/UNILM;
    • 不同的mask策略:WWM/ERNIE系列/SpanBERT;
    • 精细调参:RoBERTa;
    • 特征表示(是否能表示上下文)
    • 单向特征表示:单向模型(ELMO/ULMFiT/SiATL/GPT1.0/GPT2.0);
    • 双向特征表示:BERT系列模型+XLNet;

     

    二、预训练语言模型的基础:特征抽取机制+语言模型的分类

     

    Q2:基于深度学习的NLP特征抽取机制有哪些?各有哪些优缺点?

    1)能否处理长距离依赖问题

    长距离依赖建模能力:Transformer-XL > Transformer > RNNs > CNNs

    • MLP:不考虑序列(位置)信息,不能处理变长序列,如NNLM和word2vec;
    • CNNs:考虑序列(位置)信息,不能处理长距离依赖,聚焦于n-gram提取,pooling操作会导致序列(位置)信息丢失;
    • RNNs:天然适合处理序列(位置)信息,但仍不能处理长距离依赖(由于BPTT导致的梯度消失等问题),故又称之为“较长的短期记忆单元(LSTM)”;
    • Transformer/Transformer-XL:self-attention解决长距离依赖,无位置偏差;

    2)前馈/循环网络 or 串行/并行计算

    • MLP/CNNs/Transformer:前馈/并行
    • RNNs/ Transformer-XL:循环/串行:

    3)计算时间复杂度(序列长度n,embedding size为d,filter大小k)

     

    • CNNs
    •  
    • RNNs
    •  
    • Self Attention
    •  

     

    Q3:自回归和自编码语言模型各有什么优缺点?

    1)自回归语言模型

    • 优点:
    • 文本序列联合概率的密度估计,即为传统的语言模型,天然适合处理自然生成任务;
    • 缺点:
    • 联合概率按照文本序列从左至右分解(顺序拆解),无法通过上下文信息进行双向特征表征;
    • 代表模型:ELMO/GPT1.0/GPT2.0;
    • 改进:XLNet将传统的自回归语言模型进行推广,将顺序拆解变为随机拆解(排列语言模型),产生上下文相关的双向特征表示;

    2)自编码语言模型

    • 优点:本质为降噪自编码特征表示,通过引入噪声[MASK]构建MLM,获取上下文相关的双向特征表示;
    • 缺点:引入独立性假设,为联合概率的有偏估计,没有考虑预测[MASK]之间的相关性
    • 不适合直接处理生成任务,MLM预训练目标的设置造成预训练过程和生成过程不一致;
    • 预训练时的[MASK]噪声在finetune阶段不会出现,造成两阶段不匹配问题;
    • 代表模型:BERT系列模型;

    三、单向模型回顾+内核机制探究

     

     

    Q4:单向模型的内核机制是怎样的?有哪些缺点?

    1)ELMo (Allen Institute)[6]

    • 要点:
    • 引入双向语言模型,其实是2个单向语言模型(前向和后向)的集成;
    • 通过保存预训练好的2层biLSTM,通过特征集成或finetune应用于下游任务;
    • 缺点:
    • 本质上为自回归语言模型,只能获取单向的特征表示,不能同时获取上下文表示;
    • LSTM不能解决长距离依赖。
    • 为什么不能用biLSTM构建双向语言模型?
    • 不能采取2层biLSTM同时进行特征抽取构建双向语言模型,否则会出现标签泄漏的问题;因此ELMO前向和后向的LSTM参数独立,共享词向量,独立构建语言模型;

     

    2)ULMFiT (fast.ai) / SiATL

    2.1)ULMFiT[7]要点:

     

    • 三阶段训练:LM预训练+精调特定任务LM+精调特定分类任务;
    • 特征抽取:3层AWD-LSTM;
    • 精调特定分类任务:逐层解冻;

    2.2) SiATL[8]要点:

    • 二阶段训练:LM预训练+特定任务精调分类任务(引入LM作为辅助目标,辅助目标对于小数据有用,与GPT相反);
    • - 特征抽取:LSTM+self-attention;
    • 精调特定分类任务:逐层解冻;
    • 都通过一些技巧解决finetune过程中的灾难性遗忘问题:如果预训练用的无监督数据和任务数据所在领域不同,逐层解冻带来的效果更明显[9];

    3)GPT1.0 / GPT2.0 (OpenAI)

    • GPT1.0[10]要点:
    • 采用Transformer进行特征抽取,首次将Transformer应用于预训练语言模型;
    • finetune阶段引入语言模型辅助目标(辅助目标对于大数据集有用,小数据反而有所下降,与SiATL相反),解决finetune过程中的灾难性遗忘;
    • 预训练和finetune一致,统一二阶段框架;
    •  
    • GPT2.0[11]要点:
    • 没有针对特定模型的精调流程:GPT2.0认为预训练中已包含很多特定任务所需的信息。
    • 生成任务取得很好效果,使用覆盖更广、质量更高的数据;
    • 缺点:
    • 依然为单向自回归语言模型,无法获取上下文相关的特征表示;

     

    四、BERT内核机制探究

     

    这一部分对BERT的内核机制进行介绍,在回答“BERT为什么如此有效?”之前,首先介绍Transformer的内核机制。

    Q5:Transformer[12]内部机制的深入理解(回顾)

    1)Multi-Head Attention和Scaled Dot-Product Attention

    本质是self attention通过attention mask动态编码变长序列,解决长距离依赖、无位置偏差、可并行计算

    • 为什么是缩放点积,而不是点积模型?
    • 当输入信息的维度 d 比较高,点积模型的值通常有比较大方差,从而导致 softmax 函数的梯度会比较小。因此,缩放点积模型可以较好地解决这一问题。
    •  
    • 为什么是双线性点积模型(经过线性变换Q
    • K)?
    • 双线性点积模型,引入非对称性,更具健壮性(Attention mask对角元素值不一定是最大的,也就是说当前位置对自身的注意力得分不一定最高)。
    •  
    • 相较于加性模型,点积模型具备哪些优点?
    • 常用的Attention机制为加性模型和点积模型,理论上加性模型和点积模型的复杂度差不多,但是点积模型在实现上可以更好地利用矩阵乘积,从而计算效率更高(实际上,随着维度d的增大,加性模型会明显好于点积模型)。
    •  
    • 多头机制为什么有效?
    • 类似于CNN中通过多通道机制进行特征选择;
    • Transformer中先通过切头(spilt)再分别进行Scaled Dot-Product Attention,可以使进行点积计算的维度d不大(防止梯度消失),同时缩小attention mask矩阵。

    2)Position-wise Feed-Forward Networks

    • FFN 将每个位置的Multi-Head Attention结果映射到一个更大维度的特征空间,然后使用ReLU引入非线性进行筛选,最后恢复回原始维度。
    • Transformer在抛弃了 LSTM 结构后,FFN 中的 ReLU成为了一个主要的提供非线性变换的单元。

    3)Positional Encoding

    将Positional Embedding改为Positional Encoding,主要的区别在于Positional Encoding是用公式表达的、不可学习的,而Positional Embedding是可学习的(如BERT),两种方案的训练速度和模型精度差异不大;但是Positional Embedding位置编码范围是固定的,而Positional Encoding编码范围是不受限制的。

    • 为什么引入
    • 建模Positional Encoding?
    • 引入
    • 是为了使模型实现对相对位置的学习,两个位置 pos 和 pos+k 的位置编码是固定间距k的线性变化:
    •  
    • 可以证明:间隔为k的任意两个位置编码的欧式空间距离是恒等的,只与k有关。

    Q6:BERT[13]为什么如此有效?

     

     

    • 引入Masked Language Model(MLM)预训练目标,能够获取上下文相关的双向特征表示;
    • 引入Next Sentence Prediction(NSP)预训练目标,擅长处理句子或段落的匹配任务;
    • 引入强大的特征抽取机制Transformer(多种机制并存):
    • Multi-Head self attention:多头机制类似于“多通道”特征抽取,self attention通过attention mask动态编码变长序列,解决长距离依赖(无位置偏差)、可并行计算;
    • Feed-forward :在位置维度计算非线性层级特征;
    • Layer Norm & Residuals:加速训练,使“深度”网络更加健壮;
    • 引入大规模、高质量的文本数据;

     

    Q7:BERT存在哪些优缺点?

     

    • 优点:能够获取上下文相关的双向特征表示;
    • 缺点:
    • 生成任务表现不佳:预训练过程和生成过程的不一致,导致在生成任务上效果不佳;
    • 采取独立性假设:没有考虑预测[MASK]之间的相关性,是对语言模型联合概率的有偏估计(不是密度估计);
    • 输入噪声[MASK],造成预训练-精调两阶段之间的差异;
    • 无法文档级别的NLP任务,只适合于句子和段落级别的任务;
    •  

    Q8:BERT擅长处理哪些下游NLP任务[14]?

     

    1. 适合句子和段落级别的任务,不适用于文档级别的任务;

    2. 适合处理高层语义信息提取的任务,对浅层语义信息提取的任务的提升效果不大(如一些简单的文本分类任务);

    3. 适合处理句子/段落的匹配任务;因此,在一些任务中可以构造辅助句(类似匹配任务)实现效果提升(如关系抽取/情感挖掘等任务);

    4. 不适合处理NLG任务;

     

    Q9:BERT基于“字输入”还是“词输入”好?(对于中文任务)

    1. 如果基于“词输入”,会加剧OOV问题,会增大输入空间,需要利用大得多的语料去学习输入空间到标签空间的函数映射。

    2. 随着Transfomer特征抽取能力,分词不再成为必要,词级别的特征学习可以纳入为内部特征进行表示学习。

     

    Q10:BERT为什么不适用于自然语言生成任务(NLG)?

    1. 由于BERT本身在预训练过程和生成过程的不一致,并没有做生成任务的相应机制,导致在生成任务上效果不佳,不能直接应用于生成任务。

    2. 如果将BERT或者GPT用于Seq2Seq的自然语言生成任务,可以分别进行预训练编码器和解码器,但是编码器-注意力-解码器结构没有被联合训练,BERT和GPT在条件生成任务中只是次优效果。

     

    五、BERT系列模型进展介绍

     

    这一部分介绍一些模型,它们均是对BERT原生模型在一些方向的改进。

     

    Q11:针对BERT原生模型,后续的BERT系列模型是如何改进【生成任务】的?

    1)MASS(微软)[15]

     

    • 统一预训练框架:通过类似的Seq2Seq框架,在预训练阶段统一了BERT和LM模型;
    • Encoder中理解unmasked tokens;Decoder中需要预测连续的[mask]tokens,获取更多的语言信息;Decoder从Encoder中抽取更多信息;
    • 当k=1或者n时,MASS的概率形式分别和BERT中的MLM以及GPT中标准的LM一致(k为mask的连续片段长度))

     

    2)UNILM (微软)[16]

     

     

    • 统一预训练框架:和直接从mask矩阵的角度统一BERT和LM;
    • 3个Attention Mask矩阵:LM、MLM、Seq2Seq LM;
    • 注意:UNILM中的LM并不是传统的LM模型,仍然是通过引入[MASK]实现的;

    Q12:针对BERT原生模型,后续的BERT系列模型是如何引入【知识】的?

    1)ERNIE 1.0 (百度)[17]

     

    • 在预训练阶段引入知识(实际是预先识别出的实体),引入3种[MASK]策略预测:
    • Basic-Level Masking:跟BERT一样,对subword进行mask,无法获取高层次语义;
    • Phrase-Level Masking:mask连续短语;
    • Entity-Level Masking:mask实体;
    •  

    2)ERNIE (THU)[18]

     

    • 基于BERT预训练原生模型,将文本中的实体对齐到外部的知识图谱,并通过知识嵌入得到实体向量作为ERNIE的输入;
    • 由于语言表征的预训练过程和知识表征过程有很大的不同,会产生两个独立的向量空间。为解决上述问题,在有实体输入的位置,将实体向量和文本表示通过非线性变换进行融合,以融合词汇、句法和知识信息;
    • 引入改进的预训练目标 Denoising entity auto-encoder (DEA):要求模型能够根据给定的实体序列和文本序列来预测对应的实体;

    Q13:针对BERT原生模型,后续的BERT系列模型是如何引入【多任务学习机制】的?

     

    多任务学习(Multi-task Learning)[19]是指同时学习多个相关任务,让这些任务在学习过程中共享知识,利用多个任务之间的相关性来改进模型在每个任务的性能和泛化能力。多任务学习可以看作是一种归纳迁移学习,即通过利用包含在相关任务中的信息作为归纳偏置(Inductive Bias)来提高泛化能力。多任务学习的训练机制分为同时训练和交替训练。

    1)MTDNN(微软)[20]:在下游任务中引入多任务学习机制

     

    2)ERNIE 2.0 (百度)[21]:在预训练阶段引入多任务学习

     

     

    • MTDNN是在下游任务引入多任务机制的,而ERNIE 2.0 是在预训练引入多任务学习(与先验知识库进行交互),使模型能够从不同的任务中学到更多的语言知识。
    • 主要包含3个方面的任务:
    • word-aware 任务:捕捉词汇层面的信息;
    • structure-aware 任务:捕捉句法层面的信息;
    • semantic-aware 任务:捕捉语义方面的信息;
    • 主要的方式是构建增量学习(后续可以不断引入更多的任务)模型,通过多任务学习持续更新预训练模型,这种连续交替的学习范式不会使模型忘记之前学到的语言知识。
    • 将3大类任务的若干个子任务一起用于训练,引入新的任务时会将继续引入之前的任务,防止忘记之前已经学到的知识,具体是一个逐渐增加任务数量的过程[22]:
    • (task1)->(task1,task2)->(task1,task2,task3)->…->(task1,task2,…,taskN),
    •  

    Q14:针对BERT原生模型,后续的BERT系列模型是如何改进【mask策略】的?

     

    • 原生BERT模型:按照subword维度进行mask,然后进行预测;
    • BERT WWM(Google):按照whole word维度进行mask,然后进行预测;
    • ERNIE等系列:引入外部知识,按照entity维度进行mask,然后进行预测;
    • SpanBert:不需要按照先验的词/实体/短语等边界信息进行mask,而是采取随机mask:
    • 采用Span Masking:根据几何分布,随机选择一段空间长度,之后再根据均匀分布随机选择起始位置,最后按照长度mask;通过采样,平均被遮盖长度是3.8 个词的长度;
    • 引入Span Boundary Objective:新的预训练目标旨在使被mask的Span 边界的词向量能学习到 Span中被mask的部分;新的预训练目标和MLM一起使用;
    • 注意:BERT WWM、ERNIE等系列、SpanBERT旨在隐式地学习预测词(mask部分本身的强相关性)之间的关系[23],而在 XLNet 中,是通过 PLM 加上自回归方式来显式地学习预测词之间关系;

    Q15:针对BERT原生模型,后续的BERT系列模型是如何进行【精细调参】的?

    RoBERTa(FaceBook)[24]

    • 丢弃NSP,效果更好;
    • 动态改变mask策略,把数据复制10份,然后统一进行随机mask;
    • 对学习率的峰值和warm-up更新步数作出调整;
    • 在更长的序列上训练:不对序列进行截短,使用全长度序列;

     

    六、XLNet的内核机制探究

     

    在BERT系列模型后,Google发布的XLNet在问答、文本分类、自然语言理解等任务上都大幅超越BERT;XLNet的提出是对标准语言模型(自回归)的一个复兴[25],提出一个框架来连接语言建模方法和预训练方法。

     

    Q16:XLNet[26]提出的背景是怎样的?

     

    • 对于ELMO、GPT等预训练模型都是基于传统的语言模型(自回归语言模型AR),自回归语言模型天然适合处理生成任务,但是无法对双向上下文进行表征,因此人们反而转向自编码思想的研究(如BERT系列模型);
    • 自编码语言模型(AE)虽然可以实现双向上下文进行表征,但是:
    • BERT系列模型引入独立性假设,没有考虑预测[MASK]之间的相关性;
    • MLM预训练目标的设置造成预训练过程和生成过程不一致;
    • 预训练时的[MASK]噪声在finetune阶段不会出现,造成两阶段不匹配问题;
    • 有什么办法能构建一个模型使得同时具有AR和AE的优点并且没有它们缺点呢?

    Q17:XLNet为何如此有效:内核机制分析

     

    1)排列语言模型(Permutation LM,PLM)

     

    如果衡量序列中被建模的依赖关系的数量,标准的LM可以达到上界,不像MLM一样,LM不依赖于任何独立假设。借鉴 NADE[27]的思想,XLNet将标准的LM推广到PLM。

     

    • 为什么PLM可以实现双向上下文的建模?
    • PLM的本质就是LM联合概率的多种分解机制的体现;
    • 将LM的顺序拆解推广到随机拆解,但是需要保留每个词的原始位置信息(PLM只是语言模型建模方式的因式分解/排列,并不是词的位置信息的重新排列!)
    • 如果遍历 ! 种分解方法,并且模型参数是共享的,PLM就一定可以学习到各种双向上下文;换句话说,当我们把所有可能的! 排列都考虑到的时候,对于预测词的所有上下文就都可以学习到了!
    • 由于遍历 ! 种路径计算量非常大(对于10个词的句子,10!=3628800)。因此实际只能随机的采样!里的部分排列,并求期望;

     

    2)Two-Stream Self-Attention

     

    如果采取标准的Transformer来建模PLM,会出现没有目标(target)位置信息的问题。问题的关键是模型并不知道要预测的到底是哪个位置的词,从而导致具有部分排列下的PLM在预测不同目标词时的概率是相同的。

     

     

    • 怎么解决没有目标(target)位置信息的问题?
    • 对于没有目标位置信息的问题,XLNet 引入了Two-Stream Self-Attention:
    •  

     

    • Query 流就为了预测当前词,只包含位置信息,不包含词的内容信息;
    • Content 流主要为 Query 流提供其它词的内容向量,包含位置信息和内容信息;

    3) 融入Transformer-XL的优点(具体见Q18)

     

    Q18:Transformer-XL[28]怎么实现对长文本建模?

     

    • BERT(Transformer)的最大输入长度为512,那么怎么对文档级别的文本建模?
    • vanilla model进行Segment,但是会存在上下文碎片化的问题(无法对连续文档的语义信息进行建模),同时推断时需要重复计算,因此推断速度会很慢;
    • Transformer-XL改进
    • 对于每一个segment都应该具有不同的位置编码,因此Transformer-XL采取了相对位置编码;
    •  
    •  
    •  
    • 前一个segment计算的representation被修复并缓存,以便在模型处理下一个新的segment时作为扩展上下文resume;
    • 最大可能依赖关系长度增加了N倍,其中N表示网络的深度;
    • 解决了上下文碎片问题,为新段前面的token提供了必要的上下文;
    • 由于不需要重复计算,Transformer-XL在语言建模任务的评估期间比vanilla Transformer快1800+倍;
    • 引入recurrence mechanism(不采用BPTT方式求导):
    • 引入相对位置编码方案:
    •  

    七、预训练语言模型的未来

     

    上述的【预训练语言模型】主要从2大方面进行介绍:一是总的对比;二是分别介绍单向语言模型、BERT系列模型、XLNet模型。

     

    可以看出,未来【预训练语言模型】更多的探索方向主要为[25]:

    • 复兴语言模型:进一步改进语言模型目标,不断突破模型的上界;
    • 大数据、大算力:将大数据、大算力推到极致;
    • 更快的推断:轻量级模型是否有可能达到SOTA效果?
    • 引入更丰富的知识信息,更精细的调参,更有价值的MASK策略;
    • 统一条件生成任务框架,如基于XLNet统一编码和解码任务,同时可考虑更快的解码方式;

     

    参考文献

    [1] NLP将迎来黄金十年 https://www.msra.cn/zh-cn/news/executivebylines/tech-bylines-nlp

    [2] a review of the recent history of nlp

    [3] AIS:ACL2019进展报告

    [4] ACL 主席周明:一起拥抱 ACL 和 NLP 的光明未来

    [5] 自然语言处理中的语言模型预训练方法 https://www.jiqizhixin.com/articles/2018-10-22-3

    [6] ELMO:Deep contextualized word representations

    [7] ULMFiT:Universal Language Model Fine-tuning)

    [8] SiATL:An Embarrassingly Simple Approach for Transfer Learning from Pretrained Language Models

    [9] BERT时代与后时代的NLP https://zhuanlan.zhihu.com/p/66676144

    [10] GPT:Improving Language Understanding by Generative Pre-Training

    [11] GPT2.0:Language Models are Unsupervised Multitask Learners

    [12] Transformer:Attention is all you need

    [13] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

    [14] Bert时代的创新(应用篇):Bert在NLP各领域的应用进展 https://zhuanlan.zhihu.com/p/68446772

    [15] MASS: Masked Sequence to Sequence Pre-training for Language Generation

    [16] UNILM:Unified Language Model Pre-training for Natural Language Understanding and Generation

    [17] ERNIE: Enhanced Representation through Knowledge Integration

    [18] ERNIE: Enhanced Language Representation with Information Entities

    [19] nndl:神经网络与深度学习

    [20] MT-DNN:Multi-Task Deep Neural Net for NLU

    [21] ERNIE 2.0: A CONTINUAL PRE-TRAINING FRAMEWORK FOR LANGUAGE UNDERSTANDING

    [22]陈凯:

    https://www.zhihu.com/question/337827682/answer/768908184

    [23] SpanBert:对 Bert 预训练的一次深度探索

    [24] RoBERTa: A Robustly Optimized BERT Pretraining Approach

    [25] ab他们创造了横扫NLP的XLNet:专访CMU博士杨植麟

    [26] XLnet: Generalized Autoregressive Pretraining for Language Understanding

    [27] Neural autoregressive distribution estimation

    [28] Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context

     

     

     

    展开全文
  • 本文将对比分析DDD分层架构、整洁架构、六边形架构。 整洁架构 又名“洋葱架构”(看图就懂),体现了分层思想。 同心圆代表应用软件的不同部分,由内到外依次是 领域模型 领域服务 应用服务 容易变化的内容 比如...

    本文将对比分析DDD分层架构、整洁架构、六边形架构。

    整洁架构

    又名“洋葱架构”(看图就懂),体现了分层思想。

    同心圆代表应用软件的不同部分,由内到外依次是

    • 领域模型
    • 领域服务
    • 应用服务
    • 容易变化的内容
      比如用户接口和基础设施。

    该架构最主要原则:依赖原则,它定义了各层依赖关系,越往内依赖越低,代码级别越高,能力越核心。外圈代码依赖只能指向内圈,内圈无需知道外圈任何情况。

    职能划分

    • 领域模型
      实现领域内核心业务逻辑,封装了企业级业务规则。领域模型的主体是实体(可以是一个带方法的对象,也可以是一个数据结构和方法集合)。
    • 领域服务
      实现涉及多个实体的复杂业务逻辑。
    • 应用服务
      实现与用户操作相关的服务组合与编排,包含了应用特有的业务流程规则,封装和实现了系统所有用例。
    • 最外层
      主要提供适配的能力,分为主动适配和被动适配。
      • 主动适配主要实现外部用户、网页、批处理和自动化测试等对内层业务逻辑访问适配
      • 被动适配主要是实现核心业务逻辑对基础资源访问的适配,如DB、缓存、文件系统和MQ等。

    红圈内的领域模型、领域服务和应用服务一起组成软件核心业务能力。

    六边形架构

    又名“端口适配器架构”。

    • 核心理念
      应用通过端口与外部交互

    红圈内的核心业务逻辑(应用程序和领域模型)与外部资源(包括APP、Web应用以及数据库资源等)完全隔离,仅通过适配器交互。它解决了业务逻辑与用户界面的代码交错问题,很好实现前后端分离。六边形架构各层的依赖关系与整洁架构一样,都是由外向内依赖。

    职能划分

    系统分为内六边形和外六边形:

    • 红圈内六边形
      实现应用的核心业务逻辑
    • 外六边形
      完成外部应用、驱动和基础资源等的交互和访问,对前端应用以API主动适配方式提供服务,对基础资源以依赖反转被动适配的方式实现资源访问

    该架构的一个端口可能对应多个外部系统,不同外部系统也可能使用不同适配器,由适配器负责协议转换。这就使得应用程序能够以一致的方式被用户形式使用。
    现在,很多声称使用分层架构的团队实际上使用的是六边形架构。这是因为 很多项目都使用了某种形式的依赖注入。并不是说依赖注入天生就是六边形架 构,而是说使用依赖注入的架构自然地具有了端口与适配器风格。

    架构模型对比分析

    虽然DDD分层架构、整洁架构、六边形架构的架构模型表现形式不同,但设计思想正是微服务架构高内聚低耦合原则的完美体现,而它们身上闪耀的正是以领域模型为中心的设计思想。

    红色实线边框用于将核心业务逻辑与外部应用、基础资源进行隔离。

    红框内部主要实现核心业务逻辑,但核心业务逻辑也有差异,有属于领域模型,有属于面向用户的用例和流程编排能力。按这种功能差异,在这三种架构划分了应用层和领域层,承担不同业务逻辑。

    领域层实现面向领域模型,实现领域模型的核心业务逻辑,属原子模型,需保持领域模型和业务逻辑稳定,对外提供稳定的细粒度领域服务,所以是架构核心。

    应用层实现面向用户操作相关的用例和流程,对外提供粗粒度API服务。适配前台应用和领域层,接收前台需求,随时做出响应和调整,尽量避免将前台需求传到领域层。应用层作为配速齿轮位于前台应用和领域层间。

    这三种架构都考虑了前端需求的变与领域模型的不变。需求变幻无穷,但变化总是有矩可循的,用户体验、操作习惯、市场环境以及管理流程的变化,往往会导致界面逻辑和流程的多变。但核心领域逻辑基本不大变,领域模型相对稳定,用例和流程则会随外部需求而随时调整。

    架构模型通过分层控制需求变化从外到里对系统影响,从外向里受需求影响逐步减小。面向用户的前端可以快速响应外部需求进行调整和发布,应用层通过服务组合和编排来实现业务流程的快速适配上线,减少传到领域层的需求,使领域层保持长期稳定。

    这样设计的好处,可保证领域层核心业务逻辑不会因外部需求和流程的变动而调整。

    从三种架构模型看中台和微服务设计

    中台本质是领域的子域,它可能是核心域,也可能是通用域或支撑域。通常大家认为阿里的中台对应DDD的通用域,将通用的公共能力沉淀为中台,对外提供通用共享服务。

    中台作为子域还可以继续分解为子子域,在子域分解到合适大小,通过事件风暴划分限界上下文以后,就可定义微服务,微服务用来实现中台能力。

    中台建设要聚焦领域模型

    中台需考虑能力的共享和复用。
    要建立中台内所有限界上下文的领域模型,DDD建模过程中会考虑架构演进和功能的重新组合。领域模型建立的过程会对业务和应用进行清晰的逻辑和物理边界(微服务)划分。领域模型的结果会影响到后续的系统模型、架构模型和代码模型,最终影响到微服务的拆分和项目落地。

    微服务要有合理的架构分层

    微服务设计要有分层思想。
    保证领域层的纯洁和领域逻辑的稳定,避免污染领域模型。不要把领域模型的业务逻辑放在应用层,这样会导致应用层过大,领域模型会失焦。实在无法避免,可以引入防腐层,进行新老系统的适配和转换,过渡期完成后,可直接将防腐层代码抛弃。

    微服务间层次依赖

    。而有的则是某个职责单一的中台微服务,企业级的业务流程需要将多个这样的微服务组合起来才能完成,这是企业级中台微服务。两类微服务由于复杂度不一样,集成方式也会有差异。

    项目级微服务

    可与前端应用集成,一起完成特定业务。
    项目级微服务的内部遵循分层架构模型即可。领域模型的核心逻辑在领域层实现,服务的组合和编排在应用层实现,通过API网关为前台应用提供服务,实现前后端分离。但项目级微服务可能会调用其它微服务,你看在下面这张图中,比如某个项目级微服务B调用认证微服务A,完成登录和权限认证。

    通常项目级微服务之间的集成,发生在微服务的应用层,由应用服务调用其它微服务发布在API网关上的应用服务。你看下图中微服务B中红色框内的应用服务B,它除了可以组合和编排自己的领域服务外,还可以组合和编排外部微服务的应用服务。它只要将编排后的服务发布到API网关供前端调用,这样前端就可以直接访问自己的微服务了。

    企业级中台微服务

    可在中台微服务上增加一层,位于红色边框,负责跨中台微服务的服务组合和编排,以及微服务之间的协调,还可完成前端不同渠道应用的适配。
    再将它的业务范围扩大一些,可做成一个面向不同行业和渠道的服务平台。

    借用BFF(服务于前端的后端,Backend for Frontends)词。BFF微服务与其它微服务存在较大的差异,就是它没有领域模型,因此这个微服务内也不会有领域层。BFF微服务可以承担应用层和用户接口层的主要职能,完成各个中台微服务的服务组合和编排,可适配不同前端和渠道的要求。

    应用和资源的解耦与适配

    传统以数据为中心的设计模式,应用会对数据库、缓存、文件系统等基础资源产生严重依赖。
    一旦更换基础资源就会对应用产生很大的影响,因此需要为应用和资源解耦。
    在微服务架构中,应用层、领域层和基础层解耦是通过仓储模式,采用依赖倒置的设计方法来实现的。在应用设计中,我们会同步考虑和基础资源的代码适配,那么一旦基础设施资源出现变更(比如换数据库),就可以屏蔽资源变更对业务代码的影响,切断业务逻辑对基础资源的依赖,最终降低资源变更对应用的影响。

    总结

    DDD分层架构、整洁架构、六边形架构都是以领域模型为核心,实行分层架构,内部核心业务逻辑与外部应用、资源隔离并解耦。

    展开全文
  • 针对1.5 ×105m3大型立式储罐,隔震层采用等效线性本构关系,选取峰值加速度为0.40g的El-Centro水平地震波作为地震动输入,运动方程采用数值积分方法求解,进行储罐弹性理论隔震模型参数及地震响应对比分析....
  • 线程池与非线程池应用场景及模型对比分析 分类: C++ 网络编程2013-12-23 11:14 1608人阅读 评论(0) 收藏 举报 在网络编程中经常用到线程池和连接池,今天就对其中常用的线程池的基本应用场景和模型...

    线程池与非线程池应用场景及模型对比分析

    分类: C++ 网络编程 1608人阅读 评论(0) 收藏 举报

    在网络编程中经常用到线程池和连接池,今天就对其中常用的线程池的基本应用场景和模型做个简单的对比分析。

    1、  业务流程对比 

    a、  非线程池业务流模型: 

     


    上图标识了基本的非线程池的线程模型,前端1有多少连接则前端客户端2与前端服务器端3均需建立一对一的线程数进行响应的连接。前端服务器端3与后端服务器端4也需建立响应数目的线程进行连接处理相关业务。

    当一个任务处理完毕后线程退出,在下一个任务到来的时候前端服务器端创建新的线程来处理新的任务。

     

    b、线程池模型:


    上图标识了基本的线程池模型。前端客户端大量的连接通过服务端的任务接收线程将连接任务放入前端服务器端的任务队列中,前端服务器端起固定数量的处理线程处理前端的任务,当处理线程处理完任务后从任务队列中获取下一个处理任务。保证了前端服务器端和后端服务器端的连接数不会超过前端服务器端的处理任务线程数n,从而保证了后端服务器端的压力。

    当处理线程处理完一个任务而任务队列中没有任务的时候线程并不退出,阻塞等待新的任务。

    通过上图可以看出,当前端服务器端通过设置合理的处理线程数和任务队列大小,可以有效的屏蔽前端客户端高并发量对后端服务器端的冲击。

     

     

    2、  应用场景分析对比

    a、  非线程池模型

    适用于单次连接任务执行时间较长,并发量不高的情况。一旦并发量很高则线程频繁创建的开销是巨大的。

    b、  线程池模型

    适用于单次任务执行时间较短,但并发访问量高的情况。当处理线程数设置极大的时候和非线程池模型几乎没有差别

     

    3、  优化细节

    a、在线程池模型中,可以预创建部分处理线程,随后根据实际的业务需求来创建新的线程,直到创建设置的最大线程数

    b、一定时间内关闭一些空闲线程,回收部分资源

    版权声明:本文为博主原创文章,未经博主允许不得转载。

    展开全文
  • 多组数据的4种线性拟合模型对比分析及其公路客运中的应用
  • 对出行路径选择模型作了简要解析,进而分别基于“期望效用理论”和“前景理论”,建立不确定路网条件下的出行者出行路径选择模型,并结合实际算例及实证调查,对基于两种理论模型得出的结果做出对比分析,结果表明...
  • 构建指数模型和多元线性回归模型2种驱动力模型预测耕地保有量,并通过对比分析,最终确定耕地保有量,校验土地利用总体规划确定的预期性耕地保有量指标。结合沈阳市的实际情况,预测耕地保有量结果分别为18.62万hm2和15....
  • *血模型 概述 失血模型 模型仅仅包含数据的定义和getter/setter方法,业务逻辑和应用逻辑都放到服务层中。这种类在Java中叫POJO,在.NET中叫POCO。 贫血模型 贫血模型中包含了一些业务逻辑,但不包含...
  • 五种服务器模型: 1.同步阻塞迭代模型 2.多进程并发模型 3.多线程并发模型 4.IO多路复用模型之select/poll 5.IO多路复用模型之epoll
  • R学习 R编程语言在统计人员和数据挖掘人员之间的易用性以及复杂的可视化和分析方面已经获得了相当的普及。随着深度学习时代的到来,对R的深度学习的支持不断增长,随着越来越多的软件包的推出,本节提供以下软件包...
  • 详尽分析了Windows与Linux下的select模型的不同,各自的实现原理,各自的优点以及一些改进的建议。附有封装好的模型代码和相关注释

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,286
精华内容 2,914
关键字:

模型对比分析