在自然语言处理过程中,对文本的预处理(Pre-Training)是迁移学习的重要部分,在自然语言处理中主要指词向量的使用,有两种形式one-hot和word2vec;预训练通常可以提升训练效率并提高模型效果,使用预训练的结果就是去试图寻找最优解。
词向量可以把一个单词表示为向量形式,在后续的模型中应用。
词向量可被认为代表单词的语义(semantic)。
常用词向量模型有skip-gram, cbow, glove,这些模型不考虑上下文,即一个单词有固定(Fixed)的向量,不依赖于上下文的改变而改变。
而近年从ELMo,BERT, XLNet到ALBERT,这些模型重点都是考虑上下文对单词向量的影响。模型可以动态地去学习单词在不同上下文的词向量。
BERT是基于Transformer Encoder构建的模型,整个的架构基于DAE(Denoising Autoencoder),在BERT文章里叫作Masked Lanauge Model(MLM)。MLM并不是严格意义的语言模型,整个训练过程并不是利用语言模型方式来训练。BERT随机把一些单词通过MASK标签来代替,并预测被MASK的这个单词,过程就是DAE的过程。BERT有两种主要训练好的模型,分别是BERT-Small和BERT-Large, 其中BERT-Large使用了12层的Encoder结构。 整个的模型具有非常多的参数。
BERT的一些问题:
训练数据和测试数据之间的不一致性,也叫Discrephancy。
训练BERT时随机Mask掉一些单词,但使用过程中没有MASK标签,这就导致训练和使用不一样。
不能用来生成数据;由于BERT依赖DAE结构训练,所以不像基于语言模型训练的模型具备很好地生成能力。如NNLM,ELMo是基于语言模型生成的,用训练好的模型可以生成出一些句子、文本等。但基于这类生成模型的方法论也存在一些问题,在理解一个单词在上下文里的意思的时候,语言模型只考虑了它的上文,而没有考虑下文!
鉴于Bert的如上不足,结合其他模型,提出了XlNet模型。
生成模型是单向的,即便使用Bidirectional LSTM类模型,本质是使用了两套单向的模型。为解决此问题,可使用permutation language model, 把所有可能的permutation全部考虑进来(源于NADE)。
为了迎合这种改变,将原Transformer Encoder架构改进,叫作Two-stream attention, 为更好处理较长文本,使用Transformer-XL,这就是XlNet核心。
AlBert可以使用更少参数,更少内存,并提升效果。
Factorized Embedding Parameterization。
对Vocabulary Embedding的改进。在BERT、XLNet中,词表的 embedding size(E)和transformer层的hidden size(H)是等同的,所以E=H;但实际上词库一般都很大,导致模型参数个数就会变得很大,为此提出基于factorization的方法。即不直接把one-hot映射到hidden layer, 而先把 one-hot映射到低维空间再映射到hidden layer,类似于做了矩阵的分解。
Cross-layer parameter sharing。
每一层的layer可以共享参数,这样参数数量不会以层数的增加而增加,因此模型比BERT-large小18倍以上。
Inter-sentence coherence loss。在BERT的训练中提出了next sentence prediction loss,给定两个sentence segments, 然后用BERT 预测句子的先后顺序,ALBert提出此种方法用处不大, 其使用setence-order prediction loss (SOP),即基于主题的关联预测是否两个句子调换了顺序。