之前调研过几天的nlp的关系提取任务,任务可以简单描述为给定一个一句话,包含两个或多个实体,希望输出两个或多个实体之间的关系。前些日子读到一篇利用强化学习解决相应问题的论文,很有意思,打算简单梳理一下其动机和方法。附上论文链接:Reinforcement Learning for Relation Classification from Noisy Data。
经典关系提取方法:
远程监督的方法做关系提取被证明十分有效,大致思路是使用现有的实体关系(可以是现有的知识图谱中的实体关系)对预料库进行自动标注,然后作为训练语料。比如,图谱中“北京”和“中国”存在的是"首都"关系,则对于出现“北京”和“中国”的句子就打上“首都”的标签,如:(北京,首都,中国),然后作为分类任务做监督学习。
这种方法期望利用现在成熟的文本分类方法解决关系提取,但也伴随这一个明显的问题,两个实体不止一个关系,并且包含两个实体的句子也不一定表达了两者有某种关系。而这些bad case同样也会被作为训练语料,从而影响最后的模型效果。
一种有效的解决方法(multi-instance)是将远程标注的数据分成多个bag,每个bag中包含多个instance,可以理解为句子。我们只有bag级别的标签label,而不知道bag级别中的标签。数据的训练同样也是bag级别的。如此缓解了错误标注的问题,基本算法流程:
- 初始化参数,划分bags为mini-batch
- 随即选择mini-batch,一个个将batch中的bag送入网络
- 每个bag中,取网络输出置信度最高的instance做最终使用的样本,多个bag选中的样本交叉熵做目标函数,更新参数。
- 重复2、3步直到收敛或达到最大epoch数。
multi-instance方法一定程度上缓解了错误标注的问题,但仍无法避免bag中数据全不标注错误的情况,由此,论文提出了强化学习思路来解决远程监督中错误标注的问题,并且解决训练样本粒度的问题,实现了句子级别的训练与预测。
RL 实体关系分类
系统分为两大部分:
- 实例选择器(instance selection): 给定一个远程标注的有噪音的数据集合:<句子,关系标签> ,选择哪一个句子真正表述了该关系标签,并作为最终的训练数据。
- 关系分类器(relation classification): 给定一个句子和其中的实体对,预测实体对的关系。
instance selection
agent 在当前状态下(当前待选择的句子,已经选择的句子,当前实体对)遵循当前策略做出action决定是否选择当前的句子做训练语料,并在所有选择结束后从关系分类器获得获得相应奖励。具体做法:将训练句子划分正N个bag,当一个bag里的句子被选择完毕,计算一次reward。从强化学习的关键部分来描述:
policy:
是否选择当前的句子。
state:
一个实数向量F(s_i), F为一个映射函数,可以为一个神经网络:
状态s_i为:
- 分类器(论文中使用cnn模型)的非线性层输出的当前句子的向量表示。
- 已经选择的句子的向量表示的平均。
- 句子两个实体的预训练向量(TransE方法在知识图谱中获得)
action:
一个逻辑回归函数,当前策略下是否选择当前句子的概率,参数为W和b。
image.png
reward:
image.png一个bag选择完毕,计算延迟奖励,被选择的句子的log概率取平均。
策略优化:
蒙特卡洛采样方式的策略梯度下降方法:
image.png
其中v_i为bag_i的期望回报。
relation classification
关系分类使用了比较经典的CNN文本分类模型,类别为所有的关系类型。
训练过程:
训练过程为简单的强化学习策略梯度下降方法:
image.png
小结:
论文的主要工作是利用RL来处理远程监督的噪声问题:
- 弱监督信号(关系分类器的预测置信度)和 trail-and-error search迎合了RL的特点和使用场景;
- 除了关系分类,类似方法也可以用在其他远程监督带来的噪声问题。
- 更新instance selector的reward信号是否可以尝试即时回报或者TD方式。
原创文章,转载注明出处。
更多关注公众号:
网友评论