想象你是一位面馆老板,想把“红烧牛肉面”教给新来的学徒。学徒脑子不笨,但只见过一碗面的做法,你让他端出第二碗,他就只会原样照抄——火的候、料的量、面的软硬,一丁点变化都不敢有。可现实是:顾客不会只点同一碗面。你要训练的“学徒”就是 AI 模型,而“菜谱”就是标注好的文本数据。真正的好师傅会怎么做?他会让学徒反复练习同一道菜的各种变体:葱换成香菜、牛肉切块改成切片、甚至把做法翻译成日文再翻译回来,端上桌依然是一碗地道的红烧牛肉面——这就叫“文本增强”。 聪明的你已经发现了诀窍:菜的灵魂不变,但每一碗端出来都有细微差别。这正是文本增强的核心哲学——用有限的原数据(菜谱),通过同义词替换(换配料)、回译(跨国菜谱)、随机插入删除(颠勺抖锅)、上下文词嵌入替换(请退休老师傅把关)等手法,变出成百上千份“同魂异形”的新样本,让模型在标注数据不足时也能学会“这道菜的普遍规律”,而不是死记硬背单独一碗面的配方。

岗位关联

文本增强是 NLP 从业者的“数据外挂”:在标注预算有限、样本稀缺的工业场景里,它是提升模型泛化能力的头号杠杆,掌握它等于掌握了少花钱多办事的硬核技能。

目录
  1. 可视化演示
  2. 数据饥饿
  3. 同义词替换
  4. 回译增强
  5. EDA操作
  6. 上下文嵌入
  7. 标签守护
  8. 实践流程
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

展示回译、同义词替换、EDA操作和BERT上下文替换四种文本增强方法的数据流,以及增强后样本的标签保持与一致性校验流程。

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

文本增强方法对比 回译:中→英→中生成自然改写 同义词替换:词典驱动的轻量替换 EDA:插入/交换/删除四种轻量操作 α = n_aug / n_orig 增强比例α控制扰动强度平衡多样性。

数据饥饿

王师傅的后厨有句行话:“食材不够,手艺再好也白搭。”学徒要是只见过三碗面,你让他判断“这碗是不是红烧牛肉面”,他只能靠死记硬背那三碗的长相。稍微来一碗面条粗细不同的,他就慌了神。深度学习模型也一样——它是个需要海量“尝菜”经验才能建立直觉的学徒,标注数据太少,它就背答案,而不是学规律。

这就是 NLP 里著名的“数据饥饿”。文本分类、情感分析、命名实体识别这些任务,标注一条高质量样本往往要花几分钟甚至几十分钟,雇人标一万条就是一笔不小的开销。模型在饿肚子的状态下训练出来,训练集上看似不错,遇到真实世界的语句变体就露馅——泛化能力弱得可怜。

数据增强的底层逻辑,就是“一道菜变出一桌菜”。我们不引入外部新数据,而是在原始样本上施加可控的变换,让模型看到尽可能多的合理变体。这里的关键约束是:变换必须不影响样本的语义标签,就像无论怎么换配料,端上来的还得是红烧牛肉面。

面馆学徒只有尝过足够多的“变奏版红烧牛肉面”,才能在陌生顾客端来一碗面目全非却同样美味的牛肉面时,一眼认出它的真身。数据增强就是给模型这种“见过世面”的底气。

有效样本量=N×(1+α增强)\text{有效样本量} = N \times (1 + \alpha_{\text{增强}})
有效样本量等于原始样本数 N 乘以 1 加增强系数 α,α 为 1 就代表数据量翻倍。
  1. N(原始样本数)这是你手里已有的标注数据量,比如 1000 条情感评论。它决定增强的“底料”有多少。
    NN
  2. α增强系数(扩展倍数)表示平均每条原始样本生成几条增强变体。若 α=1,每条原句多出 1 个变体,总数据量变为 2N。
    α增强\alpha_{\text{增强}}
  3. 整体乘积(有效样本量)模型真正能吃到的“菜量”。注意这只是一个粗略估算,实际效果还取决于增强的质量。
    N×(1+α增强)N \times (1 + \alpha_{\text{增强}})

同义词替换

