假设你是一家小餐馆的老板,你最拿手的红烧肉让老顾客百吃不厌——可你很快发现,新客人总觉得“就一个味儿”。不是食材不好,而是菜式太单一。机器学习模型面对文本时的“过拟合”正是如此:训练数据里全是“我很开心”这类固定说法,模型背得滚瓜烂熟,一旦看到“我心情超好”就懵了。怎么办?聪明的厨师会做一件事:同一锅肉,微调成微辣版、少糖版、加香菜版——食材没变,但每道新菜都让更多客人愿意动筷子。这就是数据增强的思路,而 EDA(Easy Data Augmentation,简单数据增强)就是 NLP 领域最经典的那本“微调菜谱”。 EDA 的核心只有四招:同义词替换(香菜换葱花)、随机插入(加片柠檬)、随机交换(摆盘换位)、随机删除(撤掉香菜)。它不依赖任何大模型,只需一个同义词词库,几秒钟就能把几千条样本变成几万条,让文本分类模型在小数据集上平均提升 0.8%~3% 的准确率。下面,我把这四道秘方连同“火候旋钮”α逐一道来。

岗位关联

EDA 是 NLP 工程师处理小样本文本分类的“低成本加速器”,学会它,你可以在没有 GPU、没有大模型的情况下快速提升模型泛化能力,是数据为中心 AI 实践的第一块敲门砖。

目录
  1. 可视化演示
  2. EDA概述:为什么同一锅肉要做成多道菜
  3. 同义词替换:香菜换葱花,香还是香
  4. 随机插入:加一片柠檬,提鲜不夺味
  5. 随机交换:食材换个摆盘位置
  6. 随机删除:撤掉香菜,留住更多客人
  7. 强度参数α:火候旋钮,大了会糊
  8. 效果评估与场景:食客评分说了算
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示EDA四种文本增强操作:同义词替换、随机插入、随机交换、随机删除,交互切换理解alpha强度控制与增强效果。

本节配有交互动效(进入视口后自动加载,约 3KB)。

同义词替换SR 选取非停用词用同义词替换 替换数n=alpha乘词数 n=α·L 语义保持度最高的EDA操作

EDA概述:为什么同一锅肉要做成多道菜

一位厨师发现,自家招牌红烧肉只有熟客爱吃,新客人总觉得“差点意思”。问题不在食材,而在菜式太单一。机器学习模型也会这样:训练数据中的句式、用词太固定,模型就“死记硬背”住了特定表达,换个说法便不认识了。数据增强就是给模型“加餐”——把同一批食材变化出不同菜式,让模型见多识广,学会真正的“理解”而非“背诵”。

EDA(Easy Data Augmentation,简单数据增强)是 2019 年 Wei 和 Zou 提出的 NLP 数据增强方法,核心思想是用最简单的文本变换扩充训练集。它包含四种操作:同义词替换(SR)、随机插入(RI)、随机交换(RS)、随机删除(RD)。整个方法不依赖预训练模型,只需一个同义词词库,在 CPU 上几秒钟就能完成数据扩充。

EDA 主要面向文本分类、情感分析、意图识别等监督任务,尤其在标注样本只有几千条的小数据集上效果显著。原论文实验表明,在约 5000 条训练样本规模下,配合 CNN、LSTM 等模型,准确率平均可提升 0.8%~3%。增强后的数据总量由下面这个公式决定:

老板把红烧肉做成微辣版、少糖版、加香菜版,一桌菜看似多样,其实都源于同一锅肉。EDA 就是这位聪明的厨师——用最低的成本,让模型尝到更丰富的“人间百味”。

