足够好的组合数据扩增( 二 )


足够好的组合数据扩增文章插图
如果片段在给定样本中多次出现 , 则替换所有实例 。 (见图 3)
语言笔记 尽管上述操作是由生成语法和分布语义的见解所驱动的 , 但应该强调的是 , 作为一般语言原则的表述 , 这显然是错误的 。反例比比皆是:在英语中 , 重音衍生名词(例如从 recórd 得来的 récord)将被视为许多名词和动词可互换的证据 。 在普通话中 , kěshì 和 dànshì 都表示“but” , 但是在特定的结构中仅 kěshì 可以表示“非常” 。
重要的是此类错误的相对频率:如果错误对不准确模型的贡献小于原始训练数据不足导致的不准确 , GECA 仍然有帮助 。 在条件问题中 , 例如上面的机器翻译示例 , 此类错误可能是完全无害的:如果我们在真实训练数据的支持范围之外合成新的(x , y)对 , 除了提供有用的一般归纳偏差外 , 它们可能不会影响模型对真实支持的预测 。
实现 装箱操作的简单实现花费 O(t3f3)的时间(其中 t 是数据集中不同模板的数量 , f 是不同片段的数量) 。通过构建合适的数据结构(算法 1) , 可以优化为 O(ft2e)(其中 e 是映射到同一环境的模板数量) 。
空间需求可能仍然很大(与 n-gram 语言模型所使用的空间需求相比较) , 语言建模文献中的策略可被用来减少内存使用(Heafield , 2011) 。对于碎片和环境函数的选择 , 该算法是不可知的 。 下文将对每个实验的特定任务选择作详细介绍 。
足够好的组合数据扩增文章插图
3、诊断实验
足够好的组合数据扩增文章插图
我们首先对合成数据进行了一组实验 , 旨在精确测试 GECA 是否提供了设计时所要求的泛化能力 。 这里我们使用 SCAN 数据集 , 该数据集由简单的英语命令和离散动作序列配对组成(图 2) 。我们特别关注add primitive(jump)和add template(around right)条件 , 这些条件测试代理是否可以在训练时独立地暴露于单一命令或修饰符(例如jump⊿JUMP) , 并在测试时将它们合并到更复杂的命令中 , 如前面的示例所示 。
足够好的组合数据扩增文章插图
图 2:SCAN 数据示例
我们提取带有一个间隙且最大长度为 4 个令牌的片段 。 该环境被视为完整的模板 。 生成的样本将被附加到原始数据集中 。 作为这种扩增过程效果的一个例子 , 原始的jump分割包含 12620 个训练样本 , GECA 使用 395 个不同的模板和 6 个不同的片段生成额外 395 个训练样本 。
利用原始数据集和扩增数据集 , 我们训练了一个 embedding size 为 64 , hidden size 为 512 , 包含双向编码器和注意力解码器的单层 LSTM 编码器-解码器模型 。 我们使用 ADAM 训练模型 , step size 为 0.001 , dropout rate 为 0.5 。
足够好的组合数据扩增文章插图
表 1:SCAN 数据集的序列匹配精度
结果如表 1 所示 , 与 Lake 和 Baroni 的原始实验一致 , 基线序列到序列模型完全无法推广到测试集 。应用 GECA 可使学习的模型成功地在指令到动作和动作到指令两个方向上对单个单词条目和多单词条目成功进行大多数测试 。
足够好的组合数据扩增文章插图
图 3:为 SCAN 任务合成的样本
分析:样本 图 3 显示了一些合成样本 。 add primitive条件下的成功源于以下约束:原语的单个样本用法仍必须是有效的(command , action)对 , 并且所有动词都是独立的有效命令 。 只有 run⊿RUN , walk⊿WALK , look⊿LOOK 三个样本证实了 GECA 用于合成使用 jump 的新用法;如果将其删除 , 则 sequence-to-sequence 模型的训练精度将保持不变 , 但 GECA 将无法合成任何涉及 jump 的新样本 , 并且测试精度将降至零 。 对于add template条件 , GECA 正确地将所有出现的 LTURN 替换为 RTURN 来生成around right模板的新样本;该样本突出了 GECA 发现不连续且非上下文无关的替换功能的有用性 。


推荐阅读