作为数据科学家,你最重要的技能之一应该是为你的问题选择正确的建模技术和算法。几个月前,我试图解决文本分类问题,即分类哪些新闻文章与我的客户相关。

我只有几千个标记的例子,所以我开始使用简单的经典机器学习建模方法,如TF-IDF上的Logistic回归,但这个模型通常适用于长文档的文本分类。

在发现了我的模型错误之后,我发现仅仅是理解词对于这个任务是不够的,我需要一个模型,它将使用对文档的更深层次的语义理解。

深度学习模型在复杂任务上有非常好的表现,这些任务通常需要深入理解翻译、问答、摘要、自然语言推理等文本。所以这似乎是一种很好的方法,但深度学习通常需要数十万甚至数百万的训练标记的数据点,几千的数据量显然是不够的。

通常,大数据集进行深度学习以避免过度拟合。深度神经网络具有许多参数,因此通常如果它们没有足够的数据,它们往往会记住训练集并且在测试集上表现不佳。为了避免没有大数据出现这种现象,我们需要使用特殊技术。

在这篇文章中,我将展示我在文章、博客、论坛、Kaggle上发现的一些方法,以便在没有大数据的情况下更好地完成目标。其中许多方法都基于计算机视觉中广泛使用的最佳实践。

则化

正则化方法是在机器学习模型内部以不同方式使用的方法,以避免过度拟合,这个方法具有强大的理论背景并且可以以通用的方式解决大多数问题。

L1和L2正则化

这个方法可能是最古老的,它在许多机器学习模型中使用多年。在这个方法中,我们将权重大小添加到我们试图最小化的模型的损失函数中。这样,模型将尝试使权重变小,并且对模型没有帮助的权重将显着减小到零,并且不会影响模型。这样,我们可以使用更少数量的权重来模拟训练集。有关更多说明,你可以阅读这篇文章。

Dropout

Dropout是另一种较新的正则化方法,训练期间神经网络中的每个节点(神经元)都将被丢弃(权重将被设置为零),这种方式下,网络不能依赖于特定的神经元或神经元的相互作用,必须学习网络不同部分的每个模式。这使得模型专注于推广到新数据的重要模式。

提早停止

提早停止是一种简单的正则化方法,只需监控验证集性能,如果你发现验证性能不断提高,请停止训练。这种方法在没有大数据的情况下非常重要,因为模型往往在5-10个时期之后甚至更早的时候开始过度拟合。

参数数量少

如果你没有大型数据集,则应该非常小心设置每层中的参数和神经元数量。此外,像卷积层这样的特殊图层比完全连接的图层具有更少的参数,因此在它们适合你的问题时使用它们非常有用。

数据增强

数据增强是一种通过以标签不变的方式更改训练数据来创建更多训练数据的方法。在计算机视觉中,许多图像变换用于增强数据集,如翻转、裁剪、缩放、旋转等。

这些转换对于图像数据很有用,但不适用于文本,例如翻转像“狗爱我”这样的句子不是一个有效的句子,使用它会使模型学习垃圾。以下是一些文本数据增强方法:

同义词替换

在这种方法中,我们用他们的同义词替换我们文本中的随机单词,例如,我们将句子“我非常喜欢这部电影”更改为“我非常爱这部电影”,它仍具有相同的含义,可能相同标签。这种方法对我来说不起作用,因为同义词具有非常相似的单词向量,因此模型将两个句子看作几乎相同的句子而不是扩充。

方向翻译

在这种方法中,我们采用我们的文本,将其翻译成具有机器翻译的中间语言,然后将其翻译成其他语言。该方法在Kaggle毒性评论挑战中成功使用。例如,如果我们将“我非常喜欢这部电影”翻译成俄语,我们会得到“Мнеоченьнравитсяэтотфильм”,当我们翻译成英文时,我们得到“I really like this movie”。反向翻译方法为我们提供了同义词替换,就像第一种方法一样,但它也可以添加或删除单词并解释句子,同时保留相同的含义。

文件裁剪

新闻文章很长,在查看数据时,有时不需要所有文章来分类文档。这让我想到将文章裁剪为几个子文档作为数据扩充,这样我将获得更多的数据。首先,我尝试从文档中抽取几个句子并创建10个新文档。这就创建了没有句子之间逻辑关系的文档,但我得到了一个糟糕的分类器。我的第二次尝试是将每篇文章分成5个连续句子。这种方法运行得非常好,给了我很好的性能提升。

生成对抗性网络

GAN是数据科学中最令人兴奋的最新进展之一,它们通常用作图像创建的生成模型。这篇博客文章解释了如何使用GAN进行图像数据的数据增强,但它也可能用于文本。

迁移学习

迁移学习是指使用来自网络的权重,这些网络是针对你的问题通过另一个问题(通常是大数据集)进行训练的。迁移学习有时被用作某些层的权重初始化,有时也被用作我们不再训练的特征提取器。在计算机视觉中,从预先训练的Imagenet模型开始是解决问题的一种非常常见的做法,但是NLP没有像Imagenet那样可以用于迁移学习的非常大的数据集。

