How to Generate a Good Word Embedding

之前介绍过几种生成word embedding的方法,那么针对具体的任务该如何选择训练数据?如何选择采用哪个模型?如何选择模型参数?本篇将分享一篇paper来回答上述问题,paper的题目是How to Generate a Good Word Embedding,作者是来自中科院大学的来斯惟博士。


当前,word embedding的模型有很多,性能几乎都是各说纷纭,每个模型在自己选定的数据集和任务上都取得了state-of-the-art结果,导致学术研究和工程应用上难以做出选择。不仅仅在word embedding这个子方向上存在这样的问题,很多方向都有类似的问题,如何公平客观地评价不同的模型是一个很困难的任务。本文作者试着挑战了一下这个难题,并且给出了一些有意义的结果。


本文所做研究都是一个同一个假设,即:出现在相似上下文的单词具有相似的意思。

下面来看下不同模型的比较,不同word embedding模型之间主要的区别在于两点:


1、目标词和上下文的关系

2、上下文的表示方法


本文提供探讨了6种模型,并从这两个方面对模型进行了对比,如下图:


How to Generate a Good Word Embedding


c表示上下文,w表示目标词。首先看w和c的关系,前五种模型均是用c来预测w,只有C&W模型是给w和c的组合来打分。再看c的表示方法,Order模型是本文为了对比增加的一个虚拟模型,考虑了词序信息,将c中每个单词拼接成一个大向量作为输入,而word2vec的两个模型skip-gram和cbow都是将上下文处理为一个相同维度的向量作为输入,其中skip-gram选择上下文中的一个词作为输入,cbow将上下文的几个词向量作了平均,LBL、NNLM和C&W模型都是在Order模型的基础上加了一层隐藏层,将上下文向量做了一个语义组合。具体见下表:


How to Generate a Good Word Embedding


据研究估计,文本含义信息的20%来自于词序,剩下的来自于词的选择。所以忽略词序信息的模型,将会损失约20%的信息。


本文做了包括三种类型的八组对比实验,分别是:


  • 研究词向量的语义特性。该类实验是为了对比词向量的语义特性,包括:WordSim353,TOEFL,analogy task:semantic和syntactic。

  • 将词向量作为特征。该类实验是为了对比词向量作为处理其他任务的特征时,对该任务性能的提升。包括:文本分类和命名实体识别。前者将词向量加权平均得到文本向量来分类,权值是词频,数据集用的是IMDB;后者用CoNLL03数据集做NER任务。

  • 用词向量来初始化神经网络模型。该类实验是为了研究词向量作为神经网络的初始值,对NN模型的提升。包括:CNN文本分类和词性标注。前者用了我们之前提到过的Kim的CNN模型,将句子表示成矩阵作为CNN的输入得到句子的表示,进行情感分类,数据集是Stanford Sentiment Treebank;后者用Wall Street Journal数据集进行了POS tagging任务。


经过大量的对比实验,作者回答了以下几个问题:


Q:哪个模型最好?如何选择c和w的关系以及c的表示方法?


A:对于一个小型数据集来说,类似skip-gram这样越简单的模型效果越好,对于一个大型数据集来说,稍微复杂一点的模型,比如cbow和order就可以取得非常好的效果。真实数据中,skip-gram、cbow和order这样的模型足够了。在语义任务中,通过c来预测w的模型要更优于C&W这种将c和w都放在输入层的模型。


Q:数据集的规模和所属领域对词向量的效果有哪些影响?


A:数据集的领域远比规模重要,给定一个任务之后,选择任务相关的领域数据将会提升性能,相反,如果数据并不相关,将会导致更差的性能。当然,如果数据都属于同一领域,规模越大性能越好。


Q:在训练模型时迭代多少次可以有效地避免过拟合?


A:通常的做法是在测试数据集上观察误差,当误差开始上升时即可停止训练,但经过本文的研究,这种方法并不能得到最好的task结果,好的做法是用task data作为early stopping的数据。


Q:词向量的维度与效果之间的关系?


A:越大的维度就会有越好的效果,但在一般的任务中50就已经足够了。


本文作者做了大量的工作,针对当前词向量模型的方方面面问题进行了研究,并且给出了许多有意义的结果,对今后研究和使用词向量的童鞋们搭建了一个非常坚实的平台。并且在github上开源了实验结果。



来源:paperweekly


原文链接