Naug=Norig×(1+naug)\displaystyle N_{\text{aug}} = N_{\text{orig}} \times \left(1 + n_{\text{aug}}\right)
这个公式告诉你:增强后的数据集规模 = 原始样本数 ×(原始 1 份 + 每份生成的变体数)。
  1. 原始样本数$N_{\text{orig}}$ 表示手头已有的带标签训练样本总数,比如 2000 条影评。
    Norig=2000\displaystyle N_{\text{orig}} = 2000
  2. 变体数量$n_{\text{aug}}$ 表示每条原始样本生成的增强变体条数,论文常用 9。
    naug=9\displaystyle n_{\text{aug}} = 9
  3. 总倍数$(1 + n_{\text{aug}})$ 中的 1 指原始样本本身,$n_{\text{aug}}$ 指新增变体,合计扩大 10 倍。
    1+naug=10\displaystyle 1 + n_{\text{aug}} = 10
  4. 整体规模$N_{\text{aug}}$ 是喂给模型的最终训练样本量。
    Naug=2000×10=20000\displaystyle N_{\text{aug}} = 2000 \times 10 = 20000

同义词替换:香菜换葱花,香还是香

香菜和葱花长得不一样,但撒在菜上都能提香。同义词替换(Synonym Replacement, SR)就是这种“换调料”:句子意思基本不变,但表达方式焕然一新,老顾客觉得新鲜,又不至于认不出这道菜。

SR 的操作流程是:从句子中随机挑选 $n$ 个非停用词,在词库中找到它们的同义词并替换。停用词如“的”“了”"the""a"不参与替换,因为它们没有语义信息,换了反而添乱。替换所需的词库,英文常用 WordNet,中文可以用同义词词林或哈工大同义词库。

替换词数 $n$ 由句子长度和增强强度共同决定,公式如下:

香菜换葱花,香还是香,但让不吃香菜的食客也愿意尝一口——模型看到的是同一语义下更丰富的语言外壳,泛化能力在潜移默化中提升。

nreplace=⌊α×L⌋\displaystyle n_{\text{replace}} = \left\lfloor \alpha \times L \right\rfloor
意思是:一个长度为 L 的句子,大约替换 α×L 个词。α=0.1 时,10 个词里替换 1 个。
  1. 句子长度$L$ 表示当前句子的单词总数,比如“我爱这部电影”的 L=5。
    L=5\displaystyle L = 5
  2. 增强强度$\alpha$ 是全局火候旋钮,控制替换比例,默认 0.1。
    α=0.1\displaystyle \alpha = 0.1
  3. 理论词数$\alpha \times L$ 是应该替换的单词个数。
    α×L=0.1×5=0.5\displaystyle \alpha \times L = 0.1 \times 5 = 0.5
  4. 向下取整$\lfloor \cdot \rfloor$ 保证结果是整数;当结果小于 1 时,实际实现中至少替换 1 个词。
    ⌊0.5⌋=0⇒nreplace=1\displaystyle \left\lfloor 0.5 \right\rfloor = 0 \quad \Rightarrow \quad n_{\text{replace}} = 1

随机插入:加一片柠檬,提鲜不夺味

清蒸鱼上桌前,厨师会在盘边塞两片柠檬。鱼还是那条鱼,但多了一丝果香,口感层次更丰富。随机插入(Random Insertion, RI)干的就是这件事:在句子随机位置塞进一个同义词,让句子“多点料”。

RI 的操作流程是:先从句子中随机选一个词,在词库中找到它的一个同义词,然后把这个同义词插入到句子的任意位置,重复 $n$ 次。插入的位置完全随机,可能在句首、句中或句尾,因此插入后的句子偶尔会显得不太通顺——但论文实验发现,这种“别扭”反而是好事,它让模型学会了容忍真实世界中的噪声输入。

插入词数与同义词替换一样,由 $\alpha$ 和句长决定:

加柠檬的摆盘没有改变鱼的新鲜度,却让客人心中的这道菜多了一个记忆点。同理,随机插入为模型提供了更多样的句式变体,让它在推理时遇到“没见过的话”也能从容应对。

