数据增强

news2024/12/22 20:28:09

在训练数据拆分上评估数据增强,以增加高质量训练样本的数量。

Intuition

通常希望通过数据扩充来增加训练数据的规模和多样性。它涉及使用现有样本生成合成但真实的示例。

  1. 拆分数据集。想首先拆分数据集,因为如果允许将生成的样本放置在不同的数据拆分中,许多增强技术会导致某种形式的数据泄漏。

    例如,一些增强涉及为句子中的某些关键标记生成同义词。如果允许来自相同来源句子的生成句子进入不同的拆分,可能会在不同的拆分中泄漏具有几乎相同的嵌入表示的样本。

  2. 增加训练拆分。只想在训练集上应用数据增强,因为验证和测试拆分应该用于提供对实际数据点的准确估计。

  3. 检查和验证。如果扩充数据样本不是模型在生产中可能遇到的输入,那么仅仅为了增加训练样本大小而扩充是没有用的。

数据扩充的确切方法在很大程度上取决于数据类型和应用程序。以下是可以增强不同数据模式的几种方法:

数据扩充类型
数据扩充类型

使用 Snorkel 进行数据扩充

  • 一般:归一化、平滑、随机噪声、合成过采样( SMOTE)等。
  • 自然语言处理(NLP):替换(同义词、tfidf、嵌入、屏蔽模型)、随机噪声、拼写错误等。
  • 计算机视觉(CV):裁剪、翻转、旋转、填充、饱和、增加亮度等。

warning

虽然某些数据模式(例如图像)的转换很容易检查和验证,但其他模式可能会引入无提示错误。例如,改变文本中标记的顺序可以显着改变含义(“这真的很酷”→“这真的很酷吗”)。因此,重要的是要衡量增强策略将引入的噪声,并对发生的转换进行精细控制。

library

根据特征类型和任务,有许多数据增强库允许扩展训练数据。

自然语言处理 (NLP)

  • NLPAug:NLP 的数据增强。
  • TextAttack:用于 NLP 中的对抗性攻击、数据增强和模型训练的框架。
  • TextAugment:文本增强库。

计算机视觉(简历)

  • Imgaug:用于机器学习实验的图像增强。
  • Albumentations:快速图像增强库。
  • Augmentor:用于机器学习的 Python 图像增强库。
  • Kornia.augmentation:在 GPU 中执行数据增强的模块。
  • SOLT:用于深度学习的数据增强库,支持图像、分割掩码、标签和关键点。

其他

  • Snorkel:在弱监督下生成训练数据的系统。
  • DeltaPy⁠⁠:表格数据扩充和特征工程。
  • Audiomentations:一个用于音频数据增强的 Python 库。
  • Tsaug:一个用于时间序列增强的 Python 包。

应用

让使用nlpaug库来扩充数据集并评估生成样本的质量。

pip install nlpaug==1.1.0 transformers==3.0.2 -q
pip install snorkel==0.9.8 -q

import nlpaug.augmenter.word as naw
# Load tokenizers and transformers
substitution = naw.ContextualWordEmbsAug(model_path="distilbert-base-uncased", action="substitute")
insertion = naw.ContextualWordEmbsAug(model_path="distilbert-base-uncased", action="insert")
text = "Conditional image generation using Variational Autoencoders and GANs."

# Substitutions
substitution.augment(text)

替换对来说似乎不是一个好主意,因为某些关键字为标签提供了强烈的信号,所以不想改变它们。另外请注意,这些增强不是确定性的,每次运行它们时都会有所不同。让尝试插入...

# Insertions
insertion.augment(text)

使用多个变分自动编码器和甘斯的自动条件逆图像生成算法。

好一点但仍然很脆弱,现在它可能会插入可能影响误报标签出现的关键词。也许不是替换或插入新标记,而是让尝试简单地用它们的别名交换机器学习相关的关键字。将使用 Snorkel 的转换函数来轻松实现这一点。


# Replace dashes from tags & aliases
def replace_dash(x):
    return x.replace("-"" ")

# Aliases
aliases_by_tag = {
    "computer-vision": ["cv""vision"],
    "mlops": ["production"],
    "natural-language-processing": ["nlp""nlproc"]
}

# Flatten dict
flattened_aliases = {}
for tag, aliases in aliases_by_tag.items():
    tag = replace_dash(x=tag)
    if len(aliases):
        flattened_aliases[tag] = aliases
    for alias in aliases:
        _aliases = aliases + [tag]
        _aliases.remove(alias)
        flattened_aliases[alias] = _aliases

print (flattened_aliases["natural language processing"])
print (flattened_aliases["nlp"])

['nlp', 'nlproc'] ['nlproc', 'natural language processing']