预先训练的词向量

NLP深度学习架构通常以嵌入层开始,该嵌入层将一个热编码字转换为数字矢量表示。我们可以从头开始训练嵌入层,但我们也可以使用预训练的单词向量,如Word2Vec,FastText或Glove,这些词向量使用无监督学习方法训练大量数据或训练我们域中的数据。预训练的词向量非常有效,因为它们为基于大量数据的单词提供模型上下文,并减少模型的参数数量,从而显着降低过度拟合的可能性。你可以在此处阅读有关词嵌入的更多信息。

预先训练的句子向量

我们可以将模型的输入从单词更改为句子,这样我们可以使用较少的模型,其中参数数量较少,仍然具有足够的表达能力。为了做到这一点,我们可以使用预先训练好的句子编码器,如Facebook的InferSent或谷歌的通用句子编码器。我们还可以使用跳过思维向量或语言模型等方法训练未标记数据的句子编码器。你可以从我之前的博文中了解有关无监督句子向量的更多信息。

预先训练的语言模型

最近的论文如ULMFIT、Open-AI变换器和BERT通过在非常大的语料库中预训练语言模型,为许多NLP任务获得了惊人的结果。语言模型是使用前面的单词预测句子中的下一个单词的任务。对我来说,这种预训练并没有真正帮助获得更好的结果,但文章已经展示了一些方法来帮助我更好地微调,我还没有尝试过。这是一个关于预训练语言模型的好博客。

无人监督或自我监督学习的预训练

如果我们有一个来自未标记数据的大型数据集,我们可以使用无监督的方法,如自动编码器或掩码语言模型,仅使用文本本身预训我们的模型。对我来说更好的另一个选择是使用自我监督。自我监督模型是在没有人类注释的情况下自动提取标签的模型。一个很好的例子是Deepmoji项目,在Deepmoji中,作者训练了一个模型,用于从推文中预测表情符号,在表情符号预测中获得良好结果之后,他们使用他们的网络预先训练了一个获得最新结果的高音扬声器情绪分析模型。表情符号预测和情绪分析显然非常相关,因此它作为预训练任务表现得非常好。新闻数据的自我监督任务可以预测标题、报纸、评论数量、转推的数量等等。自我监督可以是一种非常好的预训方法,但通常很难分辨出哪个代理标签将与你的真实标签相关联。

特征工程

我知道深度学习“杀死”了特征工程,这样做有点过时了。但是,当你没有大数据集时,让网络通过特征工程学习复杂模式可以大大提高性能。例如,在我对新闻文章的分类中,作者、报纸、评论、标签和更多功能的数量可以帮助预测我们的标签。

多模式架构

我们可以使用多模式架构将文档级特征组合到我们的模型中。在multimodal中,我们构建了两个不同的网络,一个用于文本、一个用于特征,合并它们的输出层并添加更多层。这些模型很难训练,因为这些特征通常比文本具有更强的信号,因此网络主要学习特征效果。这是关于多模式网络的伟大的Keras教程。这种方法使我的性能表现提高了不到1%。

字级(word level)特征

另一种类型的特征工程是词级特征,如词性标注、语义角色标记、实体提取等。我们可以将一个热编码表示或词级特征的嵌入与词的嵌入相结合,并将其用作模型的输入。我们也可以在这个方法中使用其他单词特征,例如在情感分析任务中我们可以采用情感字典并为嵌入添加另一个维度,其中1表示我们在字典中的单词,0表示其他单词,这样模型可以很容易地学习它需要关注的一些词。在我的任务中,我添加了某些重要实体的维度,这给了我一个很好的性能提升。

预处理作为特征工程

最后一种特征工程方法是以一种模型更容易学习的方式预处理输入文本。一个例子是特殊的“阻止”,如果体育对我们的标签不重要,我们可以改变足球,棒球和网球这个词运动,这将有助于网络了解体育之间的差异并不重要,可以减少数量网络中的参数。另一个例子是使用自动摘要,正如我之前所说的,神经网络在长文本上表现不佳,因此我们可以在文本上运行自动汇总算法,如“文本排名”,并仅向网络提供重要句子。

我的模型

我使用预先训练过的词向量来完成我公司为同一数据为该客户所做的另一项任务。作为特征工程,我在词嵌入中添加了实体字级特征。基本模型的这些变化使我的精确度提高了近10%,这使得我的模型从随机性稍微好一点到具有重要业务影响的模型。

阿里云双十一1折拼团活动:满6人,就是最低折扣了!
【满6人】1核2G云服务器99.5元一年298.5元三年 2核4G云服务器545元一年 1227元三年
【满6人】1核1G MySQL数据库 119.5元一年
【满6人】3000条国内短信包 60元每6月
参团地址:http://click.aliyun.com/m/1000020293/

