nlp模型怎么降低预测 如何使用nlp模型预测
淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】
来自:”深度学习自然语言处理“公众号
最近在学习NLP常见的预训练模型,做一下整理和对比,按照时间线主要有:
- ELMO 2018.3 华盛顿大学 论文 / 代码
- GPT 2018.06 OpenAI 论文 / 代码
- BERT 2018.10 Google 论文 / 代码pytorch版本 tensorflow版本
- XLNet 2019.06 CMU+google brain 论文 / 代码
- ERNIE 2019.4 百度 论文 / 代码 (清华+华为诺亚 论文 / 代码)
- BERT-wwm 2019.6.30 哈工大 +讯飞 论文 / 代码 TensorFlow PyTorch
- RoBERTa 2019.7.26 Facebook 论文 / 中文模型 / 英文模型
- ERNIE2.0 2019.7.29 百度 论文 / 代码
- BERT-wwm-ext 2019.7.30 哈工大 +讯飞 论文 / 代码 TensorFlow PyTorch
- ALBERT 2019.10 Google 论文 / 中文模型
本文的主要目的是理清时间线,关注预训练的发展过程,进行模型间的联系和对比,具体原理和细节请参考原论文和代码,不再一一赘述。
预训练语言模型分类:(此分类方式转自:)
- 单向特征、自回归模型(单向模型):ELMO/ULMFiT/SiATL/GPT1.0/GPT2.0
- 双向特征、自编码模型(BERT系列模型):BERT/MASS/UNILM/ERNIE1.0/ERNIE(THU)/MTDNN/ERNIE2.0/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
ELMO=“Embedding from Language Models"
该论文获NAACL18 Best Paper ,采用双层双向LSTM
- 传统的词向量(如word2vec)是静态的/上下文无关的,而ELMO解决了一词多义
- ELMO基于RNN(LSTM)训练,使用两个单向LSTM代替一个双向LSTM
缺点:lstm是串行,训练时间长;相比于transformer,特征提取能力不够(ELMO采用向量拼接)
ELMO两阶段如下,本质就是根据当前上下文对Word Embedding进行动态调整的过程:
- 用语言模型进行预训练
左边的前向双层LSTM是正方向编码器,顺序输入待预测单词w的上文
右边则是反方向编码器,逆序输入w的下文
训练好之后,输入一个新句子s,每个单词都得到三个Embedding:①单词的Word Embedding ②第一层关于单词位置的Embedding ②第二层带有语义信息的Embedding
(上述的三个Embedding 、LSTM网络结果均为训练结果)
- 做下游任务时,从预训练网络中提取对应单词的网络各层的Word Embedding作为新特征补充到下游任务中
如QA任务:输入Q/A句子,对三个Embedding分配权重,整合生成新的Embedding
GPT=“Generative Pre-Training”
优点:Transformer捕捉更长范围的信息,优于RNN;并行,快速
缺点:需要对输入数据的结构调整;单向
- 依然两段式:单向语言模型预训练(无监督)+fine tuning应用到下游任务(有监督)
- 自回归模型
- transformer的decoder里面有三个子模块,GPT只用了第一个和第三个子模块,如下图:
与ELMO的不同:
- GPT用transformer的decoder提取特征,而不是Bi-LSTM;堆叠12个
- 单向(根据上文预测单词,利用mask屏蔽下文)
GPT中的mask操作在Self-Attention 中, Softmax 之前:
第一阶段(预训练)
第二阶段(应用于下游任务):
向GPT的网络结构看齐,把任务的网络结构改造成和 GPT的网络结构是一样的。做法如下:
- 对于分类问题,不用怎么动,加上一个起始和终结符号即可;
- 对于句子关系判断问题,比如 Entailment,两个句子中间再加个分隔符即可;
- 对文本相似性判断问题,把两个句子顺序颠倒下做出两个输入即可,这是为了告诉模型句子顺序不重要;
- 对于多项选择问题,则多路输入,每一路把文章和答案选项拼接作为输入即可。从上图可看出,这种改造还是很方便的,不同任务只需要在输入部分施工即可。
效果:在 12 个任务里,9 个达到了最好的效果,有些任务性能提升非常明显。
OpenAI又提出了GPT-2模型,论文为《Language Models are Unsupervised Multitask Learners》,结构与GPT-1相似(依然采用transformer的decoder),但是采用多任务预训练+超大数据集+超大规模模型。
如上图所示,第一个的规模和GPT一样,第二个和BERT一样,最后一个是GPT-2。
由于单向地用上文预测下一个单词,GPT比BERT更适合做文本生成的任务。
BERT=“Bidirectional Encoder Representations from Transformers"
与GPT的区别:
- 双向
- 用的是transformer的encoder(GPT用的是decoder,ELMO用的是Bi-LSTM)
- 多任务学习方式训练:预测目标词和预测下一句
优点:效果好、普适性强、效果提升大
缺点:硬件资源的消耗巨大、训练时间长;预训练用了[MASK]标志,影响微调时模型表现
预训练分为以下三个步骤:
①Embedding
三个Embedding 求和而得,分别是:
- Token Embeddings:词向量,首单词是[CLS]标志,可用于分类任务
- Segment Embeddings:用[SEP]标志将句子分为两段,因为预训练不光做LM还要做以两个句子为输入的分类任务
- Position Embeddings:和之前文章中的Transformer不同,不是三角函数而是学习出来的
②预测目标词Masked LM
随机挑选一个句子中15%的词,用上下文来预测。这15%中,80%用[mask]替换,10%随机取一个词替换,10%不变。用非监督学习的方法预测这些词。
③预测下一句 Next Sentence Prediction
选择句子对A+B,其中50%的B是A的下一句,50%为语料库中随机选取
BERT的微调(fine tuning)参考参数:
- Batch Size:16 or 32
- Learning Rate: 5e-5, 3e-5, 2e-5
- Epochs:2, 3, 4
BERT非常强大,在 11 项 NLP 任务中夺得 SOTA 结果,这11项任务可分为四大类:
- 句子对分类任务
- 单句子分类任务
- 问答任务
- 单句子标注任务
tips:可以尝试用BERT框架去做以上四种任务的简单实验,便于掌握BERT结构
【小总结】:
- 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虽然使用了自回归,但引入了一种能够同时兼顾前后的上下文信息的方法,即双流自注意力。
XLNet是一个语言模型。和ELMO,GPT,BERT一脉相承,同时借鉴Transformer-XL,故称XLNet(XL含义为衣服尺码,意思是模型横向更宽),其参数规模远大于BERT
基本思路:通过排列组合的方式将一部分下文单词放到上文单词的位置,但实际形式还是一个从左到右预测的自回归语言模型。
优化:
- 采用自回归(AR , Autoregressive)模型替代自编码(AE , Autoencoding )模型,解决bert中mask带来的负面影响(预训练和微调数据的不统一)
- 双流注意力机制(新的分布计算方法,来实现目标位置感知)
- 引入transformer-XL
①自回归 / 自编码区别:
- 自回归,时间序列分析或者信号处理领域常用词汇,根据上文预测当前词
- 自编码,是无监督的,mask掉一个词,然后根据上下文来预测这个词
②双流注意力机制
该机制:1.预测当前的x时,只包含其位置信息,不包含内容信息 2.预测x后的其余tokens时,包含x的内容信息
- content representation内容表述,下文用 表示,同时编码上下文和
- query representation查询表述,下文用 表示,包含上下文的内容信息 和目标的位置信息 ,但不包括目标的内容信息
③引入transformer-XL:
(相对位置编码+片段循环机制)
- 相对位置编码:为了区分某个位置编码到底时哪一个片段里的。此值为训练所得,用来计算注意力的权值。(bert采用绝对位置编码)
- 片段循环机制:解决了超长序列的依赖问题,因为前一个片段被保留了,不需重新计算;同时加快了训练速度
xlnet在长文本的阅读理解类任务上性能提升更明显,性能大幅超过Bert;XLNet的预训练模式同时也天然符合序列生成任务,如文本摘要
ERNIE=“Enhanced Representation through Knowledge Integration”
这里是指由百度提出的ERNIE。ERNIE基于BERT做的优化,主要针对中文任务。ERNIE是 transformer 的encoder 部分,且结构一样,但是并不共享权重,区别如下:
- Transformer: 6 encoder layers, 512 hidden units, 8 attention heads
- ERNIE Base: 12 encoder layers, 768 hidden units, 12 attention heads
- ERNIE Large: 24 encoder layers,1024 hidden units, 16 attention heads
训练数据:中文维基百科、百度百科、百度新闻、百度贴吧,大小分别为 21M,51M,47M,54M;
对BERT的优化:
- 三种mask:字层面、短语层面、实体层面(引入外部知识,模型可获得更可靠的语言表示)
- 用大量中文数据集、异质数据集
- 为适应多轮的贴吧数据,引入对话语言模型(DLM ,Dialogue Language Model)的任务
(ERNIE对mask机制的改进,为BERT-wwm、SpanBERT等提供了思路)
预训练过程:
- 连续用大量的数据与先验知识连续构建不同的预训练任务(词法级别,语法级别,语义级别)
- 不断的用预训练任务更新ERNIE 模型
ERNIE的mask与BERT的不同:
ERNIE的mask策略分三个阶段(附图):
- 第一阶段,采用BERT的方式,字级别,即basic-level masking,随机mask中文某字
- 第二阶段,词组级别的mask,即phrase-level masking,mask掉句子中一部分词组(预测这些词组的阶段,词组信息被编码到词向量中)
- 第三阶段,实体级别的mask,即entity-level masking,如人名、机构名等(模型训练完后,学到实体信息)先分析句子的实体,然后随机mask
可以看到,BERT中只是mask了单个token,但在中文中多以短语或实体为单位,分成单字mask并不能很好地表达语义、句法等。所以ERNIE引入了三种mask方式。
不同mask的效果:
DLM (Dialogue Language Model) task:
多轮对话的语料,三个句子的组合:[CLS]S1
NLP????Issue#10??
nlp六个理解层次模型图,nlp自然语言处理,nlp算法是什么意思,nlp心理咨询师?NLP
?о?/?NLP?У?
Щ?enjoy~
- 1Research & Publications ?
- 1.1 XTREME
- 1.2 ?
- 1.3 SimCLR
- 1.4 ?д?
- 1.5 Longformer
- 1.6
- 2Creativity, Ethics, and Society ?
- 2.1 ML
- 2.2 NLP
- 2.3 ?л?AICOVID-19úо?
- 3Tools and Datasets
- 3.1 python
- 3.2
- 3.3 CloudCV
- 3.4 pycaret
- 3.5 Micrograd
- 4Articles and Blog posts
- 4.1 Transformer Family
- 4.2 ?
- 4.3 С
- 4.4 ?
- 5Education ?
- 5.1 ?
- 5.2
- 5.3 Python Numpy?
- 5.4 New mobile neural network architectures
- 5.5
- 5.6 ?
- 6Noteworthy Mentions
1.1 XTREME
Google AIDeepMind?оXTREME[1]?benchmark40?9?Щ?μ?mBERTXLMMMTE
1.2 ?
?汾?FastTextBERTGive your Text Representation Models some Love: the Case for Basque[2]?Уоy?оЧзBasquePoSЩ?μ?
1.3 SimCLR
NLP?У?SimCLRGoogle AI?μ・δ?[3]?ImageNet?1 ?÷?
- Computers Already Learn From Us. But Can They Teach Themselves?[4]
- The Illustrated Self-Supervised Learning[5]
- Self-supervised learning and computer vision[6]
1.4 ?д?
Kaj BostromGreg Durrett?Byte Pair Encoding is Suboptimal for Language Model Pretraining[7]?о?BPE ?tokenization algorithmLM仰tokenizationLMк?о?LM?tokenizationunigramBPELM ?unigram tokenization?BPE?
1.5 Longformer
Allen AI?оμTransformer?Longformer[8]?Ч?transformer?self-attention?геReformer[9]Sparse Transformers[10] ?Longformer?self-attentionЧ?
1.6
о Evaluating Machines by their Real-World Language Use[11]磬а?T5?9д?á?ЩLM
2.1 ML
- У?Χ?λ?Joelle PineauImproving Reproducibility in Machine Learning Research[12]
- ? @ **AI**[13]?Χ?Щ??AI
- Щ£?Papers With CodeС?飨Facebook AI£?ML Code Completeness Checklist[14] ?[15]?ML?о?・?
- NLP?оλ?о[16]
2.2 NLP
?API?У?Thieves on Sesame Street! Model Extraction of BERT-based APIs[17]?о?BERTAPI?й?model extraction attacks?NLP?[18].
ACL 2020Weight Poisoning Attacks on Pre-trained Models[19]?о?poisoning?÷У?ЩвпЩ?ú?Щ?p?Щ?д
2.3 ?л?AICOVID-19úо?
- COVID-19?鸳COVID-19Sebastian RuderissueAI?оеЩCOVID-19[20]
- ?COVID-19Allen AI?оμ?е[21]?е?COVID-19?оCORD-19
- о?CORD-19?NLPó档?Rapidly Deploying a Neural Search Engine for the COVID-19 Open Research Dataset[22]об?п?CORD-19
- ArCOV-19?COVID-19 Twitter20201272020331УCOVID-19?Twitterа748k?еTwitterArCOV-19[23]Wо?
3.1 python
Sebastian RaschkaJoshua PattersonCorey Nolet?Machine Learning in Python: Main Developments and Technology Trends in Data Science, Machine Learning, and Artificial Intelligence[24]?йЩ?Python
3.2
HuggingFaceexBERTùBERTRoBERTa?huggingface[25]?УЩ?п?encode?
OpenAI?Microscope[26]WebóаЧЩ?Ч?о?Щ?Щ?еó?
3.3 CloudCV
?NLP Research HighLight[27]?У?ViLBERTVQA?CloudCV[28]?VQA?
3.4 pycaret
PyCaret[29]Python?ЧЧж?PyCaret?д?и?PyCaretPythonΧscikit-learnXGBoostMicrosoft LightGBMspaCy?
3.5 Micrograd
Andrej Karpathy?micrograd[30]ü150?ддСautograd?档
4.1 Transformer Family
?У?Lilian Weng?Transformer?・?μ?Transformer XL?
4.2 ?
NLP?о£?Щ?NLP?впб?úMadison May?£[31] ?NLP?У?I?
4.3 С
MIT?оμAI["once-for-all" network]Щ??ЩЧ?p?Щ£?λ
4.4 ?
?伸?óе?μС?зУ?Automating Data Augmentation: Practice, Theory and New Direction[32]о1Щ?3μ?гμ
5.1 ?
壬""
5.2
CBOWWord2VecELMoGPTBERTELECTRAT5GPT? OpenAI?оAlec Radford[33]?Pieter Abbeelе?γ?[34]
5.3 Python Numpy?
е?γConvolutional Neural Network for Visual Recognition[35],?Google Colab?á?
5.4 New mobile neural network architectures
?豸?豸New mobile neural network architectures[36]?
5.5
?£?Data-Driven Sentence Simplification: Survey and Benchmark[37]?б?
5.6 ?
Yisong Yue?[38]?γ?нimitation learning
γ?[39]
ARBML[40]?NLPMLWeb?к?
NLP Dashboard[41]NLP Webó?spaCyFlaskPython
?Connor ShortenYouTube?ML[42]?о[43]
?github[44]?NLP?
[1]
XTREME: https://arxiv.org/abs/2003.11080
[2]
Give your Text Representation Models some Love: the Case for Basque: https://arxiv.org/abs/2004.00033
[3]
?: https://ai.googleblog.com/2020/04/advancing-self-supervised-and-semi.html
[4]
Computers Already Learn From Us. But Can They Teach Themselves?: https://www.nytimes.com/2020/04/08/technology/ai-computers-learning-supervised-unsupervised.html
[5]
The Illustrated Self-Supervised Learning: https://amitness.com/2020/02/illustrated-self-supervised-learning/
[6]
Self-supervised learning and computer vision: https://www.fast.ai/2020/01/13/self_supervised/
[7]
Byte Pair Encoding is Suboptimal for Language Model Pretraining: https://arxiv.org/pdf/2004.03720.pdf
[8]
Longformer: https://arxiv.org/abs/2004.05150
[9]
Reformer: https://arxiv.org/abs/2001.04451
[10]
Sparse Transformers: https://arxiv.org/abs/1904.10509
[11]
Evaluating Machines by their Real-World Language Use: https://arxiv.org/abs/2004.03607
[12]
Improving Reproducibility in Machine Learning Research: https://arxiv.org/abs/2003.12206
[13]
AI??: https://zhuanlan.zhihu.com/c_1229351532736032768
[14]
ML Code Completeness Checklist: https://medium.com/paperswithcode/ml-code-completeness-checklist-e9127b168501
[15]
?: https://github.com/paperswithcode/releasing-research-code
[16]
?: https://twitter.com/srush_nlp/status/1245825437240102913?s=20
[17]
Thieves on Sesame Street! Model Extraction of BERT-based APIs: https://arxiv.org/abs/1910.12366
[18]
NLP?: http://www.cleverhans.io/2020/04/06/stealing-bert.html
[19]
Weight Poisoning Attacks on Pre-trained Models: https://arxiv.org/abs/2004.06660
[20]
COVID-19: http://newsletter.ruder.io/issues/covid-19-edition-236509
[21]
?: https://www.meetup.com/NY-NLP/events/269849442
[22]
Rapidly Deploying a Neural Search Engine for the COVID-19 Open Research Dataset: https://openrOpen Ai is an association whose goal is to create an AI that would benefit humanity. 这个在 日语 里怎么说? |
价格将降至 %{description} 日元/月。
价格将降至 %{description} 日元/年。
"},{"key":"landing_trek.valid_coupon_usd","value":"优惠券使用后的价格。价格将降至 %{description} USD/月。
"},{"key":"landing_trek.valid_coupon_yearly_usd","value":"优惠券使用后的价格。价格将降至 %{description} USD/年。
"},{"key":"landing_trek.invalid_coupon","value":"找不到优惠券。
"},{"key":"live.follow","value":"关注"},{"key":"live.unfollow","value":"取消关注"},{"key":"live.followed","value":"你关注了%{user}"},{"key":"live.following","value":"正在关注"},{"key":"live.confirm_unfollow","value":"你确定要取消关注%{user}吗?"},{"key":"modal.follow_info.button_label","value":"关于关注"},{"key":"modal.follow_info.title","value":"当你关注其他用户时会发生什么?"},{"key":"modal.follow_info.text","value":"关注一个用户可以让您在该用户直播开始或者发布问题时收到通知。"},{"key":"modal.follow_info.close_button_label","value":"好的"},{"key":"live.need_signin_to_follow","value":"您需要注册或登录才能关注用户"},{"key":"timeago.prefixAgo","value":""},{"key":"timeago.prefixFromNow","value":"从现在开始"},{"key":"timeago.ago","value":"之前"},{"key":"timeago.from_now","value":"之后"},{"key":"timeago.less_than_a_minute","value":"1分钟以内"},{"key":"timeago.about_a_minute","value":"大约1分钟"},{"key":"timeago.minutes","value":"%d分钟"},{"key":"timeago.about_an_hour","value":"大约1小时"},{"key":"timeago.about_hours","value":"大约%d小时"},{"key":"timeago.a_day","value":"1天"},{"key":"timeago.days","value":"%d天"},{"key":"timeago.about_a_month","value":"大约1个月"},{"key":"timeago.months","value":"%d月"},{"key":"timeago.about_a_year","value":"大约1年"},{"key":"timeago.years","value":"%d年"},{"key":"translation.loading","value":"正在加载翻译…"},{"key":"translation.hide","value":"隐藏翻译"},{"key":"translation.translate_answer","value":"查看翻译"},{"key":"translation.translate_question","value":"查看翻译"},{"key":"devise.confirmations.send_instructions","value":"You will receive an email with instructions about how to confirm your account in a few minutes."},{"key":"activity.limit.count.upvote","value":"您已达到每日赞的上限。"},{"key":"activity.limit.count.downvote","value":"您已达到每日踩的上限。"},{"key":"activity.limit.count.time","value":"您的限制将在%1$s小时后重置。"},{"key":"gift_selector.title","value":"选择礼物"},{"key":"gift_selector.description.title","value":"那就送个答谢礼吧"},{"key":"gift_selector.description.body","value":"比起点赞和贴图更能体现您的感激之情"},{"key":"common.send_gift","value":"发送礼物"},{"key":"common.ask_to_native_free","value":"免费向母语使用者提问"},{"key":"common.register_free","value":"免费注册"},{"key":"common.coin_not_enough","value":"Not enough coins. Please charge."},{"key":"coin_charger.title","value":"购买金币"},{"key":"common.owned_coins","value":"剩余金币"},{"key":"profile.notice_limit_native_lang","value":"因为%{date},用户最多可注册 2 种本地语言。"},{"key":"common.card_number","value":"Card Number"},{"key":"common.expiration_date","value":"截止日期"},{"key":"common.cvc","value":"CVC"},{"key":"common.back","value":"返回"},{"key":"gift.modal.appeal.about_gift_link","value":"什么是礼物?"},{"key":"gift.modal.appeal.content","value":"赠送礼物会让你更容易收到回答!"},{"key":"gift.modal.appeal.header","value":"送个答谢礼物吧"},{"key":"gift.sent_to_a_person","value":"您给%{name}送了个礼物。"},{"key":"gift.send_confirmation","value":"要赠送这个礼物吗?"},{"key":"question_filter.title","value":"过滤问题"},{"key":"question_filter.questions_not_answered_only","value":"只显示还没有被回答的问题"},{"key":"question_filter.interesting_questions_only","value":"只显示我有兴趣的语言问题"},{"key":"question_filter.questions_with_audios_only","value":"只显示有音声的问题"},{"key":"question_filter.questions_with_audio_answers_only","value":"只显示有音声的回答的问题"},{"key":"common.cancel","value":"取消"},{"key":"common.close","value":"关闭"},{"key":"common.ok","value":"好的"},{"key":"question_filter.languages","value":"语言"},{"key":"question_filter.countries","value":"具体的国家或地区"},{"key":"common.priority_question","value":"优先的问题"},{"key":"common.user_who_gift_sent_you","value":"Users who sent you gifts"},{"key":"common.all_questions","value":"All questions"},{"key":"flash_messages.error","value":"出现了一些问题。请稍候再试。"},{"key":"first_time_charge_campaign.banner","value":"首次购买金币可以获得2倍!"},{"key":"first_time_charge_campaign.supplement_1","value":"首次购入金币可以获得同等数量的免费金币。"},{"key":"first_time_charge_campaign.supplement_2","value":"这个优惠只能使用一次"},{"key":"first_time_charge_campaign.confirm_decline","value":"This is your only chance to load up on bonus coins. Pass up on this offer?"},{"key":"first_time_charge_campaign.one_time_only","value":"充值优惠仅限此页面!"}]">