暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

NLP学习-word2vec及其训练方法(CBOW skip-gram)(前两日买入,继续持股。)

量化分析之路 2020-05-27
1347

本人持仓股:随时可能卖出   仅供参考。



  1. 什么是word embedding

  2. Word2Vec简介

  3. CBOW和Skip-Gram

  4. CBOW模型

  5. Skip-gram模型

  6. 加速策略(一):Hierarchical Softmax

  7. 加速策略(二):Negative Sampling

  8.  word2vec词向量性质观察

    

   

(1)如果用一句比较简单的话来总结,word2vec是用一个简单的神经网络把one-hot形式的稀疏词向量映射称为一个n维(n一般为几百)的稠密向量的过程。


(2)什么是word embedding 

    我们将一个词从一个可能非常稀疏的向量坐在的空间,映射到现在这个四维向量所在的空间,必须满足以下性质:

(1)这个映射是单设;

(2)映射之后的向量不会丢失之前向量所含的信息。

这个过程称为word embedding(词嵌入),即将高维词向量嵌入到一个低维空间。顺便找了个图 三维到二维




    经过一系列的降维操作,有了用Dristributed representation表示的较短的词向量,我们就可以较容易的分析词之间的关系了

    需要注意的是和下面要讲的word2vec和word embedding的联系和区别,word embedding 是一个将词向量化的概念,或者说是一种基于神经网络的分布表示,为区别one-hot的词向量,可翻译成词嵌入。而word2vec是谷歌提出一种word embedding 的工具或者算法集合

下面看图说下整体步骤是怎么样的:

  1. 在输入层,一个词被转化为One-Hot向量。

  2. 然后在第一个隐层,输入的是一个 就是输入的词向量, 是参数),做一个线性模型,注意已这里只是简单的映射,并没有非线性激活函数,当然一个神经元可以是线性的,这时就相当于一个线性回归函数。

  3. 第三层可以简单看成一个分类器,用的是Softmax回归,最后输出的是每个词对应的概率

举个例子:

如果我们的语料库仅仅有这3句话: 

 “the dog saw a cat”,

 “the dog chased the cat”,

 “the cat climbed a tree”. 

那么语料库只有8个单词: “the”, “dog”, “saw”, “a”, “cat”, “chased”, “climbed”, “tree”.

那么V=8, 输入层的初始就可以是:

[1, 1, 1, 1, 1, 1, 1, 1] 代表: [“the”, “dog”, “saw”, “a”, “cat”, “chased”, “climbed”, “tree”]

    输入[“”, “dog“, “”, “”, “”, “”, “”, “”] 可以表示为: [0, 1, 0, 0, 0, 0, 0, 0]

    输入[“”, “”, “saw“, “” , “”, “”, “”, “”] 可以表示为: [0, 0, 1, 0, 0, 0, 0,0]

如果是在字典中有的, 就用1表示

    W 的大小是NxV的, 通过训练完毕后得到权重 ,当只要输入单词, 就能预测出最符合这个上下文的下一个单词时,这时候的 参数的精度最高。


CBOW(continues bag of words)和Skip-Gram

    Word2vec是一种可以进行高效率词嵌套学习的预测模型。其有两种变体是现在比较常用的,分别为:连续词袋模型(CBOW)及Skip-Gram模型。从算法角度看,其本质是通过context——word(背景词)来预测target word(目标词),而Skip-Gram模型做法相反,Skip-Gram是利用目标词预测背景词

    CBOW的全称是continuous bag of words(连续词袋模型)。其本质也是通过context word(背景词)来预测target word(目标词)。如上述不同的时候,上述target word“climbed”的context word只有一个“cat”作为训练样本,而在CBOW中,可由多个context word表示.

    


CBOW(continues bag of words):

     “the cat climbed a tree”. 这句话 

    例如,我们可以使用“cat”和“tree”作为“climbed”的context word。这需要修改神经网络架构。


简单的讲,CBOW是依据背景词来预测目标词。

具体算法如下:

  • 第一步就是去计算隐藏层h的输出。如下:

(权重矩阵WI依然是one-hot编码)

  • 第二步就是计算在输出层每个结点的输入。如下:

其中WOj是矩阵WO的第j列

  • 接着我们计算输出层的输出,也就是将Softmax用作激活函数

  • 最后使用交叉熵最为loss function,用BP算法更新权重



Skip-Gram是利用目标词预测背景词

    在介绍skip-gram模型前,我们先来了解下训练数据的格式。skip-gram模型的输入是一个单词WI,它的输出是WI的背景词:WO_1,...,WO_C,C为窗口大小。

    举个例子,有个句子“I drive my car to the store”。我们如果把”car”作为训练输入数据,窗口大小设置为6,那么{“I”, “drive”, “my”, “to”, “the”, “store”}就是输出。所有这些单词会进行one-hot编码。skip-gram模型图如下所示:

    在上图中,输入向量x代表某个单词的one-hot编码,对应的输出向量{y1,…,yC}。接下来重点来了:这个权重矩阵W就是我们需要学习的目标(同W′),因为这个权重矩阵包含了词汇表中所有单词的权重信息。

    每个输出单词向量也有个N×V维的输出向量W′。最后模型还有N个结点的隐藏层,我们可以发现隐藏层节点hi的输入就是输入层输入的加权求和。因此由于输入向量x是one-hot编码,那么只有向量中的非零元素(也就是“1”)才能对隐藏层产生输入。因此对于输入向量x其中xk=1并且xk′=0,k≠k′。所以隐藏层的输出只与权重矩阵第k行相关。

    在输出层,不再是一个多项式分布,而是输出C个多项式分布。每一个输出用同一个W’计算,同样采用Softmax计算概率,误差为所有输出{y1,…,yC}的误差和,采用交叉熵做损失函数,最后用BP算法更新参数。


文章转载自量化分析之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论