1、让我们看看一个用于情感分析的在词袋嵌入(bag-of-words embeddings)上训练的一个两层多层感知器(two layered MLP)的内部情况:一个被称为词袋(bag-of-words)的简单深度学习系统的内部情况,其可以将句子分类为积极的(positive)或消极的(negative)。这张图是来自在一个词袋上的一个 2 层 MLP 最后一个隐藏层的一个 T-SNE。其中每个数据点对应于一个句子,不同的颜色分别对应于该深度学习系统的预测和真实目标。实线框表示句子的不同语义内容。后面你可以通过一张交互式图表来了解它们。上图中的实线框提供了一些重要的见解。而真实世界数据的难度远不
2、止此,一些句子可以被轻松分类,但另一些却包含了复杂的语义结构。在可以轻松分类的句子的案例中,高容量的系统可能并不是必需的。也许一个简单得多的模型就能完成同样的工作。这篇博客文章探讨了这种情况是否属实,并将说明我们其实往往使用简单模型就能完成任务。一、对文本的深度学习大多数深度学习方法需要浮点数作为输入,如果你没使用过文本,你可能会疑问:我怎么使用一段文本来进行深度学习?对于文本,其核心问题是在给定材料的长度的情况下如何表征任意大量的信息。一种流行的方法是将文本切分(tokenize)成词(word)、子词(sub-word)甚至字符(character)。然后每一个词都可以通过 word2ve
3、c 或 Glove 等经过了充分研究的方法而转换成一个浮点向量。这种方法可以通过不同词之前的隐含关系来提高对词的有意义的表征。取一个词,将其转换成一个高维嵌入(比如 300 维),然后使用 PCA 或 T-SNE(流行的降维工具,在这个案例中是降为 2 维),你就可以找到词之间的有趣关系。比如,在上图中你可以看到 uncle 与 aunt 之间的距离和 man 与 woman 之间的距离差不多相等(来自 Mikolov et al., 2013)通过使用 tokenization 和 word2vec 方法,我们可以将一段文本转换为词的浮点表示的一个序列。现在,一个词表征的序列有什么用?二、词
4、袋(bag-of-words)现在我们来探讨一下词袋(BoW),这也许是最简单的机器学习算法了!取一些词表征(图下部的灰色框),然后通过加(sum)或平均(average)得到一个共同的表征(蓝色框),这个共同表征(common representation)包含了每个词的一些信息。在这篇文章中,该共同表征被用于预测一个句子是积极的还是消极的(红色框)。在每个特征维(feature dimension)上简单地取词的平均(mean)。事实证明简单地对词嵌入(word embedding)进行平均(尽管这完全忽略了句子的顺序)就足以在许多简单的实际案例中取得良好的效果,而且也能在与深度神经网络结
5、合时提供一个强大的基准(后面会解释)。此外,取平均的计算成本很低,而且可以将句子的降维成固定大小的向量。三、循环神经网络一些句子需要很高的准确度或依赖于句子结构。使用词袋来解决这些问题可能不能满足要求。不过,你可以考虑使用让人惊叹的循环神经网络(Recurrent Neural Networks)。在每一个时间步骤(从左到右),一个输入(比如一个词)被馈送入 RNN(灰色框),并整合之前的内部记忆(蓝色框)。然后该 RNN 执行一些计算,得到新的内部记忆(蓝色框),该记忆表示了所有之前见过的单元(如,所有之前的词)。该 RNN 现在应该已经包含了一个句子层面的信息,让其可以更好地预测一个句子是
6、积极的还是消极的(红色框)。每个词嵌入都按顺序被送入一个循环神经网络,然后该网络可以存储之前见过的信息并将其与新的词结合起来。当使用长短期记忆(LSTM)或门控循环单元(GRU)等著名的记忆单元来驱动 RNN 时,该 RNN 能够记住具有很多个词的句子中所发生的情况!(因为 LSTM 的成功,带有 LSTM 记忆单元的 RNN 常被称为 LSTM。)这类模型中最大的模型将这样的结构堆叠了 8 次。都表示带有 LSTM 单元的循环神经网络。它们也应用了一些权衡的技巧,比如跳过 LSTM 层之间的连接和一种被称为注意(attention)的方法。另外要注意绿色的 LSTM 指向了相反的方向。当与一
7、个普通的 LSTM 结合时,这被称为双向 LSTM(bidirectional LSTM),因为其可以在数据序列的两个方向上都获取信息。更多信息可参阅 Stephen Merity 的博客(即机器之心文章深度 | 逐层剖析,谷歌机器翻译突破背后的神经网络架构是怎样的?)(来源:Wu et al., 2016)。但是,和简单的词袋模型比起来,LSTM 的计算成本要高得多,而且需要经验丰富的深度学习工程师使用高性能的计算硬件来实现和提供支持。四、例子:情感分析情感分析(sentiment analysis)是一种量化主观性文章的极性的文档分类任务。给定一个句子,模型去评估它的情感是积极、消极还是中
8、性的。想要在事态严重前先发现 Twitter 上的愤怒客户吗?那么,情感分析可能正是你想要的!一个极佳的实现此目的的数据集(我们接下来会用到)是 Stanford sentiment treebank(SST):https:/nlp.stanford.edu/sentiment/treebank.html我们已经公开了一个 PyTorch 的数据加载器:STT 不仅可以给句子分类(积极、消极),而且也可以给每个句子提供符合语法的子短语(subphrases)。然而,在我们的系统中,我们不使用任何树信息(tree information)。原始的 SST 由 5 类构成:非常积极、积极、中性、消
9、极、非常消极。我们认为二值分类任务更加简单,其中积极与非常积极结合、消极与非常消极结合,没有中性。我们为我们的模型架构提供了一个简略且技术化的描述。重点不是它到底如何被构建,而是计算成本低的模型达到了 82% 的验证精度,一个 64 大小的批任务用了 10 毫秒,而计算成本高的 LSTM 架构虽然验证精度达到了 88% 但是需耗时 87 毫秒才能处理完同样的任务量(最好的模型大概精度在 88-90%)。下面的绿色框表示词嵌入,使用 GloVe 进行了初始化,然后是取词的平均(词袋)和带有 dropout 的 2 层 MLP。下面的蓝绿色框表示词嵌入,使用 GloVe 进行了初始化。在整个词嵌入
10、中没有跟踪梯度。我们使用了一个带有 LSTM 单元的双向 RNN,使用的方式类似于词袋,我们使用了该 RNN 隐藏状态来提取均值和最大值,之后是一个带 dropout 的 2 层 MLP。五、低计算成本的跳读阅读器(skim reader)在某些任务中,算法可以展现出接近人类水平的精度,但是要达到这种效果,你的服务器预算恐怕得非常高。你也知道,不一定总是需要使用有真实世界数据的 LSTM,用低成本的词袋(BoW)或许也没问题。当然,顺序不可知的词袋(BoW)会将大量消极词汇错误分类。完全切换到一个劣质的词袋(BoW)会降低我们的总体性能,让它听上去就不那么令人信服了。所以问题就变成了:我们能否
11、学会区分简单和困难的句子。而且为了节省时间,我们能否用低成本的模型来完成这项任务?六、探索内部探索深度学习模型的一种流行的方法是了解每个句子在隐藏层中是如何表示的。但是,因为隐藏层常常是高维的,所以我们可以使用 T-SNE 这样的算法来将其降至 2 维,从而让我们可以绘制图表供人类观察。上面两张图是原文中可交互的图示的截图。在原交互图中,你可以将光标移动、缩放和悬停在数据点上来查看这些数据点的信息。在图中,你可以看到在词袋(BoW)中的最后一个隐藏层。当悬停在任何数据点上时,你可以看到表示该数据点的句子。句子的颜色取决于其标签(label)。Predictions 标签页:该模型的系统预测与实
12、际标签的比较。数据点的中心表示其预测(蓝色表示积极,红色表示消极),周围的线表示实际的标签。让我们可以了解系统什么时候是正确的,什么时候是错误的。Probabilities 标签页:我们绘制了在输出层中被预测的类别的概率。这表示了该模型对其预测的信息。此外,当悬停在数据点上时,也将能看到给定数据点的概率,其颜色表示了模型的预测。注意因为该任务是二元分类,所以其概率是从 0.5 开始的,在这个案例中的最小置信度为 50/50.T-SNE 图容易受到许多过度解读的破坏,但这可能能让你了解一些趋势。七、T-SNE 的解读 句子变成聚类(cluster),聚类构成不同的语义类型。 一些聚类具有简单的形
13、式,而且具有很高的置信度和准确度。 其它聚类更加分散,带有更低的准确度和置信度。 带有积极成分和消极成分的句子是很困难的。现在让我们看看在 LSTM 上的相似的图:设置和词袋的交互图类似,快来探索 LSTM 的内部吧!我们可以认为其中许多观察也对 LSTM 有效。但是,LSTM 只有相对较少的样本,置信度也相对较低,而且句子中同时出现积极和消极的成分时,对 LSTM 来说的挑战性也要低于对词袋的挑战性。看起来词袋可以聚类句子,并使用其概率来识别是否有可能给那个聚类中的句子提供一个正确的预测。对于这些观察,可以做出一个合理的假设:置信度更高的答案更正确。为了研究这个假设,我们可以看看概率阈值(p
14、robability thresholds)。八、概率阈值人们训练词袋和 LSTM 为每一个类提供概率,以度量确定性。这是什么意思?如果词袋返回一个 1,那么表示它对其预测很自信。通常在预测时我们采用由我们的模型提供且带有最高可能性的类。在这种二元分类的情况下(积极或消极),概率必须超过 0.5(否则我们会预测相反的类)。但是一个被预测类的低概率也许表明该模型存疑。例如,一个模型预测的积极概率为 0.51,消极概率为 0.49,那么说这个结论是积极的就不太可信。当使用阈值时,我们是指将预测出的概率与一个值相比较,并评估要不要使用它。例如,我们可以决定使用概率全部超过 0.7 的句子。或者我们也可以看看 0.5-0.55 的区间给预测置信度带来什么影响,而这正是在下图所要精确调查的。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1