现在将按原样使用标签和别名,但可以使用inflectaliases_by_tag包来解释多个标签,或者在替换别名之前应用词干提取等。

# We want to match with the whole word only
print ("gan" in "This is a gan.")
print ("gan" in "This is gandalf.")

# \b matches spaces
def find_word(word, text):
    word = word.replace("+""\+")
    pattern = re.compile(fr"\b({word})\b", flags=re.IGNORECASE)
    return pattern.search(text)

# Correct behavior (single instance)
print (find_word("gan""This is a gan."))
print (find_word("gan""This is gandalf."))

<re.Match object; span=(10, 13), match='gan'> None

现在让使用 snorkeltransformation_function系统地将此转换应用于数据。

from snorkel.augmentation import transformation_function

@transformation_function()
def swap_aliases(x):
    """Swap ML keywords with their aliases."""
    # Find all matches
    matches = []
    for i, tag in enumerate(flattened_aliases):
        match = find_word(tag, x.text)
        if match:
            matches.append(match)
    # Swap a random match with a random alias
    if len(matches):
        match = random.choice(matches)
        tag = x.text[match.start():match.end()]
        x.text = f"{x.text[:match.start()]}{random.choice(flattened_aliases[tag])}{x.text[match.end():]}"
    return x

# Swap
for i in range(3):
    sample_df = pd.DataFrame([{"text""a survey of reinforcement learning for nlp tasks."}])
    sample_df.text = sample_df.text.apply(preprocess, lower=True, stem=False)
    print (swap_aliases(sample_df.iloc[0]).text)

# Undesired behavior (needs contextual insight)
for i in range(3):
    sample_df = pd.DataFrame([{"text""Autogenerate your CV to apply for jobs using NLP."}])
    sample_df.text = sample_df.text.apply(preprocess, lower=True, stem=False)
    print (swap_aliases(sample_df.iloc[0]).text)

autogenerate vision apply jobs using nlp autogenerate cv apply jobs using natural language processing autogenerate cv apply jobs using nlproc

使用 nlp 自动生成视觉应用作业 使用自然语言处理自动生成简历申请职位 使用 nlproc 自动生成简历申请工作

现在将定义一个增强策略来应用转换函数与某些规则(生成多少样本,是否保留原始数据点等)

from snorkel.augmentation import ApplyOnePolicy, PandasTFApplier

# Transformation function (TF) policy
policy = ApplyOnePolicy(n_per_original=5, keep_original=True)
tf_applier = PandasTFApplier([swap_aliases], policy)
train_df_augmented = tf_applier.apply(train_df)
train_df_augmented.drop_duplicates(subset=["text"], inplace=True)
train_df_augmented.head()

len(train_df), len(train_df_augmented)

(668, 913)

现在,将跳过数据扩充,因为它变化无常,而且根据经验,它不会显着提高性能。但是,一旦可以控制要扩充的词汇类型以及扩充的确切内容,就会看到这会非常有效。

warning

无论使用什么方法,重要的是要验证不仅仅是为了扩充而扩充。可以通过执行任何现有的数据验证测试甚至创建特定的测试来应用于增强数据来做到这一点。

本文主体源自以下链接:

