美文网首页
feature-based 和 fine-tune

feature-based 和 fine-tune

作者: 三方斜阳 | 来源:发表于2021-01-29 14:41 被阅读0次

Feature-based

以bert预训练语言模型为例,bert使用大规模无标注数据训练了一个transformer中的编码器encoder,那么下游任务如何使用这些已经训练好的预训练模型呢?

直观理解feature-based 原理就是,比如有一个文本分类任务,那么训练开始第一步就是数据的向量化表示,也就是把数据分词,每个词变成向量embedding。

如果不用bert,以前的做法是使用查表的方式,每个词根据word2vec或者glove甚至是最原始的one-hot方式,得到的静态词向量,一个词对应一个200或者300维的向量表示,所以说其实word2vec就是最原始的预训练语言模型,先用一批数据训练得到一批词的静态词向量。

那么现在的bert也一样,拿到下游训练的数据之后,输入bert训练好的编码器encoder,然后得到每个词的embedding,这就是feature-based方法。我的理解是,feature-based基于特征的,就是bert训练的过程中把模型的参数保存下来了。了解过word2vec的应该知道,最后得到的词向量也就是神经网络中训练的参数的计算加权累加(根据算法来)。所以就是在输入数据获得encoder输出的时候把这些特征保存下来了,得到每个词的词向量表示,然后用于具体的文本分类任务等,这样的做法一个明显的缺点就是占用存储太大了,毕竟要把所有的特征都保存一下

2. fine-tune

fine-tune的话就是,根据下游特定的任务,在原来的模型上面进行一些修改,使得最后输出是本任务需要的。

以bert为例就是,例如情感分析任务,将数据输入bert模型,将最后的输出取得第一个token的输出,传入一个softmax层,得到一个分类的结果,所以其实就是在最后加了一层softmax‘

如果是NER之类的任务,就是得到最后全部token的输出,都进入一层softmax得到一个分类预测。

所以fine-tune就是,根据下游任务的需求,修改一下模型的结构,一般都是在最后一层操作,然后得到想要的输出,然后依据这个流程将数据进行训练,训练完了之后呢,在测试集上面测试。但是这种方式的话很明显占用资源更大,因为要重新训练,而transformer 的encoder结构非常的大,因此如果可以直接用bert的训练结果会更好,但是呢根据具体任务而言,实现的时候又会有各种各样的问题,所以还是需要实践来完善。

参考的很多其他理解,fine-tune分为两个步骤:

1. 构造语言模型,采用大的语料A来训练语言模型

2. 在语言模型基础上增加少量神经网络层来完成specific task例如序列标注、分类等,然后采用有标记的语料B来有监督地训练模型,这个过程中语言模型的参数并不固定,依然是trainable variables.

对于不同的下游任务,我们仅需要对BERT不同位置的输出进行处理即可,或者直接将BERT不同位置的输出直接输入到下游模型当中。具体的如下:

1. 对于情感分析等单句分类任务,可以直接输入单个句子(不需要[SEP]分隔双句),将[CLS]的输出直接输入到分类器进行分类

2. 对于句子对任务(句子关系判断任务),需要用[SEP]分隔两个句子输入到模型中,然后同样仅须将[CLS]的输出送到分类器进行分类

3. 对于问答任务,将问题与答案拼接输入到BERT模型中,然后将答案位置的输出向量进行二分类并在句子方向上进行softmax(只需预测开始和结束位置即可)

4. 对于命名实体识别任务,对每个位置的输出进行分类即可,如果将每个位置的输出作为特征输入到CRF将取得更好的效果。

5. 对于常规分类任务中,需要在 Transformer 的输出之上加一个分类层.

参考:

论文解读:BERT模型及fine-tuning - 知乎

相关文章

网友评论

      本文标题:feature-based 和 fine-tune

      本文链接:https://www.haomeiwen.com/subject/rbwkzktx.html