人工智能A7论坛 >> Tensorflow和深度学习笔记_论坛版 >> 6 CNN 在自然语言处理中的应用 >> 6.3 CNN在文本分类中的应用

6.3.2 迁移学习在文本分类中的应用

    注意到,在前面我们提到了用CNN做文本分类需要先做word embedding。这个embedding层的权重怎么初始化、怎么训练,其实有两种思路。

    方案一:和模型中其他参数一起做初始化,然后仅仅使用训练语料中的数据来训练embedding层。这种方案实现起来简单,但是由于训练语料通常是不足或者不全面的,导致word embedding层训练的效果并不好,进而影响分类模型整体的准确率。

    方案二:使用迁移学习的思想,也就是把通过其他更大规模的语料训练好的词向量“迁移”到当前任务的embedding 层作为权重。这样,也将其他的大规模语料中的“信息”迁移到了我们的模型中。

 

    这里稍微延展一下讨论,迁移学习的应用场景并不局限于embedding层的赋权,也不局限于文本数据的训练。一般地,关于迁移学习具体的操作,有如下的经验:

 

   究竟该选择哪种方式的Transfer Learning?需要考虑的因素有许多,其中最重要的两条是新数据库的规模和它与预训练数据库的相似程度,根据这两条因素的不同配置,存在四种场景:

   I) 新数据库小,和预训练数据库相似。因为数据库比较小,fine-tune的话可能会产生过拟合,比较好的做法是用预训练的网络作为特征提取器,然后训练线性分类器用在新的任务上。(不改变预训练权重)

  II)新数据库比较大,和预训练数据库相似。这种情况下,不用担心过拟合,可以放心地微调整个网络。(fine-tuning)

  III)新数据库小,和预训练数据库不相似。这时,既不能微调,用预训练网络去掉最后一层作为特征提取器也不合适,可行的方案是用预训练网络的前面几层的激活值作为特征,然后训练线性分类器。

  IV) 新数据库大,和预训练数据库不相似。这时可以从头开始训练,也可以在预训练的基础上进行微调。(train from scratch or  fine-tuning)

 

除了自己通过word2vecfasttextglovec训练词向量,网上也有一些公开的词向量

Facebook研究院用wiki语料训练的词向量

https://github.com/facebookresearch/fastText/blob/master/pretrained-vectors.md

 

斯坦福大学已经训练好的词向量模型下载网址

http://nlp.stanford.edu/data/wordvecs/

http://nlp.stanford.edu/projects/glove/

 

将自己单独训练好的或者下载下来的词向量文件载入到tensorflowembedding作为初始权重的方式:

load pre-trained word2vec into cnn-text-classification-tf

https://gist.github.com/j314erre/b7c97580a660ead82022625ff7a644d8