ninsert=⌊α×L⌋\displaystyle n_{\text{insert}} = \left\lfloor \alpha \times L \right\rfloor
插入的是“同义词”,不是任意词,所以新句子在语义上仍然可理解,只是表达被“加长”了。
  1. 句子长度$L$ 是被插入句子的词数,决定了插入密度的基数。
    L=6\displaystyle L = 6
  2. 插入密度$\alpha$ 控制插入量,默认 0.1 表示每 10 个词插入 1 个同义词。
    α=0.1\displaystyle \alpha = 0.1
  3. 插入数量$\alpha \times L$ 计算出应插入的同义词个数。
    α×L=0.6\displaystyle \alpha \times L = 0.6
  4. 取整处理向下取整后,实际插入次数为整数;极短句同样保底 1 次。
    ninsert=⌊0.6⌋=0⇒ninsert=1\displaystyle n_{\text{insert}} = \left\lfloor 0.6 \right\rfloor = 0 \quad \Rightarrow \quad n_{\text{insert}} = 1

随机交换:食材换个摆盘位置

摆盘时把菜心和肉块换个位置,味道几乎没差,但整道菜看起来焕然一新。随机交换(Random Swap, RS)就是这种“换位术”:随机挑两个词,交换它们在句子中的位置。

RS 是最温和的一种操作——它不引入新词,也不删除任何信息,只是打乱局部语序。对于词序相对灵活的语言(如中文),这种扰动对语义影响很小;对英语这类依赖词序的语言,虽然会造成轻微语法问题,但模型反而因此锻炼了对乱序输入的鲁棒性。

交换次数同样由 $\alpha$ 控制:

肉和菜换个摆盘位置,老顾客可能察觉不到,但“菜单上新”的观感让这道菜活了起来。模型的鲁棒性也在这种微妙的小扰动中逐步增强。

nswap=⌊α×L⌋\displaystyle n_{\text{swap}} = \left\lfloor \alpha \times L \right\rfloor
交换 n 次,每次独立随机选择两个不同的词进行位置互换。
  1. 句子长度$L$ 是用于计算交换次数的句长。
    L=8\displaystyle L = 8
  2. 交换强度$\alpha$ 默认 0.1,决定交换的频繁程度。
    α=0.1\displaystyle \alpha = 0.1
  3. 理论次数$\alpha \times L$ 得到期望交换次数。
    α×L=0.8\displaystyle \alpha \times L = 0.8
  4. 取整保底同样向下取整,短句保底交换 1 次。
    nswap=⌊0.8⌋=0⇒nswap=1\displaystyle n_{\text{swap}} = \left\lfloor 0.8 \right\rfloor = 0 \quad \Rightarrow \quad n_{\text{swap}} = 1

随机删除:撤掉香菜,留住更多客人

总有食客点菜时强调“不要香菜”。厨师果断撤掉香菜,菜依然是一道完整的菜,却让更多客人接受。随机删除(Random Deletion, RD)就是这种“减法”:让句子中每个词都以一定概率被删掉,逼着模型学会“抓重点”。

RD 的操作规则最简单:遍历句子中的每一个词,以概率 $p$ 决定是否删除它。删除后,模型无法依赖任何一个特定词汇来判断类别,从而降低对关键词的过度敏感,防止“看到'烂'就说是差评”这类偷懒学习。当然,删除幅度太大会丢失主干信息,所以概率要控制得比较小;如果整句被删空,这样的无效样本应当丢弃。

每个词的删除概率由 $\alpha$ 直接决定:

删掉香菜不是毁掉菜,而是贴近另一群食客的偏好。模型在“缺词”的情况下依然能认出这句话,说明它真正理解了语义而非死记关键词——这正是泛化能力的本质。

