[转] TextCNN调参技巧

原文地址:

https://plushunter.github.io/2018/02/26/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86%E7%B3%BB%E5%88%97%EF%BC%887%EF%BC%89%EF%BC%9ATextCNN%E8%B0%83%E5%8F%82%E6%8A%80%E5%B7%A7/

对于文本分类或者其他任务,我们在尝试复杂模型之前都要针对任务使用常见的简单模型做个baseline。对于文本分类而言fasttext和textcnn通常都是一个非常好的baseline。特别是fastext,使用简单,而且还是一个很强的baseline。对于textCNN来说,需要调的超参比较多。转的这篇文章翻译了Textcnn调参的综述文章。

 

这篇文章翻译自A Sensitivity Analysis of (and Practitioners’ Guide to) Convolutional Neural Networks for Sentence Classification

 

近年来,卷积神经网络在句子分类任务上取得了显著的成绩(Kim, 2014;Kalchbrenner et al .,2014),然而,这些模型要求从业者指定精确的模型结构与模型参数,例如,选择滤波器大小、正则化参数等等。目前尚不清楚对于句子分类的任务,不同的参数设定会对模型性能造成什么样的影响。因此,在这里我们对单层卷积神经网络进行情感分析,探索不同的参数对模型性能的影响;我们的目标是找出对语句分类来说的重要因素和不重要因素。由于一层的CNN结构简单,实验的表现也很好(Kim, 2014),我们就着重使用这个模型来验证(而不同更复杂的模型),从我们广泛的实证结果中得到一些了实用的建议,这些结果对于那些有兴趣用CNN对句子分类的人来说很有用。我们的实验结果所证实的一个重要结论是,研究人员应该记录性能差异,因为这可能是由于随机初始化或推理产生的。

一、Introduction

在这个工作中,我们关注的是情感分类的重要任务。最近,研究表明,神经网络(CNNs)对这项任务的表现很好(Kim, 2014; Kalchbrenner et al., 2014; Wang et al., 2015; Goldberg, 2015; Iyyer et al., 2015)。这类模型利用词的分布式表示,首先将包含每个句子转换成一个向量,从而形成一个矩阵作为输入给CNN(图1)。实证结果令人印象深刻。这些模型不需要太复杂就能实现强大的结果:例如,Kim(2014)提出了一种直接的单层CNN架构,它可以在多个任务中实现一致的(或类似的)结果。因此,现在有了令人信服的支持,更倾向于使用CNN而不是稀疏线性模型来进行句子分类任务。然而,CNN的一个缺点是,它们要求从业者指定要使用的精确模型架构,并设置超参数。同样的,做出这样的决定似乎是一种黑箱操作,特别是因为在模型中有许多“自由参数”可以探索。这与广泛用于文本分类的线性模型形成了鲜明的对比,例如正则化的逻辑回归和线性支持向量机(SVMs) (Joachims, 1998)。这样的模型特征通常是通过对文本的稀疏表示而产生的,并且需要相对较少的调优:通常只需要设置正则化项的系数(即:模型偏差)。使用训练数据进行线性搜索来确定参数是设置超参数的方法。

最近关于CNN的句子分类的研究,已经提供了用于实现报告结果的设置。然而这些参数设定是通过并非是特定的调参过程。但实际上,搜索CNN的参数空间是极其昂贵的,至少有两个原因:(1)训练这些模型的速度相对较慢,即使使用gpu。例如,在SST-1数据集(Socher et al., 2013)中使用与(Kim, 2014)类似的配置,进行10倍交叉验证,需要1个小时。可能的模型架构和超参数空间是巨大的。例如,我们所讨论的简单的CNN架构,至少需要指定以下内容:输入的词向量表示;滤波器大小;特征图的数量;激活功能;池化策略;dropout比例(如果有的话);和l2范数的系数(如果有的话)。

实际上,对所有这些参数进行调优是不可行的,尤其是考虑到参数估计所需的运行时间。因此,我们的目的是要根据经验来确定那些需要花费精力进行调整的参数,以及那些在性能上无关紧要的,或者在特定的数据集上有“最佳”效果的参数。我们从前人对神经模型的经验分析中得到启发,该模型由Coates et al.(2011)和Breuel (Breuel, 2015)进行,研究了非监督特征学习效果的影响因素,以及随机梯度下降(SGD)超参数对训练的影响。在这里,我们考虑了模型结构的配置和单层CNNs的超参数值对句子分类任务的影响。我们报告了大量实验的结果,探索了不同的模型结构,运行了7个句子分类数据集。

二、背景和预备

深度学习方法已在机器学习中得到很好的应用(LeCun et al., 2015;Bengio,2009)。对于图像和语音处理任务来说,它们尤其成功(也很受欢迎)。然而,最近这些方法已经开始超越传统的自然语言处理(NLP)任务的线性模型(Goldberg, 2015),这个领域的大部分兴趣都集中在如何得到分布式的词语表达(Bengio et al., 2003;Mikolov et al., 2013)并共同将这种“内部”表征嵌入到分类模型中(Col lobert and Weston, 2008;Collobert et al .,2011)或句子建模(Kalchbrenner et al., 2014;Socher et al .,2013)。

在(Kalchbrenner et al., 2014)中,作者构建了一个包含多个卷积层的CNN架构。他们的模型使用了动态k-max池。他们的模型假定潜在的、密集的、低维度的词向量(在推理之前初始化为随机值)。

Kim(2014)定义了一个更简单的架构,在相同的数据集上实现了类似的结果(Kalchbrenner et al., 2014)。这个模型也将每个单词都表示为一个稠密的、低维的向量(Mikolov et al., 2013),他们使用预先训练的词向量,并考虑两种方法:静态和非静态。在前一种方法中,词向量被视为静态输入,而在后一种方法中,则动态调整为特定任务的词向量。

在其他地方,Johnson和Zhang(2014)引入了相似的模型,但改用了高维的one-hot向量表示。他们考虑了这一方法的两种变体,seq-CNN和bow-CNN。前者完全保留了顺序结构(以在非常高维的空间输入空间中操作的代价),而后者保留了一些序列,但在小区域内丢失了顺序。他们的重点是更长的文本的分类,而不是句子(当然,这个模型也可以用于句子的分类)。Kim的体系结构相对简单——这与Johnson和Zhang(2014)所提出的基本相同,模块化的词向量——再加上在多个数据集上观察到的强大的经验性能,使得这是一个很有吸引力的句子分类方法。然而,在实践中,我们需要做一些模型架构决策和设置各种超参数。目前,很少有经验数据可以指导此类决定;解决这一差距是我们的目标。

2.1 CNN

我们首先描述我们在本文中使用的相对简单的CNN架构。我们从一个标记化的句子开始,然后我们将它转换成一个句子矩阵,其中的行根据每个词得到的单词向量。例如,这些可能是谷歌word2vec (Mikolov et al., 2013)或GloVe(Pennington et al., 2014)模型的输出。我们用d表示向量的维数。如果给定句子的长度(即词汇数)是s,然后句子的维数矩阵s×d.接下来,我们可以有效地将句子矩阵作为一个“图像”,通过线性滤波器对它进行卷积操作。在NLP应用中,数据具有固有的顺序结构。直观上,因为行表示离散的符号(即单词),所以使用宽度等于向量的维数的滤波器是合理的。(比如d)。然后我们可以考虑只改变滤波器的“高度”,它指的是共同考虑的相邻行数(词向量)。从这一点开始,我们将把滤波器的高度称为滤波器的区域大小。

假设有一个滤波器的参数化权向量wRh×dw∈Rh×d和区域大小hh;ww包含要估计的

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值