点击上方,选择星标置顶,每天给你送干货

阅读大概需要25分钟

跟随小博主,每天进步一丢丢

作者: 林哲乐

方向: 知识图谱、问答

知乎专栏:

https://zhuanlan.zhihu.com/p/151741265

CSDN博客:

https://blog.csdn.net/weixin_37995835/article/details/106994820

本文的主要目的是理清时间线,关注预训练的发展过程,进行模型间的联系和对比,具体原理和细节请参考原论文和代码,不再一一赘述。

『预训练模型的时间线』

  1. ELMO  2018.03    华盛顿大学

  2. GPT     2018.06    OpenAI

  3. BERT   2018.10    Google

  4. XLNet  2019.6    CMU+google

  5. ERNIE    2019.4     百度

  6. BERT-wwm  2019.6   哈工大+讯飞

  7. RoBERTa   2019.7.26   Facebook

  8. ERNIE2.0    2019.7.29     百度

  9. BERT-wwm-ext  2019.7.30   哈工大 +讯飞

  10. ALBERT   2019.10   Google

(文末附相关论文及模型代码)

『预训练语言模型分类 』

  • 单向特征、自回归模型(单向模型):

    ELMO/ULMFiT/SiATL/GPT1.0/GPT2.0

  • 双向特征、自编码模型(BERT系列模型):

    BERT/ERNIE/SpanBERT/RoBERTa

  • 双向特征、自回归模型“

    XLNet

『各模型之间的联系 』

  • 传统word2vec无法解决一词多义,语义信息不够丰富,诞生了ELMO

  • ELMO以lstm堆积,串行且提取特征能力不够,诞生了GPT

  • GPT 虽然用transformer堆积,但是是单向的,诞生了BERT

  • BERT虽然双向,但是mask不适用于自编码模型,诞生了XLNET

  • BERT中mask代替单个字符而非实体或短语,没有考虑词法结构/语法结构,诞生了ERNIE

  • 为了mask掉中文的词而非字,让BERT更好的应用在中文任务,诞生了BERT-wwm

  • Bert训练用更多的数据、训练步数、更大的批次,mask机制变为动态的,诞生了RoBERTa

  • ERNIE的基础上,用大量数据和先验知识,进行多任务的持续学习,诞生了ERNIE2.0

  • BERT-wwm增加了训练数据集、训练步数,诞生了BERT-wwm-ext

  • BERT的其他改进模型基本考增加参数和训练数据,考虑轻量化之后,诞生了ALBERT

「   1.ELMO    」

“Embedding from Language Models"

NAACL18 Best Paper

  • 特点:传统的词向量(如word2vec)是静态的/上下文无关的,而ELMO解决了一词多义;ELMO采用双层双向LSTM

  • 缺点lstm是串行,训练时间长;相比于transformer,特征提取能力不够(ELMO采用向量拼接)

  • 使用分为两阶段:预训练+应用于下游任务,本质就是根据当前上下文对Word Embedding进行动态调整的过程:

  1. 1. 用语言模型进行预训练

    左边的前向双层LSTM是正方向编码器,顺序输入待预测单词w的上文;右边则是反方向编码器,逆序输入w的下文

  1. 训练好之后,输入一个新句子s,每个单词都得到三个Embedding:①单词的Word Embedding   ②第一层关于单词位置的Embedding   ②第二层带有语义信息的Embedding(上述的三个Embedding   、LSTM网络结果均为训练结果)

    2. 做下游任务时,从预训练网络中提取对应单词的网络各层的Word Embedding作为新特征补充到下游任务中。 如QA任务:输入Q/A句子,对三个Embedding分配权重,整合生成新的Embedding

「    2.GPT   」 

“Generative Pre-Training”

  • 优点:Transformer捕捉更长范围的信息,优于RNN;并行,快速

  • 缺点:需要对输入数据的结构调整;单向

