CS224n 课程学习笔记 1
本节内容: Word2Vec
课程内容要点
- 理解Word Vector
- 基于词汇共现(word co-occurence)的word vector
- word2vec模型
- 深入理解word2vec模型(具体的模型结构,公式推导及优化方法)
- 理解word2vec源码(google开源)
理解Word Vector
word vector是为了将文本数据转化为计算机能够计算的数字数据。
word vector: 将自然语言中的每个单词编码为一个向量,这个向量是对应的单词在某种“单词”空间(word space)中的一个点。
这样做的主要原因是:
我们认为存在某些$N (N <= |V|)$维空间可以将某种语言的语义信息全部编码。
最简单的编码方式:one-hot vector。也就是把所有单词看作一个词汇表,除了相应的位置值为1,其他所有位置的值均为0.其缺点在于:
- 这种表示方式过于稀疏,计算量极大
- one-hot表示方式不能体现出单词之间的语义关系
基于SVD(Singular Value Decomposition, 奇异值分解) 的方法
基本思想:
通过统计单词共现(word co-occurrence)的次数形成一个巨大的共现矩阵(co-occurrrence matrix),然后通过奇异值分解的方法降维,得到一个$|V|\times{k}$的矩阵,每一行即为对应的word vector。
求共现矩阵的两种方法:
- word-document matrix
- 矩阵的每行表示一个词汇表中的单词,每列表示一个文件
- 扫描所有语料文件,每次单词$Wi$在document$Dj$中出现,则矩阵中相应元素$M_{ij}$计数增加
- window based co-occurrence matrix
- 和word-document maticx方法类似,每行的行向量最终对应单词的word vector,区别在于这里每列表示相应单词在每行所表示的单词的窗口范围内出现的次数。
- 统计每个单词$W_j$出现在中心词$W_i$的窗口范围内的次数
- 这里的重要参数是window size
SVD将共现矩阵分解为三个矩阵相乘的形式: $X_{|V|\times|V|} = U_{|V|\times|V|}S_{|V|\times|V|}V_{|V|\times|V|}$
其中矩阵$S$是一个对角矩阵,通过取$S$矩阵中的$k$列与$U$最终得到word vector矩阵($|V|\times{k}$)
基于迭代的方法: Word2Vec
思路:
建立一个模型,这个模型通过训练最终可以在给出上下文的情况下对单词的概率进行编码。在这个模型里,通过上下文训练模型,而模型中的参数才是最终我们需要求取的所有word vector
word2vec模型实际上有两种算法:
- CBOW(Continuous bag-of-words)
- SG(skip-gram)
两种训练方法:
- negative sampling
- hierarchical softmax
下面对两种算法的细节进行介绍:
CBOW
输入上下文(context),预测中心词(center)
- 输入:$x_{1k}, x_{2k}, …, x_{ck}$, context的on-hot vector形式
- 输入对应的权重矩阵: $W_{|V|\times{n}}$,其中$n$是word vector的编码维数
- 输出:$y_j$:ont-hot vector
- 对应权重矩阵:$W_{n\times|V|}$
可以看到,可以得到两个Word Embedding矩阵(Word vector 和 Word Embedding可以换用),一个对应上下文,一个对应中心词。是一个词在两个位置的向量。
深入理解
训练过程:
- 为对应的context生成对应的ont-hot向量作为输入$x$
- 通过word vectors对输入进行编码(word embedding)$x * W_{input}$
- 求其平均值,得到隐藏层的值$h$
- 通过$W_{output}$评分:$z = h\cdot{W_{output}}$
- 把评分转化为概率分布$\hat{y} = softmax(z)$
- 把生成的概率转化为one-hot向量,与实际的中心词$y_j$比较
目标函数:
这里采用交叉熵函数(cross-entropy)计算预测分布和实际分布的差距
Skip-Gram
输入中心词,预测上下文
Assignment 1
简单难度,主要目的是对两种方法有一个直观的理解