常用词向量对比

常用词向量方法对比

本文测试常用的几个WordEmbedding方法,并对比效果

常用词向量

  1. Word2Vec

    这是通过上下文信息预测词向量方法的典型代表,主要包括CBOW和Skip-gram两种,测试用的是CBOW + NegtiveSampling

    代码:https://code.google.com/p/word2vec/

    论文:https://arxiv.org/pdf/1301.3781.pdf

  2. Glove

    利用统计的方法,对词及其上下文词的出现频率进行建模,论文还将模型原理与word2vec进行对比,分析其相似性和差异;

    原理上看,两种模型出发点相似,但是建模时损失函数设置与参数的形式有差异(理解得对吗?)

    代码:https://github.com/stanfordnlp/GloVe

    论文:http://nlp.stanford.edu/pubs/glove.pdf

  3. Fasttext

    fasttext做wordEmbedding的时候,认为词是由英文字母组成,包含相似的字母结构的词应该有共性,该方法借鉴Word2vec,增加词内字母的信息做辅助

    代码:https://github.com/facebookresearch/fastText

    论文:https://arxiv.org/pdf/1607.04606

  4. word2gm

    借鉴Word2vec,认为词在不同上下文中可能语义不同(多义词居多),一词对应一个vector不足以反映这类信息,考虑一词多个Embedding,借助高斯混合模型学习词的每个子向量

    代码:https://github.com/benathi/word2gm

    论文:https://arxiv.org/abs/1704.08424

  5. prob-fasttext

    fasttext考虑了字母信息,但是没考虑一词多义,将word2gm和fasttext的思想混合,每个词用2个embedding结果表示,其中一个是字母构成的embedding,一个是自身的embeeding,论文称,实验表明,2个embedding足以表示词的信息

    代码:https://github.com/benathi/multisense-prob-fasttext

    论文:https://arxiv.org/abs/1704.08424

实验对比

数据

训练数据:
1. 全部模型采用text8数据
2. 链接:http://mattmahoney.net/dc/text8.zip

测试数据:
1. 词相似性(word similarity)

大量公共数据集,直接采用prob-fasttext作者整理的
  1. 词类推(word analogy)

    采用Word2vec论文收集的数据集,分类使用Glove作者的结果

关键参数

  1. vector-dimension:50

  2. winsize: 10

  3. iter:100 or 10 epoch

结果对比

  1. word similarity
dataset word2Vec glove fasttext word2gm prob-fasttext
MTurk-771 59.3 41.2 32.6 50.0 55.1
simlex999 27.3 14.6 22.5 20.0 24.9
rw 38.2 17.6 36.7 12.0 28.3
mc 62.3 41.7 34.0 47.8 46.2
MTurk-287 67.0 50.4 41.4 64.5 64.0
men-3k 66.1 39.1 31.2 56.2 64.1
scwc 63.3 47.9 55.2 54.3 67.2
rg 70.9 29.9 33.3 50.2 56.3
yp 39.8 30.4 19.7 20.7 23.7
ws353-s 72.8 44.6 44.9 61.0 66.6
ws353-r 65.5 49.4 35.7 49.4 53.8
ws353-a 69.8 43.9 41.0 54.2 58.9

注:采用Spearman系数×100

  1. word analogy
dataset word2Vec glove fasttext word2gm prob-fasttext
capital-world 39.23 21.80 0.76 1.07 -
currency 11.41 1.68 0.00 0.00 -
capital-common-countries 66.21 57.71 1.98 0.99 -
city-in-state 25.49 37.08 1.72 1.03 -
family 45.00 39.05 19.76 2.62 -
gram1-adjective-to-adverb 16.53 4.64 71.07 0.20 -
gram2-opposite 6.75 3.97 66.53 0.00 -
gram3-comparative 39.94 26.58 48.65 1.20 -
gram4-superlative 15.12 5.85 61.49 0.00 -
gram5-present-participle 26.89 8.62 55.97 0.38 -
gram6-nationality-adjective 70.81 48.45 37.94 3.42 -
gram7-past-tense 28.46 10.38 11.15 0.38 -
gram8-plural 45.12 17.12 47.97 2.70 -
gram9-plural-verbs 17.70 5.75 51.26 0.69 -
Semantic 34.84 28.41 2.16 1.05 -
Syntactic 33.21 16.87 47.00 1.17 -
Total 33.89 21.67 28.34 1.12 -

注明:
(1)以上均是Top1 accuracy,百分比(%)
(2)prob-fasttext未做实验

结果分析及与论文结果对比

  1. Glove

    原文效果:

    (1)两个任务下,原文效果明显优于实验效果

    常用词向量对比_第1张图片

    常用词向量对比_第2张图片

    分析:

    (1)实验的训练样本比论文的小,Glove通过统计频率来建模,数据量大时模型更General,销量数据对统计的结果影响大,论文中,当同时使用Wikipedia 2014 + Gigaword 5时,Glove效果优于CBOW

  2. fasttext

    原文效果:

    (1)词相似:模型效果优于CBOW

    常用词向量对比_第3张图片

    (2)词类推:语义部分,模型效果略低于CBOW; 语法部分,模型效果显著优于CBOW

    常用词向量对比_第4张图片

    分析:

    (1)词相似:模型效果远低于CBOW,一方面是训练数据不一致(论文采用Wikipedia),一方面可能论文对参数进行啦精细调优,实验直接采用作者提供的demo

    (2)词类推:实验效果与论文相仿,语义部分效果远低于CBOW,语法部分效果明显更佳

  3. word2gm

    原文效果:

    (1)词相似:SCWC数据集上,50维spearman系数为66.2,效果优于word2vec

    常用词向量对比_第5张图片

    (2)词类推:论文没有使用word2vec论文公布的数据集,而是采用Baroni et al(2012),该数据集考虑词之间包含关系,评估标准采用F1-score

    分析:
    (1)词相似:论文采用UKWAC和Wackpedia数据集联合训练模型,而论文中word2vec效果仅61.7,比用text8训练效果还差??

    (2)词类推:word2vec采用Top1 Accuracy,从实验效果上看,word2gm不适合这种评估标准,效果很差;猜测是词对应多个Embedding,一方面保证词的多义性,另一方面单纯用词距离,无法从Top1中得到对应相关的词,因为可能有其他语义的词距离和它与这种距离相近

  4. prob-fasttext

    原文效果:论文主要对比fasttext和word2gm,效果最优

    常用词向量对比_第6张图片

    分析:

    (1)词相似性上,试验结果符合论文预期;

    (2)词相似性上,增加子词分解,多语义模拟后,效果竟不及word2vec,一方面证明word2vec算法的泛化能力,一方面text8的数据量可能不足以证明效果

    (3)词类推上,模型与word2gm有相似之处,估计top1的词类推不会有很好的效果

结论

(1)word2vec泛化能力较强,小数据量下依然展示较好的鲁棒性

(2)基于统计词频的模型对数据量的依赖可能较大,小数据下模型效果一般

(3)试验结果而言,小数据量下复杂模型不能展现很好的效果(符合认知),结合论文上看,模拟词的多义性,词内子词结构将对embedding有明显的效果提升

结语

以上都是我瞎扯的,欢迎大家指正

你可能感兴趣的:(nlp)