GPT模型图

  • 特点:

  1. 依然两段式:单向语言模型预训练(无监督)+fine tuning应用到下游任务(有监督)

  2. 自回归模型

  3. transformer的decoder里面有三个子模块,GPT只用了第一个和第三个子模块,如下图:

  • 与ELMO的不同

  1. GPT只用了transformer的decoder模块提取特征,而不是Bi-LSTM;堆叠12个

  2. 单向(根据上文预测单词,利用mask屏蔽下文)

GPT中的mask如下图所示,mask之后要进行softmax:

mask操作

softmax操作

GPT依然分为两阶段

第一阶段(预训练):

GPT的训练过程

第二阶段(应用于下游任务):

    向GPT的网络结构看齐,把任务的网络结构改造成和 GPT的网络结构是一样的。做法如下:

  1. 对于分类问题,不用怎么动,加上一个起始和终结符号即可;

  2. 对于句子关系判断问题,比如 Entailment,两个句子中间再加个分隔符即可;

  3. 对文本相似性判断问题,把两个句子顺序颠倒下做出两个输入即可,这是为了告诉模型句子顺序不重要;

  4. 对于多项选择问题,则多路输入,每一路把文章和答案选项拼接作为输入即可。从上图可看出,这种改造还是很方便的,不同任务只需要在输入部分施工即可。

效果:在 12 个任务里,9 个达到了最好的效果,有些任务性能提升非常明显。

ELMO、BERT、GPT-2模型大小对比图

OpenAI在之后又提出了GPT-2模型,论文为《Language Models are Unsupervised Multitask Learners》,结构与GPT-1相似(依然采用transformer的encoder),但是采用多任务预训练+超大数据集+超大规模模型,所以有更好的性能表现,但是参数也增加了更多。

GPT的不同参数

如上图所示,第一组的规模和GPT一样,第二组和BERT一样,最后一个是GPT-2的参数量、层数和隐层大小。

由于单向地用上文预测下一个单词,GPT比BERT更适合做文本生成的任务。

「   3.BERT   」

“Bidirectional Encoder Representations from Transformers"

  • 与GPT的区别:

  1. 双向

  2. 用的是transformer的encoder(GPT用的是decoder,ELMO用的是Bi-LSTM)

  3. 多任务学习方式训练:预测目标词和预测下一句

  • 优点:效果好、普适性强、效果提升大

  • 缺点:硬件资源的消耗巨大、训练时间长;预训练用了[MASK]标志,影响微调时模型表现

  • 预训练分为以下三个步骤:

  1. Embedding

    三个Embedding 求和而得,分别是:

    a.Token Embeddings:词向量,首单词是[CLS]标志,可用于分类任务

    b.Segment Embeddings:用[SEP]标志将句子分为两段,因为预训练不光做LM还要做以两个句子为输入的分类任务

    c.Position Embeddings:和之前文章中的Transformer不同,不是三角函数而是学习出来的

  2. 预测目标词Masked LM

    随机挑选一个句子中15%的词,用上下文来预测。这15%中,80%用[mask]替换,10%随机取一个词替换,10%不变。用非监督学习的方法预测这些词。

  3. 预测下一句 Next Sentence Prediction

    选择句子对A+B,其中50%的B是A的下一句,50%为语料库中随机选取

  • BERT的微调(fine tuning)参考参数:

  1. Batch Size:16 or 32

  2. Learning Rate: 5e-5, 3e-5, 2e-5

  3. Epochs:2, 3, 4

  • BERT非常强大,在 11 项 NLP 任务中夺得 SOTA 结果,这11项任务可分为四大类:

  1. 句子对分类任务

  2. 单句子分类任务

  3. 问答任务

  4. 单句子标注任务

BERT中NLP四大下游任务微调

tips』:可以尝试用BERT框架去做以上四种任务的简单实验,便于掌握BERT结构

小总结』:

BERT、GPT、ELMo模型图

  • ELMO用Bi-LSTM,GPT用transformer的decoder,BERT用transformer的encoder

  • ELMO:双向,GPT,单向,BERT:双向

  • ELMO:解决一词多义,GPT,特征更丰富,BERT:双向/多任务训练/能捕捉更长距离的依赖

  • GPT:适合文本生成等任务(NLG任务),BERT:适合预测任务(NLU任务)

  • GPT-2,以及一些诸如 TransformerXL 和 XLNet 等后续出现的模型,本质上都是自回归模型,而 BERT 则不然,虽然没有使用自回归机制,但 BERT 获得了结合单词前后的上下文信息的能力,从而取得了更好的效果。而其中XLNet虽然使用了自回归,但引入了一种能够同时兼顾前后的上下文信息的方法,即双流自注意力。

「   4.XLNet   」

XLNet是一个语言模型。和ELMO,GPT,BERT一脉相承,同时借鉴Transformer-XL,故称XLNet(XL含义为衣服尺码,意思是模型横向更宽),其参数规模远大于BERT

  • 基本思路:通过排列组合的方式将一部分下文单词放到上文单词的位置,但实际形式还是一个从左到右预测的自回归语言模型。

  • 优化

  1. 采用自回归(AR , Autoregressive)模型替代自编码(AE , Autoencoding )模型,解决bert中mask带来的负面影响(预训练和微调数据的不统一)

  2. 双流注意力机制(新的分布计算方法,来实现目标位置感知)

  3. 引入transformer-XL

自回归 / 自编码区别

  • 自回归,时间序列分析或者信号处理领域常用词汇,根据上文预测当前词

  • 自编码,是无监督的,mask掉一个词,然后根据上下文来预测这个词

双流注意力机制

该机制:1.预测当前的x时,只包含其位置信息,不包含内容信息 2.预测x后的其余tokens时,包含x的内容信息

  • content representation内容表述,下文用  表示,同时编码上下文和 

  • query representation查询表述,下文用  表示,包含上下文的内容信息  和目标的位置信息  ,但不包括目标的内容信息 

引入transformer-XL

(相对位置编码+片段循环机制)

  • 相对位置编码:为了区分某个位置编码到底时哪一个片段里的。此值为训练所得,用来计算注意力的权值。(bert采用绝对位置编码)

  • 片段循环机制:解决了超长序列的依赖问题,因为前一个片段被保留了,不需重新计算;同时加快了训练速度

xlnet在长文本的阅读理解类任务上性能提升更明显,性能大幅超过Bert;XLNet的预训练模式同时也天然符合序列生成任务,如文本摘要

「    5.ERNIE   」

“Enhanced Representation through Knowledge Integration”

这里是指由百度提出的ERNIE。ERNIE是基于BERT做的优化,主要针对中文任务。ERNIE利用的仍然是 transformer 的encoder 部分,且结构一样,但是并不共享权重,区别如下:

  1. Transformer: 6 encoder layers, 512 hidden units, 8 attention heads

  2. ERNIE Base: 12 encoder layers, 768 hidden units, 12 attention heads

  3. ERNIE Large: 24 encoder layers,1024 hidden units, 16 attention heads

  • 训练数据:中文维基百科、百度百科、百度新闻、百度贴吧,大小分别为 21M,51M,47M,54M;

  • 对BERT的优化

  1. 三种mask:字层面、短语层面、实体层面(引入外部知识,模型可获得更可靠的语言表示)

  2. 用大量中文数据集、异质数据集

  3. 为适应多轮的贴吧数据,引入对话语言模型(DLM ,Dialogue Language Model)的任务