王师傅给学徒上的第一课是“换配料”:牛肉不够了,可以用牛腩代替;香菜没有了,撒把葱花也香。只要主料还是牛肉,这碗面就还是红烧牛肉面。同义词替换就是这种思路——把句子里的某个词,替换成它的同义词。

具体做法是准备一份同义词词典(比如 WordNet),对句子中的每个词以一定概率执行替换。比如“这部电影非常好看”可以变成“这部电影非常精彩”。模型看到同一个意思的多种表达,就不会把“好看”和“精彩”当成两个毫无关联的世界。

实际操作中有一个关键参数——替换比例 α。替换太多,句子会变得不自然甚至改变含义;替换太少,又起不到扩充效果。工程上一般控制在 10% 到 30% 之间,并且要避开多义词:比如“苹果”既能指水果也能指手机品牌,盲目替换成“梨子”就会闹笑话。

这就像给学徒设计“配料替换练习”:每次都让他用不同的食材组合做出同一道菜。换的是皮囊,不变的是身份——模型从此学会了透过字面,看穿语义的本质。

x′=replace(x,wi,syn(wi)),P(替换 wi)=αx' = \text{replace}(x, w_i, \text{syn}(w_i)), \quad P(\text{替换 } w_i) = \alpha
新句子 x' 是把原句 x 中第 i 个词 wi 换成同义词 syn(wi) 的结果,每个词被换到的概率是 α。
  1. x(原始句子)待增强的输入文本,如“这家餐厅的服务很周到”。
    xx
  2. wi 与 syn(wi)(原词与同义词)wi 是被选中的词,syn(wi) 是它在词典里的同义词候选集合,从中随机挑一个顶替上去。
    wi,syn(wi)w_i, \quad \text{syn}(w_i)
  3. P = α(替换概率)每个词是否被替换服从概率 α,α 越大动刀越多。工程经验 α 取 0.2 左右效果较好。
    P(替换 wi)=αP(\text{替换 } w_i) = \alpha

回译增强

王师傅还有一招看家本领:把红烧牛肉面的做法翻译成日文,再从日文翻译回中文。神奇的是,翻译回来的菜谱文字会略有变化,但核心步骤一步不丢——牛肉要炖、面条要煮、咸鲜口不能改。这就是回译(Back Translation)。

回译的流程分两步:先把原句翻译成一种“中间语言”(通常是英文),再把中间语言翻译回原语言。第二次翻译结果不会和原句一字不差,而是产生一个“语义等价但表达不同”的新句子。比如“我很喜欢这部电影”经过“中→英→中”可能变成“这部电影我很喜欢”或“我对这部电影十分喜爱”。

回译最大的优势是它不仅能换词,还能调整整个句子结构,生成的是流畅自然的新句子——因为它经过了一个完整语言的验证。缺点是需要机器翻译模型,且有概率引入语义漂移。选择哪种中间语言也有讲究:语系距离原语言越远,改写幅度越大,但出错风险也越高。

学徒从跨国菜谱里悟出一个道理:语言的外壳可以千变万化,烹饪的灵魂却能穿越国界。回译让模型看到“同一句话的一百种说法”,从而在推理时更加从容。

xaug=MTL2→L1(MTL1→L2(x))x_{\text{aug}} = \text{MT}_{L2 \to L1}\big(\text{MT}_{L1 \to L2}(x)\big)
增强句子 x_aug 是把原句 x 从语言 L1 翻译到中间语言 L2,再从 L2 翻译回 L1 的结果。
  1. L1 → L2(正向翻译)把原文翻译成中间语言。这一跳负责“打散”原有表达,让句子在另一种语言里重组。
    MTL1→L2(x)\text{MT}_{L1 \to L2}(x)
  2. L2 → L1(反向翻译)把中间语言翻译回原语言。这一步产生全新的表层结构,但语义大体保持。
    MTL2→L1(⋅)\text{MT}_{L2 \to L1}(\cdot)
  3. 整体复合(回译结果)两步翻译合成一次增强变换。中间语言的选择决定了改写的“大胆程度”。
    MTL2→L1(MTL1→L2(x))\text{MT}_{L2 \to L1}\big(\text{MT}_{L1 \to L2}(x)\big)

EDA操作