pdelete=α\displaystyle p_{\text{delete}} = \alpha
注意:前三种操作是“删/换/插多少个词”,而随机删除是“每个词以 α 的概率被删除”,这是一种概率式操作。
  1. 删除概率$p_{\text{delete}}$ 表示句中任意一个词被删掉的可能性。
    pdelete=α\displaystyle p_{\text{delete}} = \alpha
  2. 默认取值当 $\alpha = 0.1$ 时,每个词有 10% 的概率被删除。
    pdelete=0.1\displaystyle p_{\text{delete}} = 0.1
  3. 独立性每个词的删除判断相互独立,互不影响。
    P(词i 被删)=0.1,P(词j 被删)=0.1\displaystyle P(\text{词}_i \text{ 被删}) = 0.1, \quad P(\text{词}_j \text{ 被删}) = 0.1
  4. 期望删除数一个 10 词句子的期望删除词数约为 1 个。
    E[删词数]=L×α=1\displaystyle E[\text{删词数}] = L \times \alpha = 1

强度参数α:火候旋钮,大了会糊

做菜的火候很讲究:小火慢炖保留原味,大火爆炒香浓入味,火太大就糊锅了。α(alpha) 就是 EDA 这口锅的火候旋钮:它同时控制四种操作的剧烈程度——替换、插入、交换的词数都正比于 αL,删除概率直接等于 α。

论文在多数据集上验证后,给出的默认推荐位置是 α=0.1。这个值下,10 个词里大约只有 1 个词被改动,句子语义几乎不受影响,但多样性已经足够。实践经验还告诉我们:数据集越小,越需要“大火”扩充,可以用 0.1~0.3;数据集越大,越要“小火”微调,用 0.05~0.1 即可,避免噪声淹没真实语义。

α 的合理取值范围可以写成一个区间:

大火爆炒香但容易糊,小火慢炖稳但变化少。优秀的厨师知道什么时候开多大火——调参就是找到那个刚刚好的旋钮位置。除了 α,还有一个旋钮 $n_{\text{aug}}$(每条样本生成多少条变体),论文常用 9 或 16,两者配合使用效果最佳。

0.05≤α≤0.3,αdefault=0.1\displaystyle 0.05 \le \alpha \le 0.3, \qquad \alpha_{\text{default}} = 0.1
α 不是越大越好。它就像炒菜的盐,太少没味道,太多齁死人。
  1. 下限0.05 表示极轻微增强,几乎不改动原文,适合大规模干净数据集。
    αmin⁡=0.05\displaystyle \alpha_{\min} = 0.05
  2. 默认值0.1 是论文在多个基准上的推荐起点,绝大多数任务可直接使用。
    αdefault=0.1\displaystyle \alpha_{\text{default}} = 0.1
  3. 上限0.3 表示高强度变换,仅适用于极小数据集,超过 0.3 会明显破坏语义。
    αmax⁡=0.3\displaystyle \alpha_{\max} = 0.3
  4. 调节依据数据集越小,α 可适当调大;数据集越大,α 应调小。
    α∝1Norig\displaystyle \alpha \propto \frac{1}{\sqrt{N_{\text{orig}}}}

效果评估与场景:食客评分说了算

菜好不好吃,不能只靠厨师自夸,要看食客打分。EDA 有没有用,同样要用数据说话:在增强前后的训练集上分别训练同一个模型,比较它们在相同测试集上的准确率。提升量用下面的公式衡量:

论文在 SST-2(情感分析)、CR(产品评论)、SUBJ(主观性分类)、TREC(问题分类)等基准上验证了 EDA 的效果,结论很清晰:样本越少,提升越大;当训练数据达到数十万条时,EDA 的收益趋近于零。因此 EDA 最适合的战场是少样本文本分类、情感分析冷启动、客服意图识别等低资源场景。在拥有成熟大模型的数据管线里,EDA 仍可作为零成本基线方案,先跑通流程再考虑更复杂的增强策略。

一桌菜,有的客人给四星,有的给五星。EDA 不能把菜升级成满汉全席,但能让更多客人愿意动筷子——这就是数据增强最朴素的价值:用小成本撬动模型泛化能力的提升。