(ERNIE对mask机制的改进,为BERT-wwm、SpanBERT等提供了思路)

  • 预训练过程

  1. 连续用大量的数据与先验知识连续构建不同的预训练任务(词法级别,语法级别,语义级别)

  2. 不断的用预训练任务更新ERNIE 模型

  • ERNIE的mask与BERT的不同:

  • ERNIE的mask策略分三个阶段(附图):

  1. 第一阶段,采用BERT的方式,字级别,即basic-level masking,随机mask中文某字

  2. 第二阶段,词组级别的mask,即phrase-level masking,mask掉句子中一部分词组(预测这些词组的阶段,词组信息被编码到词向量中)

  3. 第三阶段,实体级别的mask,即entity-level masking,如人名、机构名等(模型训练完后,学到实体信息)先分析句子的实体,然后随机mask

可以看到,BERT中只是mask了单个token,但在中文中多以短语或实体为单位,分成单字mask并不能很好地表达语义、句法等。所以ERNIE引入了三种mask方式。

不同mask的效果:

『DLM (Dialogue Language Model) task』:

多轮对话的语料,三个句子的组合:[CLS]S1[SEP]S2[SEP]S3[SEP] ,形式为QRQ,QRR,QQR (Q:提问,R:回答  )。DLM还增加了任务来判断这个多轮对话是真的还是假的。

「  6.BERT-wwm  」

“BERT-  whole word mask”

对BERT-base的改进:用[Mask]替换而非单字(中文的词=词语,英文的词=word/字),如:

  • BERT-wwm-ext与BERT-wwm

  1. BERT-wwm使用的语料:中文维基+通用数据(百科、新闻、问答等数据,总词数达5.4B)

  2. BERT-wwm-ext使用的语料:中文维基

  • 与ERNIE相比

不仅仅是连续mask实体词和短语,而是连续mask所有能组成中文词语的字。如果一个完整的词的部分字被mask,则同属该词的其他部分也会被mask,即对组成同一个词的汉字全部进行Mask,即为全词Mask,即分词后再mask。这样做增加了语义信息。

(由于BERT-wwm是在BERT-base的基础上训练的,使用时可以无缝对接BERT,直接替换即可,不需要该文件。推荐使用在中文任务上。)

「   7.RoBERTa   」

“ a Robustly Optimized BERT Pretraining Approach”

RoBERTa在模型层面没有改变BERT,改变的只是预训练的方法。主要是在BERT的基础上做精细化调参,可以看作是终极调参,最后性能不仅全面碾压BERT,且在大部分任务上超越了XLNet。

对bert的调整

  • 训练数据更多(160G),bert是16G

  • batch size更大(256到8000不等),训练时间更长

  • 训练序列更长

  • 不在使用NSP(Next Sentence Prediction)任务,移除了next predict loss

  • 动态Masking,让数据不重复

  • 文本编码采用更大的字节级别的BPE词汇表(Byte-Pair Encoding)而Bert是字符级

BERT是静态mask,在数据处理的过程进行;而RoBERTa采用动态mask,在每次输入数据的时候进行(每个epoch每个sequence被MASK的方式不相同,提高随机性)

训练方式

  • SEGMENT-PAIR + NSP:输入包含两部分,每个部分是来自同一文档或者不同文档的 segment (segment 是连续的多个句子),这两个segment 的token总数少于 512 。预训练包含 MLM 任务和 NSP 任务。这是原始 BERT 的做法。

  • SENTENCE-PAIR + NSP:输入也是包含两部分,每个部分是来自同一个文档或者不同文档的单个句子,这两个句子的token 总数少于 512 。由于这些输入明显少于512 个tokens,因此增加batch size的大小,以使 tokens 总数保持与SEGMENT-PAIR + NSP 相似。预训练包含 MLM 任务和 NSP 任务。

  • FULL-SENTENCES:输入只有一部分(而不是两部分),来自同一个文档或者不同文档的连续多个句子,token 总数不超过 512 。输入可能跨越文档边界,如果跨文档,则在上一个文档末尾添加文档边界token 。预训练不包含 NSP 任务。

  • DOC-SENTENCES:输入只有一部分(而不是两部分),输入的构造类似于FULL-SENTENCES,只是不需要跨越文档边界,其输入来自同一个文档的连续句子,token 总数不超过 512 。在文档末尾附近采样的输入可以短于 512个tokens, 因此在这些情况下动态增加batch size大小以达到与 FULL-SENTENCES 相同的tokens总数。预训练不包含 NSP 任务.

