词向量的新进展

2019-12-18 16:38:40 浏览数 (1)

最近谷歌研究人员通过新的BERT模型在11项NLP任务中夺得STOA结果,这在自然语言处理学界以及工业界都引起了不小的热议。作者通过在33亿文本的语料上训练语言模型,再分别在不同的下游任务上微调,这样的模型在不同的任务均得到了目前为止最好的结果,并且有一些结果相比此前的最佳成绩得到了幅度不小的提升。借此契机,我们回顾一下词表示方向的这两年的一些新进展,希望能发现一些规律和新的idea。基本的介绍路线如下:

  • 从预训练说起,词向量其实就是NLP领域的迁移学习的起点
  • Word2Vec有哪些缺点,为什么大家要去寻找新的方法
  • AlanNLP提出的ELMo
  • Transformer的结构
  • FastAI就推出的ULMFiT
  • OpenAI提出的GPT
  • 谷歌出品的的BERT

从预训练说起

早在2015年的时候,微软研究院的何恺明和他的同事们发表了残差网络的论文,第一次通过残差的方式将卷积神经网络推进到了100层以上,并在图像识别的任务上刷新了当时的最高纪录。自那以后起,随着网络不断地加深,效果也在不断提升。然而大量的数据训练出来的大型网络虽然效果更好,但随着网络的加深以及数据集的不断扩大,完全重新训练一个模型所需要的成本也在不断地增加。

因此在计算机视觉处理中,人们越来越多地采用在大规模数据集上预训练好的大型网络来提取特征,然后再进行微调来满足特定任务,这种预训练和微调的方法称之为迁移学习

迁移学习有以下几点实践中的优点:

  • 实际训练的数据集小,很难训练复杂网络(容易过拟合)
  • 可以加快模型的训练速度
  • 给一个不错的参数初始化,有利于后续的优化

那为什么迁移学习是可行的呢?这是因为预训练好的网络参数,尤其是底层的网络参数抽取出特征跟具体任务越无关,越具备任务的通用性,而高层特征跟任务关联较大,实际可以不用使用,或者采用Fine-tuning用新数据集合清洗掉高层无关的特征抽取器。

最近大神何恺明的新作Rethinking ImageNet Pre-training里面说参数随机初始化的效果不比微调的效果差(算力充足,迭代足够多轮),但是也证明了微调确实可以加速训练。

何恺明文章里面的随机初始化和预训练的结果比较

相比之下,自然语言处理目前通常会使用预训练的词向量来进行后续任务。但词向量是通过浅层网络进行无监督训练,虽然在词的级别上有着不错的特性,但却缺少对连续文本的内在联系和语言结构的表达能力。因此大家也希望能像图像领域那样,通过大量数据来预训练一个大型的神经网络,然后用它来对文本提取特征去做后续的任务,以期望能得到更好的效果。

Word2Vec

论文

  • Distributed Representations of Sentences and Documents 在前人基础上提出更精简的语言模型(language model)框架并用于生成词向量,这个框架就是 Word2vec
  • Efficient estimation of word representations in vector space

​ 专门讲训练 Word2vec 中的两个trick:hierarchical softmax 和 negative sampling

Word2Vec有两种训练方法,一种叫CBOW,核心思想是从一个句子里面把一个词抠掉,用这个词的上文和下文去预测被抠掉的这个词;第二种叫做Skip-gram,和CBOW正好反过来,输入某个单词,要求网络预测它的上下文单词。

Continous Bag of Words Model

Skip-Gram model

Word2Vec的两种训练方式

应用于下游任务例如问答、翻译、情感分析的时候,词向量不用随机的初始化,而是采用从预训练词表里查表初始化即可。下游NLP任务在使用Word Embedding的时候也类似图像有两种做法,一种是Frozen,就是Word Embedding那层网络参数固定不动;另外一种是Fine-Tuning,就是Word Embedding这层参数使用新的训练集合训练也需要跟着训练过程更新掉。

那么Word2Vec有什么问题呢?其实问题就在于词向量训练的时候有一个假设:将语义相似的词分配相似的词向量,以确保它们在向量空间的距离尽可能的近(一义多词)。所以问题就在于通过这种方式训练之后的词向量是静态的,上下文无关的,不能解决一词多义。这实际上是一个比较大的问题,因为多义词在语言中还是非常见的,也是语言灵活性和高效性的一种体现。

下文的ELMo就是着重来解决这个问题的。

ELMo

ELMO是“Embedding from Language Models”的简称,

Transformer

Transformer是和CNN、RNN一样的特征提取器,只不过里面用的是纯Attention罢了。

Transformer舍弃了RNN的循环式网络结构,完全基于注意力机制来对一段文本进行建模。注意力机制的核心思想是去计算一句话中的每个词对于这句话中所有词的相互关系,然后认为这些词与词之间的相互关系在一定程度上反应了这句话中不同词之间的关联性以及重要程度。因此再利用这些相互关系来调整每个词的重要性(权重)就可以获得每个词新的表达。这个新的表征不但蕴含了该词本身,还蕴含了其他词与这个词的关系,因此和单纯的词向量相比是一个更加全局的表达。

Transformer通过对输入的文本不断进行这样的注意力机制层和普通的非线性层交叠来得到最终的文本表达。

BERT

说白了,BERT就是一个预训练好的表示模型。论文的主要特点以下几点:

  1. 使用了Transformer 作为算法的主要框架,Trabsformer能更彻底的捕捉语句中的双向关系;
  2. 使用了Mask Language Model(MLM) 和 Next Sentence Prediction(NSP) 的多任务训练目标;
  3. 使用更强大的机器训练更大规模的数据,使BERT的结果达到了全新的高度,并且Google开源了BERT模型,用户可以直接使用BERT作为Word2Vec的转换矩阵并高效的将其应用到自己的任务中。

使用

  • BERT文本分类教程
  • 用谷歌BERT模型在BLSTM-CRF模型上进行预训练用于中文命名实体识别的Tensorflow代码
  • BERT的PyTorch实现

Reference

  1. The Annotated Transformer

0 人点赞