深度学习在自然语言处理中的应用

编译:
欢迎人工智能领域技术投稿、约稿、给文章纠错,请发送邮件至
自然语言处理是研究和实现人与计算机之间用自然语言进行有效通信的各种理论和方法 。本文主要介绍深度学习在自然语言处理中的应用 。
自然语言处理简介
自然语言处理是研究和实现人与计算机之间用自然语言进行有效通信的各种理论和方法 。具体的任务包括:
传统的NLP方法需要借助大量语言学的领域知识 。理解音素和词素等术语是基本功,有专门的语言培训课程 。我们先来看看传统的NLP方法是如何理解下面这个词语:
假设我们的目标是从该词提取出一些信息(情感偏向、词意等等) 。根据语言学知识,该词可以分割为下面三部分:
我们知道前缀”un”表示相反或是反面意思,后缀”ed”表明了词的时态(过去式) 。再通过识别词干””的意思,我们就很容易推导出这个单词的含义和情感偏向了 。似乎很简单对吧?但是,当真正去梳理英语里的所有前缀和后缀时,你会发现所有前缀和后缀组合很多很多,只有非常资深的语言学家才能理解它们的含义 。

深度学习在自然语言处理中的应用

文章插图
深度学习的介入
深度学习本质上还是一种表示学习的方法 。例如,CNN模型就是用一系列滤波器的组合来将对象划分到不同类别 。因此,作者认为我们也可以借用同样的方法来表示单词 。
本文概述
作者按照构建深度神经网络模型的基本顺序来撰写本文,然后结合近期的研究论文来讨论一些实际应用 。也许,部分读者在读完全文之后还存在为啥要用RNN模型,或者为啥LSTM网络会有效等等问题 。但是,作者的初衷是希望大家对深度学习在自然语言处理领域的应用能有一个感性的认识 。
词向量
【深度学习在自然语言处理中的应用】既然深度学习方法喜欢用数学符号,那我们就把每个单词表示为一个d维的向量 。假设 d=6 。
该用什么数值来表示这个向量呢?我们希望这个向量能够表示词语的含义或者语义 。一种方法是创建共现矩阵 。假设现在有一句话:
我们希望将句子中的每个单词都表示为一个向量:
深度学习在自然语言处理中的应用

文章插图
共现矩阵的每个元素表示一个词与另一个词在整篇文档中相邻出现的次数 。具体来说如下图所示:
深度学习在自然语言处理中的应用

文章插图
我们可以将共现矩阵的每一行当做词向量的初始值:
深度学习在自然语言处理中的应用

文章插图
读者们请注意,仅仅观察这个简单的矩阵,我们就能够获取很多有用的信息 。例如,“love”和“like”两个单词与名词性的单词共现次数都是1(NLP和dogs),而且它们都与单词“I”共现一次 。这就意味着这两个单词很有可能属于动词 。若我们手中的数据集足够大,大家可以想象“like”与“love”的相似度会越来越高,同理其它近义词的词向量也会越来越相似,因为它们总是在相近的上下文中出现 。
尽管我们找到了一个好的入手点,但是需要注意到这种向量表示方式的维度会随着语料集的增长而呈线性增长 。假如我们有一百万个单词(在NLP问题中并不算太多),就会得到一个 1000,000 x 1000,000 的矩阵,而且这个矩阵非常的稀疏 。从存储效率来说,这显然不是一种好的表示方法 。目前已经有许多不错的词向量表示方法了,其中最著名的就是 。
词向量方法的基本思想就是让向量尽可能完整地表示该词所包含的信息,同时让向量维度保持在一个可控的范围之内(合适的维度是25~1000维之间) 。