深度学习、机器学习与人工智能已经对计算机科学领域产生极为深远的影响。从图像识别到围棋竞技等众多领域,深度学习的实际表现都已远超人类。
深度学习的一大优势在于,深度学习的水平提升可以在各类场景下实现通用。
在某一领域中适用于深度学习的具体技术,通常可以直接转移至其他领域而无需经过任何修改。
更具体地讲,构建大量计算密集型图像与语音识别类深度学习模型的方法,已经全面渗透至自然语言处理当中。现在,深度学习社区正在将自然语言处理(简称NLP)视为技术研究与应用的下一个前沿。
深度学习系统是需要大量计算设备作为配合的。不仅要从现实世界数据中发现复杂的分析模型,同时还要这些模型能够以规模化方式应用于其他任务。而这就提出了新的问题。
深度学习的两种模型应用
是否一切任务都要使用复杂的模型?答案是不,简单模型就够用了。
下面,我们一起来看一套双层式 MLP 模型(此模型已实现情感分析)
这是一套简单的深度学习系统,我们将其称为“词袋”模型,它会把句子分为正或负两类。最终可视化效果由词袋模型中双层
MLP 架构中处于上层的 T-SNE 隐藏层实现。每个数据点对应一个句子,并根据深度学习系统的预测结论与真实目标标以不同颜色。图中的边界框体根据句子的内容进行绘制。
现实世界中,有些句子很容易分类,但也有一些句子包含复杂的语义结构。对于那些易于分类的句子,我们可能并不需要高容量系统即可完成处理,那么,利用简单的模型是否可以得到相同的结论?
文本内容与深度学习
大多数深度学习方法要求利用浮点数字作为输入内容——除非你之前尝试过处理文本信息,否则大家肯定会抱有以下疑问:
1、如何将文本片段与深度学习对接起来?
我们在处理文本内容时,其核心问题在于如何表达任意数量的信息。目前比较流行的解决方案是将文本标记为单词、子词汇甚至是字符。我们可以利用
word2vec 或者 GloVe 等方案将各个单词转换为浮点矢量。如此一来,大家即可通过不同单词之间的隐含关系表达单词意义。
选择一个单词,将其转化为一个高维度嵌入体(如三百维),而后利用 PCAaftT-SNE(二者皆为高人气降维工具,在本示例中可将其降至二维)来发现单词之间的有趣关联。上图提示
uncle 与 aunt 之间具备类似词义,只是分别指向男性与女性。
利用标记化以及 word2vec 方法,我们可以将文本片段转化为一条用以表达每个单词的浮点序列。
2、现在,我们该如何使用这条浮点序列?
词袋模型
现在我们来讨论词袋模型(bag-ofwords,简称BoW),这可能是大家接触过的最为简单的机器学习算法之一。
选取多个词汇表达(即底部灰色框),通过相加或取平均值的方式将其归纳为另一通用表达式(蓝色框),其中包含每个单词中的部分信息。在本文当中,这一通用表达式负责预测句子表达的情感为正抑或为负(红色框)。
词袋模型可以实现直接对特征维度取平均值。在简单的词汇平均嵌入场景下,即使完全忽略句子内的表达顺序,这套模型仍能够在多数简单实例中运行良好。而与深度神经网络(稍后将进一步说明)相结合后,词袋模型能够给出理想的理解基准线。
另外,平均值是一项低资源占用量操作,且可帮助我们将句子的维度降低为一项固定大小的向量。
递归神经网络
某些句子中可能包含更为复杂的结构或者需要以更高精度加以处理。单靠词袋模型并不足以解决这些难题,因此是时候祭出另一款神器——递归神经网络
在每个 timestep(由左至右)上为 RNN(灰色框)提供一条输入内容(例如一个单词),并将此作为原有内部记忆(蓝色框)之外的新增内容。RNN
随后会在新的内部记忆(蓝色框)中进行计算,这部分结果代表的是全部此前见到过的单元(例如全部原有单词)。RNN
现在已经获得了句子层级上的全新信息,意味着它能够更好地预测句子所表达的情感为正抑或为负(红色框)。
每个嵌入单词都会按顺序被馈送至一套递归神经网络当中,后者负责管理以往见到过的存储信息,并将这部分信息与新词汇加以结合。在使用长-短期记忆单元(简称
LSTM)或者门控递归单元(简称 GRU)等知名记忆单元支持下的 RNN 时,RNN 将能够记住包含大量单词的句子的具体含义!(由于
LSTM 获得了成功,采用 LSTM 记忆单元的 RNN 通常也被直接称为 LSTM。)这些模型当中最大的八个部分彼此相互堆叠。
欢迎来到最为先进的深度学习模型中,它利用配备 LSTM 记忆单元的 RNN 实现语言翻译。粉色、橙色与绿色框即为拥有
LSTM 单元的递归神经网络。它们可在不同 lstm 层之间实现 skip 连接等处理技巧的交换,同时具备一项名为
attention 的方法。如大家所见,绿色的 LSTM 指向相反的方向。当将其与正常 LSTM 相结合后,即可生成所谓双向
LSTM,能够以两个方向从数据序列中获取信息。
然而,LSTM 的运行资源需求要远远高于低成本词袋模型,也通常需要由经验丰富的深度学习工程师负责实现并高效支持与之配套的高性能计算硬件。
示例:情感分析
情感分析属于一种文档分类机制,可对文档内容的主观倾向进行判断。在向其提交一个句子后,这套模型能够评估其表达的情感为正面、负面抑或中性。希望在客户行动之前通过客户的推文将其找到?情感分析能够有效满足您的需求!
在这方面,最为知名的公共数据集(也正是我们将在后文中使用的选项)正是斯坦福情感树图库(简称 SST)。SST
不仅能够对句子进行分类(正面或者负面),同时亦可对句子中的各单独语法进行判断。
初始 SST 将情感分为五种类别:非常正面、正面、中立、负面、非常负面。出于示例的考虑,我们认为二分法应该更为简单且易于理解,因此我们将非常正面与正面加以合并,非常负面与负面亦进行合并,同时将所有中性判断结果加以去除。
我们已经对示例中所要使用的模型架构进行了概括与技术性介绍。其中最重要的并非具体架构设计方式,而在于低成本模型能够在
64 项批量处理流程中以 10 毫秒延迟提供 82% 的验证准确率,而高成本 LSTM 则在 64
项批量处理流程中以 87 毫秒的延迟提供仅略有改善的 88% 验证准确率(顶级模型的准确性一般在 88%
到 90% 之间)。
底部绿色框代表嵌入词汇,由 GloVe 进行初始化,而后提取词意(词袋模型)并由一套双层 MLP
模型进行分析及中性要素去除。
底部青绿色框代表嵌入词汇,由 GloVe 进行初始化。此后我们不再对嵌入词汇进行追踪。这里我们使用与
LSTM 单元相似的具备 LSTM 单元的双向 RNN。我们利用 RNN 隐藏状态以获取平均值与最大值,而后是双层
MLP 模型进行分析及中性要素去除。
低成本浅探阅读方案
在某些任务中,各类算法能够提供与人类水平相近的准确度,但其提出的服务器性能要求往往也令人难以承受。正如前文中所提出,我们并不需要始终利用
LSTM 这类高性能需求量方案处理实际数据——大多数情况下词袋模型已经足以完成任务。但有时候,我们可能面对着以下这类难题:
“演员表现非常糟糕,完全缺少真实感……但我仍然愿意给出9分好评”
作为一类忽略顺序的算法,词袋模型肯定会将这句话理解成负面表达。这样简单且明确的表达居然成为拉低分析准确率的罪魁祸首,明显无法接受。因此问题就变成:
我们能否学会如何区分“简单”与“困难”两类句子?
另外,我们能否利用低成本模型完成这项任务?
深入探索
探索深度学习模型的一种主流方式是立足隐藏层对每个句子的表示方式进行绘制。由于隐藏层通常位于高维,我们可以使用
T-SNE 等算法首先将其降维至二维,从而以人类可以理解的方式实施绘制。
BoW:预测
BoW:概率
在上图中,大家会看到词袋模型(BoW)中绘制的最新隐藏层。在将鼠标悬停至任何数据点时,您将看到表示该数据点的对应句子。句子本身的颜色由其标签决定。
预测标签(Predictios tab):系统预测结果与实际模型标准间的比较。数据点的中央表示其预测结论(蓝色为正面,红色为负面),而周边的线条代表实际标签。如此一来,我们就能轻松判断系统结论是否正确。
概率标签(Probabilities tab):代表我们在输出层中分配给预测结论的具体概率。它负责告诉我们该模型对其预测结论的确信度。另外,在将鼠标悬停至数据点上时,图表将提供给定数据点的概率,并根据模型预测结论进行着色。需要注意的是,概率的起始值为0.5,代表任务本身为二分类型,且值为0.5时意味着确信度最低——为五五开。
T-SNE 制图极易受到过度解读的影响,但其中部分因素的影响效果往往更为明显。
T-SNE解读
将句子拆分为多个聚类(clusters)。这些聚类包含有不同的语义类型;
部分聚类拥有的多重性相对简单,意味着模型对于准确度拥有较高的确信度;
另一些聚类则准确度较低,且对结论的确信度亦不高;
同时包含正面与负面表达的句子往往更难进行判断。
下面来看根据LSTM模型生成的绘制图表。
LSTM:预测
LSTM:概率
采用与词袋模型相同的设置,旨在对 LSTM 进行深入探索
我们可以发现,LSTM 的大多数结果与词袋模型并无区别。然而,LSTM 对于大多数结论都拥有更高的确信度,且其在判断同时包含正面与负面表达的句子时表现得也要比词袋模型更好。
如此看来,词袋模型完全有能力对句子进行聚类拆分,并利用概率机制对所作出预测的准确性进行量化判断。以此为基础,我们基本可以得出以下推断:
高确信度答案一般准确性更高。
为了调查这一假设,我们可以对概率阈值进行观察。
概率阈值
词袋模型与 LSTM 已经经过训练,旨在为每个类提供对应概率,而我们可以将此作为确信度的衡量指标。具体来讲,如果词袋模型返回值为
1,则代表其对于预测结论极具信心。
一般来讲,在预测当中我们会选取模型所提供的可能性最高的类。在二元分类当中(即非正即负),可能性必然高于
0.5(否则我们将会给出相反的结论)。然而,较低的概率值代表着模型本身对于当前论断并不能确定。举例来说,如果模型预测的负面值为
0.49,而正面值为 0.51,则代表着结论准确的可能性极低。
在提到阈值时,我们的实际表意是将预测概率与某个给定值进行比较,从而评估该概率对应的结论是否可信。举例来说,我们可以决定直接使用概率值高于
0.7 的全部结论。或者,我们也可以选择查看概率值在 0.5 到 0.55 之间的句子,从而了解模型在这一确信度区间作出了怎样的预测——这部分内容我们将在后方进行详尽说明。
BoW
LSTM
在阈值(threshold)绘图中,条状图形的高度对应两个阈值内数据点的准确度,而线条则代表其以全部数据点(而非给定阈值)为参照时的近似准确度。
在数据量(data amount)绘图中,条的高度对应两个阈值之间全部数据量的累加,而线条则代表来自各阈值限定区间内的累加数据。
通过词袋模型绘图,大家可能会发现提升概率阈值会改善预测准确度。然而这一点在 LSTM 图中则表现得并不明显,这主要是由于
LSTM 已经不再依赖于训练集,而只提供高确信度答案。
使用词袋模型处理简单示例,LSTM则负责复杂示例。
因此,通过输出的概率值,我们即可基本判断句子内容是否简单以及何时才有必要动用更为强大的LSTM等分析系统。
利用概率阈值,我们创建出一项新的策略,这里将其称为“概率策略”。其能够帮助我们获取词袋系统中的概率阈值,并利用
LSTM 进一步处理那些确信度达不到阈值要求的预测结论。如此一来,我们就能够将一部分数据交由词袋模型处理(概率高于阈值的句子),而另一部分数据则可选择词袋模型或者
LSTM(特别是概率低于阈值的句子)加以处理。在此之后,我们将获得一项 BoW 与 LSTM 之间的使用率比值,由
0.0(即只使用 LSTM)到 1.0(只使用 BoW),从而得出分析计算所需要的时间与预期准确率。
确立基准
为了确立基准,我们需要选定两套模型的具体使用比例,例如将 0.1 的数据交由 BoW 而将 0.9
的数据交给 LSTM,则意味着最终准确率将九成由 LSTM 决定,一成由 BoW 决定。我们的目标在于建立起一项无需策略指导的基准,其能够根据随机分配的句子内容决定使用
BoW 抑或是 LSTM。然而,这项策略的执行本身也需要成本。
我们需要首先通过词袋模型对全部句子进行处理,旨在确定哪些句子适用于词袋、而哪些适用于LSTM。如果任何一个句子的预测确信度都没有达成基准概率要求,则意味着我们必须将其全部交给LSTM——而这同时意味着我们的阈值设定可能存在问题。
为了避免这种状况,我们决定通过以下方式计算策略的成本与模型使用比例。
其中 C 代表成本,而 p 代表词袋模型中所使用数据的比例。
验证集中的结果比较了BoW与LSTM(红线)与概率阈值策略(蓝线)不同搭配比例的对应准确度与处理速度。左侧的数据点代表仅使用LSTM的情况,而右侧则代表仅使用词袋模型的情况,二者之间则为双方皆有使用。
蓝线代表在无指导策略影响下的BoW与LSTM组合,而红色曲线描绘了利用词袋概率作为策略以指导应对哪部分数据使用哪种系统的情况。您可将鼠标悬停在线上以查看不同比例/概率阈值所带来的处理时间节约效果。需要注意的是,在仅使用词袋模型的情况下,其达到时间节约能力上限——最高约90%。
这里我们得出一项有趣的发现,即使用词袋阈值的效果要明显优于未使用任何指导策略的情况。
我们将此曲线视为曲线速度(简称SUC),并对其取平均值。结果如下表所示。
利用验证集判断应使用BoW或者LSTM的离散选择结果。每种模型使用不同素材计算十次。表中的结果为SUC平均值。将概率策略与使用比例进行比较。
了解何时浅探而何时深究
光是了解何时在两种不同模型间切换显然还不够。我们希望建立一套更具通用性的系统,用以学习何时在每种模型间切换。这样一套系统能够帮助我们处理更为复杂的行为:
我们能否通过固定的管理方式了解何时深究比浅探效果更好?
“深究”代表利用LSTM由左至右进行处理,并将每个timestep的结果保存在内存中;
“浅探”则代表使用BoW模型。
在利用词袋模型计算概率时,我们可以据此作出判断,即当某一单词的含义存在不确定性时,更为强大的LSTM应该能够提供更准确的结果——但事实是否真是如此?
词袋模型与 LSTM 对同一句子存在判断正确或不正确的混淆矩阵。其类似于此前在词袋模型与 LSTM
之间进行混淆 T-SNE 绘图。
事实上,可以看到 LSTM 只有 12% 的机率提供比 BoW 更好的判断结果,而在 6% 的情况下词袋模型或
LSTM 都无法给出正确结果。考虑到这一点,我们似乎没有理由使用 LSTM——单纯依靠词袋模型已经能够带来较为准确的结果,且处理速度要快得多。
了解“浅探”——设置
也就是说,即使 BoW 对结果不够确定,我们也并未总应使用 LSTM 加以进一步处理。那么我们能否让自己的词袋模型了解
LSTM 在哪些情况下会出现错误,而哪些情况下高资源占比的 LSTM 能给出正确结果?让我们再次审视
T-SNE 绘图,但现在我们要关注的是 BoW 与 LSTM 之间的混淆矩阵。我们希望找到该混淆矩阵中各元素间的关系,特别是
BoW 出现错误的情况。
BoW:与LSTM比较
LSTM:与BoW比较
大家可以移动、缩放、保存并将鼠标悬停在数据点上以查看其信息。请注意,在向右侧渲染的情况下(即将数据点移动至左侧)提示工具可能表现更好。我们对BoW与LSTM的预测结果进行比较,旨在了解二者的准确率差异。这能帮助我们评估哪种模型的效果更好。另外,在将鼠标悬停至某一数据点时,其将提供正确性与概率。概率信息根据预测结果进行着色。
通过比较情况来看,我们发现能够更轻松地判断BoW何时正确而何时对结果不太确定。然而,LSTM的正确及错误之间则没有明确的关联。
我们能否把握这一关联?
此外,概率策略本身也存在明显的局限性,因为其依赖于继承式二分决策且要求配合概率值。因此,我们提出了一套基于神经网络的可训练决策网络。如果单纯着眼于混淆矩阵,我们可以利用这部分信息为监控下的决策网络生成标签。如此一来,我们即可保证仅在BoW为错误而LSTM为正确的情况下使用LSTM。
为了生成该数据集,我们需要一组句子,其中包含词袋模型与LSTM给出的正确、底层预测。然而在训练当中,LSTM通常能够实现99%甚至更高的准确度,这意味着训练集的规模已经不足以为其提供更多经验。为了避免这种状况,我们将训练集拆分为模型训练集(包含80%的训练数据)与决策训练集(包含其余20%训练数据),后者在训练过程中始终不会被交付至模型当中。在此之后,我们利用决策训练集对模型进行细节调整,希望决策网络能够在这部分从未出现过的数据中提供同样出色的预测表现。
词袋模型与LSTM初始皆利用“模型训练”集(即80%训练数据)进行训练,接下来由这两套模型为决策网络生成标签,最后再利用完整数据集对模型进行再次训练。在这一过程中,我们始终使用同样的验证集。
为了构建我们的决策网络,我们挖掘了低成本词袋系统中最后一个隐藏层(我们亦利用该层生成了T-SNE绘图)。在此之后,我们将一套双层MLP堆叠在模型训练集的词袋训练之上。我们发现如果不采取这样的作法,则决策网络将无法掌握BoW模型的变化趋势,意味着结果不能得到有效推广。
底部青绿色框体代表来自词袋系统的各层(未经筛选)。此后,我们将一套双层MLP堆叠在其上,并生成一个类以判断应使用词袋模型抑或LSTM。
决策网络根据模型训练集训练出的模型所选择的各个类随后会在整体训练集中进行全面应用——但继续保持高度关联性。我们之所以将该训练完成的模型应用于完整训练集,是因为该模型训练集上的模型往往水平较差并将导致准确度较低。在对验证集上的SUC进行最大化后,决策网络能够提前停止训练。
我们的决策网络执行效果如何?
我们首先来看看这套决策网络的预测结果。
数据点与之前我们使用词袋模型时绘制的 T-SNE 曲线图相同。绿色点代表由词袋模型进行预测的句子,而黄色点则代表由
LSTM 进行预测的句子。
这里我们需要注意结果与词袋模型中概率阈值的相似度。现在让我们看看决策网络最后一个隐藏层的 T-SNE,借此了解其是否能够准确判断
LSTM 预测结果的正确与错误情况。
各数据点基于决策网络最后一个隐藏层的句子表达,且源自验证句子。其颜色所代表的含义与之前的比较绘图一致。
看起来决策网络确实能够从词袋模型的隐藏状态中提取聚类。不过,其似乎无法发现哪些情况下LSTM也会作出错误判断(从红色中提取黄色聚类)。
紫色曲线表示验证集上新引入的决策网络。请注意决策网络所使用的,与概率阈值相近但略有不同的解决方案。
从时间节约曲线上的数据准确度来看,我们很难判断这套决策网络是否表现更好。
利用验证集与测试集判断应使用 BoW 或者 LSTM 的离散选择结果。SUC 基于准确度与速度绘图曲线的平均值。每套模型利用不同素材计算十次。表中的结果为
SUC 的平均值。标准偏差基于与该比例间的差异。
从预测绘图来看,我们可以根据数据量、准确度以及 SUC 得分判断决策网络是否能够准确判断 BoW 给出的预测结果是否正确。另外,我们也能够借此构建起一套更具通用性的系统,确保其能够触及深度学习模型当中的隐藏状态。然而,结果同时表明决策网络很难理解其无法访问之系统的行为,例如更为复杂的
LSTM。 |