ΔAcc=AccEDA−Accbase\displaystyle \Delta \text{Acc} = \text{Acc}_{\text{EDA}} - \text{Acc}_{\text{base}}
ΔAcc 大于 0,说明 EDA 带来了实实在在的准确率提升。
  1. 基线准确率$\text{Acc}_{\text{base}}$ 是只用原始数据训练出的模型准确率。
    Accbase=0.812\displaystyle \text{Acc}_{\text{base}} = 0.812
  2. 增强后准确率$\text{Acc}_{\text{EDA}}$ 是使用 EDA 扩充数据后训练的模型准确率。
    AccEDA=0.835\displaystyle \text{Acc}_{\text{EDA}} = 0.835
  3. 提升量$\Delta \text{Acc}$ 是两者之差,正数代表增强有效。
    ΔAcc=0.835−0.812=0.023\displaystyle \Delta \text{Acc} = 0.835 - 0.812 = 0.023
  4. 判断标准差值越接近 0 说明收益越小;数据集规模越大,这个差值通常越小。
    ΔAcc>0⇒EDA 有效\displaystyle \Delta \text{Acc} > 0 \quad \Rightarrow \quad \text{EDA 有效}

AI 应用场景

电商评论情感分析

阶段:数据预处理与增强

解决的问题:新品牌上线只有两三千条人工标注的评论,直接训练情感分类模型极易过拟合,模型看到“质量很好”就高兴,看到“质量很棒”却不认识。EDA 对每条评论生成 9 条增强变体,数据量扩到 10 倍,模型见多识广后自然更稳健。

具体案例:某电商平台对 3000 条中文评论做 EDA(α=0.1,n_aug=9),结合 BERT 微调训练情感分类器,在独立测试集上准确率由 88.4% 提升到 90.7%。整个增强过程在普通 CPU 上耗时不足 1 分钟,未使用任何大模型生成能力。

智能客服意图识别

阶段:训练数据扩充

解决的问题:用户表达千奇百怪,“我要退货”“想把东西退掉”“这个我不想要了”指向同一意图,但标注成本极高。用 EDA 把种子句式扩充成风格各异的变体,让意图分类模型学会“透过现象看本质”。

具体案例:某电商客服机器人以 200 条种子意图样本起步,利用 EDA 的随机插入与同义词替换扩充至 2000 条,意图识别准确率从 72% 提升至 85%,显著减少人工兜底转接量。

新闻标题分类

阶段:小样本建模

解决的问题:新闻标题短小精悍,关键词重复率高,模型容易过拟合到特定词组。EDA 的随机交换和随机删除能制造“缺词”“乱序”的困难样本,提升模型在真实噪声标题上的表现。

具体案例:某新闻 App 对 5000 条标题做 EDA 增强后训练分类器,在财经常识类标题上的 F1 值提升 2.1%,且增强样本的生成完全离线完成,无额外推理成本。

Python 演示

