原文:Diving Into Natural Language Processing
作者:Adit Deshpande
编译:KK4SBB
欢迎人工智能领域技术投稿、约稿、给文章纠错,请发送邮件至heyc@csdn.net
自然语言处理是研究和实现人与计算机之间用自然语言进行有效通信的各种理论和方法。本文主要介绍深度学习在自然语言处理中的应用。
自然语言处理简介
自然语言处理是研究和实现人与计算机之间用自然语言进行有效通信的各种理论和方法。具体的任务包括:
- 问答系统(如Siri、Alexa和Cortana的功能)
- 情感分析(判断某个句子表达的是正面还是负面情绪)
- 图像-文字映射(看图写话)
- 机器翻译(语言之间相互翻译)
- 语音识别
- 句子成分分析
- 命名实体识别
传统的NLP方法需要借助大量语言学的领域知识。理解音素和词素等术语是基本功,有专门的语言培训课程。我们先来看看传统的NLP方法是如何理解下面这个词语:
假设我们的目标是从该词提取出一些信息(情感偏向、词意等等)。根据语言学知识,该词可以分割为下面三部分:
我们知道前缀”un”表示相反或是反面意思,后缀”ed”表明了词的时态(过去式)。再通过识别词干”interest”的意思,我们就很容易推导出这个单词的含义和情感偏向了。似乎很简单对吧?但是,当真正去梳理英语里的所有前缀和后缀时,你会发现所有前缀和后缀组合很多很多,只有非常资深的语言学家才能理解它们的含义。
深度学习的介入
深度学习本质上还是一种表示学习的方法。例如,CNN模型就是用一系列滤波器的组合来将对象划分到不同类别。因此,作者认为我们也可以借用同样的方法来表示单词。
本文概述
作者按照构建深度神经网络模型的基本顺序来撰写本文,然后结合近期的研究论文来讨论一些实际应用。也许,部分读者在读完全文之后还存在为啥要用RNN模型,或者为啥LSTM网络会有效等等问题。但是,作者的初衷是希望大家对深度学习在自然语言处理领域的应用能有一个感性的认识。
词向量
既然深度学习方法喜欢用数学符号,那我们就把每个单词表示为一个d维的向量。假设 d=6。
该用什么数值来表示这个向量呢?我们希望这个向量能够表示词语的含义或者语义。一种方法是创建共现矩阵。假设现在有一句话:
我们希望将句子中的每个单词都表示为一个向量:
共现矩阵的每个元素表示一个词与另一个词在整篇文档中相邻出现的次数。具体来说如下图所示:
我们可以将共现矩阵的每一行当做词向量的初始值:
读者们请注意,仅仅观察这个简单的矩阵,我们就能够获取很多有用的信息。例如,“love”和“like”两个单词与名词性的单词共现次数都是1(NLP和dogs),而且它们都与单词“I”共现一次。这就意味着这两个单词很有可能属于动词。若我们手中的数据集足够大,大家可以