NLP预处理语言模型演进

在进行核心步骤关系抽取之前,还需要经历一系列基础的NLP处理环节。

模型的预训练最初被用在图像和视频领域的深度学习中,能有效解决训练数据少的问题,同时还能极大加快任务训练的收敛速度。经过预处理后的数据再用于下游的分词、命名实体识别等任务时可以取得更好的效果。

语言模型是一串词序列的概率分布。具体来说,语言模型的作用是为一个长度为m的文本确定一个概率分布P,表示这段文本存在的可能性。在实践中,如果文本的长度较长,P(wi | w1, w2, . . . , wi−1)的估算会非常困难。因此,研究者们提出使用一个简化模型:n元模型(n-gram model)。在n元模型中,传统的方法一般采用频率计数的比例来估算n元条件概率。当n较大时,机会存在数据稀疏问题,导致估算结果不准确。为了缓解n元模型估算概率时遇到的数据稀疏问题,Bengio在2003年提出了神经网络语言模型(NLM),是为Word Embedding的想法的雏形。

Word Embedding

作为NLP里的早期预训练技术,词嵌入(Word Embedding)或者分布式向量(Distributional Vectors)是将自然语言表示的单词转换为计算机能够理解的向量或矩阵形式的技术。有了一个词的向量之后,各种基于向量的计算就可以实施,如用向量之间的相似度来度量词之间的语义相关性。其基于的分布式假设就是出现在相同上下文的词意思应该相近。Word Embedding也有其局限性,比如:难以对词组做分布式表达;无法解决多义词问题,这对情感分析任务的影响非常大。此外,Word Embedding对于应用场景的依赖很强,所以针对特殊的应用场景可能需要重新训练,这样就会很消耗时间和资源。

ELMo

Word Embedding本质上是个静态的方式,即训练完了单词的表达就固定了,不会跟着上下文场景的变化而改变。为了解决这个问题,出现了ELMO(Embedding from Language Models)的训练方案。ELMO采用了典型的两阶段过程,第一个阶段是利用语言模型进行预训练;第二个阶段是在做下游任务时,从预训练网络中提取对应单词的网络各层的Word Embedding作为新特征补充到下游任务中。通过加入双层双向的LSTM网络结构,ELMo引入上下文动态调整单词的embedding后,多义词问题得到了解决。但是ELMo的缺点在将LSTM作为特征抽取器时抽取能力不够强。

GPT

除了以ELMo为代表的这种基于特征融合的预训练方法外,NLP里还有一种典型做法,称为“基于Fine-tuning的模式”,而GPT就是这一模式的典型开创者,用到了目前NLP里最强的特征提取器Transformer。Transformer 是谷歌大脑在2017年底发表的论文 attention is all you need中所提出来的seq2seq模型,是一个叠加的自注意力机制(Self Attention)构成的深度网络。相比于LSTM的迭代训练,Transformer的训练是并行的,使用了位置嵌入来理解语言的顺序,使用自注意力机制和全连接层来进行计算。

GPT(Generative Pre-Training)是指生成式的预训练,也采用两阶段过程,第一个阶段是利用语言模型进行预训练,第二阶段通过Fine-tuning的模式解决下游任务。GPT的预训练虽然仍然是以语言模型作为目标任务,但是采用的是单向的语言模型,这限制了其在更多应用场景的效果,比如阅读理解这种任务。

BERT

针对GPT单向模型的限制,出现了被大为追捧的BERT模型。BERT模型的全称是双向transformer编码表达,BERT采用和GPT完全相同的两阶段模型,首先是语言模型预训练;其次是使用Fine-Tuning模式解决下游任务。和GPT的最主要不同在于在预训练阶段采用了类似ELMO的双向语言模型,当然另外一点是语言模型的数据规模要比GPT大。BERT最大优势在于,可以对具体任务进行特征步充,因此几乎可以做任何NLP的下游任务,具备很强的普适性。 参见之前写的

参考链接1

参考链接2