python71 行
import random # 简易同义词词库SYNONYMS = {    "happy": ["glad", "joyful", "cheerful"],    "good": ["great", "fine", "excellent"],    "bad": ["poor", "awful", "terrible"],    "big": ["large", "huge", "great"],    "small": ["tiny", "little", "petite"],    "movie": ["film", "flick"],    "very": ["really", "extremely", "quite"],    "nice": ["pleasant", "lovely", "kind"],} def get_synonym(word):    """返回一个同义词,若词库没有则返回原词"""    if word in SYNONYMS:        return random.choice(SYNONYMS[word])    return word def synonym_replacement(words, alpha=0.1):    """同义词替换: 随机选 n=alpha*len 个词替换"""    n = max(1, int(alpha * len(words)))    idxs = random.sample(range(len(words)), min(n, len(words)))    new_words = words[:]    for i in idxs:        new_words[i] = get_synonym(new_words[i])    return new_words def random_insertion(words, alpha=0.1):    """随机插入: 随机选 n 个词,把它们的同义词插入随机位置"""    n = max(1, int(alpha * len(words)))    new_words = words[:]    for _ in range(n):        w = random.choice(new_words)        syn = get_synonym(w)        pos = random.randint(0, len(new_words))        new_words.insert(pos, syn)    return new_words def random_swap(words, alpha=0.1):    """随机交换: 随机交换两个词的位置,执行 n 次"""    n = max(1, int(alpha * len(words)))    new_words = words[:]    for _ in range(n):        i, j = random.sample(range(len(new_words)), 2)        new_words[i], new_words[j] = new_words[j], new_words[i]    return new_words def random_deletion(words, alpha=0.1):    """随机删除: 每个词以 alpha 概率被删除"""    return [w for w in words if random.random() > alpha] def eda_augment(sentence, alpha=0.1, n_aug=4):    """对一句话生成 n_aug 条增强样本,四种操作随机选一种"""    words = sentence.split()    augmented = []    ops = [synonym_replacement, random_insertion, random_swap, random_deletion]    for _ in range(n_aug):        op = random.choice(ops)        new_words = op(words, alpha)        if len(new_words) > 0 and new_words != words:            augmented.append(" ".join(new_words))    return augmented if __name__ == "__main__":    sentence = "The movie is very good and I am happy"    print("原始句子:", sentence)    augs = eda_augment(sentence, alpha=0.1, n_aug=4)    for i, aug in enumerate(augs, 1):        print("增强%d:" + str(i) + " " + aug)
目的:用不到 60 行代码完整实现 EDA 的四种操作,输入一句话即可输出多条增强变体。
  1. SYNONYMS = {...}定义一个迷你同义词词库,实际项目中可换成 WordNet 或中文词林。
  2. def synonym_replacement(words, alpha=0.1)同义词替换操作,核心是 n = max(1, int(alpha * len(words))),保证至少替换 1 个词。
  3. random.sample(range(len(words)), n)从句子中随机抽取 n 个不重复位置,避免同一词被替换多次。
  4. def random_insertion(words, alpha=0.1)随机插入操作,先随机选词,再把它的同义词插入随机位置。
  5. random.randint(0, len(new_words))插入位置选在 0 到句尾之间,实现“完全随机”。
  6. def random_swap(words, alpha=0.1)随机交换操作,random.sample(range(len(words)), 2) 一次取两个不同下标。
  7. def random_deletion(words, alpha=0.1)随机删除操作,用列表推导式 [w for w in words if random.random() > alpha] 实现概率删除。
  8. ops = [synonym_replacement, random_insertion, random_swap, random_deletion]四种操作组成一个“菜单”,每次随机点一道“菜”。
  9. if len(new_words) > 0 and new_words != words过滤空句子和没有变化的样本,保证增强质量。
  10. if __name__ == "__main__":可执行入口,直接运行即可看到增强效果。

常见误区

误区我刚开始用 EDA 时,觉得增强越猛模型见到的样本越多,于是把 α 调到 0.5,结果验证集准确率反而下降了。α 不是越大越好吗?

正解α 控制的是“改动幅度”而非“样本数量”。α=0.5 意味着句子中一半的词被替换/删除,语义可能面目全非,模型学到的反而是错误信号。就像炒菜盐放太多,食材再好也齁人。论文推荐的 α=0.1 是在多个数据集上验证过的均衡点,对于极小数据集可以尝试 0.2~0.3,但超过 0.3 大概率损伤效果。

为何常见:人们容易把“更多增强”等同于“更多数据”,忽略了增强过度会引入噪声。α 的本质是“在保持语义的前提下制造多样性”,不是“把原句改得面目全非”。

误区EDA 用的是 WordNet 英文同义词库,中文没有对应的词库,所以这个方法是英文专属,中文 NLP 用不了。