如果同义词替换是老厨师手把手教出来的精致功夫,EDA 就是厨房里的“颠勺十八手”——动作简单粗暴,却出奇好用。EDA(Easy Data Augmentation)由四招组成:同义词替换(前面讲过)、随机插入、随机删除、随机交换。后三招特别适合“数据饿得马上要开饭”的紧急场景。

随机插入:从句子里随机挑一个词,塞进任意位置。比如“我 喜欢 猫”变成“我 喜欢 猫 猫”。随机删除:按概率随机删掉一些词,让模型学会在残缺信息下依然做对判断。随机交换:随机调换两个词的位置,生成“我 猫 喜欢 这种顺序的变体”。

为什么这么“粗暴”的操作有效?因为文本分类这类任务本身对一定的噪声不敏感,比如“这部电影 真的 很 好看”删掉“真的”并不影响情感极性。EDA 的初衷恰恰是帮助模型在数据稀缺时快速增加多样本,论文里用四招组合往往就能拿到不小的提升。

EDA 就像学徒在厨房里反复颠勺、抖锅、颠勺、抖锅——动作重复却每次都有细微差别。它不讲究精巧,讲究的是用最简单的手势喂饱模型那张饥饿的嘴。

\text{EDA}(x) = \{x^{(j)} \mid j = 1, 2, \dots, n_{\text{aug}}\}, \quadx^{(j)} = \text{op}_1 \circ \text{op}_2 \circ \cdots \circ \text{op}_m (x)
EDA 对原句 x 随机抽若干操作(插入、删除、交换、替换)组合执行,生成 n_aug 个增强样本的集合。
  1. op(操作符)代表四大招中的任意招数:插入(insert)、删除(delete)、交换(swap)、替换(replace)。
    opk\text{op}_k
  2. 复合记号 ∘(操作叠加)表示按顺序一个接一个地做动作,如先删一个词,再交换两个词。
    op1∘op2∘⋯\text{op}_1 \circ \text{op}_2 \circ \cdots
  3. n_aug(生成数量)每条原句打算变出多少个副本。经验上每个操作单独跑一遍,取 4 个变体已经足够。
    naugn_{\text{aug}}

上下文嵌入

前面的招数都靠词典或随机,多少有点“瞎碰运气”。王师傅的压箱底绝活是:请一位退休的传奇老厨师坐在旁边,每当要换某个配料时,先让他看看整道菜的意境,再建议该换什么。这位老厨师就是预训练语言模型(如 BERT)。

在 NLP 里这叫“上下文词嵌入替换”:把句子中某个词遮住(mask),让模型根据左右两侧的语境预测这个词的候选。模型给出的候选不是随便填的——它知道“那个服务员上菜太慢了”里被遮住的词大概率是“慢”,而不是“热”。因此换出来的词天然贴合语境,比同义词词典更聪明。

这种增强方式被称为“软增强”:它不依赖固定的同义词表,而是用大规模语料学出来的语义知识来选替代词。相比普通同义词替换,它生成的新句子语义更连贯、风格更多样,甚至能处理词典里没有的领域词汇。代价是需要加载大模型,计算开销明显更高。

老厨师只负责建议,不负责拍板。最终的替换品到底合不合适,还得靠下一节的“试菜”关卡把关。但有了这位大师在旁点拨,换出来的配料总归差不到哪儿去。

w^i=arg⁡max⁡w∈VP(w∣x∖i)\hat{w}_i = \arg\max_{w \in \mathcal{V}} P(w \mid x_{\setminus i})
被遮住位置的新词 w 帽,是在其余词语 x\i 给定的条件下,从词表 V 中挑选条件概率最大的那个。
  1. x\i(被遮住的句子)把第 i 个词挖掉,留下一个空位,其余词原封不动地送入模型。
    x∖ix_{\setminus i}
  2. P(w | x\i)(条件概率)语言模型根据上下文对词表里每个候选 w 打分,这个词出现在空位上有多自然。
    P(w∣x∖i)P(w \mid x_{\setminus i})
  3. argmax(取最优)从打分中挑出最高分对应的词。实际应用中常退一步做采样而非取最大值,以增加多样性。
    arg⁡max⁡w∈V\arg\max_{w \in \mathcal{V}}

