Perturbed Masking: Parameter-free Probing for Analyzing and Interpreting BERT

这是一篇比较新的论文,2020/6/10 ACL。

它讲述的是如何用无监督方法做英文句法分析。

句法分析的工作是:
给定一个序列 X = [ x 1 , x 2 , . . . , x n ] X=[x_1,x_2,...,x_n] X=[x1,x2,...,xn]
找到一个分割点k,使得 [ x 1 , . . . x k − 1 ] [x_1,...x_{k-1}] [x1,...xk1] [ x k , . . . , x n ] [x_k,...,x_n] [xk,...,xn]的相关度最小,而两者内部token的相关度最大。根据分割点k,就可以把原始句子分为
[ x 1 , . . . x k − 1 ] , [ x k ] , [ x k + 1 , . . . , x n ] [x_1,...x_{k-1}],[x_k],[x_{k+1},...,x_n] [x1,...xk1],[xk],[xk+1,...,xn]三部分。
如果左右两侧token数还很多,就要递归地继续再分,直到全部分成了最小单位。
所以就需要找到一个最佳分割点,优化一个目标使类间相关度最小,类内相关度最大。
所以接下来的任务就是如何得到基于token的相关度了。

如何用bert的无监督获取相关度

了解Bert应该知道它的mask language model,我们就是利用这个。

  1. 用数据集+Bert训练词向量。
  2. 对于X中的词i,我们mask它,获得词i的上下文表示,即i的基于上下文的词向量 A 1 A_1 A1
  3. 再同时mask掉i和i+1位置的词,获得i位置的基于上下文的词向量 A 2 A_2 A2
  4. 我们知道,第二个词向量的信息是没有第一个多的,少的那部分是i+1缺失引起的,所以完全可以用 A 1 A_1 A1 A 2 A_2 A2的欧氏距离 d ( A 1 , A 2 ) d(A_1,A_2) d(A1,A2)大小来判断两者的相关度。 d d d越大, i + 1 i+1 i+1 i i i的影响越大,相关度越大。
  5. 如此我们可以列出一个 n × n n×n n×n的相关度矩阵。
  6. 接下来就是上文提到的句法分析操作了。

对于中文,强烈建议看这篇文章,附带实验结果

因为论文使用的数据是英文,所以跨到中文就有一个分词的坎。但需要知道,分词也是可以依靠相关度来做的。我们可以获得每一个字的左右相关度,然后设定一个阈值,低于它的全部切开。
不过别抱太大希望,效果肯定没有监督学习来的好。

分词后就可以重新计算词与词之间的相关度了。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
def FGSM(self, x, y_true, y_target=None, eps=0.03, alpha=2/255, iteration=1): self.set_mode('eval') x = Variable(cuda(x, self.cuda), requires_grad=True) y_true = Variable(cuda(y_true, self.cuda), requires_grad=False) if y_target is not None: targeted = True y_target = Variable(cuda(y_target, self.cuda), requires_grad=False) else: targeted = False h = self.net(x) prediction = h.max(1)[1] accuracy = torch.eq(prediction, y_true).float().mean() cost = F.cross_entropy(h, y_true) if iteration == 1: if targeted: x_adv, h_adv, h = self.attack.fgsm(x, y_target, True, eps) else: x_adv, h_adv, h = self.attack.fgsm(x, y_true, False, eps) else: if targeted: x_adv, h_adv, h = self.attack.i_fgsm(x, y_target, True, eps, alpha, iteration) else: x_adv, h_adv, h = self.attack.i_fgsm(x, y_true, False, eps, alpha, iteration) prediction_adv = h_adv.max(1)[1] accuracy_adv = torch.eq(prediction_adv, y_true).float().mean() cost_adv = F.cross_entropy(h_adv, y_true) # make indication of perturbed images that changed predictions of the classifier if targeted: changed = torch.eq(y_target, prediction_adv) else: changed = torch.eq(prediction, prediction_adv) changed = torch.eq(changed, 0) changed = changed.float().view(-1, 1, 1, 1).repeat(1, 3, 28, 28) changed[:, 0, :, :] = where(changed[:, 0, :, :] == 1, 252, 91) changed[:, 1, :, :] = where(changed[:, 1, :, :] == 1, 39, 252) changed[:, 2, :, :] = where(changed[:, 2, :, :] == 1, 25, 25) changed = self.scale(changed/255) changed[:, :, 3:-2, 3:-2] = x_adv.repeat(1, 3, 1, 1)[:, :, 3:-2, 3:-2] self.set_mode('train') return x_adv.data, changed.data,\ (accuracy.item(), cost.item(), accuracy_adv.item(), cost_adv.item())
最新发布
07-08

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值