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