原文链接
本文为云栖社区原创内容,未经允许不得转载。

手把手教你数据不足时如何做深度学习NLP相关推荐

  1. 手把手教你在Windows10环境下安装深度学习框架(pytorch or tensorflow)

    手把手教你在Windows10环境下安装深度学习框架(pytorch or tensorflow) 1. 安装Anaconda:(常用的python版本和各类包管理器) 1.1. 下载地址: 1.2. ...

  2. 手把手教你从零到一搭建深度学习项目(附PDF下载)

    来源:机器之心 作者:Jonathan Hui 本文约14000字,建议阅读10+分钟. 本文将会从第一步开始,告诉你如何解决深度学习项目开发中会遇到的各类问题. 在学习了有关深度学习的理论之后,很多 ...

  3. 手把手教你搭建属于自己的GPU深度学习环境

    目录 1. Anaconda的简介.安装及配置 1.1 Anaconda简介 1.2 Anaconda安装 1.2.1 安装包的下载 1.2.2 软件安装 1.2.3 补充:Anaconda新建环境默 ...

  4. 手把手教你如何自己设计实现一个深度学习框架(附代码实现)

    作者丨王桂波@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/78713744 编辑丨极市平台 导读 本文首先从深度学习的流程开始分析,对神经网络中的关键组件抽象,确定 ...

  5. python模块cv2人脸识别_手把手教你使用OpenCV,Python和深度学习进行人脸识别

    使用OpenCV,Python和深度学习进行人脸识别 在本教程中,你将学习如何使用OpenCV,Python和深度学习进行面部识别.首先,我们将简要讨论基于深度学习的面部识别,包括"深度度量 ...

  6. win10 uwp 手把手教你使用 asp dotnet core 做 cs 程序

    本文是一个非常简单的博客,让大家知道如何使用 asp dot net core 做后台,使用 UWP 或 WPF 等做前台. 本文因为没有什么业务,也不想做管理系统,所以看到起来是很简单. Visua ...

  7. Google首席科学家谈Google是怎么做深度学习的

    Google首席科学家谈Google是怎么做深度学习的 dongfeiwww  2016-03-26 10:17 收藏64 评论1 2016年3月7日,谷歌首席科学家,MapReduce.BigTab ...

  8. 人人都能够做深度学习应用:入门篇

    一.人工智能和新科技革命 2017年围棋界发生了一件比較重要事,Master(Alphago)以60连胜横扫天下,击败各路世界冠军.人工智能以气势如虹的姿态出现在我们人类的面前.围棋以前一度被称为&q ...

  9. 优化你的CPU来做深度学习

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 导读 对于想学习深度学习的同学们来说,学习资源网上有很多,但是计算 ...

最新文章

  1. NYOJ--2--括号配对问题
  2. wukong引擎源码分析之索引——part 1 倒排列表本质是有序数组存储
  3. IDEA代码生成插件CodeMaker
  4. System Center 2012与vCenter Operations 产品功能对比
  5. python连接linux服务器读取txt文件_Python文件处理
  6. SAP CRM Cross Component级别的跳转如果出了问题,该如何调试
  7. 中职 计算机老师 教cad,教师博客应用于职校计算机CAD教学探究.doc
  8. SQL Server中的STUFF函数的使用
  9. Java 正则提取银行短信内容
  10. 001.Spring | 依赖注入原理分析
  11. 22. linux 日志分析
  12. maven依赖和传递
  13. np.roll()的理解和用法
  14. 【建站指南】网站搭建需要准备什么?
  15. 关于NX UG11.0在visual studio中不能创建模板的问题
  16. ftp文件传输(适用于两台通过网线直连的电脑)
  17. 普宁市中学高考成绩查询2021,2021年揭阳高中录取分数线是多少及高中排名榜
  18. 2019-12-21(98)
  19. 关于我,一个简单低调的程序员
  20. 特别策划 | 5G最新进展深度解析2020版-国内市场篇(56页附下载)

热门文章

  1. vue 渲染函数处理slot_vue render 渲染函数
  2. python函数定义和调用_函数定义和调用
  3. 原码一位乘法器设计_数字IC校招基础知识点复习(七)——超前进位加法器、Wallace树、Booth乘法器...
  4. php 自定义加密算法,php自定义加密函数、解密
  5. 单目相机 svd 从图像恢复3维位置_论文学习——VINSMono:一种鲁棒且通用的单目视觉惯性系统...
  6. dynamic 365 js 失去焦点_基于Auto.js的QQ好友动态秒赞系统
  7. 云片短信php接口_php与阿里云短信接口接入
  8. catia测量工具小尺子在哪_小区垃圾桶旁捡来旧茶几,老爸巧手改成沙发,邻居一个劲问哪买的...
  9. android 分享到豆瓣,Android项目总结之社会化分享
  10. android 环绕布局,Android自定义View实现圆形环绕效果