之前介绍过几种生成word embedding的方法,那么针对具体的任务该如何选择训练数据?如何选择采用哪个模型?如何选择模型参数?本篇将分享一篇paper来回答上述问题,paper的题目是How to Generate a Good Word Embedding,作者是来自中科院大学的来斯惟博士。
当前,word embedding的模型有很多,性能几乎都是各说纷纭,每个模型在自己选定的数据集和任务上都取得了state-of-the-art结果,导致学术研究和工程应用上难以做出选择。不仅仅在word embedding这个子方向上存在这样的问题,很多方向都有类似的问题,如何公平客观地评价不同的模型是一个很困难的任务。本文作者试着挑战了一下这个难题,并且给出了一些有意义的结果。
本文所做研究都是一个同一个假设,即:出现在相似上下文的单词具有相似的意思。
下面来看下不同模型的比较,不同word embedding模型之间主要的区别在于两点:
1、目标词和上下文的关系
2、上下文的表示方法
本文提供探讨了6种模型,并从这两个方面对模型进行了对比,如下图:
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模型的基础上加了一层隐藏层,将上下文向量做了一个语义组合。具体见下表:
据研究估计,文本含义信息的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
原文链接