赞
踩
Bert
作为近1年来大热的语言模型,必有其可爱之处,学习Bert
,是做为每个算法工程师的必备,不仅仅是CV
抑或是NLP
,依照笔者两段算法实习经验来看,Bert
在推荐领域、风控领域都是必不可少的一项工作。
文章在忧郁得茄子文章基础上做个人实践的改动,在读懂Bert前,需要对语言模型的发展有大量的理解,类似的,时间线如下所示:
我们选择其中较为重点的2001、2008、2013以及2018年来描述,而2014、2015的事件可以在2018年预训练模型提出时被广泛理解。
Bengio等人于2001年提出的前馈神经网络,如图所示:
i − t h o u t p u t = P ( w t = i ∣ c o n t e x t ) i-th \quad output = P(w_t = i | context) i−thoutput=P(wt=i∣context) 模型从C表词嵌入表中查询n
个 单词,将这些向量做级联后输入到一个稳定的隐藏层后,后被输入到Softmax层可以做词语预测。
多任务学习是多个任务上模型进行参数共享的一种通用方法,在神经网络中,可以通过给不同层施以不同的权重,很容易实现多任务学习。多任务学习的概念最初由Rich Caruana 在1993年提出,并被应用于道路跟踪和肺炎预测(Caruana,1998)。
Rich Caruana 在1993年提出,并被应用于道路跟踪和肺炎预测(Caruana,1998)。在2008年,Collobert 和 Weston 将多任务学习首次应用于 NLP 的神经网络。在他们的模型中,查询表(或单词嵌入矩阵)在两个接受不同任务训练的模型之间共享,如下面的图所示。
Mikolov等人在2013年提出的创新技术是通过去除隐藏层,逼近目标,进而使这些单词嵌入的训练更加高效。虽然这些技术变更本质上很简单,但它们与高效的word2vec配合使用,便能使大规模的词嵌入训练成为可能。
Word2vec有两种风格,如下面的图所示:连续字袋 CBOW 和 skip-gram。不过他们的目标不同:一个是根据周围的单词预测中心单词,而另一个则相反。
预训练的词嵌入与上下文无关,仅用于初始化模型中的第一层
。一系列监督型任务被用于神经网络的预训练。相反,语言模型只需要无标签的文本
;因此,训练可以扩展到数十亿个tokens, new domains, new languages。预训练语言模型于 2015 年被首次提出(Dai & Le,2015);直到最近,它们才被证明在各种任务中效果还是不错的。语言模型嵌入可以作为目标模型中的特征(Peters等,2018),或者使用语言模型对目标任务数据进行微调(Ramachandranden等,2017; Howard & Ruder,2018)。
Bert
中主要由多个Transformer
来组成,而Transformer
是由多个encoder
以及decoder
来组成,而encoder
以及decoder
所做的事主要是由机器翻译领域(甚至可以说使用简单的对话系统),encoder
阶段,第一个节点输入一个词,之后节点输入的是下一个词与前一个节点hidden state,那么encoder
会翻译成一个context,可以将其简称为一个c向量。
h t = f ( x t , h t − 1 ) . \boldsymbol{h}_t = f(\boldsymbol{x}_t, \boldsymbol{h}_{t-1}). ht=f(xt,ht−1).
c = q ( h 1
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。