CS224n-2017(一)Word2Vec 之 CBOW 和 skip-gram

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhq9695/article/details/86526081

这是斯坦福大学2017年课程CS224n: Natural Language Processing with Deep Learning
笔者学习完之后,简单做个笔记
如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~

0. 前言

每一个单词需要表示成一个向量,有两种表示方法:

  1. one-hot representation
    one-hot向量表示一个单词,只有一个元素是1,其余都是0,维度是词汇表长度。
    one-hot存在的问题:单词向量之间正交,同义词之间没有任何关联
  2. distributional similarity representation
    根据的思想是:相似的同义词具有相似的上下文单词
    根据单词的上下文,确定单词向量。

本文中将介绍两种Word2Vec的算法:

  1. continuous bag-of-words(CBOW)
    CBOW旨在根据上下文,预测中间的单词。
  2. skip-gram
    skip-gram旨在根据中间的单词,预测上下文的单词。

1. Language Model(语言模型)

如果句子的语法语义是通顺的,那么语言模型会给予句子一个较高的概率:

P ( w 1 , w 2 , . . . , w n ) P(w_1,w_2,...,w_n)

unigram model(一元语言模型):

P ( w 1 , w 2 , . . . , w n ) = i = 1 n P ( w i ) P(w_1,w_2,...,w_n)=\prod_{i=1}^nP(w_i)

一元语言模型存在的问题:后一个单词可能跟前一个单词具有较高的关联性

bigram model(二元语言模型):

P ( w 1 , w 2 , . . . , w n ) = i = 2 n P ( w i w i 1 ) P(w_1,w_2,...,w_n)=\prod_{i=2}^nP(w_i\mid w_{i-1})

2. continuous bag-of-words(CBOW)

CBOW旨在根据上下文单词预测中间单词,例如句子"The cat jumped over the puddle",上下文单词为{“The”, “cat”, “over”, “the”, “puddle”},则中间单词就是"jumped"。

输入为one-hot向量 x ( c ) x^{(c)} ,输出为one-hot向量 y ( c ) y^{(c)} ,均对应词汇表单词。

对于每个单词,需要学习两个向量, v v 表示单词作为上下文单词时的向量, u u 表示单词作为中间单词时的向量。

CBOW的符号定义如下:

  • m m :取上下文单词的窗口大小
  • V V :词汇表,也是one-hot向量的维度
  • w i w_i :词汇表中的第 i i 个单词
  • V \boldsymbol{V} R n × V \mathbb{R}^{n\times \left|V\right|} ,输入向量矩阵,第 i i 列是单词 w i w_i n n 维嵌入向量,表示为 v i v_i
  • U \boldsymbol{U} R V × n \mathbb{R}^{\left|V\right|\times n} ,输出向量矩阵,第 j j 行是单词 w j w_j n n 维嵌入向量,表示为 u j u_j

CBOW的计算流程表示如下:

  1. 取得窗口大小 m m 的上下文单词的one-hot向量: x ( c m ) x^{(c-m)} ,…, x ( c 1 ) x^{(c-1)} , x ( c + 1 ) x^{(c+1)} ,…, x ( c + m ) x^{(c+m)}
  2. 获得其作为上下文单词时的嵌入向量: v c m = V x ( c m ) v_{c-m}=\boldsymbol{V}x^{(c-m)} ,…, v c + m = V x ( c + m ) v_{c+m}=\boldsymbol{V}x^{(c+m)}
  3. 对这些嵌入向量取平均: v ^ = v c m + . . . + v c + m 2 m \hat{v}=\frac{v_{c-m}+...+v_{c+m}}{2m}
  4. 计算出得分向量: z = U v ^ z=\boldsymbol{U}\hat{v} ,相似的向量,点乘的数值更大
  5. 转换为概率: y ^ = s o f t m a x ( z ) \hat{y}=softmax(z) ,我们将其与真实one-hot向量 y y 尽可能匹配

如下图所示(图源:CS224n-2017):

