w2v

作者: wensong_kevin | 来源:发表于2019-11-04 21:55 被阅读0次
    1、One-Hot representation

    又称为有效编码,主要是采用N位状态寄存器来对N个状态进行编码,每个状态都有独立的寄存器位,并且在任意时候只有一位有效。

    在实际的机器学习应用任务中,特征有时候并不总是连续值,有可能是一些分类值,如性别可分为:男/女,对于这样的特征,通常我们需要对其进行特征数字化;还可能有一些离散值,在回归,分类,聚类等算法中,特征之间距离的计算或相似度的计算是非常重要的,而我们常用的距离或相似度的计算都是在欧式空间的相似度计算,计算余弦相似性,基于的就是欧式空间。而我们使用one-hot编码,将离散特征的取值扩展到了欧式空间,离散特征的某个取值就对应欧式空间的某个点,这样会让特征之间的距离计算更加合理。One-Hot编码是分类变量作为二进制向量的表示。这首先要求将分类值映射到整数值。然后,每个整数值被表示为二进制向量,除了整数的索引之外,它都是零值,它被标记为1。

    举个例子来说吧,按照N位状态寄存器来对N个状态进行编码的原理,我们这样处理:
    性别特征:["男","女"](这里N=2):
    男 => 10
    女 => 01
    祖国特征:["中国","美国","法国"](这里N=3):
    中国 => 100
    美国 => 010
    法国 => 001
    运动特征:["足球","篮球","排球","乒乓球"](这里N=4):
    足球 => 1000
    篮球 => 0100
    排球 => 0010
    乒乓球 => 0001
    那么如果一个样本为["男","中国","乒乓球"]的时候,完整的特征数字化的结果为:
    [1,0,1,0,0,0,0,0,1]

    通过这个例子我们可以清晰地看到One-Hot的优缺点:
    1,通过one-hot编码,可以对特征进行了扩充。
    2,连续变量经过编码后,从一个权重变为多个权重,提升了模型的非线性能力。
    3,不需要多参数进行归一化处理。
    4,随着将大权重拆分成几个小权重管理特征,降低了异常值对模型的影响,增加了模型稳定性。
    5,生成了较大的稀疏矩阵。

    2、分布式表示(Distributed representation)

    分布式表示,描述的是把文本分散嵌入到另一个空间,一般从是从高维空间“嵌入”到低维空间。基本思路是通过训练将每个词映射成一个固定长度的短向量(当然这里的“短”是相对于 one-hot representation 的“长”而言的),所有这些向量就构成一个词向量空间,每一个向量可视为该空间上的一个点。此时向量长度可以自由选择,与词典规模无关。

    为更好地理解上述思想,我们来举一个通俗的例子:假设在二维平面上分布有 N 个不同的点,给定其中的某个点,现在想在平面上找到与这个点最相近的一个点,我们是怎么做的呢?首先,建立一个直角坐标系,基于该坐标系,其上的每个点就唯一地对应一个坐标 (x,y);接着引入欧氏距离;最后分别计算这个点与其他 N-1 个点之间的距离,对应最小距离值的那个点便是我们要找的点了。

    上面的例子中,坐标(x,y) 的地位相当于词向量,它用来将平面上一个点的位置在数学上作量化。坐标系建立好以后,要得到某个点的坐标是很容易的,然而,在 NLP 任务中,要得到词向量就复杂得多了,而且词向量并不唯一,其质量也依赖于训练语料、训练算法和词向量长度等因素。

    word2vector

    word2vec工具的提出正是为了解决上面这个问题 。它将每个词表示成一个定长的向量,并使得这些向量能较好地表达不同词之间的相似和类比关系。我们要知道的是:CBOW(Continuous Bag-of-Words Model)和Skip-gram (Continuous Skip-gram Model),是word2vec的两种训练模式。而负采样(Negative Sample)和层次softmax(Hierarchical Softmax)则是两种加速训练的方法。

    基于Hierarchical Softmax的连续词袋模型(CBOW)

    层次softmax的基本原理:
    根据标签(label)和频率建立霍夫曼树;(label出现的频率越高,Huffman树的路径越短)
    Huffman树中每一叶子结点代表一个label;
    具体实现方法就是将输入层中的词和词组构成特征向量,再将特征向量通过线性变换映射到隐藏层,隐藏层通过求解最大似然函数,然后根据每个类别的权重和模型参数构建哈夫曼树,将哈夫曼树作为输出。

    假如现在有1000篇新闻文档,把这些文档拆成一个个的字,去重后得到3000个字,然后把这3000个字作为字典,进行文本表示的模型,叫做词袋模型。这种模型的特点是字典中的字没有特定的顺序,句子的总体结构也被舍弃了。



    从上面词袋模型的示意图可以看出,词袋模型拥有三层,与神经概率语言模型相比,主要有以下三点不同:
    1、从输入层到投影层:不是拼接,而是累加求和;
    2、没有隐藏层;
    3、输出层不再是线性结构,而是树形结构。

    输入层
    Context(w)=[w(t−2),w(t−1),w(t+1),w(t+2)]
    所以共有2c*m个节点。
    一般神经网络的输入都是已知的, 而Word2Vec 网络中的输入, 是通过SoftMax()计算后才得到的。

    投影层
    有m个节点。对输入层各词向量作加和处理。projection(w)=∑Context(w)

    输出层
    输出层是一棵树, 一棵哈夫曼树! 这是与普通神经网络的显著不同之处。 这棵树的叶子节点数就是词典D的大小∣D∣。

    每一个单词w, 都对应一个哈夫曼树叶子节点, 因为是二叉的, 所以从根节点走到w的叶子节点的过程, 就是一个在不断地进行二分类的过程。不妨将左结点1记为负样本, 右节点0记为正样本,基于逻辑斯蒂函数基于逻辑斯蒂函数来看看推导过程。

    (原图上传为横向,有需要的可联系私发)

    基于Hierarchical Softmax的跳字模型(Skip-gram)

    跳字模型假设基于某个词来生成它在文本序列周围的词。

    与上面提到的词袋模型恰恰相反,构造的目标函数变成了。
    Negative Sample 负采样

    训练一个神经网络意味着要输入训练样本并且不断调整神经元的权重,从而不断提高对目标的准确预测。每当神经网络经过一个训练样本的训练,它的权重就会进行一次调整。语料库的大小决定了权重矩阵的规模大小。需要承认的是使用哈夫曼树来代替传统的神经网络,可以提高模型训练的效率。但是如果我们的训练样本里的中心词w是一个很生僻的词,那么就得在哈夫曼树中辛苦的向下走很久了。我们可以用这三个方法来减少计算量:
    1、将常见的单词组合(word pairs)或者词组作为单个“words”来使用。
    2、对高频词进行抽样来减少训练样本的个数
    3、最后最重要的一点,就是“nagative sampling”方法,这样每个训练样本只会更新一小部分模型权重,从而降低计算负担。

    相关文章

      网友评论

          本文标题:w2v

          本文链接:https://www.haomeiwen.com/subject/rdqtbctx.html