【注】本篇将从宏观上介绍bert的产生和在众多模型中的地位,以及与bert有关的许多名词。
Bert模型是Google在2018年10月发布的语言表示模型,Bert在NLP领域横扫了11项任务的最优结果,可以说是18年NLP中最重要的突破。Bert模型的全称是Bidirectional Encoder Representations from Transformers,是通过训练Masked Language Model和预测下一句任务得到的模型。
关于Bert具体训练的细节和更多的原理,有兴趣的读者可以去查看https://arxiv.org/abs/1810.04805原文。
从网络模型角度来说,地位大致如下:
Fasttext -> TextCNN -> DPCNN -> TextRCNN -> TextBiLSTM+Attention -> HAN -> Transformer -> BERT
从预训练网络模型角度来说,地位大致如下:(像较于预训练模型,预训练词向量现在已经被淘汰了)
ELMo -> ERNIE -> GPT -> BERT -> XLNet
什么叫Fine-tuning? 使用预训练模型(例如BERT模型),在预训练模型末端添加一些未训练过的神经元层,然后训练新的模型来完成任务。
【注】此时bert模型的参数是有反向传播的。
为什么要Fine-tuning?
1、更快速的开发。 首先,预训练模型权重已经编码了很多通用的语言信息。因此,训练微调模型所需的时间要少得多——就好像我们已经对网络的底层进行了广泛的训练,只需要将它们作为我们的分类任务的特征,并轻微地调整它们就好。
2、更少的数据。 预训练这种方法,允许我们在一个比从头开始建立的模型所需要的数据集小得多的数据集上进行微调。从零开始建立的 NLP 模型的一个主要缺点是,我们通常需要一个庞大的数据集来训练我们的网络,以达到合理的精度,但是我们必须投入大量的时间和精力在数据集的创建上。通过对 BERT 进行微调,我们现在可以在更少的数据集上训练一个模型,使其达到良好的性能。
3、更好的结果。 这种简单的微调程过程(通常在 BERT 的基础上增加一个全连接层,并训练几个 epochs)被证明可以在广泛的任务中以最小的调节代价来实现最先进的结果:分类、语言推理、语义相似度、问答问题等。与其实现定制的、有时还很难理解的网络结构来完成特定的任务,不如使用 BERT 进行简单的微调,也许是一个更好的(至少不会差)选择。
什么叫Feature extract? Bert的论文中对预训练好的 Bert模型设计了两种应用于具体领域任务的用法,一种是 fine-tune(微调) 方法,一种是 feature extract(特征抽取) 方法。
feature extract(特征抽取)方法指的是调用预训练好的 Bert 模型,对新任务的句子做句子编码,将任意长度的句子编码成定长的向量。编码后,作为你自己设计的某种模型(例如 LSTM、SVM 等都由你自己定)的输入,等于说将 Bert 作为一个句子特征编码器,这种方法没有反向传播过程发生,至于如果后续把定长句子向量输入到 LSTM 种继续反向传播训练,那就不关 Bert 的事了。这也是一种常见的语言模型用法,同类的类似 ELMo。
Feature extract与Fine-tuning的区别? fine tune(微调)方法指的是加载预训练好的 Bert 模型,其实就是一堆网络权重的值,把具体领域任务的数据集喂给该模型,在网络上继续反向传播训练,不断调整原有模型的权重,获得一个适用于新的特定任务的模型。这很好理解,就相当于利用 Bert 模型帮我们初始化了一个网络的初始权重,是一种常见的迁移学习手段。
embedding层:嵌入层,神经网络结构中的一层,由embedding_size个神经元组成,[可调整的模型参数]。是input输入层的输出。
词嵌入:也就是word embedding…根据维基百科,被定义为自然语言处理NLP中的一组语言建模和特征学习技术的集体名称,其中来自词汇表的单词或者短语被映射成实数向量。
word2vec:词嵌入这个技术的具体实现,也可以理解成是将向量从高维度映射到低维度的计算过程。 具体的包含两种处理方式也就是两个典型的模型—CBOW模型和SG模型。假设,原始数据有F个特征,通过one-hot编码后,表示成N维的向量,即input层的维度是N,和权重矩阵相乘,变成embedding_size维的向量。(embedding_size
词向量:也就是通过word2vec计算处理后的结果的释义。比如说…从input输入层到embedding层的权重矩阵,记作是N*embedding_size的,那么这个矩阵的一行就是一个词向量,是第几行就对应input输入层one-hot编码中第几列那个1所对应的词。
【注】常见的预训练词向量有,Stanford GloVe Embeddings、fastText word vectors
从模型的层数定义上来看,embedding
只有一层神经网络模型,而bert有非常非常多层网络,而且有1亿多个参数。
宏观上来看,bert
和embedding
是差不多的。在embedding
层使用预训练词向量,就相当于bert
使用了预训练的参数。bert
和embedding
都有Fine-tuning
和Feature extract
模式。只不过bert
比embedding
层数多得多、参数多得多。