cs224n-2020追剧笔记

之前总是半途而废,希望这次不会。只记录关键点。

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

  1. iterate through each word of the whole corpus
  2. predict surrounding words using word vectors

不过要注意的一点是,我们要注意文档中出现频率过高的词(比如英文中的the that,中文的“的”等等,这些其实是停用词)。

梯度下降

随机梯度下降(SGD):只选取一个样本进行梯度的更新,加快梯度下降。

mini-batch: 选取一部分(batch,如64/256)样本进行梯度更新,相比较SGD而言更加稳定,另外也比批梯度下降的训练速度要快。

问题是,我们通常在一个batch中更新的样本是比较少的,这就导致$\triangledown_{\theta}J(\theta)$会非常稀疏,而事实上我们只会更新真正”出现”的词向量。所以相对的,如果我们的词向量数量非常大,那么就没有必要进行gigantic updates。

Word2Vec的两种模式

  1. Skip-grams:给定中心词,预测上下文词;
  2. CBOW:给定上下文词,预测中心词。

Word2Vec的两种优化:

  1. Negative Sampling(当目前为止,所讲的是naive softmax,即实现起来简单,但是其实训练效率非常低下)。

    主要思想:对true pair(中心词和其对应的上下文词)和noise pairs(中心词和随机选取的词作为负词)训练二元逻辑回归。

    特点:负采样对常见词有利,罕见词不利。(30分)

    skip-gram+负采样 原论文中的最大化目标方程:

    课堂上所展示的最小化目标方程:

    在选取负样本的时候,$P(w)=U(w)^{3/4}/Z$(Z是归一化因子)。这个幂次方可以减少采样非常常见的单词的频率。

  2. Hierarchical Softmax.

GloVe

单词共现矩阵

存在的问题:词数量很大、高维(需要大量存储空间)、稀疏

解决方法:使用低维向量,像word2vec.

  1. 奇异值分解(Singular Value Decompose): $X \sim U\Sigma V^T$,去除较小的奇异值所在维度,从而达到降维。(潜在语义分析:Latent Semantic Analysis)Hacks to X:忽略高频词或者修改对应的词频、采样closer words、使用Pearson相关系数矩阵而不是counts矩阵等等。
  2. GloVe

image.png

思想: 将两个流派的想法结合起来,在神经网络中使用计数矩阵

  1. 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)}$

  2. Combining the best of both Worlds(GloVe)对应公式:

    使用平方损失公式。另外是使用了f函数来限制高频词的作用。

    image.png

    优点:训练快、可以扩展到大型语料库、对小型语料库和低纬度向量也适用。

评价词向量

Intrinsic: 如类比(man-king,woman-?)或者相似性(使用余弦距离计算)。

Extrinsic: 使用真实任务进行评价,如问答系统等。词向量其实是作为一个提升性能的工具。

参数的设置:

  1. 词向量维度:On the dimensionality of word embedding. 使用矩阵扰动理论进行研究。(即使维度很大,到了上万,词向量的作用也依然稳定)。
  2. 训练时间:越多的训练时间也会有帮助。
  3. 训练数据:越多的数据也有帮助,Wikipedia比news text更有效。

存在问题

大部分的词有多种含义,而我们所使用的词向量能够表示多种含义呢?

方法:

  1. 根据词窗口进行聚类,区分词的不同簇,即不同含义。
  2. 使用加权和->有效,因为单词的不同含义其实被稀疏编码了。