编译 | sunlei
发布 | ATYUN订阅号
昨天我们聊了一些自然语言处理的基本原理,比如“自然语言是什么”“计算机如何理解语言”“什么是自然语言处理”等等问题,在本文中我们将更深一步探讨自然语言处理取得了怎样的快速进展。
对于一个算法来推导文本数据之间的关系,它需要以一种清晰的结构化格式来表示。
词袋是一种以表格格式表示数据的方法,其中列表示语料库的总词汇表,每一行表示单个观察。单元格(行和列的交集)表示在该特定观察中由列表示的单词数。
它有助于机器理解一个简单易懂的矩阵范例中的句子,从而使各种线性代数运算和其他算法能够应用到数据上,以建立预测模型。
以下是医学期刊文章样本的“词袋模型”示例
这种表示非常有效,并负责为一些最常用的机器学习任务(如垃圾邮件检测、情绪分类器和其他任务)生成模型。
然而,这种表述有两个主要缺点:
嵌入矩阵是一种表示词汇表中每个单词的嵌入的方法。行表示单词嵌入空间的维度,列表示词汇表中的单词。
为了将一个样本转换成它的嵌入形式,将其独热编码形式中的每个单词乘以嵌入矩阵,为样本提供单词嵌入。
需要记住的一件事是,这里的One -hot编码仅仅是指在词汇表中单词位置处值为1的n维向量,其中n是词汇表的长度。这些热编码来自词汇表,而不是从一批观察结果中提取的。
递归神经网络简称RNN,是神经网络的重要变体,在自然语言处理中得到了广泛的应用。
从概念上讲,它们与标准神经网络不同,因为RNN中的标准输入是一个单词,而不是标准神经网络中的整个样本。这使得网络能够灵活地处理不同长度的句子,而标准的神经网络由于其固定的结构而无法做到这一点。它还提供了一个额外的优势,可以共享在不同文本位置学习到的特征,而这些特征在标准的神经网络中是无法获得的。
RNN将句子中的每个单词视为时间“t”发生的单独输入,并使用“t-1”处的激活值,作为时间“t”处输入之外的输入。下图显示了RNN体系结构的详细结构。
上面描述的架构也称为多对多架构(Tx = Ty),即输入的数量=输出的数量。这种结构在序列建模中非常有用。
除了上述结构外,还有三种常用的RNN结构。
上图中,H代表激活功能的输出
编码器是指网络中读取要翻译的句子的部分,解码器是网络中将句子翻译成所需语言的部分。
RNN除了有用之外,也有一定的局限性,主要有:
这两种限制导致了新型的RNN体系结构,下面将对此进行讨论。
它是对基本递归单元的一种改进,有助于捕获长期依赖关系,也有助于解决消失梯度问题。
GRU由一个额外的内存单元组成,通常称为更新门或重置门。除了通常的具有sigmoid函数和softmax输出的神经单元外,它还包含一个额外的单元,其中tanh作为激活函数。使用TANH是因为它的输出可以是正的也可以是负的,因此可以用于向上和向下伸缩。然后,该单元的输出与激活输入相结合,以更新内存单元的值。
因此,在每个步骤中,隐藏单元和内存单元的值都会被更新。内存单元中的值在决定传递给下一个单元的激活值时起作用。
要获得更详细的解释,可以参考https://towardsdatascience.com/ing-gru-networks-2ef37df6c9be
在LSTM体系结构中,没有像GRU那样只有一个更新门,而是有一个更新门和一个忘记门。
这种体系结构为内存单元提供了一个选项,可以保留t-1时刻的旧值,并将t时刻向其添加值。
关于LSTM的更详细的解释,请访问http://colah.github.io/posts/2015-08-explanation – lstms/
在上述RNN体系结构中,仅考虑以前时间戳出现的影响。在NLP的情况下,这意味着它考虑了只写在当前单词之前的单词的影响。但在语言结构中,情况并非如此,因此双向RNN出现起到了拯救作用。
双向RNN由前向和后向递归神经网络组成,并结合两个网络在任意给定时间t的结果进行最终预测,如图所示。
在这篇文章中,我试图涵盖自然语言处理领域中普遍存在的所有相关实践和神经网络架构。对于那些对深入了解神经网络感兴趣的人,我强烈建议你们去上Andrew Ng Coursera的课程。
End