• CS224n笔记3 高级词向量表示


    本文转自:http://www.hankcs.com/nlp/cs224n-advanced-word-vector-representations.html

    这节课从传统的基于计数的全局方法出发,过渡到结合两者优势的GloVe,并介绍了词向量的调参与评测方法。

    复习:word2vec的主要思路

    • 遍历整个语料库中的每个词

    • 预测每个词的上下文:

    • hankcs.com 2017-06-08 下午3.25.31.png

    • 然后在每个窗口中计算梯度做SGD

    SGD与词向量

      但每个窗口最多只有2m + 1个单词,所以θJt(θ)会非常稀疏:

    hankcs.com 2017-06-08 下午3.33.16.png

      实际上有正确答案需要去对比的只有窗口中的词语。所以每次更新只更新W矩阵中的少数列,或者为每个词语建立到词向量的哈希映射:

    hankcs.com 2017-06-08 下午3.39.45.png

    近似:负采样

      还有一个问题亟待解决,词表V的量级非常大,以至于下式的分母很难计算:

    hankcs.com 2017-06-08 下午3.25.31.png

      于是,练习1中要求用negative sampling实现skip-gram。这是一种采样子集简化运算的方法

      具体做法是,对每个正例(中央词语及上下文中的一个词语)采样几个负例(中央词语和其他随机词语),训练binary logistic regression(也就是二分类器)。

    negative sampling和skip-gram

      目标函数:

      这里t是某个窗口,k是采样个数,P(w)是一个unigram分布,详见:http://www.hankcs.com/nlp/word2vec.html#h3-12 

      σ是sigmoid函数:

    sigmoid.png

      根据上次课讲的,内积可以代表相关性。那么这个目标函数就是要最大化中央词与上下文的相关概率,最小化与其他词语的概率。

      word2vec通过把相似的词语放到同一个地方附近来增大目标函数:

    hankcs.com 2017-06-08 下午4.45.25.png

    其他方法

      word2vec将窗口视作训练单位,每个窗口或者几个窗口都要进行一次参数更新。要知道,很多词串出现的频次是很高的。能不能遍历一遍语料,迅速得到结果呢?

      早在word2vec之前,就已经出现了很多得到词向量的方法,这些方法是基于统计共现矩阵的方法。如果在窗口级别上统计词性和语义共现,可以得到相似的词。如果在文档级别上统计,则会得到相似的文档(潜在语义分析LSA)。

    基于窗口的共现矩阵

    比如窗口半径为1,在如下句子上统计共现矩阵:

    • I like deep learning. 

    • I like NLP.

    • I enjoy flying.

    会得到:

    hankcs.com 2017-06-08 下午5.00.43.png

    朴素共现向量的问题

    根据这个矩阵,的确可以得到简单的共现向量。但是它存在非常多的局限性:

    • 当出现新词的时候,以前的旧向量连维度都得改变

    • 高纬度(词表大小)

    • 高稀疏性

    解决办法:低维向量

      用25到1000的低维稠密向量来储存重要信息。如何降维呢?

      SVD吧:

    hankcs.com 2017-06-08 下午5.10.35.png

      r维降到d维,取奇异值最大的两列作为二维坐标可视化:

    hankcs.com 2017-06-08 下午5.11.36.png

    改进

    • 限制高频词的频次,或者干脆停用词

    • 根据与中央词的距离衰减词频权重

    • 用皮尔逊相关系数代替词频

    效果

      方法虽然简单,但效果也还不错:

    hankcs.com 2017-06-08 下午5.17.13.png

    hankcs.com 2017-06-08 下午5.17.27.png

    hankcs.com 2017-06-08 下午5.17.45.png

    SVD的问题

    • 不方便处理新词或新文档

    • 与其他DL模型训练套路不同

    Count based vs direct prediction

      这些基于计数的方法在中小规模语料训练很快,有效地利用了统计信息。但用途受限于捕捉词语相似度,也无法拓展到大规模语料。

      而NNLM, HLBL, RNN, Skip-gram/CBOW这类进行预测的模型必须遍历所有的窗口训练,也无法有效利用单词的全局统计信息。但它们显著地提高了上级NLP任务,其捕捉的不仅限于词语相似度。

    综合两者优势:GloVe

      这种模型的目标函数是:          

     

    hankcs.com 2017-06-08 下午7.22.15.png

      优点是训练快,可以拓展到大规模语料,也适用于小规模语料和小向量。

      明眼人会发现这里面有两个向量uv,它们都捕捉了共现信息,怎么处理呢?试验证明,最佳方案是简单地加起来:

      相对于word2vec只关注窗口内的共现,GloVe这个命名也说明这是全局的(我觉得word2vec在全部语料上取窗口,也不是那么地local,特别是负采样)。

    评测方法

      有两种方法:Intrinsic(内部) vs extrinsic(外部)

      Intrinsic:专门设计单独的试验,由人工标注词语或句子相似度,与模型结果对比。好处是是计算速度快,但不知道对实际应用有无帮助。有人花了几年时间提高了在某个数据集上的分数,当将其词向量用于真实任务时并没有多少提高效果,想想真悲哀。

      Extrinsic:通过对外部实际应用的效果提升来体现。耗时较长,不能排除是否是新的词向量与旧系统的某种契合度产生。需要至少两个subsystems同时证明。这类评测中,往往会用pre-train的向量在外部任务的语料上retrain。

    Intrinsic word vector evaluation

      也就是词向量类推,或说“A对于B来讲就相当于C对于哪个词?”。这可以通过余弦夹角得到:

    hankcs.com 2017-06-08 下午9.00.00.png

      我曾经通过这些方法验证了民间很多流行的word2vec实现准确率比原版低几十个百分点:http://www.hankcs.com/nlp/word2vec.html#h2-15 

      这种方法可视化出来,会发现这些类推的向量都是近似平行的:

    hankcs.com 2017-06-08 下午9.03.18.png

    hankcs.com 2017-06-08 下午9.03.35.png

      下面这张图说明word2vec还可以做语法上的类比:

    hankcs.com 2017-06-08 下午9.05.55.png

    其他有趣的类比:

    hankcs.com 2017-06-08 下午9.06.35.png

      这在数学上是没有证明的。

    结果对比

    在不同大小的语料上,训练不同维度的词向量,在语义和语法数据集上的结果如下:

    hankcs.com 2017-06-08 下午9.13.47.png

      GloVe的效果显著地更好。另外,高纬度并不一定好。而数据量越多越好。

    调参

      窗口是否对称(还是只考虑前面的单词),向量维度,窗口大小:

    hankcs.com 2017-06-08 下午9.20.11.png

      大约300维,窗口大小8的对称窗口效果挺好的,考虑到成本。

      对GloVe来讲,迭代次数越多越小,效果很稳定:

    hankcs.com 2017-06-08 下午9.24.05.png

      维基百科语料上得到的效果比新闻语料要好:

    hankcs.com 2017-06-08 下午9.26.26.png

    另一个数据集

      还有直接人工标注词语相似度的:

    hankcs.com 2017-06-08 下午9.29.01.png

    www.cs.technion.ac.il/~gabr/resources/data/wordsim353/ 

      对某个单词相似度排序后,得到最相关的词语。于是可以量化评测了。

    hankcs.com 2017-06-08 下午9.31.22.png

    Extrinsic word vector evaluation

      做NER实验:

    hankcs.com 2017-06-08 下午9.38.12.png

      GloVe效果依然更好,但从数据上来看只好那么一点点。

      视频中还谈了谈一些适合word vector的任务,比如单词分类。有些不太适合的任务,比如情感分析。课件中则多了一张谈消歧的,中心思想是通过对上下文的聚类分门别类地重新训练。

    hankcs.com 2017-06-08 下午9.47.56.png

      相同颜色的是同一个单词的不同义项。

      TA也讲过这个问题。

    Life is short, but I have a cat.
  • 相关阅读:
    Mybatis-plugin插件的使用
    SpringBoot整合mybatis-pagehelper实现分页
    springboot打war包
    keepalived1.4.0安装启动卸载
    六、nginx 搭建高可用集群
    五、nginx的动静分离
    四、nginx的负载均衡
    linux中mysql忘记root密码如何登陆
    十分钟到你了解OpenStack--nova组件
    docker 中 add 和 copy 的区别
  • 原文地址:https://www.cnblogs.com/koocn/p/7699051.html
Copyright © 2020-2023  润新知