@article{madewithml,
    author       = {Goku Mohandas},
    title        = { Made With ML },
    howpublished = {\url{https://madewithml.com/}},
    year         = {2022}
}

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/32454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML+CSS+JS环境保护网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计

&#x1f380; 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

FEDformer 代码分析(2)

首先总结一下FEDformer里面这些这些东西&#xff0c; mean的尺寸是&#xff1a;&#xff08;1,96,7&#xff09; seasonal_init的尺寸是&#xff1a;&#xff08;1,144,7&#xff09; trend_init的尺寸是&#xff1a;&#xff08;1,144,7&#xff09; zeros的尺寸是&#x…

[附源码]java毕业设计疫苗接种管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

四、图片特效

目录一、灰度处理二、颜色反转三、马赛克四、毛玻璃五、图片融合六、边缘检测与浮雕效果1 - 边缘检测2 - 浮雕效果七、颜色映射八、油画效果一、灰度处理 使用openCV的imread方法实现 import cv2img0 cv2.imread(image0.jpg, 0) img1 cv2.imread(image0.jpg, 1) print(img0…

嵌入式学习笔记(1)基本知识、C语言常用关键字、OLED

STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器 STM32常应用在嵌入式领域&#xff0c;如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 STM32功能强大、性能优异、片上资源丰富、功耗低&#xff0c;是一款经典的嵌入式微控制器 STM32F103C8T6 系…

windows + anaconda 安装PySpark3.0.1

1、背景 Spark作为分布式内存计算框架&#xff0c;可以广泛应用在数据处理、分析等应用场景。因此&#xff0c;希望借助Spark高性能的处理项目中的数据&#xff0c;搭建此开发环境&#xff0c;深入了解Spark的处理能力与实现机制。 2、开发环境 在windows10上使用Anaconda作为…

微信小程序使用github协作

微信小程序github协作所需相关设置 1.点击开发工具右上角的版本管理初识化本地仓库&#xff1a; 2.去github新建一个仓库&#xff0c;复制仓库的ssh的url添加到仓库设置中的远程连接中&#xff1a; 3.在仓库设置中的通用里设置好自己的用户名和邮箱 4.生成ssh key 由于我们使…

web前端网页制作课作业——用DIV+CSS技术设计的家乡旅游主题网站

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…

Metabase学习教程:视图-3

掌握条形图可视化 创建条形图并使用可视化设置对其进行自定义。 我们看看创建条形图和编辑条形图的设置&#xff0c;然后谈谈堆积条形图。 创建条形图 您可以使用元数据库的示例数据库。选择新的>问题>原始数据>示例数据库。选择示例数据库的Orders表作为您的数据…

腾讯T4级架构师用21个项目带你吃透379页深度学习TensorFlow实践pdf

前言 有人调侃我们说&#xff1a; 程序员不如送外卖。送外卖是搬运食物&#xff0c;自己是搬运代码&#xff0c;都不产出新的东西……透支体力&#xff0c;又消耗健康&#xff0c;可替代性极强&#xff0c;30岁之后就要面临被优化的危险……想跳槽&#xff0c;但是更高的平台…

使用XShell、XFTP连接虚拟机或者服务器教程

文章目录前期准备安装建立连接XFTP部分前期准备 官方网站下载 需要购买&#xff0c;但是我记得我好像是通过邮件发送过来的&#xff0c;应该是那个30天试用版&#xff0c;要是不会操作的话可以评论私我发你网盘。 安装 打开安装包(xshell / xftp &#xff0c;两个软件的安装步…

SpringBoot SpringBoot 开发实用篇 6 监控 6.2 SpringBoot Admin

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇6 监控6.2 SpringBoot Admin6.2.1 可视化监控平台6.2.2 SpringBoot A…

论文阅读-Joint Audio-Visual Deepfake Detection(音视频Deepfake检测)

一、论文信息 论文名称&#xff1a;Joint Audio-Visual Deepfake Detection 会议&#xff1a;ICCV2021 作者团队&#xff1a; 二、动机与创新 动机 Visual deepfake上有许多检测方法和数据集&#xff0c;而对audio deepfake以及visual-audio两种模式之间的deepfake方法较少…

mybatis配置文件

名字&#xff1a; mybatis-config.xml 作用&#xff1a; 配置自己的数据库地址、名字、密码以及mysql驱动 ... <!--配置--> <configuration><!--属性--><properties></properties> <!--全局参数设置--><settings></settings> …

力扣 73. 矩阵置零 C语言实现

题目描述&#xff1a; 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 题目链接 解题思路&#xff1a; 由于题目中提示了哈希表&#xff0c;所以本人想到的方法是建立一个哈希表分别用key和value…

用HTML+CSS仿网易云音乐网站(6个页面)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

绘制路径

QPainterPath&#xff08;绘制器&#xff09; QPainterPath类提供一个容器&#xff0c;可以用来创建图形并且重复使用。绘制器路径是由许多图形构建基块&#xff08;如矩形、椭圆形、直线和曲线&#xff09;组成的对象。构建基块可以连接在封闭的子路径中&#xff0c;例如作为矩…

ALU——调用加法乘法模块

只调用加法模块的仿真图&#xff1a; &#xff08;注&#xff1a;alu_control 为十六进制 001高位加载 src2的低16位加载到高16位上 002算数右移 src1算数右移 &#xff08;高位补1&#xff09; 004逻辑右移 src1逻辑右移 &#xff08;逻辑右移直接补0&#xff09; 008逻辑左移…

MagicPods(在Windows电脑上可以实现airpods2弹窗,查看单个耳机电量、充电仓电量)

1.MagicPods的安装方式 Windows电脑下打开Microsoft Store,进入后搜索Magicpods。然后就可以点击下载。&#xff08;软件的费用是12元&#xff0c;可以先免费试用&#xff09; 有可能会出现&#xff1a;下载任何微软商店应用程序都显示错误代码: 0x80240438 解决方法&#xf…

基于HTML+CSS+JS制作商城(web前端网页制作课作业)---手机主题 7页

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材&#xff0c;DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 在线商城购物 | 水果商城 | 商城系统建设 | 多平台移动商城 | H5微商城购物商城项目 | HTML期末大学生网页设计作业 HTML&#xff1a;结构 CSS&#…