专栏首页用户2133719的专栏CS224N 课程笔记之一:词向量(上)

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

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 思维导图

本文分享自微信公众号 - 口仆(roito33),作者:口仆

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CS224N 课程笔记之二:词向量(下)

    之前我们介绍了两种表示词向量的方法:「基于数量」的矩阵分解方法(HAL & LSA)和「基于窗口」的概率方法(word2vec)。第二种方法明显优于第一种,但其...

    口仆
  • CS229 课程笔记之十二:独立成分分析

    「独立成分分析」(ICA)与 PCA 类似,也会找到一个新基底来表示数据,但两者的目标完全不同。

    口仆
  • CS229 课程笔记之二:分类与逻辑回归

    之前我们讨论的是回归问题,即输出是连续值,现在我们来讨论输出是离散值的分类问题。本节我们将专注于二元分类问题,即输出 只能取 和 两个值。

    口仆
  • python技能(1)-map函数

    yiduwangkai
  • 【R语言经典实例6】对整个向量执行计算

    基本的数学运算符可以对向量中的元素进行逐个计算。许多其他的函数也能对向量元素逐个进行运算,并以向量的形式输出结果。

    统计学家
  • Go指南练习_斐波纳契闭包

    Zoctopus
  • 机器学习day2

    为了能够使得组合特征避免出现参数过多,过拟合等问题,因此,我们需要找到有效的方法帮助我们进行特征的组合。 以预测问题举例。 输出特征有年龄,性别,购买物品类别,...

    Rare0716
  • python的map()函数

    原文链接:https://www.runoob.com/python/python-func-map.html

    于小勇
  • numpy:数组比较

    程裕强
  • 逢赌必赢的秘密

    本文由CDA作者库成员麻赛原创,并授权发布 原文来自公众号麻大湿讲数据(ID:madashi_data)。 ? 首先是麻大湿的老实交代 这篇文章标题党了,你不能...

    CDA数据分析师

扫码关注云+社区

领取腾讯云代金券