训练结果对比:

与其他预训练模型对比:

「   8.ERNIE2.0   」

ERNIE2.0是ERNIE的升级版。百度ERNIE2.0 的出现直接刷新了GLUE Benchmark。

对ERNIE的优化:多任务训练(逐次增加7大任务)

模型图如下:

ERNIE2.0结构图

引入Task Embedding,区别不同的任务。训练方法:先训练任务1,保存模型;加载模型,训练任务1、任务2;以此类推,直到训练完7个任务。相当于递进式的学习,如ERNIE 1.0 突破完形填空ERNIE 2.0 突破选择题,句子排序题等不断递进更新。

效果:在ERNIE1.0的基础上有全面的提升,尤其是在阅读理解任务上

「   9.BERT-wwm-ext   」

BERT-wwm-ext 是一个中文预训练语言模型,BERT-wwm的升级版。BERT-wwm-ext采用了与BERT以及BERT-wwm一样的模型结构,同属base模型,由12层Transformers构成。其实就是增加数据量和训练次数来提升效果。

对BERT-wwm的改进

  • 预训练数据集做了增加,次数达到5.4B;

  • 训练步数增大,训练第一阶段1M步,batch size为2560;训练第二阶段400K步,batch size为2560。

在各个任务上的效果

1.中文简体阅读理解

  • 数据:CMRC 2018,哈工大+讯飞发布的中文机器阅读理解数据

  • 任务:根据指定问题,从篇章中抽取出片段作为答案

  • 与BERT和ERNIE的对比:

2.中文繁体阅读理解

  • 数据 :DRCD,中国台湾台达研究院发布的数据集

  • BERT-wwm-ext带来非常显著的性能提升:

3.自然语言推断

  • 数据 :XNLI,

  • BERT-wwm-ext与ERNIE在该任务上的效果较好:

「   10.ALBERT   」

ALBERT也是采用和BERT一样的Transformer的encoder结果,激活函数使用的也是GELU。但ALBERT用了全新的参数共享机制,参数量相比BERT来说少了很多(小10倍+)。简单来说,就是:参数更少,效果更好。

  • ALBERT的改进/贡献:

  1. 提出了两种减少内存的方法(因式分解、参数共享)

  2. 改进了BERT中的NSP的预训练任务,提升了训练速度

  3. 提升了模型效果

  • ALBERT的改进有三个方面:

  1. 对Embedding进行因式分解

  2. 跨层参数共享(性能轻微降低,参数大量减少)

  3. 句间连贯性损失(SOP)

1.对Embedding进行因式分解

BERT中及XLNet和RoBERTa中,词嵌入大小 E 和隐藏层大小 H 相等的,H =E=768;而ALBERT认为,词嵌入学习单个词的信息,而隐藏层输出包含上下文信息,应该 H>>E。所以ALBERT的词向量的维度小于encoder输出值维度。而且由于词典较大,词嵌入维度太大会导致,反向传播时更新的内容稀疏。由于上述两个原因,ALBER用了因式分解的方法降低参数量

先把one-hot向量映射到一个低维度的空间,大小为E,然后再映射到一个高维度的空间(相当于两次线性变换),从而把参数量从O(V×H)O(V×H)O(V×H)降低到了O(V×E+E×H)O(V×E+E×H) O(V×E+E×H)。实验效果如下:(E=128时最佳)

2.跨层参数共享

Transformer中共享参数有:只共享全连接层;只共享attention层。ALBERT结合上述两种,全连接层与attention层都进行参数共享。是减少参数的更主要的方法。参数减少很多,同时性能提升。如下图:

