NLP (Natural Language Processing) 天然语言处理,是计算机科学、人工智能和语言学的交叉学科,目的是让计算机处理或“理解”天然语言。天然语言一般是指一种天然地随文化演化的语言,如汉语、英语、日语。git
文本朗读(Text to speech)/ 语音合成(Speech synthesis)
语音识别(Speech recognition)
中文自动分词(Chinese word segmentation)
词性标注(Part-of-speech tagging)
句法分析(Parsing)
天然语言生成(Natural language generation)
文本分类(Text categorization)
信息检索(Information retrieval)
信息抽取(Information extraction)
文字校对(Text-proofing)
问答系统(Question answering)
机器翻译(Machine translation)
自动摘要(Automatic summarization)
文字蕴涵(Textual entailment)github
从时间轴角度,能够看到 NLP 中重要模型的发布链:
word2vec -> seq2seq -> Attention model -> Transformer(vanilla) -> ELMO -> Transformer(universal) -> GPT -> BERT -> GPT-2 -> Transformer-XL -> XLNet数据库
可是被广为使用的模型迭代图是:ELMO -> Transformer -> GPT -> BERT网络
时间:2013.01
论文地址:https://arxiv.org/abs/1301.3781
github: https://github.com/danielfrg/word2vec架构
问题提出:
one-hot编码解决了文本特征离散表示的问题,但它假设词与词相互独立而且特征向量会过于稀疏,会形成维度灾难。框架
方法:
经过训练,将每一个词都映射到一个较短的词向量上来。全部的这些词向量就构成了向量空间,进而能够用普通的统计学的方法来研究词与词之间的关系。
word2vec的具体实现分为CBOW和Skip-Gram两种模型。CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。
Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。机器学习
结论:
CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好。Skip-Gram模型的训练须要更长的时间。函数
时间:2014.09
论文地址:https://arxiv.org/pdf/1409.3215.pdfpost
问题提出:
原始的RNN要求序列等长,然而咱们遇到的大部分问题序列都是不等长的,如机器翻译中,源语言和目标语言的句子每每并无相同的长度。性能
方法:
结论:
这一结构在机器翻译。文本摘要、阅读理解、语音识别等领域能取得很好的性能。
时间:2015.02
论文地址: https://arxiv.org/abs/1502.03044v1
问题提出:
在Encoder-Decoder框架中,在预测每个yi时对应的语义编码c都是同样的,也就意味着不管句子X中的每一个单词对输出Y中的每个单词的影响都是相同的。这样就会产生两个弊端:一是语义向量没法彻底表示整个序列的信息,再者就是先输入的内容携带的信息会被后输入的信息稀释掉,或者说被覆盖了。输入序列越长,这个现象就越严重。这就使得在解码的时候一开始就没有得到输入序列足够的信息, 那么解码的准确度天然也就要打个折扣了。
方法:
注意力机制模型中,Decoder 的输出会与Encoder每个时间点的输出进行分数计算,具体的算方法不少,常见的方式为内积。接著经过softmax层即可获得每个encoder hidden state’s attention weights,和为1,可表示为该decoder步骤注重encoder 输出的权重分布,以后将每一个encoder输出与 attention weights 做加权求合即获得最终的attention vector,Decoder在每个时间点都会进行上述的注意力计算。
结论:
注意力机制能大大提高LSTM,GRU的总体性能。
时间:2017.06
论文地址:https://arxiv.org/abs/1706.03762
github:https://github.com/tensorflow/tensor2tensor
问题提出:
RNN结构自己比较简单,也很适合序列建模,但RNN的明显缺点之一就是没法并行,所以速度较慢,这是递归的自然缺陷。另外RNN没法很好地学习到全局的结构信息,由于它本质是一个马尔科夫决策过程。CNN事实上只能获取局部信息,是经过层叠来增大感觉野。
方法:
结论:
实验验证transformer在翻译任务作到了SOFA,比循环神经网络快,效果好。
时间:2018.02
论文地址:https://arxiv.org/abs/1802.05365
问题提出:
词向量须要解决两个问题:(1)词使用的复杂特性,如句法和语法。(2)如何在具体的语境下使用词,好比多义词的问题。传统的词向量如word2vec可以解决第一类问题,可是没法解决第二类问题。
方法:
Elmo主要使用了一个两层双向的LSTM语言模型,结合上下文来理解词义。先在一个大型的预料库上面进行训练,用模型的内部状态来表征一个词的向量,此时内部状态混合了全部的语义;而后将下游任务的文本输入模型,此时的词具有了具体的上下文语境,再用内部状态的线性组合来表征词。这种线性组合是在下游任务中进行训练获得的。
结论:
biLSTM层能有效地编码上下文中不一样类型的语法和语义信息,提升总体任务性能。
时间:2018.07
论文地址:https://arxiv.org/abs/1807.03819
问题提出:
Transformer 中 Encoder和Decoder Block执行的次数还是人为设定的超参数,这意味著,模型架构没法随著任务的特性、难易,自动的调整训练的策略和次数。
方法:
Universal Transformer 经过正弦函数具周期的特性,Position embedding将位置信息加入每个input symbol,除此以外,Timestep embedding(递回次数)也使用相同方法处理。将position和timestep embedding 一并与输入做加法运算,即成功将位置和递回次数信息加入模型中。
使用Transition function,除了增长非线性变换的次数外,与Vanilla Transformer不一样的是,每个Symbol都有本身独立的Transition function,这可以有效率的学习到更深层的语意资讯。每个symbol在著训练的过程,都能自由的控制iteration次数,由于有些symbol须要屡次的iteration才能充分理解其语意,有些则不须要,先中止的symbol会复制相同的数据到下一个step,直到全部的symbol都中止,或到达了iteration的上限值。
Transition function 是有别于Vanilla Transformer一个重要的特色,Transition function能够是一个简单的Dense Layer,也能够是CNN Layer,差异在于,Vanilla Transformer再经过self-attention后,将全部的输出一并送进Dense Layer,而Universal Transformer的Transition function则是基于每个不一样的symbol分头进行。经过此方法,能提高训练收敛速度且让每一个symbol有更好的vector representation,所以能提高总体表现。
结论:
Universal Transformer采用了 adaptive computation time (ACT)让模型能够动态地调整每一个symbol的计算次数,借以得到最好的向量表达,此外有别于传统作法,此方法在transition function依照个别symbol分头进行,这可以有效率的学习每一个symbol的向量表达,并保留了Vanilla Transformer的优势,解决传统方法梯度爆炸/消失和资讯遗失的问题;实验发现Universal Transformer不只让机器翻译达到更准确的效果,也补足了algorithmic tasks 成效低落的缺点,让Universal Transformer能更泛用于各式各样不一样的任务,成为计算通用模型。
问题提出:
首次提出结合无监督的预训练(pre-training)和有监督的微调(fine-tuning),旨在学习一种通用的表示方式,转移到各类类型的NLP任务中均可以作不多的改变。
方法:
单向自回归Transformer模型,词向量+位置向量
结论:
对四种类型的NLP任务(12个task)进行了评估 ,在9个作到了SOFA。
时间:2018.10
论文地址:https://arxiv.org/abs/1810.04805
github: https://github.com/google-research/bert
问题提出:
ELMo 使用两条独立训练的LSTM获取双向信息,但融合方式是直接concat,太过粗暴。而 GPT 使用自回归模式的Transformer 只能获取单向信息。
方法:
采用3种embedding相加的方式做为模型输入:Token Embeddings+Segment Embeddings+Position Embeddings,其中token embedding采用的是word piece embedding,Position Embeddings不一样于Transformer,使用了一组随机初始化的参数同模型一块儿学习,模型同Transformer。
最关键的点在于对模型的预训练。采用了2种不一样的预训练任务。
(1)把一篇文章中,15% 的词汇遮盖,让模型根据上下文全向地预测被遮盖的词。假若有 1 万篇文章,每篇文章平均有 100 个词汇,随机遮盖 15% 的词汇,模型的任务是正确地预测这 15 万个被遮盖的词汇。经过全向预测被遮盖住的词汇,来初步训练 Transformer 模型的参数。
(2)预测下一句是否连续。譬如从上述 1 万篇文章中,挑选 20 万对语句(总共 40 万条语句)。挑选语句对的时候,其中 10 万对语句,是连续的两条上下文语句,另外 10 万对语句,不是连续的语句。而后让 Transformer 模型来识别这 20 万对语句,哪些是连续的,哪些不连续。
结论:
BERT主要贡献是将无监督pre-training+有监督fine-tuning这一模式推广到更深层的双向结构中。
时间:2019.02
论文地址:https://d4mucfpksywv.cloudfront.net/better-language-models/language-models.pdf
github: https://github.com/openai/gpt-2
问题提出:
目前主流的机器学习模型都是在指定的任务上去用一部分数据来训练模型,再用一部分不相同但同分布的数据来测试其性能。这样的模式在特定场景效果的确不错,可是对于字幕或者说阅读理解、图像分类这样的任务来讲,输入的多样性和不肯定性就会把缺点给暴露出来。目前广泛采用的用单一领域的数据来训练单一模型是该问题的罪魁祸首,若是要构建一个泛化能力更强的模型,须要在更普遍的任务和领域上进行训练。
方法:
把多任务学习和无监督学习联系起来,将条件几率由p(output|input) 改成p(output|input,task) 。在多个任务上进行预训练,无监督地作下游任务。
模型沿用GPT 1.0 单向自回归语言模型, 数据质量高、更宽泛、量更大。 Transformer模型也更大(48层,15亿参数)。
结论:
当一个大的语言模型被训练在一个足够大和不一样的数据集上时,它可以在许多领域和数据集上表现良好。GPT-2在测试的8个数据集中有7个数据集,该模型可以在零样本的状况下取得SOFA,通过训练的高容量模型可以最大限度地提升文本语料库多样性的可能性,从而在不须要作监督学习的状况下执行数量惊人的任务。
时间:2019.06
论文地址:https://arxiv.org/abs/1901.02860
github: https://github.com/kimiyoung/transformer-xl
问题提出:
vanilla Transformers使用固定长度的上下文来实现,即将一个长的文本序列截断为512个字符的固定长度片断,而后分别处理每一个片断。这形成了3个限制:
1. 上下文长度受限:字符之间的最大依赖距离受输入长度的限制,模型看不到出如今几个句子以前的单词。
2. 上下文碎片:对于长度超过512个字符的文本,都是从头开始单独训练的。段与段之间没有上下文依赖性,会让训练效率低下,也会影响模型的性能。
3. 推理速度慢:在测试阶段,每次预测下一个单词,都须要从新构建一遍上下文,并从头开始计算,这样的计算速度很是慢。
方法:
1. 提出片断级递归机制。Transformer-XL仍然是使用分段的方式进行建模,但其与vanilla Transformer的本质不一样是在于引入了段与段之间的循环机制,使得当前段在建模的时候可以利用以前段的信息来实现长期依赖性。
在训练阶段,处理后面的段时,每一个隐藏层都会接收两个输入:
(1)该段的低隐藏层的输出(与vanilla Transformer相同)。
(2)前面段的隐藏层的输出,可使模型建立长期依赖关系。
2. 使用了相对位置编码来从新实现postion embedding。在分段的状况下,若是仅仅对于每一个段仍直接使用Transformer中的位置编码,即每一个不一样段在同一个位置上的表示使用相同的位置编码,就会出现问题。好比,第i−2段和第i−1段的第一个位置将具备相同的位置编码,但它们对于第i段的建模重要性显然并不相同(例如第i−2段中的第一个位置重要性可能要低一些)。所以,须要对这种位置进行区分。
结论:
对于长文档建模能力有明显的提高,依赖关系的有效长度比循环网络长80%,比vanilla Transforme长450%。在验证阶段比vanilla Transforme快1,800+倍。
时间:2019.06
论文地址:https://arxiv.org/pdf/1906.08237.pdf
github: https://github.com/zihangdai/xlnet
问题提出:
方法:
结论:
维持了表面看上去的自回归语言模型的从左向右的模式,这个有明显的好处,就是对于生成类的任务,可以在维持表面从左向右的生成过程前提下,模型里隐含了上下文的信息。引入了Transformer XL的机制,因此对于长文档输入类型的NLP任务,也会比Bert有明显优点。
参考文献:
https://blog.csdn.net/qq_33360393/article/details/100045351
https://www.toutiao.com/a6742415474396496387/?traffic_source=&in_ogs=&utm_source=&source=search_tab&utm_medium=wap_search&original_source=&in_tfs=&channel=
attention,命名实体识别, word2vec,embading