使用交叉熵定义损失函数:
H ( y ^ , y ) = j = 1 V y j log ( y j ^ ) = log ( y j ^ ) m i n i m i z e   J = log P ( w c w c m , . . . , w c + m ) = log P ( u c v ^ ) = log exp ( u c T v ^ ) j = 1 V exp ( u j T v ^ ) = u c T v ^ + log j = 1 V exp ( u j T v ^ ) H(\hat{y},y)=-\sum_{j=1}^{\left|V\right|}y_j\log(\hat{y_j})=-\log(\hat{y_j})\\ \begin{aligned} minimize\ J &= -\log P(w_c\mid w_{c-m},...,w_{c+m})\\ &= -\log P(u_c\mid \hat{v})\\ &= -\log \frac{\exp(u_c^T\hat{v})}{\sum_{j=1}^{\left|V\right|}\exp(u_j^T\hat{v})}\\ &= -u_c^T\hat{v}+\log \sum_{j=1}^{\left|V\right|}\exp(u_j^T\hat{v}) \end{aligned}

3. skip-gram

skip-gram旨在根据中间单词预测上下文单词,例如句子"The cat jumped over the puddle",中间单词是"jumped",则上下文单词为{“The”, “cat”, “over”, “the”, “puddle”}。

输入为one-hot向量 x ( c ) x^{(c)} ,输出为one-hot向量 y ( c ) y^{(c)} ,均对应词汇表单词。

对于每个单词,需要学习两个向量, v v 表示单词作为中间单词时的向量, u u 表示单词作为上下文单词时的向量。

skip-gram的符号定义如下:

  • m m :预测上下文单词的窗口大小
  • V V :词汇表,也是one-hot向量的维度
  • w i w_i :词汇表中的第 i i 个单词
  • V \boldsymbol{V} R n × V \mathbb{R}^{n\times \left|V\right|} ,输入向量矩阵,第 i i 列是单词 w i w_i n n 维嵌入向量,表示为 v i v_i
  • U \boldsymbol{U} R V × n \mathbb{R}^{\left|V\right|\times n} ,输出向量矩阵,第 j j 行是单词 w j w_j n n 维嵌入向量,表示为 u j u_j

skip-gram的计算流程表示如下:

  1. 取得中间向量 x ( c ) x^{(c)}
  2. 获得中间向量的嵌入向量: v c = V x ( c ) v_{c}=\boldsymbol{V}x^{(c)}
  3. 计算出得分向量: z = U v c z=\boldsymbol{U}v_{c}
  4. 转换为概率 y ^ = s o f t m a x ( z ) \hat{y}=softmax(z) y ^ c m \hat{y}_{c-m} ,…, y ^ c + m \hat{y}_{c+m} 分别对应不同的上下文单词,我们将其与真实one-hot向量 y y 尽可能匹配

如下图所示(图源:CS224n-2017):

使用交叉熵定义损失函数,并采用贝叶斯假设:
H ( y ^ , y ) = j = 1 V y j log ( y j ^ ) = log ( y j ^ ) m i n i m i z e   J = log P ( w c m , . . . , w c 1 , w c + 1 , w c + m w c ) = log j = 0 , j m 2 m P ( w c m + j w c ) = log j = 0 , j m 2 m P ( u c m + j v c ) = log j = 0 , j m 2 m exp ( u c m + j T v c ) k = 1 V exp ( u k T v c ) = j = 0 , j m 2 m u c m + j T v c + 2 m log k = 1 V exp ( u k T v c ) H(\hat{y},y)=-\sum_{j=1}^{\left|V\right|}y_j\log(\hat{y_j})=-\log(\hat{y_j})\\ \begin{aligned} minimize\ J &= -\log P(w_{c-m},...,w_{c-1},w_{c+1},w_{c+m}\mid w_c)\\ &= -\log \prod_{j=0,j\neq m}^{2m}P(w_{c-m+j}\mid w_c)\\ &= -\log \prod_{j=0,j\neq m}^{2m}P(u_{c-m+j}\mid v_c)\\ &= -\log \prod_{j=0,j\neq m}^{2m}\frac{\exp(u_{c-m+j}^Tv_c)}{\sum_{k=1}^{\left|V\right|}\exp(u_k^Tv_c)}\\ &= -\sum_{j=0,j\neq m}^{2m}u_{c-m+j}^Tv_c+2m\log \sum_{k=1}^{\left|V\right|}\exp(u_k^Tv_c) \end{aligned}


如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~

猜你喜欢

转载自blog.csdn.net/zhq9695/article/details/86526081