除了训练速度加快,网络震荡幅度也变小了(参数共享可以稳定网络参数):

3.句间连贯性损失(SOP,sentence-order prediction 句子顺序预测)

【NSP 任务】正样本:同一个文档的两个连续句子;负样本:两个连续句子交换顺序

【SOP 任务】正样本:同一个文档的两个连续句子;负样本:不同文档的句子

SOP能解决NSP的任务,但是NSP并不能解决SOP的任务。此任务的效果提升为一个点,如下图:

在降低参数量的两个方式中,参数共享的贡献远远大于因式分解。减少总运算量,是一个复杂艰巨的任务,ALBERT在训练时速度确实提升了,但在预测时仍然和BERT一样。

『模型论文』

  • ELMO:

    https://arxiv.org/pdf/1802.05365.pdf

  • GPT:

    https://s3-us-west-2.amazonaws.com/openai-assets/research-covers/languageunsupervised/language_understanding_paper.pdf

  • BERT:

    https://arxiv.org/pdf/1810.04805.pdf

  • XLNet:

    https://arxiv.org/pdf/1906.08237.pdf

  • ERNIE:

    https://arxiv.org/pdf/1904.09223.pdf

  • BERT-wwm:

    https://arxiv.org/pdf/1906.08101.pdf

  • RoBERTa:

    https://arxiv.org/pdf/1907.11692.pdf

  • ERNIE2.0:

    https://arxiv.org/pdf/1907.12412.pdf

  • ALBERT:

    https://openreview.net/pdf?id=H1eA7AEtvS

『模型代码』

  • ELMO:

    https://github.com/allenai/allennlp

  • GPT:

    https://github.com/openai/gpt-2

  • BERT:

    https://github.com/guotong1988/BERT-tensorflow

  • XLNet:

    https://github.com/zihangdai/xlnet

  • ERNIE:

    https://github.com/PaddlePaddle/ERNIE

  • BERT-wwm:

    https://github.com/ymcui/Chinese-BERT-wwm

  • RoBERTa:https://github.com/brightmart/roberta_zh(中文)

    https://github.com/pytorch/fairseq(英文)

  • ERNIE2.0:https://github.com/PaddlePaddle/ERNIE

  • BERT-wwm-ext:

    https://drive.google.com/file/d/1buMLEjdtrXE2c4G1rpsNGWEx7lUQ0RHi/view

  • ALBERT:

  • https://github.com/brightmart/albert_zh

『参考文献』

https://www.cnblogs.com/zhaopAC/p/11219600.html

https://baijiahao.baidu.com/s?id=1652093322137148754&wfr=spider&for=pc

https://blog.csdn.net/ljp1919/article/details/100666563

https://zhuanlan.zhihu.com/p/76912493

https://www.cnblogs.com/yifanrensheng/p/13167796.html

https://zhuanlan.zhihu.com/p/70257427

https://www.jiqizhixin.com/articles/2020-04-283

https://blog.csdn.net/u012526436/article/details/101924049

https://www.sohu.com/a/330319491_657157

https://www.cnblogs.com/yifanrensheng/p/13167796.html

