在上一篇文章我们学习了基本的数据增强的 N 种方法,今天我们针对“序列标注”任务具体聊一聊如何数据增强?“序列标注”是一个 token-level 的分类任务,当进行全局结构化预测时候,一些增强方式产生的数据噪音可能会让“序列标注”模型变得敏感脆弱,导致评估指标下降。本文主要讲解一篇论文对“序列标注”任务的数据增强方法:
- DAGA: Data Augmentation with a Generation Approach forLow-resource Tagging Tasks
DAGA
本文提出了一种新的用于序列标注任务的数据增强技术。不同于以往提出的同义词替换或者针对翻译任务的反向翻译等数据增强方法,论文提出的方法通过线性化的方式把文本数据和序列标注变成语言模型的输入数据,从而通过语言模型,生成更多的训练数据,以此达到数据增强的目的。 此方法可以显著提高NER, POS, ABSA等下游序列标注任务在低资源场景下的准确率。
线性化
DAGA的核心思想就是标签线性化: 即将原始的「序列标注标签」与「句子token」进行混合,也就是变成「Tag-Word」的形式,如下图所示:将「B-PER」放置在「Jose」之前,将「E-PER」放置在「Valentin」之前;对于标签「O」则不与句子混合。标签线性化后就可以生成一个句子了,基于这个句子就可以进行语言模型生成训练。
Language Modeling and Data Generation
模型训练
利用无标签数据、知识库和有标签数据,学到更好的句子分布。
- 对于标注语料,用「labeled」在句首作为条件标记;
- 对于无标注语料,用「unlabeled」在句首作为条件标记;
- 对于知识库,对无标注语料进行词典匹配后(正向最大匹配),用「KB」在句首作为条件标记;
- 只要输入「BOS」+「labeled」/「unlabeled」/「KB」,即可通过上述语言模型、自回归生成新的增强数据
数据生成
Example: "I have booked a flight to"
- RNNLM 模型预测一下个字符是「S-LOC」概率远大于其他字符。
- RNNLM 模型继续预测“ I have booked a flight to S-LOC”的下一个字符,下一个字符可能是“London、Paris,Tokyo”等。
问题一:标签放在实体前还是放在实体后?
将「B-PER」放置在「Jose」之前,还是放置到「Jose」之后,作者尝试了两个方案,标签放在实体之前效果较好。
问题二: 为什么DAGA方法有效?
生成数据的多样性,多阳性的评估标准是一个实体上下文的丰富度。