正解EDA 的方法完全与语言无关,关键在于同义词词库。中文可以用哈工大《同义词词林》、中文 WordNet 或通用近义词表;甚至可以用一个简单的同义词词典文件替代。删除和交换操作连词库都不需要,直接对中文分词结果操作即可。

为何常见:原论文的代码和实验全部基于英文,初学者容易把“实现细节”误当成“方法前提”。实际上方法的本质是“用语言知识做扰动”,换一种语言只需要换知识源。

误区EDA 生成的所有句子都是合法训练样本,我直接拼接进训练集就跑,结果模型在某些样本上反复震荡,损失不收敛。

正解EDA 是随机扰动,偶尔会产生语义漂移或重复样本:比如删除操作把“这部电影不好看”删成“不好看”,情感极性可能翻转;插入的同义词如果词性不当,句子会变得难以理解。正确做法是增强后做一轮抽样检查,过滤空句子、去重、必要时人工抽检 5% 的增强样本。论文也强调“增强样本只用于训练,验证集和测试集必须保持原始分布”。

为何常见:既然是“自动化增强”,初学者天然信任生成结果,忽略了随机方法的不可控性。这就像流水线菜品,出餐前也要质检。

误区既然 EDA 能把 2000 条变成 20000 条,我就不用费劲去标注新数据了,原地自产自销。

正解EDA 只是在原有数据分布附近“抖动”,它无法创造数据分布之外的新知识。比如训练集中没有“退款”相关样本,EDA 无论如何变换也变不出“退款”这个词。它解决的是“表达多样性不足”,解决不了“知识覆盖缺失”。真实数据仍是根本,EDA 是锦上添花而非无中生有。

为何常见:数据增强的字面意思容易让人误解为“生成数据”,它实际是“扰动已有数据”。真实世界的新场景、新词汇,必须靠真实标注来补充。

误区EDA 定义了四种操作,所以我每次增强都应该同时使用替换、插入、交换、删除,缺一不可。

正解四种操作完全可以独立使用或自由组合。实际项目中,删除操作对短文本风险大,交换对词序敏感的任务风险大,都可以单独剔除。更科学的做法是把四种操作拆开做消融实验,在验证集上观察每种操作的贡献,只保留有效的组合。论文实验也显示,RS 的提升幅度通常小于其他三种。

为何常见:"Four techniques"的表述让读者误以为是捆绑套餐。就像菜谱上有四道配菜,厨师完全可以根据客人口味只上其中一两道。

面试题

Q1. EDA 中的"SR"代表哪种操作?

单选题 · easy

  • A.同义词替换← 正确答案
  • B.随机插入
  • C.随机删除
  • D.随机交换

答案:A。SR 是 Synonym Replacement(同义词替换)的缩写,它从词库中找到近义词,替换掉句子中随机选中的词。随机插入是 RI,随机交换是 RS,随机删除是 RD。把“开心”换成“高兴”就是典型的 SR。

Q2. 句子“这部电影很棒”中,将“很棒”换成“优秀”,属于 EDA 的哪种操作?

单选题 · easy

  • A.随机插入
  • B.同义词替换← 正确答案
  • C.随机删除
  • D.随机交换

答案:B。这是标准的同义词替换:原词“很棒”被近义词“优秀”替代,句子长度不变,语义基本不变。随机插入会增加词数,随机删除会减少词数,随机交换则改变词序,都与本操作不符。

Q3. 句长 L=20,α=0.1 时,同义词替换的词数约为多少?

单选题 · mid

  • A.20 个
  • B.10 个
  • C.2 个← 正确答案
  • D.1 个

答案:C。替换词数 $n=\lfloor \alpha \times L \rfloor=\lfloor 0.1 \times 20 \rfloor=2$,即大约替换 2 个词。A 和 B 是把 α 当成 1 或 0.5 的错误计算,D 是短句保底值而非本题答案。这也说明 α=0.1 意味着每 10 个词只改 1 个。

Q4. 随机删除操作中,句中每个词被删除的概率是多少?