按照时间线帮你梳理10种预训练模型相关推荐

  1. 腾讯老照片修复算法开源,细节到头发丝,3种预训练模型可下载 | GitHub热榜

    明敏 发自 凹非寺 量子位 | 公众号 QbitAI 还记得这个能将老照片修复到纤毫毕现的GFPGAN吗? 现在,它的代码正式开源了! 官方已经在GitHub上传了3个预训练模型,3个版本的效果区别如 ...

  2. 深入探究ConvNets vs. Transformers,哪种预训练模型的可迁移性更好?

    关注公众号,发现CV技术之美 本文为52CV粉丝投稿. 论文:ConvNets vs. Transformers: Whose Visual Representations are More Tran ...

  3. 10个预训练模型开始你的深度学习(计算机视觉部分)

    2019-09-24 21:04:41 作者:PRANAV DAR 编译:ronghuaiyang 导读 对于希望学习算法或尝试现有框架的人来说,预训练的模型是一个很好的帮助.由于时间限制或计算资源的 ...

  4. 针对暴力裁员一事,网易向员工致歉 对事件的时间线进行了梳理

    11月23日,自媒体"你的游戏我的心"发表了题为<网易裁员,让保安把身患绝症的我赶出公司.我在网易亲身经历的噩梦!>(以下简称<网易裁员>)的文章,作者自称 ...

  5. scrum看板视图切换时间线视图做项目管理

    企业需要开发一个项目,可以制作时间线进行管理,以便参与者和管理者了解项目的时间进度.项目进行到哪一步,参与者有哪些,责任人是谁,这些都可以通过时间线进行展示. 「时间线视图」是一种比甘特图更轻量.更实 ...

  6. 【NLP】6种用于文本分类的开源预训练模型

    来源 | PURVA HUILGOL 编译 | VK 作者 | Analytics Vidhya [导读]我们正站在语言和机器的交汇处,这个话题我很感兴趣.机器能像莎士比亚一样写作吗?机器能提高我自己 ...

  7. 介绍三种绘制时间线图的方法

    作者 |周萝卜 来源 |萝卜大杂烩 今天我们再来分享几种不同的制作方法,大家可以自行比较下各种方法的优劣. Matplotlib 制作 Matplotlib 作为 Python 家族最为重要的可视化工 ...

  8. 几种绘制时间线图的方法

    前面分享过一篇自动化制作<历史上的今天>时间线图片的文章,小伙伴们普遍反映还不错,尤其是制作时间线的方法,还是非常巧妙的.今天我们再来分享几种不同的制作方法,大家可以自行比较下各种方法的优 ...

  9. layui框架学习(10:时间线)

      时间线,英文timeline,也叫时光轴.时间轴,是指以时间为记录方式的一种网络布局形式,其形式之一为下图所示(示例图来自参考文献5).   Layui官网教程中的更新日志页面也用了时间线样式,如 ...

最新文章

  1. T5,一个探索迁移学习边界的模型
  2. python常见错误集合
  3. TimeQuest之delay_fall clock_fall傻傻分不清楚
  4. 「每日分享」CPU Cache 与缓存行
  5. 二、分布式文件系统HDFS及其简单使用
  6. Django之Mode的外键自关联和引用未定义的Model
  7. kaggle实战—泰坦尼克(五、模型搭建-模型评估)
  8. 将Eclipse中的工程保存到Github的操作步骤
  9. 截止2020年06月06日证书获得
  10. 设计模式笔记(15)---命令模式(行为型)
  11. 1.10 Linux文件目录用户与用户组修改
  12. 微型计算机机安装硬盘教程,台式机械硬盘怎么安装?机械硬盘安装图解教程(SATA固态可参考)...
  13. Android应用程序结构及运行原理
  14. 一个字等于多少个字节
  15. 《区块链+》读书感想
  16. 《Qt on Android核心编程》介绍
  17. 电子产品销售数据分析及RFM用户价值分析
  18. mysql数据库怎么该用户名和密码_如何修改MySql数据库的用户名和密码?
  19. 二十、融会贯通之全流程操作
  20. 大家都可以学的制作个人网

热门文章

  1. recast 4 BuildContours
  2. Android 轮子之点赞红心动画
  3. 修改hosts提升访问速度
  4. word怎么设置第三页或别的页码为第一页
  5. 清华源安装pymysql
  6. python CSV、JSON文件读写及pickle序列化使用笔记
  7. java发送iso8583报文接口框架,ISO8583报文工具类(组装和解析报文)
  8. Android 模拟器 PC电脑通信
  9. zabbix监控日志
  10. 山西2019数据结构专升本_山西省2017年专升本选拔考试(C程序设计数据结构)历年真题详解...