之前总是半途而废,希望这次不会。只记录关键点。
week 1 - Introduction and Word Vectors
one-hot表示:1. 词汇量过大;2. 无法表示单词之间的相似性(正交)
想要获得相似性信息:1. 构建相似词表(如WordNet。耗费人力、单词不断更新);2. 分布式表示
分布式表示:利用单词的不同上下文(context window),可以理解它的不同语义。
词向量:word vectors / word embeddings / word representation. 低纬度,每个维度代表不同的含义(虽然往往无法获知具体的含义)
Word2vec
思想:
- 我们有大量的训练语料
- 在一个固定的词汇表里,每个单词都可以用一个向量来表示(初始化: random)
- text中的每个位置$t$,都有一个center word $c$和context words $o$
- 使用词向量的相似性来计算给定c求o的概率(或者给定o求c的概率)
- 不断训练调整词向量,使似然最大化
似然:
以负对数似然作为目标方程(最小化$J(\theta)$ cost / loss / objective function):
如何计算$P(w_{t+j}|w_t; \theta)$:
使用每个单词$w$的两种向量:$v_w$($w$ is a center word); $u_w$($w$ is a context word). 我们有(给定中心词,预测其上下文词):
上式其实是softmax function的一个例子。越相似,则分子越大,概率也越大。
优化:(梯度下降)
我们的参数是这些单词向量,对他们进行求导。
含义:用我们观察到的context word减去模型认为的context word(期望)。
我们可以利用Word2vec训练出来的词向量做相似性计算,或者说做“类比”。
Week 2
Word Vectors 2 and Word Senses
回顾Word2vec
- iterate through each word of the whole corpus
- predict surrounding words using word vectors
不过要注意的一点是,我们要注意文档中出现频率过高的词(比如英文中的the that,中文的“的”等等,这些其实是停用词)。
梯度下降:
随机梯度下降(SGD):只选取一个样本进行梯度的更新,加快梯度下降。
mini-batch: 选取一部分(batch,如64/256)样本进行梯度更新,相比较SGD而言更加稳定,另外也比批梯度下降的训练速度要快。
问题是,我们通常在一个batch中更新的样本是比较少的,这就导致$\triangledown_{\theta}J(\theta)$会非常稀疏,而事实上我们只会更新真正”出现”的词向量。所以相对的,如果我们的词向量数量非常大,那么就没有必要进行gigantic updates。
Word2Vec的两种模式:
- Skip-grams:给定中心词,预测上下文词;
- CBOW:给定上下文词,预测中心词。
Word2Vec的两种优化:
Negative Sampling(当目前为止,所讲的是naive softmax,即实现起来简单,但是其实训练效率非常低下)。
主要思想:对true pair(中心词和其对应的上下文词)和noise pairs(中心词和随机选取的词作为负词)训练二元逻辑回归。
特点:负采样对常见词有利,罕见词不利。(30分)
skip-gram+负采样 原论文中的最大化目标方程:
课堂上所展示的最小化目标方程:
在选取负样本的时候,$P(w)=U(w)^{3/4}/Z$(Z是归一化因子)。这个幂次方可以减少采样非常常见的单词的频率。
Hierarchical Softmax.
GloVe
单词共现矩阵
存在的问题:词数量很大、高维(需要大量存储空间)、稀疏
解决方法:使用低维向量,像word2vec.
- 奇异值分解(Singular Value Decompose): $X \sim U\Sigma V^T$,去除较小的奇异值所在维度,从而达到降维。(潜在语义分析:Latent Semantic Analysis)Hacks to X:忽略高频词或者修改对应的词频、采样closer words、使用Pearson相关系数矩阵而不是counts矩阵等等。
- GloVe
思想: 将两个流派的想法结合起来,在神经网络中使用计数矩阵。
Encoding meaning in vector differences:Ratios of co-occurrence probabilities can encode
meaning components.如何在词向量空间中以线性meaning component的形式捕获共现概率比?
log-bilinear模型:$w_i\cdot w_j = \log P(i|j)$
由此得到向量差异:$w_x\cdot (w_a-w_b)=\log\frac{P(x|a)}{P(x|b)}$
Combining the best of both Worlds(GloVe)对应公式:
使用平方损失公式。另外是使用了f函数来限制高频词的作用。
优点:训练快、可以扩展到大型语料库、对小型语料库和低纬度向量也适用。
评价词向量
Intrinsic: 如类比(man-king,woman-?)或者相似性(使用余弦距离计算)。
Extrinsic: 使用真实任务进行评价,如问答系统等。词向量其实是作为一个提升性能的工具。
参数的设置:
- 词向量维度:On the dimensionality of word embedding. 使用矩阵扰动理论进行研究。(即使维度很大,到了上万,词向量的作用也依然稳定)。
- 训练时间:越多的训练时间也会有帮助。
- 训练数据:越多的数据也有帮助,Wikipedia比news text更有效。
存在问题
大部分的词有多种含义,而我们所使用的词向量能够表示多种含义呢?
方法:
- 根据词窗口进行聚类,区分词的不同簇,即不同含义。
- 使用加权和->有效,因为单词的不同含义其实被稀疏编码了。