Word2Vec

  1. Word2Vec
  2. 简介
    1. 统计语言模型
  • 神经网络语言模型NNLM
  • Word2Vec
  • 使用
    1. Spark使用
  • Word2Vec

    简介

    对于图像和音频处理采用的使庞大的高纬度数据集,对于图像数据来说,此类数据集会编码为单个像素强度向量。不过,自然语言处理系统一直将字词视为离散的原子符号,将字词表示为唯一离散id还会导致数据稀疏性,并且通常意味着我们可能需要更多数据才能成功训练统计模型,使用向量法可以扫除其中一些障碍。

    统计语言模型

    • 统计语言模型:统计语言模型把语言(词的序列)看作一个随机事件,并赋予相应的概率来描述其属于某种语言集合可能性
    • N-Gram:N元模型就是假设当前词的出现频率只与它前面的N-1个词有关
      • 语言使一种序列,词与词之间并不是相互独立
      • 1元模型:当前词出现在这的概率=这个词在词语库在出现的概率使一样的
      • 二元模型:当前词出现的概率=这个词前面一个词出现的情况下这个词出现的概率
      • 三元模型::当前这个词出现的概率=这个词前面两个出现的情况下当前词出现的概率
      • 一般情况下使用三元模型,由于语料库的限制,使用过大的N,会导致计算量增加,对语料库的要求也会越大

    神经网络语言模型NNLM

    • 神经网络语言模型NNLM依然属于概率语言模型,它通过神经网络来计算概率语言模型中每个参数。

    • 模型解释
      • 输入层:将context(w)每个词映射成一个长度为m的词向量,向量开始时随机的,也参与网络训练
      • 投影层:将所有的上下文的向量拼接成一个长向量,作为目标w的特征向量,向量为[1,(词个数-1)*词向量长度]
      • 隐藏层:拼接后的向量会经过一个规模为h的隐藏层,向量为[(词个数-1)*词向量长度,语料库词个数]
      • 输出层:最后经过softmax输出所有词出现的概率
    • 训练过程:
      • 训练时,使用交叉熵作为损失,反向传播算法进行训练
      • 当完成训练时,得到一个N-Gram神经网络语言模型,以及副产品词向量

    Word2Vec

    • word2vec本质上也是一个神经语言模型,但是它的目标并不是语言模型本身,而是词向量;因此,其所作的一系列优化,都是为了更快更好的得到词向量
    • Word2Vec提供了两套模型:CBOWSkip-Gram,其基本思想:
      • CBOW:在已知countext(w)的情况下,预测w
      • Skip-Gram:在已知w的情况下预测countext(w)

    • CBOW向前计算与向量更新推导

      • CBOW与2003年Bengio的结构由些不同,不同点在于CBOW去掉了最耗时的非线性隐藏层、并且所有词共享隐层。下图不包含softmax与负采样优化过程

      • 向前计算:
        • 输入层到隐藏层:输入上下问词向量的平均值与W权重计算,[1,V]*[V,N]=[1,N]得到中间向量h
        • 隐藏层到输出层:h向量乘上隐藏层的矩阵,[1,N]*[N,总词语数]
        • 输出层接softmax:计算每个词出现的概率

    使用

    Spark使用

    1
    2
    3
    4
    5
    6
    7
    8
    from pyspark.ml.feature import Word2Vec, Word2VecModel
    word2vec = Work2Vce(vectorSize=词向量长度,minCount=过滤掉出现小于次数的词默认5次,windowSize=训练时窗口大小,inputCol=输入列名,outputCol=输出列名)
    # 训练模型
    model=word2vec.fit(带有输入列名的df)
    model.save("路径")
    model=Word2VecModel.load("路径")
    # 取出词向量
    vectors = model.getVectors()

    转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 zoubinbf@163.com

    ×

    喜欢就点赞,疼爱就打赏