单选题 · mid

  • A.增强强度 α← 正确答案
  • B.原始句子长度
  • C.两者的乘积值
  • D.每条样本增强数

答案:A。随机删除让每个词独立地以概率 $p=\alpha$ 被删除,α 直接充当概率。它是四种操作中唯一不依赖词库、按概率逐词判断的操作。C(α×L)是替换/插入/交换的个数公式;D 是 n_aug 的概念。

Q5. EDA 论文在多个数据集实验中的默认 α 值是多少?

单选题 · mid

  • A.0.01 的权重
  • B.0.05 的低强度
  • C.0.10 的默认值← 正确答案
  • D.0.50 的高强度

答案:C。论文将 α 默认设为 0.1,即大约 10% 的词被改动。0.01 过小几乎无增强效果,0.05 是较大数据集的保守选择,0.5 会严重破坏语义。面试中记住“0.1 起步,小数据往 0.2~0.3 调,大数据往 0.05 降”即可。

Q6. 在 EDA 中,每条原始样本通常生成的增强变体数量 n_aug 是多少?

单选题 · mid

  • A.1 条变体
  • B.3 条变体
  • C.9 条变体← 正确答案
  • D.100 条变体

答案:C。论文实验常用 n_aug=9,即每句话生成 9 条增强样本,加上原句共 10 条参与训练;部分实验用 16。n_aug 与 α 是两个独立旋钮:α 控制“每句改多狠”,n_aug 控制“每句生成几条”。

Q7. 以下哪些属于 EDA 的四种基本操作?

多选题 · easy

  • A.同义词替换← 正确答案
  • B.随机插入← 正确答案
  • C.随机交换← 正确答案
  • D.随机删除← 正确答案

答案:ABCD。EDA 的完整操作集就是同义词替换(SR)、随机插入(RI)、随机交换(RS)和随机删除(RD),四者缺一不可。它们共同构成“四种操作,两两组合或单独使用皆可”的增强工具箱。

Q8. 关于 EDA 中的 α 参数,下列说法正确的是?

多选题 · hard

  • A.α 增大使改动更剧烈← 正确答案
  • B.默认推荐值为 0.1← 正确答案
  • C.α 越大效果必然越好
  • D.α 控制操作数量规模← 正确答案

答案:ABD。α 同时控制替换/插入/交换的词数(⌊αL⌋)和删除概率(α),增大 α 意味着更多词被改动,因此 A、D 正确;论文默认值 0.1,B 正确。但 α 过大会破坏语义导致模型学到噪声,C“必然越好”错误。如同火候,适中最佳。

Q9. 下列哪些场景适合用 EDA 提升模型效果?

多选题 · hard

  • A.三千条标注的情感分类← 正确答案
  • B.千万级无标签非目标域
  • C.低资源的意图识别任务← 正确答案
  • D.已有海量同分布数据

答案:AC。EDA 的最大价值在少样本监督场景:几千条情感分类(A)和低资源意图识别(C)是最典型的战场。B 是“无标签”数据,EDA 是监督增强方法,无法利用;D 已有海量同分布数据时,EDA 的增益趋近于零,反而可能引入噪声。

Q10. 句长 L=12,α=0.25,先执行了一次同义词替换,再执行一次随机插入,两次操作的改动次数总和为?

单选题 · extreme

  • A.两次操作一共 3 次
  • B.两次操作合计 6 次← 正确答案
  • C.两次操作合计 12 次
  • D.两次操作合计 24 次

答案:B。同义词替换 $n=\lfloor 0.25\times12 \rfloor=3$,随机插入同样 $n=\lfloor 0.25\times12 \rfloor=3$,两次操作改动次数合计 $3+3=6$。A 漏算了第二次操作;C 是把 αL 当作 L;D 是把 αL 翻倍。注意随机删除是按概率删除,而替换和插入都按 $\lfloor\alpha L\rfloor$ 计算。