• word2vec原理知识铺垫


    word2vec: 词向量计算工具====》训练结果 词向量(word embedding) 可以很好的度量词与词的相似性,word2vec为浅层神经网络

    *值得注意的是,word2vec是计算word vector 的开源工具。 当说word2vec算法或模型时,是指背后用于计算word vector 的CBOW模型和Skip-gram

    如何计算一段文本序列在某种语言下出现的概率?
    对于一段文本序列S=w1,w2,...,wT,它的概率可以表示为:
    P(S)=P(w1,w2,...,wT)=∏p(wt|w1,w2,...,wt−1)
    即将序列的联合概率转化为一系列条件概率的乘积。问题变成了如何去预测这些给定previous words下的条件概率:p(wt|w1,w2,...,wt−1)
    巨大的参数空间,这个原始模型在实际中并没有卵用,更多采用其简化版本,Ngram模型:
    p(wt|w1,w2,...,wt−1)≈p(wt|wt−n+1,...,wt−1) ===>常见的如bigram模型(N=2)和trigram模型(N=3)。
    事实上,由于模型复杂度和预测精度的限制,我们很少会考虑N>3的模型
    我们可以用最大似然法去求解Ngram模型的参数——等价于去统计每个Ngram的条件词频。

    值得注意的是:Ngram模型仍有其局限性。首先,由于参数空间的爆炸式增长,它无法处理更长程的context(N>3)。其次,它没有考虑词与词之间内在的联系性。

    考虑"the cat is walking in the bedroom"这句话。如果我们在训练语料中看到了很多类似“the dog is walking in the bedroom”或是“the cat is running in the bedroom”这样的句子,那么,即使我们没有见过这句话,也可以从“cat”和“dog”(“walking”和“running”)之间的相似性,推测出这句话的概率[3]。然而, Ngram模型做不到 ====>Ngram本质上是将词,孤立的原子单元(atomic unit)去处理的,one-hot 方式, 在大数据词典的实际应用中,面临维度灾难。

    解决方法:用一个连续的稠密向量去刻画一个word的特征, 这样既可以刻画词与词之间的相似度,也可以建立一个从向量到概率的平滑函数模型,使得相似的词向量可以映射到相近的概率空间上,
    这个稠密的向量称为word的distributed representation ===> 向量空间模型 vector space model(VSM) ==>基于statistical semantic hypothesis, word2vec 基于 distribution hypothesis, 即上下文相似的两个词有着相近的语义

    问题: VSM如何将离散的one hot词向量 映射到稠密连续的distribution representation??
    bag of word hypothesis 构造一个term-document矩阵A:矩阵的行 Ai 对应着词典里的一个word,矩阵的列 Aj 对应着训练预料里的一篇文档,Ai,j代表word wi 在文档Dj中出现的次数,那么就可以提取行向量作为word的语义向量。

    for example: the dog is walking in the bedrom , the cat is running in the bedroom
    构造term-document矩阵A:
    the 2 2
    dog 1 0
    cat 0 1
    is 1 1
    walking 1 0
    running 0 1
    in 1 1
    bedrom 1 1
    则提取行向量作为word的语义向量,思考:这是基于词频的,也可以基于此得到主题分布,但是缺少语义的考虑即上下文context

    distributional hypothesis 构造word-context 的矩阵,与term-document相比,矩阵的列变成了context里的word,矩阵的元素也变成了一个context窗口里word的共现次数。
    word-context矩阵 通过统计一个事先指定大小的窗口内的word共现次数,不仅可以刻画word的语义信息,还在一定程度上反映了word的语法结构信息。

    for example:I like deep learning; I like NLP; I enjoy flying;
    设置窗口的大小为1, 得到word-content矩阵

    I like enjoy deep learning NLP flying .
    I 0 2 1 0 省略后面
    like 2 0 0 1
    enjoy 1 0 0 0
    deep 0 1 0 0
    learning 0 0 0 1
    NLP 0 1 0 0
    flying 0 0 1 0
    . 0 0 0 0
    *注意:矩阵里的元素是列向量所代表的word出现在行向量所代表的word的上下文的次数。

    得到word-context 矩阵后,可以用此矩阵的行向量来计算word之间的相似度。
    *But, 词向量的维度等于词典的大小,会出现极大的资源消耗,伴随着高维向量出现的数据稀疏性问题,训练变得困难,总结起来就是两句话,数据稀疏性和维度灾难。

    解决办法-----**********SVD分解:低维词向量的简接学习******-----------
    就维度灾难和数据稀疏性,比较自然的方法就是降维,得到稠密的连续词向量。
    方法:SVD奇异值分解(通过将原co-occurrence矩阵X分解为一个正交矩阵U,一个对角矩阵S,和另一个正交矩阵V乘积的形式,并提取U的k个主成分(按S里对角元的大小排序)构造低维词向量)、Hacks。

    *SVD的优势:SVD分解得到的稠密词向量,也具有很多优美的性质。语义相近的词(比如"wrist"和"ankle")可以通过用词向量内积定义的相似度聚类到一起;同一动词的不同时态也往往出现在向量空间的同一片区域。词向量甚至可以一定程度上反应word之间的线性联系

    *SVD的劣势:高额的计算复杂度花销,与deep learning 相比是两类不同的学习算法。
    ****将word表示为一个稠密的低维连续向量的思想被应用,将原始的稀疏矩阵分解为两个低秩矩阵乘积的形式。

    ***************Neural Network Language Model , NNLM
    Bengio NNLM模型的基本思想:
    假定词表中的每一个word都对应着一个连续的特征向量;
    假定一个连续平滑的概率模型,输入一段词向量的序列,可以输出这段序列的联合概率;
    同时学习词向量的权重和概率模型里的参数。

    ***************NNLM这一部分比较有意思

  • 相关阅读:
    spring 使用 context:property-placeholder 加载 多个 properties
    Spring自动注入Bean
    正则查询符合条件的字符串
    csv测试类。用起来,就是那么简单。每个单元格都是以逗号分隔
    eclipse 设置字体高亮
    订单生成类,个人经验总结!
    java 导出Excel 大数据量,自己经验总结!
    Oracle的数据恢复——Flashback用法汇总
    org.apache.log4j.Logger详解
    Date、String和Timestamp类型转换
  • 原文地址:https://www.cnblogs.com/ChenKe-cheng/p/10244602.html
Copyright © 2020-2023  润新知