深度学习第42讲:自然语言处理之词嵌入和词向量

      在前几讲的笔记中,我们学习了 RNN 的基本网络结构以及一些 RNN 的变种网络,比如说 GRU 单元和 LSTM 单元等等。从本节开始,笔者将继续学习如何将以上这些知识应用在自然语言处理(Natural Language Processing,NLP)上。正如 CNN 在计算机视觉领域中应用一样,基于深度学习的自然语言处理对应的正是 RNN。作为当下人工智能最为重要的一个研究方向之一,让机器理解人类语言要比让机器会看会听实现起来更为困难。本节先简单介绍一下 NLP 的知识结构,然后介绍一下自然语言中的词汇表征方法——词嵌入(Word Embeddings)和词向量(Word Vectors)。

自然语言处理

      关于自然语言处理,维基百科是这样定义的:自然语言处理是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言处理包括多方面和步骤,基本有认知、理解、生成等部分。 自然语言认知和理解是让计算机把输入的语言变成有意思的符号和关系,然后根据目的再进行处理。所以简单来说,自然语言处理就是如何让计算机理解人类语言。为了达到这样的目的,我们需要在理论上基于数学和统计理论建立各种语言模型,然后通过计算机来实现这些语言模型。因为人类语言的多样性和复杂性,所以总体而言自然语言处理是一门极具挑战的学科和领域。

640?wx_fmt=png

      整个 NLP 是个庞大的技术体系,包含了很多研究方向和内容。简单概括一下,NLP 的研究方向主要包括:

  • 机器翻译

  • 信息检索

  • 文档分类

  • 问答系统

  • 自动文摘

  • 信息抽取

  • 实体识别

  • 文本挖掘

  • 舆情分析

  • 机器写作

  • 语音识别

  • 语音合成

  • ......

      可以说 NLP 是个非常庞杂的领域了,学习和应用起来都颇有难度。难度主要体现在语言场景、学习算法和语料等三个方面。语言场景是指人类语言的多样性、复杂性和歧义性;学习算法指的是 NLP 的数理模型一般都较为难懂,比如隐马尔可夫模型(HMM)、条件随机场(CRF)以及基于 RNN 的深度学习模型;语料的困难性指的是如何获取高质量的训练语料。

      下面我们仅从 NLP 的模型和算法层面来进行简单的梳理。总体来说,NLP 的模型基本包括两类,一类是基于概率图方法的模型,主要包括贝叶斯网络、马尔可夫链、隐马尔可夫模型、EM 算法、CRF条件随机场、最大熵模型等模型,在深度学习兴起之前,NLP 基本理论模型基础都是靠概率图模型撑起来的;另一类则是基于 RNN 的深度学习方法,比如词嵌入、词向量、word2vec 等概念,基于 RNN 的机器翻译等等。

词汇表征

      在谈词嵌入和词向量等词汇表征方法之前,我们先来看一下将 NLP 作为监督机器学习任务时该怎样进行描述。假设以一句话为例:"I want a glass of orange ____."。我们要通过这句话的其他单词来预测划横线部分的单词。这是一个典型的 NLP 问题,将其作为监督机器学习来看的话,模型的输入是上下文单词,输出是划横线的目标单词,或者说是目标单词的概率,我们需要一个语言模型来构建关于输入和输出之间的映射关系。应用到深度学习上,这个模型就是循环神经网络。

      在 NLP 里面,最细粒度的表示就是词语,词语可以组成句子,句子再构成段落、篇章和文档。但是计算机并不认识这些词语,所以我们需要对以词汇为代表的自然语言进行数学上的表征。简单来说,我们需要将词汇转化为计算机可识别的数值形式,这种转化和表征方式目前主要有两种,一种是传统机器学习中的 one-hot 编码方式,另一种则是基于神经网络的词嵌入技术。

640?wx_fmt=png

      我们先来看词汇的 one-hot 编码方法。熟悉机器学习中分类变量的处理方法的同学对此一定很熟悉,无序的分类变量是不能直接硬编码为数字放入模型中的,因为模型会自动认为其数值之间存在可比性,通常对于分类变量我们需要进行 one-hot 编码。那么如何应用 one-hot 编码进行词汇表征呢?假设我们有一个包括 10000 个单词的词汇表,现在需要用 one-hot 方法来对每个单词进行编码。以上面那句 "I want a glass of orange ____." 为例,假设 I 在词汇表中排在第 3876 个,那么 I 这个单词的 one-hot 表示就是一个长度为 10000 的向量,这个向量在第 3876 的位置上为 1 ,其余位置为 0,其余单词同理,每个单词都是茫茫 0 海中的一个 1。大致如下图所示:

640?wx_fmt=png

      可见 one-hot 词汇表征方法最后形成的结果是一种稀疏编码结果,在深度学习应用于 NLP 任务之前,这种表征方法在传统的 NLP 模型中已经取得了很好的效果。但是这种表征方法有两个缺陷:一是容易造成维数灾难,10000 个单词的词汇表不算多,但对于百万级、千万级的词汇表简直无法忍受。第二个则在于这种表征方式不能很好的词汇与词汇之间的相似性,比如上述句子,如果我们已经学习到了 "I want a glass of orange juice.",但如果换成了 "I want a glass of apple ____.",模型仍然不会猜出目标词是 juice。因为基于 one-hot的表征方法使得算法并不知道 apple 和 orange 之间的相似性,这主要是因为任意两个向量之间的内积都为零,很难区分两个单词之间的差别和联系。所以进而我们有了第二种词汇表征方法。

      第二种表征方法称之为词嵌入技术。词嵌入的基本想法就是将词汇表中的每个单词表示为一个普通向量,这个向量不像 one-hot 向量那样都是 0或者1,也没有 one-hot 向量那样长,大概就是很普通的向量,比如长这样:[-0.91, 2, 1.8, -.82, 0.65, ...]。这样的一种词汇表征方式就像是将词汇嵌入到了一种数学空间里面,所以叫做词嵌入。比如说咱们下一讲要学习的大名鼎鼎的 word2vec 就是词嵌入技术的一种。

640?wx_fmt=png

      那么如何进行词嵌入呢?或者说我们如何才能将词汇表征成很普通的向量形式呢?这需要我们通过神经网络进行训练,训练得到的网络权重形成的向量就是我们最终需要的东西,这种向量也叫词向量,word2vec 就是其中的典型技术。

      word2vec 作为现代 NLP 的核心思想和技术之一,有着非常广泛的影响。word2vec 通常有两种语言模型,一种是根据中间词来预测上下文的 skip-gram 模型,另一种是根据上下文来预测中间词的 CBOW (连续词袋模型)。

      skip-gram 和 CBOW 的大致结构如下:

640?wx_fmt=jpeg

skip-gram模型

640?wx_fmt=jpeg

CBOW模型

      关于 word2vec 以及 skip-gram 和 CBOW 两种语言模型,笔者将在下一讲进行详细的学习和讲解。

参考资料:

deeplearningai.com

https://zhuanlan.zhihu.com/p/26306795

往期精彩:


一个数据科学从业者的学习历程

640?

640?wx_fmt=jpeg

长按二维码.关注机器学习实验室

640?wx_fmt=jpeg

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值