CS224N 课程笔记之一:词向量(上)

2020-08-17 17:53:38 浏览数 (1)

1 自然语言处理简介

1.1 自然语言处理的特殊性

从处理的对象来看,NLP 与其他机器学习任务有很大区别:NLP 处理的对象是人类语言,而人类的语言是一种特定的用于传达意义的系统,并不由任何形式的物理表现产生,大部分词语只是一个表达某种意义的符号。语言通过各种方式编码(语音、手势、写作等),以连续信号的形式传输给大脑。

1.2 任务类型

NLP 的目标是设计算法来让计算机“理解”自然语言,以执行某些任务。这些任务可以划分为不同的难度等级,举例来说:

简单难度

  • 拼写检查
  • 关键词搜索
  • 同义词寻找

中等难度

  • 从网站、文档中解析信息

困难难度

  • 机器翻译
  • 语义分析
  • 指代消解
  • 智能问答

1.3 如何表示词语

所有 NLP 任务的第一个议题就是如何表示词语以将其作为模型的输入。当前常见的做法是使用词向量来表示词语,下面将对各种不同的词向量技术进行介绍。

2 传统词向量

3 基于 SVD 的方法

3.1 词语-文档矩阵

下面给出一个例子:该语料库由 3 个句子组成,且窗口大小设置为 1:

  1. I enjoy flying.
  2. I like NLP.
  3. I like deep learning.

按上述方法得到的矩阵为:

3.3 将 SVD 应用到共现矩阵

下面两张图给出了 SVD 的求解过程:

  • 使用 SVD 分解共现矩阵:
  • 通过选择前 k 个奇异向量减少维度:

3.4 存在的问题

基于 SVD 的方法虽然减小了维数,但是存在很多的问题:

  • 矩阵维数经常变化(随语料库变化)
  • 矩阵非常稀疏(因为大部分词语不存在共现)
  • 计算复杂度是平方级的(执行 SVD)
  • 需要一些技巧来处理词语频率间的极度不平衡

针对上述问题,可以采取如下的解决方案:

  • 忽略一些功能性词语(如 the、he、has 等)
  • 使用一个有坡度的窗口(即基于词语之间的距离设置不同的共现权重)
  • 使用皮尔逊相关性(中心化的余弦相似度)替代原始计数,并将负数置为 0

接下来,我们会介绍一种能更优雅地解决上述诸多问题的方案:基于迭代的方法。

4 基于迭代的方法:Word2vec

基于迭代的方法通过迭代逐渐学习词语的共现关系,而非基于 SVD 的方法那样一次性直接获取所有词语的共现关系。训练的过程是:设置一个目标函数,基于某种更新规则进行迭代,不断优化目标函数,最终学习得到词向量。

本节将介绍其中一种方法:Word2vec。Word2vec 是一个软件包,实际包括:

两种算法:CBOWskip-gram

  • CBOW 的目标是基于上下文预测中心词
  • Skip-gram 的目标是基于中心词预测上下文

两种训练方法:negative samplinghierarchical softmax

  • negative sampling 通过采集负样本定义目标函数
  • hierarchical softmax 通过一个高效的树结构计算所有词语的概率来定义目标函数

4.1 语言模型

word2vec 可以理解为是语言模型的副产物,语言模型用于计算一个词语序列的概率。如果这个序列是合理的(语义和语法上),其概率就会比较高,否则输出的概率就会比较低。该概率用数学公式可以表示为:

上述两种模型都过于理想化,实际情况下一个词语的出现概率受到更多因素的影响。下面将介绍如何通过模型学习这些概率。

4.2 CBOW

第一种方法是给定一个单词的上下文,来预测或生成该单词,该模型称为连续词袋模型(CBOW)。

4.2.3 学习方法

4.3 Skip-Gram

另一种方法是给定一个中心词,去预测或生成周围的词语,该模型被称为 Skim-Gram 模型

4.3.3 学习方法

在构建 skip-gram 模型的目标函数时,使用了贝叶斯假设(即条件独立假设):给定中心词的情况下,所有输出词语都完全独立。因此,代价函数如下:

4.5 Hierarchical Softmax

另一种优化代价函数计算的方法是 hierarchical softmax。在实际应用中,hierarchical softmax 对低频词的效果更好,而负采样对常用词和低维词向量的效果更好。

Hierarchical softmax 使用一个二叉树来表示词典中的所有词语。每个叶子节点都是一个词语,从根节点到叶子节点的路径唯一:

5 思维导图

0 人点赞