资讯动态

AugLy 文本数据增强全指南:从函数式 API 到 Transform 类与组合算子

发布时间:2026/10/15 1:56:37 来源:尧图企业网站定制
机器学习AI 应用【免费下载链接】AugLyA data augmentations library for audio, image, text, and video.项目地址https://gitcode.com/gh_mirrors/au/AugLy点击查看免费下载本文以开源数据增强库 AugLy 的文本增强模块augly.text为主体系统讲解其安装方式、以nlpaug为后端的增强机制、函数式与类式两种调用范式、完整的增强算子清单插入、替换、编码、拼写错误模拟等、元数据与强度intensity机制以及 Compose/OneOf 组合编排与单元测试运行方法。读完本文你将能够直接上手调用 AugLy 文本增强来扩充 NLP 训练数据并理解每个算子的参数语义与底层实现。一、模块定位与安装AugLy 是一个同时覆盖 audio、image、text、video 四种模态的数据增强库。其中文本增强模块位于仓库的 augly/text 目录其核心文档为 augly/text/README.md。与图像、音频、视频增强不同文本增强不需要安装 FFmpeg 等外部系统依赖因此使用门槛最低仅需一个pip命令pip install augly[text]安装后即可通过import augly.text as txtaugs使用全部文本增强能力。文本增强的全部公开入口统一在 augly/text/init.py 中导出共包含 17 个函数式增强insert_punctuation_chars、change_case、simulate_typos等、17 个对应的 Transform 类InsertPunctuationChars、ChangeCase、SimulateTypos等以及Compose、OneOf两个组合算子和一系列*_intensity强度计算函数。需要特别说明的是AugLy 的文本增强以nlpaug作为底层骨架backbone仓库中 augly/text/requirements.txt 明确声明依赖nlpaug1.1.3。从源码结构看WordsAugmenter、TypoAugmenter、FunFontsAugmenter等增强器都直接继承自nlpaug的Augmenter/WordAugmenter基类见 augly/text/augmenters/words_augmenter.py而分词、去分词、正则规则则由 AugLy 自研的 augly/text/augmenters/utils.py 提供。所有文本增强函数遵循统一的接口约定输入可以是单个字符串或字符串列表输出总是列表形式函数内部会将字符串包装为列表。这一点可以在任意函数的实现中验证例如insert_punctuation_chars最终调用InsertionAugmenter.augment(texts)其中augment会先执行texts texts if isinstance(texts, list) else [texts]见 augly/text/augmenters/insertion.py。二、两种调用范式函数式与类式2.1 函数式Function-basedAPI函数式 API 是 AugLy 文本增强最直接的用法。原文档给出的示例如下import augly.text as txtaugs texts [hello world, bye planet] augmented_synonyms txtaugs.insert_punctuation_chars( texts, granularityall, cadence5.0, vary_charsTrue, )insert_punctuation_chars的作用是在文本中按一定节奏插入标点字符。其三个核心参数语义如下见 augly/text/functional.py 与 augly/text/augmenters/insertion.pygranularityall整段文本按固定节奏插入或word每个单词独立选择分隔符、节奏在每个单词内重新计算cadence每隔多少个字符插入一个标点必须不小于 1.0非整数值如2.7表示平均节奏——实际每 2~3 个字符插入一次vary_chars为False时整段文本使用同一个随机标点为True时每次插入都独立随机选择。标点字符池定义在 augly/text/augmenters/insertion.py 中. ? ! , ; : - ...。同一套InsertionAugmenter机制还被insert_whitespace_chars字符池为空格、制表符、换行、回车、垂直制表符、换页与insert_zero_width_chars字符池为零宽空格\u200b、零宽连接符\u200d等 8 个 Unicode 控制字符复用——这三种插入字符型增强的唯一区别就是char_type参数。2.2 类式Class-basedAPI函数式 API 之外所有增强都可以作为Transform 类使用并指定一个应用概率pimport augly.text as txtaugs texts [hello world, bye planet] transform InsertPunctuationChars(granularityall, p0.5) aug_texts transform(texts)所有 Transform 类继承自 augly/text/transforms.py 中定义的BaseTransform构造时校验0 p 1__call__(texts, forceFalse, metadataNone, **kwargs)中若forceFalse且random.random() self.p则直接返回原文本概率未命中否则调用apply_transform执行实际增强__call__额外支持在调用时传入 kwargs 覆盖构造时设置的参数get_aug_kwargs机制实现了同一 transform 以不同参数复用的场景。从源码结构看类式 API 的设计目标有三一是与torchvision风格的 Composition 算子配合使用二是支持携带固定属性、多次复用的场景三是支持概率化抽样。BaseTransform的 docstring 中即给出了与 augly/text/transforms.py 中示例一致的用法。三、增强算子全景17 个变换的功能与参数AugLy 文本增强的完整算子清单函数名与 Transform 类名一一对应定义于 augly/text/init.py各算子的完整参数与默认值可在 augly/text/functional.py 中逐一定位。下表按功能族归类功能族函数Transform 类核心参数与默认值字符插入insert_punctuation_charsgranularityall,cadence1.0,vary_charsFalse字符插入insert_whitespace_chars同上字符插入insert_zero_width_chars同上大小写change_casegranularityword,cadence1.0,caserandom,seed10词形变化contractionsaug_p0.3,mappingCONTRACTIONS_MAPPING,max_contraction_length2,seed10编码encode_textaug_min/aug_max/aug_p必填,granularity必填,encoder必填base64或leetspeak插入文本insert_textinsert_text必填,num_insertions1,insertion_locationrandom,seed10词合并merge_wordsaug_word_p0.3,min_char2,aug_word_min1,aug_word_max1000,n1词拆分split_wordsaug_word_p0.3,min_char4,aug_word_min1,aug_word_max1000,n1字符替换replace_similar_charsaug_char_p0.3,aug_word_p0.3,min_char2, 各aug_*_min/max默认 1/1000字符替换replace_similar_unicode_chars同上mapping_pathUNICODE_MAPPING_PATH字体替换replace_fun_fontsaug_p0.3,aug_min1,aug_max10000,granularityall,vary_fontsFalse,fonts_pathFUN_FONTS_PATH双向反转replace_bidirectionalgranularityall,split_wordFalse上下翻转replace_upside_downaug_p0.3,aug_min1,aug_max1000,granularityall,n1词替换replace_wordsaug_word_p0.3,aug_word_min1,aug_word_max1000,mappingNone,priority_wordsNone,ignore_wordsNone性别词互换swap_gendered_wordsaug_word_p0.3,aug_word_min1,aug_word_max1000,mappingGENDERED_WORDS_MAPPING错别字模拟simulate_typostypo_typeall,aug_char_p0.3,aug_word_p0.3,min_char2,aug_char_max1,max_typo_length1自定义函数apply_lambdaaug_function默认为恒等函数基线get_baseline无参数仅做 tokenize/detokenize3.1 插入型标点、空白与零宽字符这三类增强共享InsertionAugmenteraugly/text/augmenters/insertion.py。其insert_chars实现先把文本按 cadence 切分成若干段再用分隔符单个固定字符或随机序列重新拼接。文档中示例cadence5.0即每 5 个字符插入一个标点。值得注意的设计意图写在InsertionAugmenter的 docstring 中cadence与vary_chars的组合用于调整插入字符的频率与模式以规避自动化反混淆deobfuscation技术的检测。测试用例对此有直观验证见 augly/tests/text_tests/functional_unit_test.pygranularityall, cadence1.0时The quick brown fox...会变成T.h.e. .q.u.i.c.k. ...每个字符间都插入标点granularityall, cadence2.7时分隔符每 2~3 个字符出现一次平均 2.7granularityword, cadence1.0时每个单词独立使用不同分隔符且空白处不插入。零宽字符增强的测试还说明insert_zero_width_chars插入的字符在渲染时不可见如T\u200bh\u200be视觉上仍是The但文本的底层字符序列已被破坏——这是构造视觉相同、内容不同对抗样本的经典手段。3.2 大小写与词形变化change_case支持granularityall | word | char三种粒度case可选lower | upper | title | randomseed默认为 10 以保证可复现augly/text/functional.py。测试中change_case(text, cadence3.0, caseupper)的输出THE quick brown FOX couldnt jump OVER the green, GRASSY hill.展示了每隔 3 个词转大写的 cadence 语义。contractions依据映射表把词组替换为缩写如I would call him but I do not know where he has gone→I would call him but I dont know where hes gone见测试 augly/tests/text_tests/functional_unit_test.py。默认映射表为 augly/assets/text/contractions.json包含he is → hes、could have → couldve等常见缩写max_contraction_length2表示最多匹配 2 个词的词组若设为 3 则同时检查 2 词与 3 词子串。mapping参数既可直接传字典也可传 iopath URI 指向映射文件。3.3 编码型Base64 与 Leetspeakencode_text是唯一需要多个必填参数的增强其签名与断言augly/text/functional.py要求aug_min/aug_max最小/最大增强单元词或字符数aug_p每个单元被增强的概率granularityall | word | charencoderbase64 | leetspeak传入其他值会触发AssertionError。实现上采用策略模式Base64augly/text/augmenters/base64.py与LeetSpeakaugly/text/augmenters/leetspeak.py都继承自EncodeTextAugmentation策略基类由EncodeText上下文类augly/text/augmenters/encode_text_context.py统一驱动。Base64 对 UTF-8 编码后的字节做 base64 编码Leetspeak 则按映射表a→4/、e→3、s→5/$等见 augly/text/augmenters/leetspeak.py逐字符替换。测试给出了精确的预期输出augly/tests/text_tests/functional_unit_test.pytxtaugs.encode_text(Hello, world!, 1, 1, 1.0, all, base64) # - [SGVsbG8sIHdvcmxkIQ] txtaugs.encode_text(Hello, world!, 1, 1, 1.0, word, base64) # - [SGVsbG8, world!] txtaugs.encode_text(Hello, world!, 1, 1, 1.0, all, leetspeak) # - [h3110, w0r1d!]3.4 词级操作插入、合并、拆分与替换insert_text从insert_text列表中采样向每条文本插入num_insertions次insertion_location支持prepend | append | randomrandom 表示在文本的任意两个词之间插入。测试覆盖了三种位置见 augly/tests/text_tests/functional_unit_test.py。merge_words把选中的词与后一个词拼接如Thequick brown ...实现位于 augly/text/augmenters/words_augmenter.py 的delete方法注意句子最后一个词不会参与合并。split_words在随机位置把词一分为二实现于同文件的split方法augly/text/augmenters/words_augmenter.py。replace_words基于映射字典或 iopath URI替换词支持priority_words优先增强的目标词与ignore_words豁免词。replace_text把整条输入文本替换为指定文本replace_text可以是字符串所有输入替换为同一文本或{输入: 输出}映射字典。priority_words与ignore_words的选取逻辑实现在 augly/text/augmenters/utils.py 的get_aug_idxes中优先词在普通词之前被选中且两者都会过滤掉ignore_words中列出的词以及长度小于min_char的词。3.5 字符替换型相似字符与相似 Unicodereplace_similar_chars与replace_similar_unicode_chars都基于LetterReplacementAugmenteraugly/text/augmenters/letter_replacement.py差异仅在于默认映射文件replace_similar_chars的mapping_path默认为None内部回退使用 augly/assets/text/letter_unicode_mapping.json 中的 Unicode 相似字符表如字母a有α、∀、、Å等数十个候选replace_similar_unicode_chars显式使用UNICODE_MAPPING_PATH即同一份 augly/assets/text/letter_unicode_mapping.json。这两类增强通过同形异义字符homoglyph替换来模拟视觉混淆是防御模型对 Unicode 攻击鲁棒性不足问题的常用数据增强。3.6 风格型趣味字体、双向反转与上下翻转replace_fun_fonts从 augly/assets/text/fun_fonts.json 加载字体字典按granularityall | word | char将词/字符映射为花体、加粗、双线等 Unicode 风格字体vary_fontsTrue时每次替换随机换一种字体。实现见 augly/text/augmenters/fun_fonts.py。replace_bidirectional使用 Unicode 双向覆盖符\u202eRTL Override、\u202cPop Directional、\u202dLTR Override把文本反向书写但保持视觉渲染顺序不变。测试中的预期输出为\u202e.llih yssarg ,neerg eht revo pmuj tndluoc xof nworb kciuq ehT\u202c渲染出来仍是从左到右阅读的原文见 augly/tests/text_tests/functional_unit_test.py。实现见 augly/text/augmenters/bidirectional.py。replace_upside_down利用 augly/text/augmenters/utils.py 中定义的UPSIDE_DOWN_CHAR_MAPPINGa→ɐ、b→q、z→z等 180° 旋转字符翻转文本granularity支持all | word | char。实现见 augly/text/augmenters/upside_down.py。3.7 拼写错误模拟simulate_typossimulate_typos是参数最丰富、底层最复杂的增强之一其typo_type支持四种模式见 augly/text/augmenters/typo.pytypo_type行为charmix字符级操作的随机组合删除delete、插入insert、替换substitute、交换swap由nlpaug的RandomCharAug实现keyboard把字符替换为 QWERTY 键盘上的邻近键nlpaug的KeyboardAug开启include_upper_caseTruemisspelling依据错拼词典默认 augly/assets/text/misspelling.json替换整词由自研的MisspellingReplacement实现all上述模式的随机组合其substitute实现augly/text/augmenters/typo.py还会用align_capitalization保持原始词的大小写风格全大写/全小写/首字母大写并且支持max_typo_length默认 1控制错拼词典按多长的词组匹配设为 3 时同时匹配 2 词与 3 词子串。当typo_type为misspelling或all时misspelling_dict_path必须提供否则断言失败。3.8 其他apply_lambda 与 get_baselineapply_lambda(texts, aug_function, **kwargs)把用户自定义函数应用到文本列表上要求aug_function可调用且接收列表、返回列表见 augly/text/functional.py。get_baseline(texts)对文本做一次 tokenize detokenize 作为基线输出用于对照实验——因为 AugLy 的分词规则会规范化空格与标点基线文本可能与输入略有差异见 augly/text/functional.py。四、元数据与强度intensity机制AugLy 文本增强的每个函数都接受metadata参数。当传入一个列表时执行后会在该列表末尾追加一条执行记录见 augly/text/utils.py包含name函数名input_typelist或stringsrc_length/dst_length输入/输出的文本条数所有函数入参**kwargsintensity本次增强的强度评分0~100。intensity由 augly/text/intensity.py 中对应的*_intensity函数计算其规律可以总结为均为源码可见的实现事实整段变换型如granularityall的 base64、leetspeak、fun_fonts、upside_down、bidirectional直接返回100.0augly/text/intensity.py概率型contractions_intensity aug_p * 100replace_words_intensity aug_p * 100与概率成正比augly/text/intensity.py节奏型change_case、三类字符插入在granularityword时强度为(1 / cadence) * 100cadence 越大、插入越稀疏、强度越低augly/text/intensity.pyget_baseline_intensity恒为0.0replace_text_intensity在整段替换或命中映射时为100.0否则为0.0聚合公式replace_intensity_helper(aug_p, aug_max)aug_max 0时为0.0否则为aug_p * 100augly/text/intensity.py。强度机制为训练时按扰动程度分层采样提供了量化依据例如可以按intensity阈值过滤掉过强的增强样本。五、组合编排Compose 与 OneOfCompose与OneOf定义在 augly/text/composition.py与 torchvision 的 Composition 语义一致from augly.text import Compose, InsertPunctuationChars, ReplaceFunFonts, OneOf, ReplaceSimilarChars, SimulateTypos composed Compose([ InsertPunctuationChars(), ReplaceFunFonts(), OneOf([ ReplaceSimilarChars(), SimulateTypos(), ]), ]) aug_texts composed(texts)Compose按列表顺序依次应用每个 transform支持传入seed固定随机种子以保证可复现augly/text/composition.py。OneOf以整体概率p决定是否增强若命中则按各子 transform 的p值归一化后的权重transform_probs随机选取一个应用并以forceTrue强制执行augly/text/composition.py。Compose/OneOf的构造函数会校验列表内元素必须是BaseTransform实例因此它们与函数式 API 不能混用——组合编排只接受类式 Transform。六、单元测试与验证AugLy 在克隆仓库后可用unittest直接运行文本模块的测试python -m unittest discover -s augly/tests/text_tests/ -p *测试目录 augly/tests/text_tests 包含functional_unit_test.py覆盖全部函数式增强的输入输出断言共 589 行含 base64/leetspeak 精确编码结果、标点/空白/零宽字符在三种 cadence 下的精确输出、双向反转的 Unicode 序列、contractions 的缩写结果等transforms_unit_test.py覆盖类式 Transform 的概率行为与参数传递utils_test.py覆盖分词/去分词、元数据与强度计算等工具函数。测试中大量使用精确字符串断言例如insert_punctuation_chars在cadence2.7下输出The. qu.ick. b.row.n ...这从侧面保证了增强行为的确定性配合各函数默认的seed10同一输入在相同参数下可稳定复现便于回归测试与数据管线重放。七、典型应用场景小结综合原文档与源码AugLy 文本增强可以归纳为以下几类实战用途鲁棒性评测与对抗训练零宽字符、同形 Unicode、双向反转、上下翻转、趣味字体都属于视觉近似但字符序列不同的扰动可用于评测/训练模型对文本混淆与 Unicode 攻击的鲁棒性OCR / 视觉文本场景replace_fun_fonts、simulate_typos与图像侧的文本渲染增强可组合模拟真实世界中五花八门的字体与排版噪声NLP 数据扩充change_case、contractions、merge_words/split_words、insert_text、replace_words、swap_gendered_words可低成本扩充句子级训练语料公平性fairness研究swap_gendered_words的映射表 augly/assets/text/gendered_words_mapping.json 来自 Adina Williams 提供的词表源码注释引用了 Dinan et al., 2020 等研究见 augly/utils/constants.py可用于构建性别词互换的对照数据集。需要提醒的是本文所述参数、默认值与依赖nlpaug1.1.3均以当前仓库 augly/text 的实际实现为准若需将增强管线集成到深度学习训练脚本建议同时利用metadata中的intensity字段对增强强度做量化控制。赞分享机器学习AI 应用【免费下载链接】AugLyA data augmentations library for audio, image, text, and video.项目地址https://gitcode.com/gh_mirrors/au/AugLy点击查看免费下载相关推荐AugLy 文本数据增强实战指南nlpaug 骨干下的函数式 API、Transform 类与组合变换全解析AugLy 文本数据增强实战指南nlpaug 骨干下的函数式 API、Transform 类与组合变换全解析 导读 AugLy 是 Facebook AIM机器学习AI 应用AugLy 音频数据增强完全指南函数式 API、Transform 组合与底层实现剖析AugLy 音频数据增强完全指南函数式 API、Transform 组合与底层实现剖析 AugLy 是覆盖音频、图像、文本与视频四类模态的数据增强库本文聚焦机器学习AI 应用AugLy 图像增强实战指南函数式与类式变换、组合算子、Bounding Box 与元数据全解析AugLy 图像增强实战指南函数式与类式变换、组合算子、Bounding Box 与元数据全解析 AugLy 是 Facebook/Meta AI 开源的跨模机器学习AI 应用上一篇Windows系统优化利器Chris Titus Techs Windows Utility全面指南下一篇PaECTER在现有技术检索中的应用如何构建高效的专利搜索系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