Bootstrap

关于自然语言处理(二)深度学习中的时间序列数据

自然语言领域中的数据

在深度学习的世界中,某一领域的架构/算法往往是根据该领域中特定的数据状态设计出来的。例如,为了处理带有空间信息的图像数据,算法工程师们使用了能够处理空间信息的卷积操作来创造卷积神经网络;又比如,为了将充满噪音的数据转变成干净的数据,算法工程师们创造了能够吞吃噪音、输出纯净数据的自动编码器结构。因此,在了解每个领域的算法架构之前,我们最好先学习当前领域的数据特点和数据结构,在自然语言处理领域也是如此。

自然语言领域的核心数据是序列数据,这是一种在样本与样本之间存在特定顺序、且这种特定顺序不能被轻易修改的数据。在机器学习和普通深度神经网络的领域中我们所使用的数据是二维表。如下所示,在普通的二维表中,样本与样本之间是相互独立的,一个样本及其特征对应了唯一的标签,因此无论我们先训练1号样本、还是先训练7号样本、还是只训练数据集中的一部分样本,都不会从本质上改变数据的含义、许多时候也不会改变算法对数据的理解和学习结果。

在这里插入图片描述
但序列数据则不然,对序列数据来说,一旦调换样本顺序样本发生缺失,数据的含义就会发生巨大变化。最典型的序列数据有以下几种类型:

  1. 文本数据(Text Data):文本数据中的样本的“特定顺序”是语义的顺序,也就是词与词、句子与句子、段落与段落之间的顺序。在语义环境中,词语顺序的变化或词语的缺失可能会彻底改变语义,例如——

改变顺序:事半功倍和事倍功半;曾国藩战太平天国时非常著名的典故:他将“屡战屡败”修改为“屡败屡战”,前者给人绝望,后者给人希望。


样本缺失(对文本来说特指上下文缺失):小猫睡在毛毯上,因为它很____。当我们在横线上填上不同的词时,句子的含义会发生变化。

  1. 时间序列数据(Time Series Data):时间序列数据中的“特定顺序”就是时间顺序,时序数据中的每个样本就是每个时间点,在不同时间点上存在着不同的标签取值,且这些标签取值常常用于描述某个变量随时间变化的趋势,因此样本之间的顺序不能随意改变。例如,股票价格、气温记录和心电图等数据,一旦改变样本顺序,就会破坏当前趋势,影响对未来时间下的标签的预测。

  2. 音频数据(Audio Data):音频数据大部分时候是文本数据的声音信号,此时音频数据中的“特定顺序”也是语义的顺序;当然,音频数据中的顺序也可能是音符的顺序,试想你将一首歌的旋律全部打乱再重新播放,那整首歌的旋律和听感就会完全丧失。

  3. 视频数据(Video Data):你知道动画是由一张张原画构成的吗?视频数据本质就是由一帧帧图像构成的,因此视频数据是图像按照特定顺序排列后构成的数据。和音频数据类似,如果将动画或电影中的画面顺序打乱再重新播放,那没有任何人能够理解视频的内容。

类似的数据还有很多,例如DNA序列数据,从医学角度来说DNA测序的顺序不能被打乱,否则就会违背医学常识。除此之外,符号序列数据也是常见的序列数据,密码学、自动编码学、甚至自动编程的算法都对数据本身的逻辑有严格的要求。很明显,在处理序列数据时,我们不仅要让算法理解每一个样本,还需要让算法学习到样本与样本之间的联系。今天,这些能够学习到样本之间联系的算法们构成了自然语言处理架构群。

深度学习中的时间序列数据

现实中的序列数据可以是二、三、四、五任意维度,只要给原始的数据加上“时间顺序”或“位置顺序”,任意数据都可以化身为序列数据。在这里,我们展现几种常见的序列数据:

二维时间序列

在这里插入图片描述
时间序列中,样本与样本之间的顺序是时间顺序,因此每个样本是一个时间点,时间顺序也就是time_step这一维度上的顺序。这种顺序在自然语言处理领域叫做“时间步”(time_step),它代表了当前时间序列的长度,因此也被称为序列长度(sequence_length)。对时间序列而言,时间步的顺序这正是我们要求算法必须去学习的顺序。在时序数据中,时间点可以是任意时间单位(分钟、小时、天),但时间点与时间点之间的间隔必须是一致的。

在NLP领域中,我们常常一次性处理多个时间序列,如下图所示,我们可以一次性处理多支股票的股价波动序列——

三维时间序列

在这里插入图片描述
此时我们拥有的是一个三维矩阵,其中batch_size是样本量,也就是一共有多少个二维时间序列表单。你或许已经发现了,其实三维时间序列数据就是机器学习中定义的“多变量时间序列数据”。在多变量时间序列数据当中,时间和另一个因素共同决定唯一的特征值。在上面的例子中,每张时序二维表代表一支股票,因此在这个多变量时间序列数据中“时间”和“股票编号”共同决定了一个时间点上的值,如果在机器学习中,我们会看到这样的数据结构:

股票ID时间开盘价收盘价交易量最高价最低价
00K6216月1日xxxxxxxxxxxxxxx
00K6216月2日xxxxxxxxxxxxxxx
00K6216月3日xxxxxxxxxxxxxxx
……
00E5046月1日xxxxxxxxxxxxxxx
00E5046月2日xxxxxxxxxxxxxxx
00E5046月3日xxxxxxxxxxxxxxx
……
00H8296月1日xxxxxxxxxxxxxxx
00H8296月2日xxxxxxxxxxxxxxx
00H8296月3日xxxxxxxxxxxxxxx
……

当把这张表单拆成独立的三张表单,每张表单上只显示一支股票时,就是深度学习中常见的三维时间序列数据。相似的例子还可能是——不同用户在不同时间点上的行为,不同植物在不同季节时分泌的激素值、不同商家在不同时间点上的销售额等等。

虽然上述两种形式的时序数据是深度学习中最常见的时序数据,但时序数据被用于不同的算法时可能有不同的形态,有时候我们甚至不会拘泥于“时序”和“连续性”这些时间序列的常规属性,而是从时间数据的局部性和全局性来考虑,将时序数据变形为特定网络所需要的输入数据形态(例如,时间序列数据用于CNN,或时间序列数据用于GAN时,它的形态会不同于上述我们描述的形态)。

如果你还想挖掘更多宝藏内容,请关注公众号“智界元枢”。

;