Chen S, Aguilar G, Neves L, et al. Data Augmentation for Cross-Domain Named Entity Recognition[J]. EMNLP 2021.
Github:https://github.com/RiTUAL-UH/style_NER
文章目录
摘要
本文提出了一个新的神经网络框架,可以把 high-source 领域的数据表示迁移到 low-source 领域。
主要思想是:通过学习文本的模式进行迁移。
这篇文章既做了领域迁移,也有数据增强部分。在训练时候采用领域迁移的方法,使得模型能够用一个领域的数据生成另一领域的数据,用生成的数据补充 low-source,从而实现数据增强的目的。
介绍
不同领域内容形式有所不同,例如新闻领域的文本长而且规范,社交领域文本短、有很多拼写错误等。虽然文本形式有所不同,作者认为文本的语义还是可以迁移的。
本文提出一个跨领域encoder,可以抽取文本的模式,不同领域在特征空间上共享文本模式。
本文主要贡献:
- 提出一个新的神经网络框架可以抽取文本模式,有效的迁移 high-source 到 low-source 中
- 系统的评估了模型的有效性
- 在 low-source 中的实验经验上证明了对 low-source NER 任务的有效性
方法
- encoder:Bi-LSTM
- decoder:LSTM
- discriminator:a linear layer
数据预处理
将每个词的标签放在词前面,线性化操作可以让模型更好的学习到词和标签的关系。 w = [ w 1 , . . . , w n ] w=[w_1, ..., w_n] w=[w1,...,wn], l = [ l 1 , . . . , l n ] l=[l_1, ..., l_n] l=[l1,...,ln],线性化之后为 x = [ l 1 , w 1 , . . . , l n , w n ] x = [l_1, w_1, ..., l_n, w_n] x=[l1,w1,...,ln,wn]
增加输入扰动
对输入数据加入一些噪音,可以让模型更好的抽取出输入的特征。一句话添加的噪音如下:
- 打乱词顺序
- 丢弃一个词
- mask 一个词
去噪重构 Denoising Reconstruction
损失函数:
L
noise
(
x
^
,
x
)
=
−
∑
i
=
1
N
x
i
⋅
log
x
^
i
\mathcal{L}_{\text {noise }}(\hat{x}, x)=-\sum_{i=1}^{N} x_{i} \cdot \log \hat{x}_{i}
Lnoise (x^,x)=−i=1∑Nxi⋅logx^i
从源域和目标域取两个不同的句子作为输入,给这两个句子做预处理并加噪音。这两个输入使用不同的 embedding lookup table 但是共享模型的 encoder 和 decoder 参数。encoder 采用 Bi-LSTM模型,输出句子的隐向量表示。在 decode 阶段还原句子。
这一阶段流程其实就是,给输入加噪音,encode,decode 尽量还原加噪音前的句子。两个不同领域的输入共享参数,是为了让模型能同时学得两个领域的输入表示。
转换重构 Detransforming Reconstruction
损失函数:
L
trans
(
x
^
,
x
)
=
−
∑
i
=
1
N
x
i
⋅
log
x
^
i
\mathcal{L}_{\text {trans }}(\hat{x}, x)=-\sum_{i=1}^{N} x_{i} \cdot \log \hat{x}_{i}
Ltrans (x^,x)=−i=1∑Nxi⋅logx^i
这一阶段的任务是将一个领域的句子转换成另一领域的句子。同样输入两个不同领域的句子,encode 步骤和去噪重构一样,但是在 decode 的时候要转换成另一领域的句子。
领域分类 Domain Classification
作者还训练了一个判别器,用来区分 encoder 生成的隐向量是来自源域还是目标域。输入的两个句子映射的向量,不告诉判别器来自哪里,让判别器做预测,就是一个二分类任务。判别器首先在去噪重构中训练,然后在转换重构中微调。
损失函数:
L
a
d
v
(
z
^
i
,
z
i
)
=
−
∑
i
=
1
N
z
i
log
z
^
i
+
(
1
−
z
i
)
log
(
1
−
z
^
i
)
\mathcal{L}_{a d v}\left(\hat{z}_{i}, z_{i}\right)=-\sum_{i=1}^{N} z_{i} \log \hat{z}_{i}+\left(1-z_{i}\right) \log \left(1-\hat{z}_{i}\right)
Ladv(z^i,zi)=−i=1∑Nzilogz^i+(1−zi)log(1−z^i)
最终训练目标
将三个任务的loss通过超参数组合起来:
L
final
(
θ
)
=
λ
1
L
noise
+
λ
2
L
trans
+
λ
3
L
a
d
v
\mathcal{L}_{\text {final }}(\theta)=\lambda_{1} \mathcal{L}_{\text {noise }}+\lambda_{2} \mathcal{L}_{\text {trans }}+\lambda_{3} \mathcal{L}_{a d v}
Lfinal (θ)=λ1Lnoise +λ2Ltrans +λ3Ladv
训练过程
因为迁移的好坏取决于去噪重构和转换重构,所以作者分了两个阶段来训练,第一阶段:只训练去噪重构和转换重构任务,保留迭代中最好的模型,投入第二阶段;第二阶段:三个任务一起训练。
实验
在做上述任务的时候,模型的度量指标用的 perplexity(困惑度)。
perplexity(困惑度) 用来度量一个概率分布或者概率模型预测样本的好坏程度。它也可以用来比较两个概率分布或概率模型。
从 Ontonotes5.0 和 Temporal Twitter 中选取了六个领域的数据,以NW和SM分别作为源域,其他作为目标域,训练模型:
- Broadcast Conversation(BC)
- Broadcast News (BN)
- Magazine (MZ)
- Newswire (NW)
- Web Data (WB)
- Social Media (SM)
NER任务
用NER任务来测试生成数据的效果。模型选择:BERT+一层线性层。
用源域数据的效果作为下界,目标域的效果作为上界。因为我们是以目标域作为训练目标,所以生成的数据可能会介于上下界之间,但也有可能生成了一堆没用的数据。实验效果如图。
对比前人的方法,数据增强的效果最好
局限性
- 生成数据的最大长度设置成和输入的长度一样了。实际上短句子有可能生成另一领域的长句子,这样设置不是很合理。
- 原数据集是 unparalleled,生成的两个句子不能保证是 unparalleled。