标签守护

王师傅最常挂在嘴边的一句话是:“你怎么变都行,它必须还是一碗红烧牛肉面。”如果变出一碗番茄牛肉汤,学徒就算练一万遍也白练——因为他学的是错误的对应关系。这就是文本增强的底线:标签守护。

标签守护包含两层含义。第一层是标签不变性:增强前后的样本必须属于同一类别。“这个餐厅太难吃了”被回译成“这家餐厅味道极差”,情感标签仍然是负向,这就是合格的增强。第二层是语义一致性:不仅类别标签一样,整体含义也不能离谱。插入操作要避免加入带有强烈新语义的词。

工程上如何守护标签?一个实用的办法是计算原句与增强句在语义向量空间的相似度,低于阈值就丢弃;更严谨的做法是用一个已训练好的模型计算两个句子的预测分布,然后用 KL 散度衡量分布是否发生了显著偏移。

后厨质检员守在出锅口,每一份“变体菜”上桌前都要经过他的舌头。尝着不对味儿的,直接倒进泔水桶。标签守护就是增强流程里那位铁面无私的质检员。

DKL(P(y∣x)  ∥  P(y∣x′))<εD_{KL}\big(P(y \mid x) \;\|\; P(y \mid x')\big) < \varepsilon
原句 x 和增强句 x' 的类别分布 P 之间的 KL 散度必须小于阈值 ε,否则说明语义漂移过大,应丢弃该样本。
  1. P(y | x) 与 P(y | x')(预测分布)用同一个强模型分别对原句和增强句打分,得到各自属于各类别的概率分布。
    P(y∣x),P(y∣x′)P(y \mid x), \quad P(y \mid x')
  2. KL 散度(分布差异度量)衡量两个概率分布相差多远。值越大说明增强句的分类信号与原文偏差越大。
    DKL(⋅  ∥  ⋅)D_{KL}(\cdot \;\|\; \cdot)
  3. ε(容忍阈值)允许的最大漂移量。阈值设得越小,过滤越严,保留的样本越保守、越安全。
    ε\varepsilon

实践流程

掌握了各种增强技法,接下来就是王师傅的“上菜流程”了:先看清今天来的是什么客人(任务类型),再决定用哪套手法。不同 NLP 任务的“痛点”不一样——文本分类对词序不敏感,EDA 的删除交换操作很好用;命名实体识别要求词序和实体边界精确,就要谨慎使用插入删除,优先考虑回译或同义词替换。

第二步是定增强倍数。初始建议每条样本生成 2 到 4 个变体,先小规模试跑,观察模型在验证集上的表现;如果欠拟合明显,再逐步加大倍数。要注意增强比例不是越大越好——超过一定界限后,重复、噪声样本反而会拖累模型。

第三步是训后验证。把增强后的数据丢进模型训练,对比“纯原始数据”基线的效果。这里有两个观察维度:一看总体准确率有没有提升;二看模型在困难样本上的表现有没有改善。如果提升微弱,就要回头检查是不是增强质量出了问题,而不是盲目堆量。

王师傅的整套流程,说到底就是“选法、定倍、验证、调参”的循环。增强不是一次性把十八般武艺全使出来,而是像做菜一样,边尝边加盐——少了一味补一味,咸淡适中才出锅。

N_{\text{final}} = N_{\text{orig}} + N_{\text{aug}}, \quadr = \frac{N_{\text{aug}}}{N_{\text{orig}}}
最终训练数据量等于原始数据加上增强数据,r 表示增强倍数。工程上常用 r = 2~4 起步,根据验证集反馈调整。
  1. N_orig(原始数据量)你手头标注样本总数,是增强的底仓。
    NorigN_{\text{orig}}
  2. N_aug(增强数据量)所有增强样本的总数,等于各方法产出的数量之和。
    NaugN_{\text{aug}}
  3. r(增强比例)增强数据与原始数据的倍数关系。r=3 表示数据总量是原始的 4 倍,注意同时要控制单条样本的变体数量上限。

AI 应用场景

电商评论情感分析

阶段:数据准备与扩充

解决的问题:电商平台积累的带标注评论很少,新品类上线时往往只有几百条人工标注,训练出的情感分类模型面对真实评论的丰富表达(网络用语、省略句式)时准确率骤降。用回译 + 同义词替换把几百条种子评论扩成几千条,让模型见过更多表达方式,冷启动准确率显著提升。

具体案例:某美妆电商要判断用户对“口红质地”的评价是正向还是负向。基于 500 条标注数据,用回译(中→英→中)把每条评论扩展成 3 条,再叠加 EDA 的随机删除操作,最终用 2000 条数据训练,测试集 F1 从 0.71 提升到 0.83。

客服机器人意图识别

阶段:数据增强与模型迭代

解决的问题:客服机器人需要识别“查余额”“办退款”“投诉”等意图,但真实用户问法千奇百怪,人工积累的意图样本远远不够。上下文词嵌入替换能生成大量“同义不同形”的用户问题,让意图分类器对各种口语说法都游刃有余。

具体案例:某银行客服系统原始意图样本每条意图平均仅 80 条。用 BERT 掩码预测替换关键动词和宾语,把样本扩到每条意图 400 条,意图识别准确率从 82% 提升到 91%,还顺带增强了对“我要把信用卡注销了”这种长尾说法的鲁棒性。

法律文书命名实体识别

阶段:领域数据扩充

解决的问题:法律领域的命名实体识别(人名、机构名、案由)标注成本极高,专业标注员每小时只能标注几百字。直接用 EDA 的随机删除会破坏实体边界,因此采用回译 + 针对实体词外的普通词语做同义词替换,保住实体标签不变。

具体案例:某法律科技公司只有 3000 份标注裁判文书。用“回译生成+限制性同义词替换”组合增强后,用于训练 NER 模型,在真实文书评测集上 F1 从 0.68 提升到 0.76,且人名、机构名的识别错误率分别下降 31% 和 24%。

Python 演示

python66 行
import random class TextAugmenter:    """简易文本增强器, 实现同义词替换与EDA操作"""     def __init__(self, synonym_dict):        self.syn_dict = synonym_dict        self.rng = random.Random(42)  # 固定种子, 结果可复现     def synonym_replace(self, tokens, alpha=0.2):        new_tokens = tokens[:]        n = max(1, int(len(tokens) * alpha))        idx = self.rng.sample(range(len(tokens)), n)        for i in idx:            word = tokens[i]            if word in self.syn_dict:                new_tokens[i] = self.rng.choice(self.syn_dict[word])        return new_tokens     def random_insert(self, tokens, alpha=0.1):        new_tokens = tokens[:]        n = max(1, int(len(tokens) * alpha))        for _ in range(n):            w = self.rng.choice(tokens)            pos = self.rng.randint(0, len(new_tokens))            new_tokens.insert(pos, w)        return new_tokens     def random_delete(self, tokens, alpha=0.1):        new_tokens = tokens[:]        n = max(1, int(len(tokens) * alpha))        idx = self.rng.sample(range(len(tokens)), n)        new_tokens = [w for j, w in enumerate(new_tokens) if j not in idx]        return new_tokens     def random_swap(self, tokens, alpha=0.1):        new_tokens = tokens[:]        n = max(1, int(len(tokens) * alpha))        for _ in range(n):            i, j = self.rng.sample(range(len(new_tokens)), 2)            new_tokens[i], new_tokens[j] = new_tokens[j], new_tokens[i]        return new_tokens     def eda(self, sentence, ops=('replace', 'insert', 'delete', 'swap')):        tokens = sentence.split()        variants = []        if 'replace' in ops:            variants.append(self.synonym_replace(tokens))        if 'insert' in ops:            variants.append(self.random_insert(tokens))        if 'delete' in ops:            variants.append(self.random_delete(tokens))        if 'swap' in ops:            variants.append(self.random_swap(tokens))        return [' '.join(v) for v in variants]  if __name__ == '__main__':    syn = {'愉快': ['开心', '快乐'], '美好': ['美妙', '完美'],           '旅行': ['出游', '出行'], '感受': ['体会', '体验']}    aug = TextAugmenter(syn)    sentence = '这次 旅行 非常 愉快 我 感受 到 生活 的 美好'    print('原始句子:', sentence)    variants = aug.eda(sentence)    for i, v in enumerate(variants, 1):        print(f'增强变体{i}: {v}')
目的:演示 EDA 四种增强操作(同义词替换、随机插入、随机删除、随机交换)在一条中文句子上的完整执行流程,可作为你写正式增强管线的起点。
  1. self.rng = random.Random(42)固定随机种子,保证每次跑出来的增强结果一模一样,便于复现实验。
  2. n = max(1, int(len(tokens) * alpha))算出该动几个词,至少动 1 个,alpha 就是正文里讲的替换比例。
  3. idx = self.rng.sample(range(len(tokens)), n)随机挑出 n 个不重复的词语位置,保证一次替换不会重复动同一个词。
  4. if word in self.syn_dict只有词典里查得到同义词的词才替换,查不到的保持原样,避免乱换。
  5. new_tokens.insert(pos, w)随机插入操作的核心:把一个已有词塞进任意位置,模拟“颠勺加料”。
  6. new_tokens = [w for j, w in enumerate(new_tokens) if j not in idx]随机删除操作:把选中的位置过滤掉,其他词原顺序保留。
  7. i, j = self.rng.sample(range(len(new_tokens)), 2)随机挑两个位置做交换,生成词序打乱的新句子。

常见误区

误区数据不够用,那我就使劲增强——每条句子生成 50 个变体,数据量翻了 50 倍,模型肯定更强。

正解食客吃同一种口味的面吃 50 碗也会腻。增强样本本质是原句的“近亲”,大量重复的弱变体不仅信息量低,还会让模型反复看到相似的表面模式,甚至把噪声当成规律。经验做法是控制 r 在 2~4 倍,先小步验证再放量。

为何常见:人们直觉认为“数据多 = 效果必然好”,忽略了数据质量与多样性的重要性,把增强当成免费午餐。

误区回译有机器翻译把关,所以它生成的句子语义一定正确,标签一定不会变。

正解机器翻译不是神,遇到专有名词、数值、否定结构时同样会翻车。“这家店一点都不差”回译成“这家店很好”就会把负向变成正向。回译后必须过一遍语义检查,尤其在处理复杂句式时不能盲信。

为何常见:回译看起来经过了“两种语言校验”,给人一种官方保证的错觉,实则翻译模型本身就有错误率。

误区EDA 论文说四个操作有效,那我无论做什么任务,四招一起上准没错。

正解任务类型决定操作选择。NER 中随机删除和交换会破坏实体边界;情感分析里删除否定词(“不”“没有”)可能导致极性反转。正确做法是根据任务挑操作:分类任务多用替换和插入,结构敏感任务要谨慎用删除和交换。

为何常见:把论文结论当作万能药,忽略了不同任务对文本结构的敏感度差异。

误区增强都是程序自动生成的,代码跑完直接丢进训练集就行,反正模型自己能学。

正解程序生成的样本里一定混有“垃圾变体”——语义漂移、标签错误、语法崩坏。这些垃圾样本的破坏性比它们带来的信息量更大,会直接拉低模型表现。工程上至少要跑一遍相似度过滤,再做人工抽检。

为何常见:自动化流程让工程师产生“机器不会出错”的错觉,省掉了质检环节,结果被坏样本反噬。

面试题

Q1. EDA 增强方法包含哪一组核心操作?

单选题 · easy

  • A.同义词替换与回译
  • B.替换插入删除交换← 正确答案
  • C.词向量加权求平均
  • D.生成对抗网络写文本

答案:B。EDA(Easy Data Augmentation)由同义词替换、随机插入、随机删除、随机交换四招组成,对应选项 B。回译不属于 EDA,词向量平均和对抗生成属于其他增强流派。

Q2. 回译增强的第一步应该做什么?

单选题 · easy

  • A.把中文翻译成英文← 正确答案
  • B.把英文翻译成中文
  • C.直接删除所有低频词
  • D.用词向量计算余弦相似度

答案:A。回译的标准流程是先把原句翻译成中间语言(如中→英),再把中间语言翻译回原语言(英→中)。第一步永远是“原语言 → 中间语言”的正向翻译,方向反了就变成把增强句翻到英文,不是回译。

Q3. 下列哪些属于词级别的文本增强操作?

多选题 · mid

  • A.同义词替换操作← 正确答案
  • B.随机插入和删除← 正确答案
  • C.整句机器翻译回译
  • D.随机交换词语位置← 正确答案

答案:ABD。词级增强只作用于句子中的个别词语,同义词替换、随机插入、随机删除、随机交换都属于词级操作。回译是对整个句子做改写,属于句级增强,所以 C 不选。

Q4. 上下文词嵌入增强通常使用哪类预训练模型?

单选题 · easy

  • A.静态词向量 Word2Vec
  • B.掩码语言模型 BERT← 正确答案
  • C.词频统计模型 TF-IDF
  • D.主题模型 LDA

答案:B。上下文词嵌入替换的核心是掩码语言模型——把目标词遮成 [MASK],让模型依据两侧语境预测候选词。BERT 正是这类模型。Word2Vec 和 TF-IDF 无法感知上下文,LDA 是主题模型,都做不了语境化预测。

Q5. 增强后检查样本质量时,应该关注哪些方面?

多选题 · mid

  • A.标签是否保持不变← 正确答案
  • B.语义是否与原句一致← 正确答案
  • C.句子长度是否完全相同
  • D.生成的是否自然流畅← 正确答案

答案:ABD。增强样本的三大质检维度是标签不变、语义一致、表达自然,分别对应选项 A、B、D。句子长度发生变化是正常现象——插入和回译都会改变长度,长度不变并非质量指标,所以 C 错误。

Q6. EDA 中的参数 alpha 表示什么含义?

单选题 · mid

  • A.模型训练的轮数
  • B.被操作的单词比例← 正确答案
  • C.梯度下降的学习率
  • D.每次送入的批大小

答案:B。alpha 是 EDA 的核心超参数,代表句子中会被执行操作(替换、插入、删除)的单词比例。alpha 太大句子会被改得面目全非,太小又起不到增强作用,工程上经验值在 0.1~0.3 之间。

Q7. 相比同义词替换,回译增强最大的优势是什么?

单选题 · hard

  • A.运行速度更快开销更低
  • B.能改写整个句子的结构← 正确答案
  • C.不需要任何外部语言模型
  • D.保证每个词都被替换掉

答案:B。回译经过“原语言→中间语言→原语言”的完整翻译,不仅换词,还会重排句子结构、改变表达方式,因此生成的变体多样性远超逐词替换。它需要机器翻译模型,速度慢、开销大,也不会保证每个词都被替换。

Q8. 关于文本增强,下列说法正确的有哪些?

多选题 · hard

  • A.增强可以缓解标注数据不足← 正确答案
  • B.增强一定会提升模型准确率
  • C.需要避免破坏原始标签语义← 正确答案
  • D.增强样本越多模型效果越好

答案:AC。增强的核心价值就是扩充样本降低过拟合(A 对)。但它不是银弹,操作不当反而会引入噪声拉低准确率(B 错)。标签守护是增强的底线(C 对)。增强样本并非越多越好,超过合理倍数后重复冗余样本会拖累模型(D 错)。

Q9. 用 KL 散度检验增强样本时,阈值设置过大意味着什么?

单选题 · extreme

  • A.允许更多语义漂移通过← 正确答案
  • B.过滤掉全部质量差的样本
  • C.训练速度会显著提升
  • D.模型参数数量自动减少

答案:A。KL 散度衡量原句与增强句预测分布的差异,阈值 ε 是允许漂移的上限。ε 调大相当于放宽质检标准,更多语义偏差大的样本会被放行。过滤掉坏样本的是调小阈值而不是调大,训练速度和模型参数量与阈值无关。

Q10. 哪种 NLP 任务在使用 EDA 时需要格外谨慎?

单选题 · mid

  • A.文本分类情感判断
  • B.命名实体识别抽取← 正确答案
  • C.垃圾邮件粗筛分类
  • D.主题聚类标签判断

答案:B。命名实体识别对词序和实体边界极其敏感,随机删除或交换很可能把“北京市 朝阳区”这类实体结构打散,导致标注错位。文本分类、垃圾邮件过滤、主题聚类对局部词序容忍度较高,EDA 的破坏性小得多。