-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathatom.xml
2388 lines (2156 loc) · 340 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>徐阿衡</title>
<subtitle>Shuang</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://www.shuang0420.cn/"/>
<updated>2022-02-05T14:35:45.199Z</updated>
<id>http://www.shuang0420.cn/</id>
<author>
<name>徐阿衡</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>论文笔记 - 对话系统中的 OOD 问题</title>
<link href="http://www.shuang0420.cn/2021/11/21/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%20-%20%E5%AF%B9%E8%AF%9D%E7%B3%BB%E7%BB%9F%E4%B8%AD%E7%9A%84%20OOD%20%E9%97%AE%E9%A2%98/"/>
<id>http://www.shuang0420.cn/2021/11/21/论文笔记 - 对话系统中的 OOD 问题/</id>
<published>2021-11-21T02:02:27.000Z</published>
<updated>2022-02-05T14:35:45.199Z</updated>
<content type="html"><![CDATA[<p>最近看了下 2021年关于 OOD 的几篇 paper,记录一下~<br><a id="more"></a></p>
<p>对话系统中的 domain 都是预先定义好的,而在实际应用场景中,会有很多现有系统回答不了的问题(out of the design scope),我们把系统支持的意图称为 <strong>in-domain (IND)</strong>,系统不支持的意图称为 <strong>out-of-domain (OOD)</strong>,OOD 是需要被拒识的。</p>
<p>处理 OOD 问题一般分为有监督和无监督两类方法。有监督方法相对更直接,收集好 OOD 数据,在 IND 和 OOD 上训练一个二分类器,或者直接学习一个 K+1 的分类器。然而 OOD 数据直接获取比较困难,所以有些研究是讨论怎么生成 pseudo outlier。另外,从直觉上看,IND 和 OOD 数据分布是不一致的,IND/OOD 数据极不平衡,在选择 OOD 数据时存在一定的 selection bias,很难选择到高质量有代表性的数据,所以学习的模型对没见过的 OOD 数据很难泛化。</p>
<p>而无监督方法往往在训练阶段只利用 IND 数据来学习 IND 的 decision boundaries(如 LMCL,SEG),在测试阶段使用额外的检测算法来检测 OOD。这类方法致力于更好的对 IND 数据建模,以及探索更好的检测方法。但由于训练和测试阶段的目标并不一致,容易对 OOD 数据产生 overconfident 的后验分数。下面是三类常见的检测方法:</p>
<ul>
<li><strong>Probability Threshold:</strong> 利用 IND 模型的输出概率分布来决定 OOD,如 Maximum Softmax Probability (MSP),或者对输出的分数进行若干操作转化如 ODIN, Entropy,也有一些是在 reconstruction loss 或者 likelihood ratios 上设定阈值</li>
<li><strong>Outlier Distance:</strong> 异常检测的方法,看 outlier 到 in-scope 集合的距离是否足够远。通常是在 embedding function 或者距离函数上做文章,如 Local Outlier Factor (LOF)、马氏距离等</li>
<li><strong>Bayesian Ensembles:</strong> 在 16-18 年的工作比较多,近两年没怎么看到,通过 IND 模型输出的方差来决定是否是 OOD,如通过 ensemble / dropout 等方式看模型输出的方差如果够大,就认为是 OOD。 </li>
</ul>
<p>总的来说,各类方法各有优缺点,并没有突破性的进展,依旧是道阻且长。</p>
<h1 id="ACL-2021-Enhancing-the-generalization-for-Intent-Classification-and-Out-of-Domain-Detection-in-SLU"><a href="#ACL-2021-Enhancing-the-generalization-for-Intent-Classification-and-Out-of-Domain-Detection-in-SLU" class="headerlink" title="ACL 2021: Enhancing the generalization for Intent Classification and Out-of-Domain Detection in SLU"></a>ACL 2021: <a href="https://aclanthology.org/2021.acl-long.190.pdf" target="_blank" rel="external">Enhancing the generalization for Intent Classification and Out-of-Domain Detection in SLU</a></h1><p>无监督方法。不需要额外收集数据,通过在最后一层线性层加上 DRM 模块就能实现。</p>
<h2 id="模型"><a href="#模型" class="headerlink" title="模型"></a>模型</h2><p>依据:</p>
<p><img src="http://images.shuang0420.cn/img/oFKMtyZGxHrl7Dm-20211121200815568.png" alt="image-20211117111344510"></p>
<p><img src="http://images.shuang0420.cn/img/QsbovwFpXLW4naK.png" alt="image-20211117111037802"></p>
<p>编码器对 query 进行编码得到 hidden state h,两个线性层得到(1)中的分母 domain_logits $f_d$ 和分子 classification logits $f<em>c$,相除得到新的 logits $f$,用 $f$ 计算 IND 分类的损失 $L</em>{classification}$,用 $f_d$ 计算另一个损失 L_domain,作用是使得 $f_d$ 接近 1(训练集里只有 IND),sigmoid 之前先对 $f_d$ 进行裁剪,避免 $f_d$ 的值过大,影响训练。两个损失相加得到最终损失。</p>
<p>参数可以从 2.2-4 之间调,sigmoid(2.2) => 0.9,sigmoid(4) => 0.982</p>
<p><img src="http://images.shuang0420.cn/img/efX9qplGDAydIRY.png" alt="image-20211117111414292"></p>
<h2 id="预测"><a href="#预测" class="headerlink" title="预测"></a>预测</h2><p>OOD 的预测有 confidence-based 和 feature-based 两类方法</p>
<h3 id="Confidence-based-Methods"><a href="#Confidence-based-Methods" class="headerlink" title="Confidence-based Methods"></a>Confidence-based Methods</h3><p>基于 softmax output 来输出 OOD 的预测分数</p>
<p><img src="http://images.shuang0420.cn/img/7e1vhCBixyJmGgQ.png" alt="image-20211117111937778"></p>
<h2 id="Feature-based-Methods"><a href="#Feature-based-Methods" class="headerlink" title="Feature-based Methods"></a>Feature-based Methods</h2><p>这里提到了马氏距离,马氏距离修正了欧式距离中各个维度尺度不一致且相关的问题。马氏距离计算点与聚类(分布)之间的距离,在多维数据集异常检测,高维数据集分类应用中表现出色。</p>
<p>可以用下面两张图来理解欧式距离与马氏距离,如果 X, Y 两个维度不相关,欧氏距离可以很好的判别Point1和Point2距离聚类中心黑点的远近,而如果各维度不满足独立同分布的条件时,如右图,欧氏距离就无法很好的表征Point1和Point2谁是异常点了。因为两个点与中心的欧氏距离相等。但实际上只有蓝色点更接近该聚类。下图来自这篇博客:<a href="https://blog.csdn.net/wokaowokaowokao12345/article/details/115765116" target="_blank" rel="external">https://blog.csdn.net/wokaowokaowokao12345/article/details/115765116</a></p>
<p><img src="https://img-blog.csdnimg.cn/2021041616255653.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dva2Fvd29rYW93b2thbzEyMzQ1,size_16,color_FFFFFF,t_70#pic_center" alt="img"></p>
<p>简而言之,马氏距离将变量按主成分进行旋转,让维度间相互独立,然后进行标准化,让维度同分布。最后基本公式如下,x - μ 是样本到样本均值间的距离,Σ 是多维随机变量的协方差矩阵,如果协方差矩阵是单位向量,也就是各维度独立同分布,马氏距离就变成了欧氏距离。</p>
<p><img src="http://images.shuang0420.cn/img/TGUNZzpDu9IR1iB.png" alt="image-20211117113152944"></p>
<p>对应到这篇 paper,</p>
<p><img src="http://images.shuang0420.cn/img/1BQckqwvSULPgh8.png" alt="image-20211117150547135"></p>
<p>仅用最后一层 $S^{last}_{Maha}(x)$ 就有不错的效果了,具体的看 paper 吧。</p>
<p><img src="http://images.shuang0420.cn/img/AW9GoUDM2EbVYQP.png" alt="image-20211117150733690"></p>
<p>作者额外提出了 <strong>L- Mahalanobis:</strong></p>
<p><img src="http://images.shuang0420.cn/img/CGYh42f5FTsIbSp.png" alt="image-20211117124359202"></p>
<p>对 BERT 最后输出的每一层结果进行计算,$f^l$ 是第 l 层,$f^n$ 是最后一层</p>
<p>不同 detection score 的效果:</p>
<p><img src="http://images.shuang0420.cn/img/Jo39irCgXPITWYp.png" alt="image-20211120213415737"></p>
<h1 id="ACL-2021-Out-of-Scope-Intent-Detection-with-Self-Supervision-and-Discriminative-Training"><a href="#ACL-2021-Out-of-Scope-Intent-Detection-with-Self-Supervision-and-Discriminative-Training" class="headerlink" title="ACL 2021: Out-of-Scope Intent Detection with Self-Supervision and Discriminative Training"></a>ACL 2021: <a href="https://aclanthology.org/2021.acl-long.273.pdf" target="_blank" rel="external">Out-of-Scope Intent Detection with Self-Supervision and Discriminative Training</a></h1><p>这一篇通过构建一系列的 pseudo outliers,然后把 intent classification 和 OOD 两个任务抽象为一个 K+1 的分类任务来做</p>
<p>Outliers 分为两种:</p>
<ul>
<li><p><strong>hard outliers</strong>:和 inlier 很近,难以区分。可以通过不同各类别 inlier 的 feature 的 convex combination 来自监督的生成。如下,$h_\beta$ 和 $h_alpha$ 是从不同类别采样的两个输入的表征,$\theta$ 从均匀分布 U(0,1) 中采样。在 ablation study 里显示这部分带来的收益更大。</p>
<p><img src="http://images.shuang0420.cn/img/TdZicVtgfIDkuQF.png" alt="image-20211117161501994"></p>
</li>
<li><p><strong>easy outliers</strong>:和 inlier 较远,与 kown intent 很不相关,可以从 open_domain 数据集中抽取</p>
</li>
</ul>
<p>训练和正常的预训练模型做分类任务一样。</p>
<p>要注意的是 outlier 的数量对最终效果有较大影响。实验里的数据比例 <strong># of inliers : # of open-domain outliers: # of self-supervised outliers = 1: 1: 4</strong>。</p>
<p><img src="http://images.shuang0420.cn/img/KhefGm2L7Hvslu5.png" alt="image-20211117163135879"></p>
<p>这篇的实验设置是用 k% 个 intents 作为 known intents 来训练,剩下的作为 unknown intents 作为测试集。</p>
<p><img src="http://images.shuang0420.cn/img/SUOzWyeQp6x8FLI.png" alt="image-20211120213521703"></p>
<h1 id="EMNLP-2021-GOLD-Improving-Out-of-Scope-Detection-in-Dialogues-using-Data-Augmentation"><a href="#EMNLP-2021-GOLD-Improving-Out-of-Scope-Detection-in-Dialogues-using-Data-Augmentation" class="headerlink" title="EMNLP 2021: GOLD: Improving Out-of-Scope Detection in Dialogues using Data Augmentation"></a>EMNLP 2021: <a href="https://aclanthology.org/2021.emnlp-main.35.pdf" target="_blank" rel="external">GOLD: Improving Out-of-Scope Detection in Dialogues using Data Augmentation</a></h1><p>弱监督方式,在少量有标签的 OOD 数据(seed data)以及一个辅助的外部数据集 (source data)上进行数据增强,产生 pseudo-OOD data。任务是 in-domain/out-of-domain 二分类。</p>
<p><img src="http://images.shuang0420.cn/img/image-20211121160641258.png" alt="image-20211121160641258"></p>
<p>两种增强的方法:</p>
<ol>
<li><p>在 OOD seed data 和 source data 的 embedding 空间里,对每个 seed 数据,通过 cosine 距离,从 source data 中找到 d 条与 seed 相似的数据,文中讨论 <strong>d= 24</strong> 对各个 source data 都是最优解</p>
</li>
<li><p>对话增强方法:seed data 是多轮对话数据,通过把 dialogue 里任意一条 utterance 替换为 source data 的 matched utterance 来构建新的 dialogue</p>
</li>
</ol>
<p>上面构建的增强数据有较大的噪声,一些数据与 IND 数据可能有 overlap,所以有个<strong>过滤机制</strong>来保证 candidates 是最有可能的 OOD。通过 baseline detector 的 ensemble 方法来进行投票选出最优的 OOD。</p>
<p>这篇的两个前提条件是很重要的,一是要有合适的 seed data,如果 seed data 数量减低一半效果会大打折扣(论文里限制 OOD 数量为 IND 样本的 1%),还有一个source data 的选取,需要和 target data 不同,但又不能完全不相关。构建的最理想的 pseudo-label 当然是在 IND 和 OOD 的 decision boundary 上了。</p>
<p><img src="http://images.shuang0420.cn/img/image-20211121161732016.png" alt="image-20211121161732016"></p>
<h1 id="ACL-2021-Modeling-Discriminative-Representations-for-Out-of-Domain-Detection-with-Supervised-Contrastive-Learning"><a href="#ACL-2021-Modeling-Discriminative-Representations-for-Out-of-Domain-Detection-with-Supervised-Contrastive-Learning" class="headerlink" title="ACL 2021: Modeling Discriminative Representations for Out-of-Domain Detection with Supervised Contrastive Learning"></a>ACL 2021: <a href="https://aclanthology.org/2021.acl-short.110.pdf" target="_blank" rel="external">Modeling Discriminative Representations for Out-of-Domain Detection with Supervised Contrastive Learning</a></h1><p><img src="http://images.shuang0420.cn/img/SQGsAm6RF2JiYDj.png" alt="image-20211120195553973"></p>
<p>idea很简单,有监督对比学习(SCL) + 交叉熵(CE)的方法,使用对抗攻击的方法实现正样本的增强。希望同一个意图下的样本互相接近,不同意图下的样本互相远离。有监督对比学习的表示学习方法可以通过最大化类间距离和最小化类内方差来提升特征的区分度。</p>
<p>属于无监督的OOD检测方法,训练阶段用IND数据,测试阶段用 MSP/LOF/GDA 来检测 OOD。</p>
<p>对比学习损失:</p>
<p><img src="http://images.shuang0420.cn/img/HiBageCP7491Ux2-20211121200713731.png" alt="image-20211118140530559"></p>
<p>对抗攻击的样本增强,用 FGV 方式计算扰动</p>
<p><img src="http://images.shuang0420.cn/img/image-20211123153643862.png" alt="image-20211123153643862"></p>
<p><img src="http://images.shuang0420.cn/img/zEaeMO7hVZxukQs.png" alt="image-20211120213209519"></p>
<h1 id="NACCL-2021-Adversarial-Self-Supervised-Learning-for-Out-of-Domain-Detection"><a href="#NACCL-2021-Adversarial-Self-Supervised-Learning-for-Out-of-Domain-Detection" class="headerlink" title="NACCL 2021: Adversarial Self-Supervised Learning for Out-of-Domain Detection"></a>NACCL 2021: <a href="https://aclanthology.org/2021.naacl-main.447.pdf" target="_blank" rel="external">Adversarial Self-Supervised Learning for Out-of-Domain Detection</a></h1><p>这篇和上面一篇都是美团发的文,模型上一篇更简单,实验指标也是上一篇更好看。</p>
<p><img src="http://images.shuang0420.cn/img/abUjNfJyPZYQBeA.png" alt="image-20211120200016981"></p>
<p>用 IND 数据和 CL loss 训练一个分类器,对 unlabeled data 进行对比学习,用 back translate 做正样本数据增强,</p>
<p>Back-translation 方法得到正样本对 ($x_i$, $x_j$),对抗攻击得到 ($x_i^{adv}$, $x_j^{adv}$),实验了四种对比学习的设置</p>
<ul>
<li><p>Standard- to-Standard (S2S),正样本对是 ($x_i$, $x_j$) </p>
</li>
<li><p>Adversarial-to-Adversarial (A2A),正样本对是 ($x_i^{adv}$, $x_j^{adv}$) </p>
</li>
<li><p>Standard- to-Adversarial (S2A),正样本对是 ($x_i$, $x_i^{adv}$) / ($x_j$, $x_j^{adv}$) </p>
</li>
<li><p>Dual Stream (DS),正样本对是 S2S 和 A2A 相结合</p>
</li>
</ul>
<p>最后是 DS 效果最好,也就是上图的方法,对比损失如下:</p>
<p><img src="http://images.shuang0420.cn/img/XeqaTZoSvLx3inF.png" alt="image-20211120201549809"></p>
<p><img src="http://images.shuang0420.cn/img/ftz3lVXj69AiCeT.png" alt="image-20211120213150082"></p>
]]></content>
<summary type="html">
<p>最近看了下 2021年关于 OOD 的几篇 paper,记录一下~<br></p>
</summary>
<category term="NLP" scheme="http://www.shuang0420.cn/categories/NLP/"/>
<category term="Chatbot" scheme="http://www.shuang0420.cn/categories/NLP/Chatbot/"/>
<category term="NLP" scheme="http://www.shuang0420.cn/tags/NLP/"/>
</entry>
<entry>
<title>如何测试你的 NLP 模型?- Behavioral Testing of NLP Models with CheckList</title>
<link href="http://www.shuang0420.cn/2020/09/10/%E5%A6%82%E4%BD%95%E6%B5%8B%E8%AF%95%E4%BD%A0%E7%9A%84%20NLP%20%E6%A8%A1%E5%9E%8B%EF%BC%9F-%20Behavioral%20Testing%20of%20NLP%20Models%20with%20CheckList/"/>
<id>http://www.shuang0420.cn/2020/09/10/如何测试你的 NLP 模型?- Behavioral Testing of NLP Models with CheckList/</id>
<published>2020-09-10T02:02:27.000Z</published>
<updated>2020-09-10T13:00:43.000Z</updated>
<content type="html"><![CDATA[<p>Best Paper at ACL 2020<br><a id="more"></a></p>
<p>这篇 paper 要解决的问题就一个 <strong>How do I know if my model really works</strong>,为此作者提出了一个 NLP 模型的评估体系 CHECKLIST,这不是什么 SOTA 模型,也不是啥先进的 theory,就只是一套指导我们像测试软件一样测试模型的 <strong>方法论</strong> 而已,这个方法可以让我们了解 NLP 模型的能力,也能够指导我们去理解问题、解决问题。</p>
<p>可能很多人都有这样的困惑,训练完一个模型,离线评估准确率 90%+,然而一到线上各种问题,效果却大跌眼镜,这是为什么呢?比较显而易见的一个原因是离线测试集和线上数据集分布的一个 discrepancy。我们的离线测试集通常是 held-out datasets,和训练集同分布,是从同一个数据集 split 来的,而这个数据集可能是不全面的,有偏的,也就是说,测试集和训练集一样有着相同的 bias,而线上数据集的分布可能不一样(out-of-distribution),所以在测试集上表现的好不一定意味着在相关数据集上表现的好。</p>
<p>与之伴随的可能是 shortcut learning,简单解释一下就是<strong>模型没有学习我们想让它学习的特征,而去学习了其他东西</strong>,比如说图像分类,模型在测试集上能正确区分出现在草地上的奶牛,但是一旦把奶牛移到别的场景里,模型就会分错,这个“草地”就是奶牛的 shortcut。那么模型究竟该学习哪种特征呢?下面一张图可能比较直观,如果模型学到的是 uninformative features,那么模型在训练集的表现就不会好,如果模型学到的是 overfitting features,那么模型在训练集上表现很好但是在测试集上表现很差,而如果模型学到的是 shortcut features,那么模型在训练集和测试集上表现都很好,但在相关的 o.o.d. 的测试集上表现却很差,只有模型在学习 intended features 的时候,才是我们想要的,模型才能有我们想要的泛化能力。更多可以看 <a href="https://arxiv.org/pdf/2004.07780.pdf" target="_blank" rel="external">Shortcut Learning in Deep Neural Networks</a></p>
<img src="http://images.shuang0420.cn/images/%E5%A6%82%E4%BD%95%E6%B5%8B%E8%AF%95%E4%BD%A0%E7%9A%84%20NLP%20%E6%A8%A1%E5%9E%8B%EF%BC%9F-%20Behavioral%20Testing%20of%20NLP%20Models%20with%20CheckList/shortcut.png" class="ful-image" alt="shortcut.png">
<p>另一方面,现在的模型评估一般评估的都是整体表现,像是准确率、召回率等,这些能判断模型整体怎么样,但却无法简单的通过这个指标去找模型可能存在的 bug。要知道我们的模型肯定不是完美的,我们希望像软件测试一样,能有一个测试体系来指导我们分析问题原因、指导解决具体问题,便于我们进一步优化。尽管也有一些 paper 会针对单个任务或某几种特定能力提出一些分析的指标,但是并没有一个 comprehensive guidance。</p>
<p>于是这么看来,作者凭借一个启发性的测试框架夺得 2020 ACL best paper,也就更加合理了。CEHCKLIST 借鉴了软件设计里面的黑盒测试,通过验证输入-输出的行为来测试一个系统的不同方面的能力,测试人员并不需要知道模型结构就可以去测试。而整个测试体系从<strong>语义</strong>上拆分成了各个更细的能力(linguistic capabilities),通过不同的表现方式(test types)来进行测试。除此之外,还提供了快速构建 test cases 的一系列方法和工具。在此基础上,作者用 CHECKLIST 对现在一些商用的 NLP 产品和 SOTA 模型进行了测试,结论是无论是大厂的付费接口还是知名的开源项目(BERT/RoBERTa),在这些能力上表现的都很糟糕,有些能力上错误率会到 80-90%,甚至 100%。</p>
<p><strong>CHECKLIST</strong></p>
<ul>
<li><p>what to test: <strong>linguistic capabilities</strong> </p>
<p>10 种通用的语言能力,后面逐个看例子</p>
<ul>
<li><p><strong>Vocabulary + POS</strong>: important words or word types for the task</p>
</li>
<li><p><strong>Taxonomy</strong>: synonyms, antonyms, etc</p>
</li>
<li><p><strong>Robustness</strong>: typos, irrelevant changes, etc</p>
</li>
<li><p><strong>NER</strong>: appropriately understanding named entities</p>
</li>
<li><p><strong>Fairness</strong></p>
</li>
<li><p><strong>Temporal</strong>: understanding order of events</p>
</li>
<li><p><strong>Negation</strong></p>
</li>
<li><p><strong>Coreference</strong></p>
</li>
<li><p><strong>Semantic Role Labeling</strong>: understanding roles such as agent, object, etc</p>
</li>
<li><p><strong>Logic</strong>: ability to handle symmetry, consistency, and conjunctions</p>
</li>
</ul>
</li>
<li><p>how to test: <strong>test behaviors with different test types</strong> </p>
<p>一种能力进行多个方面的分析,3 种测试类型:</p>
<ul>
<li><p>Minimum Functionality Test, <strong>MFT</strong></p>
</li>
<li><p>Invariance Test, <strong>INV</strong></p>
</li>
<li><p>Directional Expectation Test, <strong>DIR</strong></p>
</li>
</ul>
<p>MFT 其实就是单元测试,和通常的模型评估一样,需要带标签的测试集,一个能力对应一个测试集,INV 和 DIR 属于 perturbation test,对输入加入扰动,我们期望结果不变/结果有一定程度的改变。INV 比如说我们对输入引入一些拼写错误,希望模型预测结果不变。DIR 比如在情感分析的例子里,我们在输入后面加一个负向表述,那么无论原来标签是啥,我们都期望预测结果至少不应该变得更加正向,这个变化指的是置信度的变化。</p>
</li>
<li><p>writing tests at scale: <strong>templating + RoBERTa,</strong> lexicons, perturbation library, visualizations… </p>
<p>评估体系下生成测试用例的方法,主要通过模板,填充模板槽位的时候可以用字典词表,也可以用 masked language model 来做词的推荐。</p>
</li>
</ul>
<p>Capability 和 test type 制成表格,构建 test case 测试并计算 failure rate,填表汇总就好啦~</p>
<img src="http://images.shuang0420.cn/images/%E5%A6%82%E4%BD%95%E6%B5%8B%E8%AF%95%E4%BD%A0%E7%9A%84%20NLP%20%E6%A8%A1%E5%9E%8B%EF%BC%9F-%20Behavioral%20Testing%20of%20NLP%20Models%20with%20CheckList/checklist.png" class="ful-image" alt="checklist.png">
<p>对于词汇而言,我们希望模型能够理解重要词汇的含义,比如在情感分析中,模型要能识别带有情感色彩的词语,在重复问题检测任务中,模型要能识别能够区别两个句子的修饰词,在阅读理解任务中,模型要能理解比较级和最高级。</p>
<img src="http://images.shuang0420.cn/images/%E5%A6%82%E4%BD%95%E6%B5%8B%E8%AF%95%E4%BD%A0%E7%9A%84%20NLP%20%E6%A8%A1%E5%9E%8B%EF%BC%9F-%20Behavioral%20Testing%20of%20NLP%20Models%20with%20CheckList/vocab.png" class="ful-image" alt="vocab.png">
<p>Taxonomy,很明显, BERT/RoBERTa 并不能很好的理解同义词/反义词,BERT 对属性和类别也不具备理解能力,不能区分颜色/尺寸,动物/机械等类别。</p>
<img src="http://images.shuang0420.cn/images/%E5%A6%82%E4%BD%95%E6%B5%8B%E8%AF%95%E4%BD%A0%E7%9A%84%20NLP%20%E6%A8%A1%E5%9E%8B%EF%BC%9F-%20Behavioral%20Testing%20of%20NLP%20Models%20with%20CheckList/taxonomy.png" class="ful-image" alt="taxonomy.png">
<p>鲁棒性,加了点短链接、@用户等无关信息各产品/模型就不行了,typo /同义改写处理的也不是很好,然而这些问题在实际应用中还是挺常见的,比如在一些问答场景里,首尾加上你好/谢谢等其他信息,中间加上一些吐槽口吻,模型处理的就没有预期那么好。</p>
<img src="http://images.shuang0420.cn/images/%E5%A6%82%E4%BD%95%E6%B5%8B%E8%AF%95%E4%BD%A0%E7%9A%84%20NLP%20%E6%A8%A1%E5%9E%8B%EF%BC%9F-%20Behavioral%20Testing%20of%20NLP%20Models%20with%20CheckList/robustness.png" class="ful-image" alt="robustness.png">
<p>命名实体,情感分析任务里替换实体名/人名对预测不应该有影响,重复问题检测中,模型明显不能正确的理解命名实体的含义。这里文章解释说是因为 shortcut learning,模型过于依赖一些线索词如命名实体,而不是去理解命名实体和命名实体在这个任务中的作用。事实上,仔细看例子我们可以发现,不仅在 NER 这个能力上,QQP 对应的所有能力,都显著的有着 shortcut learning 的现象。</p>
<img src="http://images.shuang0420.cn/images/%E5%A6%82%E4%BD%95%E6%B5%8B%E8%AF%95%E4%BD%A0%E7%9A%84%20NLP%20%E6%A8%A1%E5%9E%8B%EF%BC%9F-%20Behavioral%20Testing%20of%20NLP%20Models%20with%20CheckList/ner.png" class="ful-image" alt="ner.png">
<p>Fairness,情感分析任务里,商业模型在判断 “I am a black woman” 这类句子时总能判断成中性,然而这并不意味着模型就没有性别和种族等偏见了。BERT 在判断 black, atheist, gay, lesbian + 名词的句子时,总会判断成负向的,而 asian, straight 则会判断成积极的。另一方面,在阅读理解任务中,也能看到对性别的偏见,在 John is not a doctor, Mary is 这类 context 里,如果问 who is a doctor,那么错误预测男性(John)是医生的概率有 89.1%,而如果把职位改成 secretary,那么错误预测女性为秘书的概率有 60.5%,显然带上了“医生大多是男性,秘书大多是女性”的偏见,没有忠于真实 context。</p>
<img src="http://images.shuang0420.cn/images/%E5%A6%82%E4%BD%95%E6%B5%8B%E8%AF%95%E4%BD%A0%E7%9A%84%20NLP%20%E6%A8%A1%E5%9E%8B%EF%BC%9F-%20Behavioral%20Testing%20of%20NLP%20Models%20with%20CheckList/fairness.png" class="ful-image" alt="fairness.png">
<p>模型也不能识别 temporal 相关的概念,比如过去式现在时、before, after, first, last,模型不能正确的理解这些时间顺序。</p>
<img src="http://images.shuang0420.cn/images/%E5%A6%82%E4%BD%95%E6%B5%8B%E8%AF%95%E4%BD%A0%E7%9A%84%20NLP%20%E6%A8%A1%E5%9E%8B%EF%BC%9F-%20Behavioral%20Testing%20of%20NLP%20Models%20with%20CheckList/temporal.png" class="ful-image" alt="temporal.png">
<p>否定就更难了,简单的否定还行,双重否定太难了,否定放在句尾或者在否定和情感成分中间加个中立成分,商业产品的错误率几乎是 100%,简直不忍直视。</p>
<img src="http://images.shuang0420.cn/images/%E5%A6%82%E4%BD%95%E6%B5%8B%E8%AF%95%E4%BD%A0%E7%9A%84%20NLP%20%E6%A8%A1%E5%9E%8B%EF%BC%9F-%20Behavioral%20Testing%20of%20NLP%20Models%20with%20CheckList/negation.png" class="ful-image" alt="negation.png">
<p>指代消解,本来发展的也不成熟,也是惨不忍睹。</p>
<img src="http://images.shuang0420.cn/images/%E5%A6%82%E4%BD%95%E6%B5%8B%E8%AF%95%E4%BD%A0%E7%9A%84%20NLP%20%E6%A8%A1%E5%9E%8B%EF%BC%9F-%20Behavioral%20Testing%20of%20NLP%20Models%20with%20CheckList/coreference.png" class="ful-image" alt="coreference.png">
<p>SRL,就更不用说了。这其实还挺重要的,比如在搜索场景的“人民币兑换美元”和“美元兑换人民币”就需要模型有语义角色标注的能力。</p>
<img src="http://images.shuang0420.cn/images/%E5%A6%82%E4%BD%95%E6%B5%8B%E8%AF%95%E4%BD%A0%E7%9A%84%20NLP%20%E6%A8%A1%E5%9E%8B%EF%BC%9F-%20Behavioral%20Testing%20of%20NLP%20Models%20with%20CheckList/srl.png" class="ful-image" alt="srl.png">
<p>逻辑方面,文中举例不多,主要是满足对称性、传递性等特质,比如说在文本相似性,或者说距离度量上,起码要满足对称性吧,AB距离和BA距离应该是相等的吧,还有三角不等式也该满足吧,AB距离+BC距离>AC距离这种。</p>
<img src="http://images.shuang0420.cn/images/%E5%A6%82%E4%BD%95%E6%B5%8B%E8%AF%95%E4%BD%A0%E7%9A%84%20NLP%20%E6%A8%A1%E5%9E%8B%EF%BC%9F-%20Behavioral%20Testing%20of%20NLP%20Models%20with%20CheckList/logic.png" class="ful-image" alt="logic.png">
]]></content>
<summary type="html">
<p>Best Paper at ACL 2020<br></p>
</summary>
<category term="NLP" scheme="http://www.shuang0420.cn/categories/NLP/"/>
<category term="Chatbot" scheme="http://www.shuang0420.cn/categories/NLP/Chatbot/"/>
<category term="NLP" scheme="http://www.shuang0420.cn/tags/NLP/"/>
</entry>
<entry>
<title>Slice-based learning - 基于数据切片的学习</title>
<link href="http://www.shuang0420.cn/2020/06/16/Slice-based%20learning%20-%20%E5%9F%BA%E4%BA%8E%E6%95%B0%E6%8D%AE%E5%88%87%E7%89%87%E7%9A%84%E5%AD%A6%E4%B9%A0/"/>
<id>http://www.shuang0420.cn/2020/06/16/Slice-based learning - 基于数据切片的学习/</id>
<published>2020-06-16T02:02:27.000Z</published>
<updated>2020-09-10T12:26:31.000Z</updated>
<content type="html"><![CDATA[<p>Slice-based learning 的目的是为了提高模型在特定的数据子集上的表现。<br><a id="more"></a></p>
<p>正常模型的学习目标是优化模型在整个数据集上的指标,而有时候我们想在此基础上,提高模型在一些特定的重要数据子集上的指标。 因为在实际应用场景中,除了模型整体的表现,我们也关注甚至更关注模型在一些重要的子集上的表现,这些数据子集通常出现频率少但又格外的重要,比如自动驾驶模型中与安全相关的一些数据子集(如检测路上的骑自行车的人)。而 <a href="https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/1909.06349.pdf" target="_blank" rel="external">Slice-based learning</a> 的目的就是为了提高模型在这些特定的数据子集上的表现。</p>
<img src="http://images.shuang0420.cn/images/Slice-based%20learning%20-%20%E5%9F%BA%E4%BA%8E%E6%95%B0%E6%8D%AE%E5%88%87%E7%89%87%E7%9A%84%E5%AD%A6%E4%B9%A0/intro.png" class="ful-image" alt="intro.png">
<p>要提高模型在特定数据子集上的表现首先一个问题是<strong>如何划分数据子集</strong>,划分标准可以是基于经验,通过写一些规则,通过简单的分类器,也可以通过 error analysis 得到,我们定义 k 个 <strong>Slice Function (SF)</strong>, 相当于 k 个 binary classifer,表示数据是否属于当前 slice。这个 SFs 不一定要很完美,事实上也很难完美。</p>
<p>划分了数据子集接下来的问题就是<strong>如何提高模型在特定数据子集上的模型表现</strong>,有以下挑战:</p>
<ul>
<li><strong>Copying with noise</strong>:SFs 以弱监督的方式定义,模型需要对这些存在噪音的数据有足够的鲁棒性</li>
<li><strong>Scalability</strong>:当增加 slices 的时候,不能增加太多的参数</li>
<li><strong>Stable improvement of the model</strong>:slices 增多的时候,不能伤害现有的 slice 以及整体的 performance</li>
</ul>
<p>这篇 paper 的思路是 <strong>专家组合(Mixtuer-of-Experts, MoE)</strong> + <strong>multi-task(MTE)</strong>,在每一个 slice 训练单独的模型(即专家模型),然后用 gated function 融合各个模型输出,相当于 ensemble 的做法,麻烦的是参数利用率低,scalability 差,有多少 slice 就需要训练多少个单独的模型。而相应的,MTE 可以通过参数共享,对每个 data slice 训练单独的 task head,计算效率高,但是这样一来并不能跨 slice 共享数据,另外 MTL 中多个任务各不相同,而在 slice-based learning 中,基本任务是由相关的 slice task 来补充完善的。</p>
<p>于是就有了下面这个框架:</p>
<img src="http://images.shuang0420.cn/images/Slice-based%20learning%20-%20%E5%9F%BA%E4%BA%8E%E6%95%B0%E6%8D%AE%E5%88%87%E7%89%87%E7%9A%84%E5%AD%A6%E4%B9%A0/arch.png" class="ful-image" alt="arch.png">
<p>我们想训练一个标准的预测模型,称为 base task,对每个 slice,我们学习 expert representation,然后用 gated function 来组合这些 expert representation 得到一个 slice-aware representation,做出 final prediction。</p>
<ul>
<li><p><strong>(a) Backbone</strong>: 用来提取特征的模型,比如说 BERT,把输入数据 x 映射到 z</p>
</li>
<li><p><strong>(b) Slice indicator heads</strong>: 每个 slice 对应一个 indicator head,作用是预测输入数据是否属于这个 slice,输入是 z,输出是 logits q,监督信号是 SF 的输出</p>
</li>
<li><p><strong>(c) Slice-specific representations</strong>: 对每个 slice,学习一个 expert feature,输入是 z,输出是 r</p>
</li>
<li><p><strong>(d) Shared slice prediction head</strong>: 共享的 slice prediction head,把各个 slice expert feature r 映射到 logit pi,只在属于这个 slice 的数据上训练,监督信号就是 base task 的真实标签 y。用共享的 head 可以保证 expert head 的输出具有一致性,便于后面的加权组合</p>
</li>
<li><p><strong>(e) Slice-aware representation</strong>: 把 <em>(b) slice indicator output Q</em> 和 <em>(d) prediction head confidence P</em> 做 element-wise,作为 attention 权重来 re-weight 各个 slice 的特征 (c) ,得到 slice-aware representation z’,这一步也体现了对噪声 slice 的 robustness,如果某个 slice indicator 或者 prediction task 做出了置信度低的预测,那就下调它对应表示的权重</p>
<p>注意这一步的时候初始化了一个 base slice,base slice 包含了所有的输入数据,并且有对应的 indicator qbase,和 predictor pbase,目的是显性的来建模从 slice representation 到 base representation 的残差,所以 Q 和 P 其实包含了 k+1 个 vector</p>
</li>
<li><p><strong>(f) Prediction head</strong>: 输入是 z’,得到最后的输出,监督信号就是 base task 的真实标签 y</p>
</li>
</ul>
<p>loss 是 (b)(d)(f) 三部分 loss 的相加。实验结果就不贴了,读 paper 吧~</p>
]]></content>
<summary type="html">
<p>Slice-based learning 的目的是为了提高模型在特定的数据子集上的表现。<br></p>
</summary>
<category term="NLP" scheme="http://www.shuang0420.cn/categories/NLP/"/>
<category term="Chatbot" scheme="http://www.shuang0420.cn/categories/NLP/Chatbot/"/>
<category term="NLP" scheme="http://www.shuang0420.cn/tags/NLP/"/>
</entry>
<entry>
<title>Sequential transfer learning in NLP</title>
<link href="http://www.shuang0420.cn/2020/06/01/Sequential%20transfer%20learning%20in%20NLP/"/>
<id>http://www.shuang0420.cn/2020/06/01/Sequential transfer learning in NLP/</id>
<published>2020-06-01T02:02:27.000Z</published>
<updated>2020-09-10T12:55:04.000Z</updated>
<content type="html"><![CDATA[<p>NAACL 2019 tutorial on “Transfer Learning in Natural Language Processing” 的部分笔记,资料链接见文末。<br><a id="more"></a></p>
<img src="http://images.shuang0420.cn/images/Sequential%20transfer%20learning%20in%20NLP/types.png" class="ful-image" alt="Sequential%20transfer%20learning%20in%20NLP/types.png">
<p>迁移学习的概念就不多描述了,可以参考<a href="https://github.com/jindongwang/transferlearning-tutorial" target="_blank" rel="external">迁移学习小册子</a>,讲的非常好。总的来说迁移学习有两大类(应该是 Sebastian Ruder 博士论文提出的分类?):</p>
<ul>
<li><strong>Inductive transfer learning</strong><ul>
<li>任务不同,但在目标领域有标注数据</li>
<li>同时学习不同任务就是 multi-task learning,顺序学习不同任务就是 sequential transfer learning</li>
<li>具体方法有<strong>基于样本(instance based transfer)</strong>、<strong>基于特征(feature representation transfer)</strong>、<strong>基于参数(parameter transfer)</strong>、<strong>基于关系(relational knowledge transfer)</strong>的迁移,其中最为常见的就是基于特征的迁移,如把预训练模型当做特征提取器,后加分类层等应用,以及基于参数的迁移,如我们常用的 fine-tuning </li>
</ul>
</li>
<li><strong>Transductive transfer learning</strong><ul>
<li>任务相同但是领域不同,源领域有标注数据,但是目标领域没有标注数据</li>
<li>不同领域就是<strong>领域适应(domain adaptation)</strong>,不同语言就是<strong>跨语言学习(cross-lingual learning)</strong>。领域适应问题一般假设源领域和目标领域有相同的样本空间,但数据分布不一致,迁移学习小册子重点介绍了这一热门研究方向</li>
<li>通常是<strong>基于样本</strong>和<strong>基于特征</strong>的学习</li>
</ul>
</li>
</ul>
<p>这一篇关注的是 <strong>Sequential inductive transfer learning</strong>,通常来说第一阶段在源领域上预训练,学习 general 的一些表征,然后做 adaption,迁移到新的任务。由于源领域的训练数据非常大,预训练模型通常有很好的泛化能力(参考大力出奇迹的 GPT3)。预训练之前讨论的比较多,而这次要解决的问题是 <strong>How to adapt the pretrained model in NLP</strong>,主要从下面三个方面进行讨论:</p>
<ol>
<li><strong>Architectural modifications?</strong><br> 怎么改模型结构</li>
<li><strong>Optimization schemes</strong><br> 去训练哪些权重,以什么顺序来训练</li>
<li><strong>More signal: Weak supervision, Multi-tasking & Ensembling</strong><br> 获取更多监督信号</li>
</ol>
<h1 id="Architecture"><a href="#Architecture" class="headerlink" title="Architecture"></a>Architecture</h1><p>有两种选择,大多数情况下第一种选择就可以解决问题:</p>
<ul>
<li><strong>模型内部结构不变</strong>,可以在最上层加分类器,在最下层补充 embdding,也可以把模型输出当做特征<ul>
<li>一方面,删除一些对目标任务无效的 pretraining task head,像是预训练 LM 的 softmax 分类器,当然也可以留着做 multi-task</li>
<li>另一方面,在顶层或者底层加上目标任务需要的层,简单来讲可以加个 linear 层,复杂一点也可以把模型输出当做目标模型的输入</li>
</ul>
</li>
<li><strong>修改模型内部结构</strong>,如改成 encoder-decoder 模式,或者为目标任务加一些 adapters(像加在 transformer 上的 multi-head attention,layer norm)等<ul>
<li><a href="https://arxiv.org/pdf/1902.02671.pdf" target="_blank" rel="external">BERT and PALs: Projected Attention Layers for Efficient Adaptation in Multi-Task Learning</a></li>
<li><a href="https://arxiv.org/abs/1902.00751" target="_blank" rel="external">Parameter-Efficient Transfer Learning for NLP</a></li>
<li>Adaptation layer 在 CV 领域有更广泛的研究,这里提到的 adapters 是为了优化目标任务,而 CV 领域提到的自适应模块是为了 domain adaption 提出的,通常用来完成 source 和 target 数据的自适应,拉近两者的数据分布,使得网络效果更好,常见的有在分类器的前一层/几层加入适配层(如 MK-MMD),用来计算 source 和 target 的距离,加入损失进行训练</li>
</ul>
</li>
</ul>
<h1 id="Optimization"><a href="#Optimization" class="headerlink" title="Optimization"></a>Optimization</h1><p>几个需要考虑的问题:</p>
<ul>
<li><strong>选择更新哪些权重(Which weights)</strong><ul>
<li>不更新权重:feature extraction</li>
<li>更新权重:fine-tuning</li>
<li>Adapters</li>
<li><strong>feature extraction 还是 fine-tuning 取决于目标任务和预训练任务之间的相似性</strong></li>
</ul>
</li>
<li><strong>选择什么时候更新,以及怎样更新(What schedule)</strong><ul>
<li>top-bottom</li>
<li>gradual unfreezing</li>
<li>discriminative fine-tuning</li>
</ul>
</li>
<li><strong>考虑一些 trade-offs</strong><br> 时间/空间复杂度,性能要求</li>
</ul>
<h2 id="Which-weights"><a href="#Which-weights" class="headerlink" title="Which weights"></a>Which weights</h2><h3 id="Freeze-pretrained-weights"><a href="#Freeze-pretrained-weights" class="headerlink" title="Freeze pretrained weights"></a>Freeze pretrained weights</h3><p>来看图说话:</p>
<ol>
<li><strong>不更新预训练的权重,只训练目标任务相关的权重(比如新加的分类层)</strong><img src="http://images.shuang0420.cn/images/Sequential%20transfer%20learning%20in%20NLP/feature_extraction.png" class="ful-image" alt="Sequential%20transfer%20learning%20in%20NLP/feature_extraction.png"></li>
<li><strong>特征提取要注意的是不要傻傻的只用 top layer 的特征,可以学习各层特征的线性组合</strong><br><a href="https://arxiv.org/pdf/1802.05365.pdf" target="_blank" rel="external">Deep contextualized word representations 2018</a><br><a href="https://arxiv.org/abs/1705.08142" target="_blank" rel="external">Latent Multi-task Architecture Learning 2019</a><img src="http://images.shuang0420.cn/images/Sequential%20transfer%20learning%20in%20NLP/elmo.png" class="ful-image" alt="Sequential%20transfer%20learning%20in%20NLP/elmo.png"></li>
<li><strong>预训练特征当做下游任务的特征</strong><img src="http://images.shuang0420.cn/images/Sequential%20transfer%20learning%20in%20NLP/downstream.png" class="ful-image" alt="Sequential%20transfer%20learning%20in%20NLP/downstream.png"></li>
<li><strong>Adapters,在预训练模型结构已有的 layers 之间加入目标任务的适配器</strong>,如下图,只训练红色部分的权重<img src="http://images.shuang0420.cn/images/Sequential%20transfer%20learning%20in%20NLP/adapters.png" class="ful-image" alt="Sequential%20transfer%20learning%20in%20NLP/adapters.png">
</li>
</ol>
<h3 id="Change-pretrained-weights"><a href="#Change-pretrained-weights" class="headerlink" title="Change pretrained weights"></a>Change pretrained weights</h3><p>另外一种就是 fine-tuning 啦,用预训练的权重来初始化下游模型的参数,在迁移阶段训练所有参数</p>
<h2 id="What-schedule"><a href="#What-schedule" class="headerlink" title="What schedule"></a>What schedule</h2><p>决定好更新什么权重,下一步就要看用什么顺序,以及怎样的方式来更新了,记住我们的目标:</p>
<p><strong><em>We want to avoid overwriting useful pretrained information and maximize positive transfer.</em></strong></p>
<p>在一个完全不同的领域/任务上直接对所有层进行更新可能会带来不稳定的结果,所以更明智的选择是分层训练,给不同的 layer 一点时间来适应新的任务和数据,这感觉就像是回到了 DL 初期的 layer-wise 训练方法(<a href="https://www.cs.toronto.edu/~hinton/absps/fastnc.pdf" target="_blank" rel="external">Hinton et al., 2006</a>,<a href="https://papers.nips.cc/paper/3048-greedy-layer-wise-training-of-deep-networks.pdf" target="_blank" rel="external">Bengio et al., 2007</a>)。</p>
<p>Anyway,一个重要的指导原则是<strong>自顶向下(top-to-bottom)</strong>的更新,也就是先 freeze 住低层的参数,去更新高层的参数,因为高层的参数更加的 task-specific。这里要考虑的是 time 和 intensity,每一层更新的时间可以通过 freeze 其他层来控制,更新的强度可以通过学习率的变化来控制。另外,可以通过正则化来平衡更新与保留之间的关系。</p>
<h3 id="Time"><a href="#Time" class="headerlink" title="Time"></a>Time</h3><p>自底向上,从 embedding 到中间层到 top layer 再到 target layer 各层表示为:E -> L1 -> … Ln -> T。</p>
<ul>
<li><strong>Freezing all but the top layer</strong> 只训练 top layer Ln<br> <a href="https://arxiv.org/abs/1502.02791" target="_blank" rel="external">Long et al.,ICML 2015</a></li>
<li><strong>Chain-thaw</strong><br> <a href="https://www.aclweb.org/anthology/D17-1169" target="_blank" rel="external">Felbo et al., EMNLP 2017</a><ol>
<li>只训练 T 层参数</li>
<li>自底向上,每次只训练一层的参数,E -> L1 -> … -> Ln</li>
<li>训练所有层</li>
</ol>
</li>
<li><strong>Gradually unfreezing</strong><br> <a href="https://arxiv.org/abs/1801.06146" target="_blank" rel="external">Howard & Ruder, ACL 2018</a><br> 逐层解冻,先训练 T,训练 T + Ln,训练 T + Ln + Ln-1,直到全部放开训练所有层</li>
<li><strong>Sequential unfreezing</strong><br> <a href="https://arxiv.org/abs/1902.10547" target="_blank" rel="external">Chronopoulou et al., NAACL 2019</a><br> 用超参来决定 fine-tuning 的过程<ol>
<li>先训练新增参数,训练 n epochs</li>
<li>训练除 embedding 层外的所有层,训练 k epochs</li>
<li>训练所有层直到收敛</li>
</ol>
</li>
</ul>
<p>这里多数的方法到最后都会一起训练所有的参数</p>
<h3 id="Intensity"><a href="#Intensity" class="headerlink" title="Intensity"></a>Intensity</h3><p>降低学习率来防止重写有用信息,问题是什么时候降低学习率?</p>
<ul>
<li>Lower layers,捕捉底层信息的时候 </li>
<li>Early in training,模型还需要去适应目标分布</li>
<li>Late in training,模型快收敛的时候</li>
</ul>
<p>如 <a href="https://arxiv.org/abs/1801.06146" target="_blank" rel="external">ULMFiT</a> 一文提到了一些技巧,一个是 <strong>discriminative fine-tuning</strong>,每层设置一个学习率,越底层学习率越小,另一个是 <strong>slanted triangular learning rates</strong>,学习率先逐渐增加后逐渐下降,相当于 warm up。</p>
<h3 id="Regularization"><a href="#Regularization" class="headerlink" title="Regularization"></a>Regularization</h3><p>用来减小灾难性遗忘,通过一个正则项来让目标模型参数接近预训练参数,让模型不要忘记预训练时学到的东西。</p>
<ul>
<li>最简单的方法 <a href="https://www.aclweb.org/anthology/K17-1029/" target="_blank" rel="external">Wiese et al., CoNLL 2017</a><img src="http://images.shuang0420.cn/images/Sequential%20transfer%20learning%20in%20NLP/regularization.png" class="ful-image" alt="Sequential%20transfer%20learning%20in%20NLP/regularization.png"></li>
<li>高级一点的方法(elastic weight consolidation; EWC)<a href="https://arxiv.org/abs/1612.00796" target="_blank" rel="external">Overcoming catastrophic forgetting in neural networks</a><img src="http://images.shuang0420.cn/images/Sequential%20transfer%20learning%20in%20NLP/EWC.png" class="ful-image" alt="Sequential%20transfer%20learning%20in%20NLP/EWC.png"></li>
<li>如果任务之间很相似,可以用交叉熵来鼓励 source 和 target 的预测相近,类似蒸馏的做法<img src="http://images.shuang0420.cn/images/Sequential%20transfer%20learning%20in%20NLP/distill.png" class="ful-image" alt="Sequential%20transfer%20learning%20in%20NLP/distill.png">
</li>
</ul>
<h3 id="Trade-offs"><a href="#Trade-offs" class="headerlink" title="Trade-offs"></a>Trade-offs</h3><p>选择权重更新时,不可避免的要考虑空间、时间复杂度、性能等问题。在时间、空间复杂度的要求上,都是 feature extraction > adapters > fine-tuning。</p>
<p>考虑 performance 的话,有一条经验法则:</p>
<p><strong><em>If task source and target tasks are dissimilar, use feature extraction</em></strong> – <a href="https://arxiv.org/abs/1903.05987" target="_blank" rel="external">To Tune or Not to Tune? Adapting Pretrained Representations to Diverse Tasks</a></p>
<p>事实上,大部分情况下 feature extraction 和 fine-tuning 的效果都差不多,除非任务非常相似,那么 fine-tune 强,或者非常不相似,那么 feature extraction 更胜一筹。一个例子是,在文本相似度任务上,BERT 上进行 fine-tune 的效果比 feature extraction 显著要好很多,这大概是因为 BERT 的 NSP 任务和 STS 任务非常相似;同样的,skip-thoughts 和 quick-thoughts 同样也用了 NSP 任务,在 STS 这类相似度任务上表现的也很好;而相反,ELMo 这种纯 LM 预训练目标的模型在 sentence pair tasks 上 fine-tune 的表现就不如人意了。另外,对于文本相似度这类 sentence pair 的任务,通过实验也可以发现,它依赖的并不是顶层的预训练特征(如下图,用 4-5 层之后的特征效果提升就显得非常平缓了),这也解释了为什么 fine-tune 的方法会更好一些。</p>
<img src="http://images.shuang0420.cn/images/Sequential%20transfer%20learning%20in%20NLP/sts.png" class="ful-image" alt="Sequential%20transfer%20learning%20in%20NLP/sts.png">
<p>另外,Adapters 的效果和 fine-tuning 有的一拼,Transformers 结构相比于 LSTMs 要更容易 fine-tune,对超参更不敏感。</p>
<h1 id="More-signal"><a href="#More-signal" class="headerlink" title="More signal"></a>More signal</h1><p>目标任务的数据量/标签一般都比较少,所以我们通常会通过组合一些信号来提高效果,从最基础的在单目标任务上 fine-tune 单模型,可以延伸到从其他数据集/相关任务中收集信号(Weak Supervision, Multi-tasking and Sequential Adaptation),再到集成模型,结合多个 fine-tune 模型的预测。</p>
<h2 id="Basic-fine-tuning"><a href="#Basic-fine-tuning" class="headerlink" title="Basic fine-tuning"></a>Basic fine-tuning</h2><p>以一个分类任务为例,简单来说就是下面几步:</p>
<ul>
<li>从模型提取一个 fixed-length vector,可以是 CLS 的 hidden state,也可以是所有 hidden-states 的平均/最大池化</li>
<li>额外的分类层投射到分类空间</li>
<li>训练分类目标</li>
</ul>
<h2 id="Related-datasets-tasks"><a href="#Related-datasets-tasks" class="headerlink" title="Related datasets/tasks"></a>Related datasets/tasks</h2><p>从其他数据集和相关任务中收集更多监督信号。</p>
<ul>
<li><strong>Sequential adaptation</strong><ul>
<li>在相关数据集/任务上先做一次微调</li>
<li>适用于数据有限但有一些相似任务的情景,先在有更多数据的相关任务上进行 fine-tune,然后再在目标任务上 fine-tune</li>
<li>也可以在没有标注数据的领域数据上用 LM 等任务进行 fine-tune,然后在目标任务上 fine-tune</li>
<li><a href="https://arxiv.org/abs/1811.01088v2" target="_blank" rel="external">2018 Sentence Encoders on STILTs: Supplementary Training on Intermediate Labeled-data Tasks</a></li>
<li><a href="https://arxiv.org/abs/1901.11373" target="_blank" rel="external">2019 Learning and Evaluating General Linguistic Intelligence</a> 在目标任务上提高样本的复杂度</li>
</ul>
</li>
<li><strong>Multi-task fine-tuning with related tasks</strong><ul>
<li>如 NLI tasks in GLUE</li>
<li>每个 step 采样一个任务和一个 batch 来训练,多任务训练的方式训练几个 epochs,最后在目标任务上 fine-tune 几个 epochs</li>
<li>LM 很有用<ul>
<li>即使没有预训练也有用 <a href="https://arxiv.org/abs/1704.07156" target="_blank" rel="external">Semi-supervised Multitask Learning for Sequence Labeling</a></li>
<li>引入 lambda 比率 <a href="https://arxiv.org/abs/1902.10547" target="_blank" rel="external">An Embarrassingly Simple Approach for Transfer Learning from Pretrained Language Models</a> $L = L1 + \lambda L2$</li>
<li>这在 ULMFiT 里作为一个单独的步骤</li>
</ul>
</li>
</ul>
</li>
<li><strong>Dataset Slicing</strong><ul>
<li>when the model consistently underperforms on particular slices of the data<ul>
<li>用 error analysis 挑选子集</li>
<li>用经验自动选择一些挑战性的数据子集</li>
<li>auxiliary head 和 main head 一起训练</li>
</ul>
</li>
<li>只在特定的数据子集上训练额外的 head</li>
<li><a href="https://dawn.cs.stanford.edu/2019/03/22/glue/" target="_blank" rel="external">Massive Multi-Task Learning with Snorkel MeTaL</a></li>
</ul>
</li>
<li><strong>Semi-supervised learning</strong><ul>
<li>可以使模型预测结果和未标注的数据更加一致</li>
<li>基本思路是最小化在原始输入 x 上的预测与引入扰动后的输入 x’ 的预测之间的距离<img src="http://images.shuang0420.cn/images/Sequential%20transfer%20learning%20in%20NLP/perturbed.png" class="ful-image" alt="Sequential%20transfer%20learning%20in%20NLP/perturbed.png"></li>
<li>扰动可以是<ul>
<li>noise, masking <ul>
<li><a href="https://arxiv.org/abs/1809.08370" target="_blank" rel="external">2018 Semi-Supervised Sequence Modeling with Cross-View Training</a></li>
</ul>
</li>
<li>data augmentation, e.g. back-translation <ul>
<li><a href="https://arxiv.org/abs/1904.12848" target="_blank" rel="external">2019 Unsupervised Data Augmentation for Consistency Training</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 id="Ensembling"><a href="#Ensembling" class="headerlink" title="Ensembling"></a>Ensembling</h2><ul>
<li><strong>Ensembling models</strong><ul>
<li>on different tasks</li>
<li>on different dataset-splits</li>
<li>with different parameters (dropout, initializations…)</li>
<li>from variant of pre-trained models (e.g. cased/uncased)<img src="http://images.shuang0420.cn/images/Sequential%20transfer%20learning%20in%20NLP/ensemble.png" class="ful-image" alt="Sequential%20transfer%20learning%20in%20NLP/ensemble.png"></li>
</ul>
</li>
<li><strong>Knowledge distillation</strong><ul>
<li>把集成的大模型蒸馏到一个小模型 </li>
<li>利用 teacher (the ensemble) 模型的 soft targets 来训练一个 student model<ul>
<li>$-\sum_c Q(c|X)log(P_r(c|X))$</li>
</ul>
</li>
<li>teacher label 的相对概率包含了 teacher 模型怎样泛化的信息<img src="http://images.shuang0420.cn/images/Sequential%20transfer%20learning%20in%20NLP/distillation.png" class="ful-image" alt="Sequential%20transfer%20learning%20in%20NLP/distillation.png">
</li>
</ul>
</li>
</ul>
<p><strong>相关资料:</strong><br>Video: <a href="https://vimeo.com/359399507" target="_blank" rel="external">https://vimeo.com/359399507</a><br>Slides: <a href="https://tinyurl.com/NAACLTransfer" target="_blank" rel="external">https://tinyurl.com/NAACLTransfer</a><br>Colab: <a href="https://tinyurl.com/NAACLTransferColab" target="_blank" rel="external">https://tinyurl.com/NAACLTransferColab</a><br>Code: <a href="https://tinyurl.com/NAACLTransferCode" target="_blank" rel="external">https://tinyurl.com/NAACLTransferCode</a><br><a href="https://ruder.io/thesis/neural_transfer_learning_for_nlp.pdf" target="_blank" rel="external">Neural Transfer Learning for Natural Language Processing</a></p>
]]></content>
<summary type="html">
<p>NAACL 2019 tutorial on “Transfer Learning in Natural Language Processing” 的部分笔记,资料链接见文末。<br></p>
</summary>
<category term="NLP" scheme="http://www.shuang0420.cn/categories/NLP/"/>
<category term="Chatbot" scheme="http://www.shuang0420.cn/categories/NLP/Chatbot/"/>
<category term="NLP" scheme="http://www.shuang0420.cn/tags/NLP/"/>
<category term="Transfer Learning" scheme="http://www.shuang0420.cn/tags/Transfer-Learning/"/>
</entry>
<entry>
<title>论文笔记 - Pre-trained Models for Natural Language Processing</title>
<link href="http://www.shuang0420.cn/2020/05/07/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%20-%20Pre-trained%20Models%20for%20Natural%20Language%20Processing/"/>
<id>http://www.shuang0420.cn/2020/05/07/论文笔记 - Pre-trained Models for Natural Language Processing/</id>
<published>2020-05-07T02:02:27.000Z</published>
<updated>2020-09-10T12:26:31.000Z</updated>
<content type="html"><![CDATA[<p><a href="https://arxiv.org/abs/2003.08271" target="_blank" rel="external">Pre-trained Models for Natural Language Processing: A Survey</a> 花了一上午看完的综述,强烈推荐每个 NLPer 都读一读,很长一段时间内都能当做工具书来用(下一个 break-through 来临前)。<br><a id="more"></a></p>
<p>这篇作为笔记就记录下一些个人认为的重点,方便日后查阅。(不解释基础概念/模型,适合熟悉 PTMs 的人阅读)</p>
<p>先来说说为啥要用预训练模型:</p>
<ol>
<li>在大语料下预训练的模型可以学习到 universal language representations,来帮助下游任务</li>
<li>PTMs 提供了一个更好的初始化模型,可以提高目标任务的效果和加速收敛 </li>
<li>PTMs 可以看做是一种正则,防止模型在小数据集上的过拟合</li>
</ol>
<p>既然 PTMs 有这么大优势,那当然是,用它!用它!用它!</p>
<p>这篇综述从四个方面(<strong>Representation Types、Architectures、Pre-training Task Types、Extensions</strong>)对现有 PTMs (Pre-trained Models) 进行了系统分类,一幅图来概括全文精华:</p>
<img src="http://images.shuang0420.cn/images/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%20-%20Pre-trained%20Models%20for%20Natural%20Language%20Processing/taxonomy.png" class="ful-image" alt="taxonomy.png">
<img src="http://images.shuang0420.cn/images/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%20-%20Pre-trained%20Models%20for%20Natural%20Language%20Processing/resources.png" class="ful-image" alt="resources.png">
<h1 id="Representation-Types-and-Architectures"><a href="#Representation-Types-and-Architectures" class="headerlink" title="Representation Types and Architectures"></a>Representation Types and Architectures</h1><img src="http://images.shuang0420.cn/images/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%20-%20Pre-trained%20Models%20for%20Natural%20Language%20Processing/contextual_architectures.png" class="ful-image" alt="contextual_architectures.png">
<p>第一代的 PTMs 是预训练的 word embeddings,像 skip-gram, glove,可以捕捉一定的语义信息,但是它是 context-free(上下文无关)的,不能捕捉上下文 higher-level 的一些特征,像概念、多义性、句法特征、语义角色、指代等。</p>
<p>二代的 PTMs 则是预训练的 contextual encoders,融入了上下文信息,像 CoVe, ELMo, GPT, BERT。现代的 PTMs 通常在更大的语料库上训练,采用更加强大/深的网络结构(如 Transformer),以及新的预训练任务。</p>
<p>论文把 contextual encoders 分为了 Sequence Models 和 Graph-based models 两大类:<br><img src="http://images.shuang0420.cn/images/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%20-%20Pre-trained%20Models%20for%20Natural%20Language%20Processing/neural_contextual_encoders.png" class="ful-image" alt="neural_contextual_encoders.png"></p>
<p>有代表性的 PTMs 及其架构:<br><img src="http://images.shuang0420.cn/images/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%20-%20Pre-trained%20Models%20for%20Natural%20Language%20Processing/reprentative_ptms.png" class="ful-image" alt="reprentative_ptms.png"></p>
<h1 id="Pre-training-Task-Types"><a href="#Pre-training-Task-Types" class="headerlink" title="Pre-training Task Types"></a>Pre-training Task Types</h1><img src="http://images.shuang0420.cn/images/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%20-%20Pre-trained%20Models%20for%20Natural%20Language%20Processing/task_types.png" class="ful-image" alt="task_types.png">
<p>预训练任务分为三类:</p>
<ol>
<li><strong>Supervised learning (SL)</strong></li>
<li><strong>Unsupervised learning (UL)</strong></li>
<li><strong>Self-Supervised learning (SSL)</strong> 这一类在传统意义上也是 UL 的一种,不过这里把它们区分了开来,UL 指不用人类标注的有监督的标签,而 SSL 指标签可以自动从训练数据中产生,如 MLM 任务,SSL 的学习过程其实和 SL 一样</li>
</ol>
<p>一张表总结预训练任务及其对应的损失函数:</p>
<img src="http://images.shuang0420.cn/images/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%20-%20Pre-trained%20Models%20for%20Natural%20Language%20Processing/loss_function.png" class="ful-image" alt="loss_function.png">
<p><strong>LM(Language Modeling)</strong>是 NLP 中最常见的无监督任务,通常特指自回归或单向语言建模,BiLM 虽然结合了两个方向的语言模型,但只是两个方向的简单拼接,并不是真正意义上的双向语言模型。<strong>MLM(Masked Language Modeling)</strong>可以克服传统单向语言模型的缺陷,结合双向的信息,但是 [MASK] 的引入使得预训练和 fine-tune 之间出现 gap,<strong>PLM(Permuted Language Modeling)</strong>则克服了这个问题,实现了双向语言模型和自回归模型的统一。</p>
<p><strong>DAE(Denoising Autoencoder)</strong>接受部分损坏的输入,并以恢复原始输入为目标。与 MLM 不同,DAE 会给输入额外加一些噪声。</p>
<p><strong>CTL(Contrastive Learning)</strong> 的原理是在对比中学习,其假设是一些 observed pairs of text 在语义上比随机采样的文本更为接近。CTL 比 LM 计算复杂度更低。</p>
<p>一些补充:</p>
<p>文中 MLM 部分除了普通的 Seq2Seq MLM,还总结了一些 Enhanced MLM (E-MLM):</p>
<ul>
<li><strong>RoBERTa</strong>: dynamic masking</li>
<li><strong>UniLM</strong>: unidirectional, bidirectional, seq2seq prediction</li>
<li><strong>XLM</strong>: translation language modeling (TLM)</li>
<li><strong>Span-BERT</strong>: random contiguous words masking, span boundary objective</li>
<li><strong>StructBERT</strong>: span order recovery task</li>
<li>External knowledge….</li>
</ul>
<p>DAE 中一些破坏文本的方法:</p>
<ul>
<li><strong>Token Masking</strong></li>
<li><strong>Token Deletion</strong>: 模型需要预测删除的位置</li>
<li><strong>Text Infilling</strong>:像 SpanBERT,模型预测 mask 的 span 有几个单词</li>
<li><strong>Sentence Permutation</strong>:把文档分为句子然后随机打乱</li>
<li><strong>Document Rotation</strong>:选择一个单词然后 rotate 文档,模型预测文档的真实起始位置</li>
</ul>
<p>CTL 的一些任务:</p>
<ul>
<li><strong>Deep InfoMax (DIM)</strong>:比较难解释,上图</li>
</ul>
<img src="http://images.shuang0420.cn/images/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%20-%20Pre-trained%20Models%20for%20Natural%20Language%20Processing/DIM.png" class="ful-image" alt="DIM.png">
<ul>
<li><strong>Replaced Token Detection (RTD)</strong>:e.g., CBOW-NS 中的负样本选择可以看做是简单的 RTD, ELECTRA 利用生成器来选择替代序列中的某些 token, WKLM 替换某些实体为同一实体类型下的其他实体</li>
<li><strong>Next Sentence Prediction (NSP)</strong>:两个输入句子是否为训练数据中的连续片段</li>
<li><strong>Sentence Order Prediction (SOP)</strong>:两个连续片段作为正样本,而相同的两个连续片段互换顺序作为负样本。ALBERT 首次提出,NSP 同时做了 topic prediction 和 coherence prediction,而 topic prediction 太简单了模型会倾向用主题信息来做最后预测,而 SOP 更加聚焦在 coherence prediction 上</li>
</ul>
<h1 id="Extentions-of-PTMs"><a href="#Extentions-of-PTMs" class="headerlink" title="Extentions of PTMs"></a>Extentions of PTMs</h1><img src="http://images.shuang0420.cn/images/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%20-%20Pre-trained%20Models%20for%20Natural%20Language%20Processing/extensions.png" class="ful-image" alt="extensions.png">
<p>一些补充:</p>
<p>Knowledge-Enriched,外部知识的融入具体来说大概有下面几类:</p>
<ul>
<li><strong>Linguistic</strong> <ul>
<li>LIBERT 通过额外的 linguistic constraint task 来融入语言学知识</li>
<li>SentiLR 引入 token 级别的情感极性,改造 MLM 为 label-aware MLM</li>
<li>KnowBERT</li>
</ul>
</li>
<li><strong>Semantic</strong><ul>
<li>SenseBERT 不仅预测 masked token,还预测 token 在 WordNet 对应的 supersenses</li>
</ul>
</li>
<li><strong>Commonsense</strong><ul>
<li>ConceptNet, ATOMIC, 用来提高 GPT-2 在故事生成上的效果</li>
</ul>
</li>
<li><strong>Factual</strong><ul>
<li>ERNIE(THU), KnowBERT, K-BERT, KEPLER</li>
</ul>
</li>
<li><strong>Domain-specific</strong><ul>
<li>K-BERT</li>
</ul>
</li>
<li><strong>KG-conditioned language models</strong><ul>
<li>KGLM, LRLM</li>
</ul>
</li>
</ul>
<p>模型压缩的几种方法,很好理解</p>
<ul>
<li><strong>Model Pruning</strong>:CompressingBERT</li>
<li><strong>Weight Quantization</strong>: Q-BERT, Q8BERT</li>
<li><strong>Parameter Sharing</strong>: ALBERT</li>
<li><strong>Knowledge Distillation</strong><ul>
<li><strong>Distillation from soft target probablilites</strong>: DistilBERT</li>
<li><strong>Distillation from other knowledge</strong>: TinyBERT, MobileBERT, MiniLM</li>
<li><strong>Distillation to other structures</strong>: from transformer to RNN / CNN</li>
</ul>
</li>
<li><strong>Model Replacing</strong><ul>
<li>BERT-of-Theseus</li>
</ul>
</li>
<li><strong>Others</strong><ul>
<li>FastBERT,动态减少计算步骤</li>
</ul>
</li>
</ul>
<img src="http://images.shuang0420.cn/images/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%20-%20Pre-trained%20Models%20for%20Natural%20Language%20Processing/compression.png" class="ful-image" alt="compression.png">
<h1 id="Adapting-PTMs-to-Downstream-Tasks"><a href="#Adapting-PTMs-to-Downstream-Tasks" class="headerlink" title="Adapting PTMs to Downstream Tasks"></a>Adapting PTMs to Downstream Tasks</h1><p>迁移学习需要考虑的问题:</p>
<ol>
<li><strong>选择合适的预训练任务、模型框架和语料</strong></li>
<li><strong>选择合适的 layer</strong><br>Embedding only; Top layer; All layers (更灵活的方式是像 ELMo 一样自动选择最好的层)</li>
<li><strong>选择迁移方式(to tune or not to tune)</strong><br><strong>Feature extraction</strong>: pre-trained parameters are frozen<br><strong>Fine-tuning</strong>: pre-trained parameters are unfrozen and fine-tuned</li>
</ol>
<img src="http://images.shuang0420.cn/images/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%20-%20Pre-trained%20Models%20for%20Natural%20Language%20Processing/adapting.png" class="ful-image" alt="adapting.png">
<p><strong>Fine-tuning strategies:</strong></p>
<ul>
<li><strong>Two-stage fine-tuning</strong><ul>
<li>第一阶段,在一个<strong>中间任务/语料</strong>上进行迁移,第二阶段,迁移到目标任务</li>
<li><a href="https://www.ijcai.org/Proceedings/2019/0249.pdf" target="_blank" rel="external">Story ending predic- tion by transferable bert</a>: TransBERT</li>
<li><a href="https://arxiv.org/abs/1905.05583" target="_blank" rel="external">How to fine-tune BERT for text classification?</a></li>
<li><a href="https://arxiv.org/abs/1811.01088" target="_blank" rel="external">Sentence encoders on STILTs: Supplementary training on intermediate labeled-data tasks</a></li>
<li><a href="https://arxiv.org/abs/1705.03122" target="_blank" rel="external">Convolutional sequence to sequence learning</a></li>
</ul>
</li>
<li><strong>Multi-task fine-tuning</strong><ul>
<li>多任务和预训练互为补充</li>
<li><a href="https://arxiv.org/abs/1901.11504" target="_blank" rel="external">Multi-task deep neural networks for natural language understanding</a></li>
</ul>
</li>
<li><strong>Fine-tuning with extra adaptation modules</strong><ul>
<li>原始参数固定,在 PTMs 里接入一些 fine-tunable adaptation modules</li>
<li><a href="https://arxiv.org/abs/1902.02671" target="_blank" rel="external">BERT and PALs: Projected attention layers for efficient adaptation in multi-task learning</a></li>
<li><a href="https://arxiv.org/abs/1902.00751" target="_blank" rel="external">Parameter-efficient transfer learning for NLP</a></li>
</ul>
</li>
<li><strong>Others</strong><ul>
<li><a href="https://arxiv.org/abs/2002.10345" target="_blank" rel="external">Improving BERT fine-tuning via self-ensemble and self-distillation</a></li>
<li><a href="https://arxiv.org/abs/1801.06146" target="_blank" rel="external">Universal language model fine-tuning for text classification</a>: gradual unfreezing</li>
<li><a href="https://arxiv.org/abs/1902.10547" target="_blank" rel="external">An embarrassingly simple approach for transfer learning from pretrained language models</a>: sequential unfreezing </li>
</ul>
</li>
</ul>
<h1 id="Future-Direction"><a href="#Future-Direction" class="headerlink" title="Future Direction"></a>Future Direction</h1><ul>
<li><strong>Upper Bound of PTMs</strong><ul>
<li>PTMs 并没有发展到其上限。目前大多数的 PTMs 都可以通过使用更多的步长以及更大的数据集来提升性能,因此一个实际的方向是在现有的软/硬件基础上,去设计更高效的模型结构、自监督预训练任务、优化器和训练技巧,如 ELECTRA</li>
</ul>
</li>
<li><strong>Architecture of PTMs</strong><ul>
<li>Transformer 的主要局限在于其计算复杂度(输入长度的平方)。GPU 显存大小的限制使得多数 PTMs 无法处理超过 512 个 token 的序列长度。打破这一限制需要改进 Transformer 的结构设计,如 Transformer-XL。设计深层神经网络结构是很有挑战性的任务,或许使用如神经结构搜索 (NAS) 这类自动化的方案</li>
</ul>
</li>
<li><strong>Task-oriented Pre-training and Model Compression</strong><ul>
<li>在实践中,不同的目标任务需要 PTMs 的不同功能。PTMs 和下游任务的差异通常在于<strong>模型架构与数据分发</strong>。更大的差异可能会使得 PTMs 的使用收益更小,比如 text generation 和 text matching 的任务就有很大差异</li>
<li>大型 PTMs 应用到实际场景时面临的<strong>低容量设备和低延迟应用</strong>的要求:为下游任务精心设计特定的模型结构与预训练任务,或者直接从现有的 PTMs 中提取部分与任务有关的知识</li>
<li>使用模型蒸馏技术对现有的 PTMs 进行教育,来完成目标任务</li>
</ul>
</li>
<li><strong>Knowledge Transfer Beyond Fine-tuning</strong><ul>
<li>提高 Fine-tuning 的参数利用效率。之前 fine-tune 中的参数效率很低,要为每个下游任务 fine-tune 各自的参数。一个改进方案是之前提到过的固定 PTMs 的原始参数,并为特定任务添加小的 fine-tunable adaptation modules,这样就可以使用共享的 PTM 来支持多个下游任务</li>
<li>更灵活的从 PTMs 中挖掘知识,如 feature extraction, knowledge distillation, data augmentation, using PTMs as external knowledge</li>
</ul>
</li>
<li><strong>Interpretability and Reliability of PTMs</strong><ul>
<li>可解释性:PTMs 的深层非线性结构/Transformer 类结构/语言的复杂性使得解释 PTM 变得更加困难</li>
<li>可靠性:PTMs 在对抗性样本中显得非常脆弱。Adversarial defenses 也是一个非常有前景的方向</li>
</ul>
</li>
</ul>
]]></content>
<summary type="html">
<p><a href="https://arxiv.org/abs/2003.08271">Pre-trained Models for Natural Language Processing: A Survey</a> 花了一上午看完的综述,强烈推荐每个 NLPer 都读一读,很长一段时间内都能当做工具书来用(下一个 break-through 来临前)。<br></p>
</summary>
<category term="NLP" scheme="http://www.shuang0420.cn/categories/NLP/"/>
<category term="Chatbot" scheme="http://www.shuang0420.cn/categories/NLP/Chatbot/"/>
<category term="NLP" scheme="http://www.shuang0420.cn/tags/NLP/"/>
<category term="PTM" scheme="http://www.shuang0420.cn/tags/PTM/"/>
</entry>
<entry>
<title>NLP 2018 Highlights</title>
<link href="http://www.shuang0420.cn/2019/01/20/NLP%202018%20Highlights/"/>
<id>http://www.shuang0420.cn/2019/01/20/NLP 2018 Highlights/</id>
<published>2019-01-20T01:02:27.000Z</published>
<updated>2020-09-10T12:26:31.000Z</updated>
<content type="html"><![CDATA[<p>近来很多大拿做了 2018 年 NLP 的回顾,今天推荐一波 Elvis Saravia 的一篇报告,总结了上一年 NLP 学术界和工业界发生的大事,也包括 SOTA 的论文结果及有趣的研究方向,每个 NLPer 闲下来都可以读一读。<br><a id="more"></a></p>
<img src="http://images.shuang0420.cn/images/NLP%202018%20highlights/contents1.png" class="ful-image" alt="/Users/xushuang/blog/static/images/NLP%202018%20highlights/contents1.png">
<img src="http://images.shuang0420.cn/images/NLP%202018%20highlights/contents2.png" class="ful-image" alt="/Users/xushuang/blog/static/images/NLP%202018%20highlights/contents2.png">
<p>18 年 1 月在知乎上的回答 <a href="https://www.zhihu.com/question/265118704/answer/292191686" target="_blank" rel="external">在NLP领域,现阶段最有希望突破深度学习牢笼的研究/思路有哪些? - 徐阿衡的回答 - 知乎</a>,部分方向在这一年都有了可喜的突破。</p>
<img src="http://images.shuang0420.cn/images/NLP%202018%20highlights/zhihu1.png" class="ful-image" alt="/Users/xushuang/blog/static/images/NLP%202018%20highlights/zhihu1.png">
<img src="http://images.shuang0420.cn/images/NLP%202018%20highlights/zhihu2.png" class="ful-image" alt="/Users/xushuang/blog/static/images/NLP%202018%20highlights/zhihu2.png">
<p>不容辩驳,18 年最大的亮点还是在 <strong>transfer learning</strong>,从 <a href="https://arxiv.org/abs/1802.05365" target="_blank" rel="external">ELMo</a> 到 <a href="https://arxiv.org/abs/1801.06146" target="_blank" rel="external">ULMFit</a> 到 <a href="https://blog.openai.com/language-unsupervised/" target="_blank" rel="external">GPT</a> 到 <a href="https://arxiv.org/pdf/1810.04805.pdf" target="_blank" rel="external">BERT</a>,性能横扫各大 NLP 测试任务。然而除了 BERT,迁移学习在其他方向上也有新的进展,如</p>
<ul>
<li>任务型对话中,利用迁移学习将已经学好大语种的 <a href="https://github.com/wenhuchen/Cross-Lingual-NBT" target="_blank" rel="external">dialog state tracking</a> 迁移至小语种 </li>
<li><a href="https://arxiv.org/pdf/1804.08328.pdf" target="_blank" rel="external">测量并利用视觉任务之间的关联性</a>来避免重复学习,用更少的数据学习“一组”任务</li>
<li><a href="https://arxiv.org/pdf/1806.05662.pdf" target="_blank" rel="external">GLoMo</a> 学习图表示,从大规模无标注数据中学习数据单元之间的依赖关系,输出隐关系图,将图迁移到下游任务提高任务性能</li>
<li>…</li>
</ul>
<p>个人比较关心的是 <strong>对话机器人(Conversational AI)</strong> 和 <strong>医疗健康(Health and Lifestyle)</strong> 方向,重点关注,和各位分享一下~</p>
<p>一方面,对话机器人在车载(<a href="https://www.slashgear.com/mercedes-benz-mbux-infotainment-system-a-revolution-with-ai-natural-language-and-more-09514619/" target="_blank" rel="external">奔驰MBUX</a>)、电商(<a href="https://www.pymnts.com/facebook/2018/patent-ecommerce-messenger-chatbot-social-media-ai/" target="_blank" rel="external">Facebook e-Commerce messager bot</a>)、银行(<a href="https://bankinnovation.net/2018/01/conversational-banking-may-already-be-mainstream-mastercard-says/" target="_blank" rel="external">Mastercard</a>)、保险(<a href="https://www.financialexpress.com/industry/askarvi-this-startup-sells-insurance-over-mobile-chat-and-plans-to-make-agents-redundant-in-a-few-years-time/1270418/" target="_blank" rel="external">AskArvi</a> )等各领域都有广泛的应用,另一方面 <strong>情感识别</strong> 成为 <strong>对话机器人</strong> 一个重要方向,<a href="https://www.wired.co.uk/article/google-home-amazon-alexa-apple-homepod-voice-recognition" target="_blank" rel="external"> Wired.com</a> 解释了语音情感识别如何帮助机器与人建立健康的关系,初创公司 Hugging Face 获得 <a href="http://www.alleywatch.com/2018/05/hugging-face-raises-4m-to-create-emotionally-intelligent-chatbots/" target="_blank" rel="external">400万美元融资</a>,来打造情感智能聊天机器人。另外在情感分析领域,学术界也涌现了大量有趣的 paper</p>
<ul>
<li><a href="https://arxiv.org/abs/1801.07883" target="_blank" rel="external">Deep Learning for Sentiment Analysis : A Survey</a></li>
<li><a href="https://arxiv.org/pdf/1704.01074.pdf" target="_blank" rel="external">Emotional Chatting Machine</a></li>
<li>情感领域的 <a href="https://nlp.stanford.edu/pubs/li2018transfer.pdf" target="_blank" rel="external">style transfer</a></li>
<li>利用 <a href="https://nlp.stanford.edu/seminar/details/pbhattacharyya.pdf" target="_blank" rel="external">multimodal learning</a> 做的 sarcasm detection</li>
<li><a href="https://arxiv.org/abs/1805.09746" target="_blank" rel="external">flow of emotions over a book</a></li>
<li>…</li>
</ul>
<p>之前预测的很难有突破的 <strong>常识(common sense)</strong>,Allen AI 斥巨资(125 million 美元)在 <a href="https://www.paulallen.com/ai-common-sense-project-alexandria/" target="_blank" rel="external">Alexandria 项目</a> 上,来支持开发具有常识的 AI,可以期待一下~</p>
<p>当然对话机器人的发展也不是一帆风顺只有鲜花与赞好,Wired 发了一篇文章来讨论 <a href="https://yq.aliyun.com/articles/%5Blink%5D" target="_blank" rel="external">Facebook 虚拟助理 M 的现状</a> ,以及公司为何计划将其关闭。</p>
<p>而在 <strong>医疗健康</strong> 领域,通过 NLP 技术,初创公司 <a href="http://searchcio.techtarget.com/news/252435577/Deep-learning-algorithms-power-startups-beauty-database" target="_blank" rel="external">Proven Beauty</a> 向消费者提供定制化的护肤产品线;<a href="https://hbr.org/2018/05/stitch-fixs-ceo-on-selling-personal-style-to-the-mass-market" target="_blank" rel="external">Stitch</a> 销售具有个人风格的时尚;<a href="https://healthitanalytics.com/news/ehr-natural-language-processing-identifies-care-guideline-adherence" target="_blank" rel="external">Jessica Kent </a> 将 NLP 应用于电子医疗记录,精确分析数据来提高心脏衰竭病人的护理工作;<a href="https://www.forbes.com/sites/brucejapsen/2018/08/01/anthem-taps-artificial-intelligence-space-with-allergy-research-trial/#66dcc0e96ccc" target="_blank" rel="external">Anthem 与 doc.ai</a> 合作分析并预测过敏模式;<a href="https://venturebeat.com/2018/03/01/woebot-raises-8-million-for-its-ai-therapist/" target="_blank" rel="external">Woebot</a> 作为自动心理治疗机器人获得 A 轮 800 万美元融资;<a href="https://www.linguamatics.com/blog/ai-siblings-nlp-and-machine-learning-better-drug-discovery?platform=hootsuite" target="_blank" rel="external">Linguamatics</a> 提供新药研发的工具;机器在 CT 扫描中的疾病检测比人类肿瘤学家的诊断速度<a href="https://healthitanalytics.com/news/deep-learning-ids-neurological-scans-150-times-faster-than-humans" target="_blank" rel="external">快150倍</a>;<a href="https://www.healthdatamanagement.com/news/nlp-finds-links-between-genomic-anomalies-cancer-drug-responses" target="_blank" rel="external">文本挖掘技术</a> 能根据病人的生物标记制定癌症治疗方案……可以说 2018 年 AI 在医疗健康领域焕发着勃勃生机,而在学术界的 <strong>clinical NLP</strong> 方向,也有一些不错的 paper:</p>
<ul>
<li><a href="https://ieeexplore.ieee.org/document/8411813/" target="_blank" rel="external">数据整合</a></li>
<li>最火的 CT 扫描等医疗影像相关任务</li>
<li>NLP 在 <a href="https://www.sciencedirect.com/science/article/pii/S1532046418302016?dgcid=raven_sd_aip_email" target="_blank" rel="external">clinical informatics research</a> 的应用和挑战</li>
<li><a href="https://arxiv.org/pdf/1811.08592.pdf" target="_blank" rel="external">CV、语音、NLP 相结合来预测抑郁程度</a></li>
<li><a href="https://arxiv.org/pdf/1804.01486.pdf" target="_blank" rel="external">用多模态医疗数据训练词向量</a>,学习医学概念</li>
<li>…</li>
</ul>
<p>除了在对话机器人和医疗健康领域,NLP 在金融、法律和广告等行业中也有崭新的表现,如 ASIC(Australian Securities and Investments Commission)希望利用 NLP 加强管理<a href="http://idm.net.au/article/0011865-asic-wants-talk-new-language-nlp" target="_blank" rel="external">公司和金融服务法律</a>;Tumi 使用 NLP 技术进行<a href="https://digiday.com/marketing/tumi-using-ai-marketing-campaigns-online-stores/" target="_blank" rel="external">目标营销</a>;华尔街的各大金融公司也在 NLP 和 ML 上下了血本,希望能实现 <a href="https://www.cnbc.com/2018/10/19/-artificial-intelligence-is-changing-how-investors-money-is-managed.html" target="_blank" rel="external">自动化投资管理</a>;律所也在用 AI 技术对战……</p>
<p>报告自然是不止这些,还介绍了许多有趣的工作像 <a href="https://arxiv.org/pdf/1803.09473.pdf" target="_blank" rel="external">Code2vec</a>、<a href="https://magenta.tensorflow.org/music-transformer" target="_blank" rel="external">长篇音乐生成</a>、<a href="https://thenextweb.com/artificial-intelligence/2018/08/10/microsofts-ai-can-convert-images-into-chinese-poetry/" target="_blank" rel="external">看图写诗</a>、<a href="https://medium.com/@animeshsk3/t2f-text-to-face-generation-using-deep-learning-b3b6ba5a5a93" target="_blank" rel="external">通过文字描述生成人脸</a>等等等等,阿衡都觉得颇为之有趣~~ 公众号回复 <strong>2018 NLP</strong> 就可以获取原文 PDF 啦~</p>
]]></content>
<summary type="html">
<p>近来很多大拿做了 2018 年 NLP 的回顾,今天推荐一波 Elvis Saravia 的一篇报告,总结了上一年 NLP 学术界和工业界发生的大事,也包括 SOTA 的论文结果及有趣的研究方向,每个 NLPer 闲下来都可以读一读。<br></p>
</summary>
<category term="Others" scheme="http://www.shuang0420.cn/categories/Others/"/>
<category term="AI" scheme="http://www.shuang0420.cn/tags/AI/"/>
<category term="NLP" scheme="http://www.shuang0420.cn/tags/NLP/"/>
<category term="chatbot" scheme="http://www.shuang0420.cn/tags/chatbot/"/>
</entry>
<entry>
<title>知识抽取-事件抽取</title>
<link href="http://www.shuang0420.cn/2018/10/15/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/"/>
<id>http://www.shuang0420.cn/2018/10/15/知识抽取-事件抽取/</id>
<published>2018-10-15T11:02:27.000Z</published>
<updated>2022-03-13T08:21:40.692Z</updated>
<content type="html"><![CDATA[<p>接上一篇知识抽取-实体及关系抽取,前置知识在这一篇不多做解释啦。<br><a id="more"></a></p>
<p>事件是促使事情状态和关系改变的条件[Dong et.al., 2010]。目前已存在的知识资源(如维基百科等) 所描述实体及实体间的关系大多是静态的,而事件能描述粒度更大的、动态的、 结构化的知识,是现有知识资源的重要补充。</p>
<p>与<a href="http://www.shuang0420.cn/2018/09/15/知识抽取-实体及关系抽取/">关系抽取</a>相比,事件抽取同样需要从文本中抽取 predicate 和对应的 arguments,但不同的是,关系抽取的问题是 binary 的,且两个 arguments 通常都会在同一个句子中出现,而事件抽取的难点在于,有多个 arguments 和 modifiers,可能会分布在多个句子中,且有些 arguments 不是必须的(some of which are omitted in any given instance of an event),这使得 bootstrapping/distant learning/coreference 都变得非常困难。</p>
<p>事件抽取的任务可以分两大类:</p>
<ul>
<li><strong>事件识别和抽取</strong><br>从描述事件信息的文本中识别并抽取出事件信息并以结构化的形式呈现出来,包括发生的时间、地点、参与角色以及与之相关的动作或者状态的改变。</li>
<li><strong>事件检测和追踪</strong><br>事件检测与追踪旨在将文本新闻流按照其报道的事件进行组织,为传统媒体多种来源的新闻监控提供核心技术,以便让用户了解新闻及其发展。具体而言,事件发现与跟踪包括三个主要任务:<strong>分割,发现和跟踪</strong>,将新闻文本分解为事件, 发现新的(不可预见的)事件,并跟踪以前报道事件的发展。<br>事件发现任务又可细分为<strong>历史事件发现</strong>和<strong>在线事件发现</strong>两种形式,前者目标是从按时间排序的新闻文档中发现以前没有识别的事件,后者则是从实时新闻流中实时发现新的事件。</li>
</ul>
<p>本文的重点在于事件识别与抽取。首先看一下相关的核心概念:</p>
<ul>
<li><strong>事件描述(Event Mention)</strong><br>描述事件的词组/句子/句群,包含一个 trigger 以及任意数量的 arguments</li>
<li><strong>事件触发(Event Trigger)</strong><br>事件描述中最能代表事件发生的词汇,决定事件类别的重要特征,一般是动词或者名词</li>
<li><strong>事件元素(Event Argument)</strong><br>事件的重要信息,或者说是实体描述(entity mention),主要由实体、属性值等表达完整语义的细粒度单位组成</li>
<li><strong>元素角色(Argument Role)</strong><br>事件元素在事件中扮演的角色,事件元素与事件的语义关系,可以理解为 slot</li>
<li><strong>事件类型(Event Type)</strong></li>
</ul>
<h1 id="事件识别和抽取"><a href="#事件识别和抽取" class="headerlink" title="事件识别和抽取"></a>事件识别和抽取</h1><p>直观上来看,可以把事件抽取的任务理解成从文本中找到特定类别的事件,然后进行填表的过程。<br><img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/general.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/general.png"></p>
<p>严肃些看下事件识别和抽取的任务定义:</p>
<blockquote>
<p>Given a text document, an event extraction system should <strong>predict event triggers</strong> with specific <strong>sub-types</strong> and <strong>their arguments for each sentence</strong>.</p>
</blockquote>
<p>也就是说,事件抽取任务最基础的部分包括:</p>
<ul>
<li>识别事件触发词及事件类型 </li>
<li>抽取事件元素(Event Argument)同时判断其角色(Argument Role)</li>
<li>抽出描述事件的词组或句子</li>
</ul>
<p>当然还有一些其他的子任务包括事件属性标注、事件共指消解等。</p>
<p>事件抽取大多是分阶段进行,通常由 trigger classifier 开始,如果有 trigger,把 trigger 以及它的上下文作为特征进行分类判断事件类型,再进行下一步的 argument classifier,对句子中的每个 entity mention 进行分类,判断是否是 argument,如果是,判定它的角色。</p>
<h2 id="基于模式匹配的方法"><a href="#基于模式匹配的方法" class="headerlink" title="基于模式匹配的方法"></a>基于模式匹配的方法</h2><p>MUCs 最开始,事件抽取的系统都是基于人工编写的规则,基于语法树或者正则表达式,如 CIRCUS (Lehnert 1991), RAPIER (Califf & Mooney 1997), SRV (Freitag 1998), AutoSlog (Riloff 1993), LIEP (Huffman 1995), PALKA (Kim & Moldovan 1995), CRYSTAL (Soderland et al. 1995), HASTEN (Krupka 1995) 等等,后来,慢慢的有了监督学习的模型,在 ACE 的阶段,大多数系统都是基于监督学习了,但由于标注一致性的问题,系统的效果普遍较差,ACE 事件抽取只举行了一次,在 2005 年。</p>
<p>下面先来看一下基于模板的抽取方法,基本都是通过 <strong>句法(syntactic)</strong> 和 <strong>语义约束(semantic constraints)</strong> 来进行识别。</p>
<h3 id="基于人工标注语料"><a href="#基于人工标注语料" class="headerlink" title="基于人工标注语料"></a>基于人工标注语料</h3><p>在早期,模板创建过程通常从一个大的标注集开始,模板的产生完全基于人工标注语料,学习效果高度依赖于人工标注质量。</p>
<ul>
<li><strong>AutoSlog</strong>(Riloff)<br>基本假设:<br>a. 事件元素首次提及之处即可确定该元素与事件间的关系<br>b. 事件元素周围的语句中包含了事件元素在事件中的角色描述<br>通过监督学习和人工审查来建立抽取规则。通过训练数据中已经填充好的槽(filled slot),AutoSlog 解析 slot 附近的句法结构,来自动形成抽取规则,由于这个过程产生的模板 too-general,所以需要人工来审核。本质上形成的是一个字典。<br>举个例子<br><em>Ricardo Castellar, the mayor, was kidnapped yesterday by the FMLN.</em><br>假设 Ricardo Castellar 被标注成了 victim,AutoSlog 根据句法分析判断出 Ricardo Castellar 是主语,然后触发了主语的相关规则 (subj) passive-verb,将句子中相关的单词填充进去就得到了规则 (victim) was kidnapped,所以在之后的文本中,只要 kidnapped 在一个被动结构中出现,它对应的主语就会被标记为 victim。</li>
<li><strong>PALKA</strong><br>基本假设:特定领域中高频出现的语言表达方式是可数的<br>用语义框架和短语模式结构来表示特定领域中的抽取模式,通过融入 WordNet 的语义信息,PALKA 在特定领域可取得接近纯人工抽取的效果。</li>
</ul>
<h3 id="基于弱监督"><a href="#基于弱监督" class="headerlink" title="基于弱监督"></a>基于弱监督</h3><p>人工标注耗时耗力,且存在一致性问题,而弱监督方法不需要对语料进行完全标注,只需人工对语料进行一定的预分类或者制定种子模板,由机器根据预分类语料或种子模板自动进行模式学习。</p>
<p>一些系统:</p>
<ul>
<li><strong>AutoSlog-TS</strong><br>Riloff and Shoen, 1995<br>AutoSlog-TS 不需要进行文本的标注,只需要一个预先分类好的训练语料,类别是与该领域相关还是不相关。过程是先过一遍语料库,对每一个名词短语(根据句法分析识别)都产生对应的抽取规则,然后再整体过一遍语料库,产生每个规则的一些相关统计数据,基本的 idea 是与不相关文本相比,<strong>在相关文本中更常出现的抽取规则更有可能是好的抽取规则</strong>。假设训练语料中相关与不相关的文本比例是 1:1,对产生的每条抽取规则计算相关比率 relevance rate,相关文档中出现规则的实例数/整个语料库中出现规则的实例数,那么 relevance rate < 50% 的抽取规则就被丢弃了,剩下的规则会按照 relevance_rate * log(frequency) 的形式从高到低进行排序,然后由人工进行审核。</li>
<li><strong>TIMES</strong><br>Chai and Biermann, 1998<br>引入了领域无关的概念知识库 WordNet,提升模式学习的泛化能力,并通过人工或规则进行词义消歧,使最终的模式更加准确</li>
<li><strong>NEXUS</strong><br>Piskorski et.al., 2001; Tanev et.al., 2008<br>用聚类对语料进行预处理</li>
<li><strong>GenPAM</strong><br>Jiang, 2005<br>在由特例生成泛化模式的学习过程中,有效利用模式间的相似性实现词义消歧,最大限度地减少了人工的工作量和对系统的干预</li>
</ul>
<h3 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h3><p>基于模式匹配的方法在特定领域中性能较好,知识表示简洁,便于理解和后续应用,但对于语言、领域和文档形式都有不同程度的依赖,覆盖度和可移植性较差。</p>
<p>模式匹配的方法中,模板准确性是影响整个方法性能的重要因素。在实际应用中,模式匹配方法应用非常广泛,主要特点是高准确率低召回率,要提高召回率,一是要建立更完整的模板库,二是可以用半监督的方法来建 trigger 字典。</p>
<h2 id="基于统计-传统机器学习"><a href="#基于统计-传统机器学习" class="headerlink" title="基于统计 - 传统机器学习"></a>基于统计 - 传统机器学习</h2><p>建立在统计模型基础上,事件抽取方法可以分为 pipeline 和 joint model 两大类。</p>
<h3 id="Pipeline"><a href="#Pipeline" class="headerlink" title="Pipeline"></a>Pipeline</h3><p>将事件抽取任务转化为多阶段的分类问题(管道抽取),需要顺序执行下面的分类器:</p>
<ol>
<li><strong>事件触发词分类器(Trigger Classifier)</strong><br>判断词汇是否是事件触发词,以及事件类别</li>
<li><strong>元素分类器(Argument Classifier)</strong><br>词组是否是事件元素</li>
<li><strong>元素角色分类器(Role Classifier)</strong><br>判定元素的角色类别</li>
<li><strong>属性分类器(Attribute Classifier)</strong><br>判定事件属性</li>
<li><strong>可报告性分类器(Reportable-Event Classifier)</strong><br>判定是否存在值得报告的事件实例</li>
</ol>
<p>分类器可以用 MaxEnt, SVM。重点还是在于提取和集成有区分性的特征,包括 <strong>句子级信息</strong> 和 <strong>篇章级信息</strong>。</p>
<p><strong>句子级信息:</strong>与候选词相关的词法特征、上下文特征、实体特征、句法特征、语言学特征等,如:<br><img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/features.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/features.png"><br><strong>篇章级特征:</strong><br>跨文档利用全局信息。对于一个句子级的抽取结果不仅要考虑当前的置信度,还要考虑与待抽取文本相关的文本对它的影响,以及全局信息如事件与话题的关系,事件与事件的共现信息等,主要工作有:</p>
<ul>
<li>Ji and Grishman, 2008</li>
<li>Liao and Grishman, 2010</li>
<li>Hong et.al., 2011</li>
<li>Liu et.al., 2016a</li>
</ul>
<p>早期大部分的研究都是基于 Pipeline 方法,然而它的问题也很明显:</p>
<ul>
<li>误差传递,导致性能衰减</li>
<li>各环节预测任务独立,缺少互动,如忽略了事件触发词和事件元素之间的相互影响</li>
<li>无法处理全局的依赖关系</li>
</ul>
<h3 id="Joint-Model"><a href="#Joint-Model" class="headerlink" title="Joint Model"></a>Joint Model</h3><p>又分为 Joint Inference 和 Joint Modeling 两种。<br><img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/joint_inference.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/joint_inference.png"><br><strong>Joint Inference</strong> 使用集成学习的思路,将各模型通过整体优化目标整合起来,可以通过整数规划等方法进行优化。<br><strong>Joint Modeling (Structured)</strong> 又可以称为基于结构的方法,将事件结构看作依存树,抽取任务相应转化为依存树结构预测问题,触发词识别和元素抽取可以同时完成,共享隐层特征,使用搜索进行求解,避免了误差传播导致的性能下降,另外,全局特征也可以从整体的结构中学习得到,从而使用全局的信息来提升局部的预测。相关工作有:</p>
<ul>
<li>Li et.al., 2013a<br>Li 提出基于结构感知机的联合模型同时完成事件触发词识别和事件元素识别两个子任务,并通过 beam search 缩小搜索解空间</li>
<li>Li et.al., 2014<br>为了利用更多的句子级信息,Li 等提出利用结构预测模型将实体、关系和事件进行联合抽取</li>
</ul>
<p>尽管 Li 等人的联合系统优势明显,但在未见词和特征上缺乏泛化,人工提取的特征集是离散表达,能力有限。</p>
<p>几种方法的 trigger 和 argument 抽取结果,可以看出,实体之间协同消歧对效果提升非常明显<br><img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/perf1.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/perf1.png"></p>
<h2 id="基于统计-深度学习"><a href="#基于统计-深度学习" class="headerlink" title="基于统计 - 深度学习"></a>基于统计 - 深度学习</h2><p>上面的方法在特征提取过程中还是会依赖依存分析、句法分析、词性标注等传统的外部 NLP 工具,还是会造成误差积累,另外有些语言和领域并没有这类处理工具,加之特征也需要人工设定,2015 年起基于深度学习的事件抽取方法逐渐成为研究热点,相比于传统机器学习,深度学习方法优势明显:</p>
<ol>
<li>减少对外部 NLP 工具的依赖 , 甚至不依赖 NLP 工具 , 建立成端对端的系统</li>
<li>使用词向量作为输入,蕴含更为丰富的语言特征</li>
<li>自动提取句子特征, 避免了人工特征设计的繁琐工作</li>
</ol>
<h3 id="Pipeline-DMCNN"><a href="#Pipeline-DMCNN" class="headerlink" title="Pipeline - DMCNN"></a>Pipeline - DMCNN</h3><p><a href="https://pdfs.semanticscholar.org/ca70/480f908ec60438e91a914c1075b9954e7834.pdf" target="_blank" rel="external">Event Extraction via Dynamic Multi-Pooling Convolutional Neural Networks Yubo Chen et. al., ACL 2015</a></p>
<p>自然语言处理中,传统 CNN 使用的最大池化对一个 feature map 只能得到一个最大值,这对事件抽取并不适用,因为事件抽取中一个句子中可能会包含多个事件,一个 argument candidate 在不同的 trigger 下也会扮演不同的角色,传统的最大池化只保留“最重要”的信息,而丢失的信息会导致 multiple-event sentence 下的事件漏分。DMCNN 使用动态多池化卷积能实现对一个句子中不同部分的最大值获取,以保留更多有价值的信息,逻辑和 PCNN 相似。</p>
<p>DMCNN 作者把事件抽取看做两个阶段的多分类任务,第一步是<strong>触发词分类(trigger classification)</strong>,利用 DMCNN 对句子中每个词进行分类,判断是否是触发词,如果句子中存在触发词,执行第二步<strong>论元分类(argument classification)</strong>,同样使用 DMCNN,给 trigger 分配 arguments,同时匹配 arguments 到 role,以第二个任务为例介绍一下过程。</p>
<img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/dynamic_cnn.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/dynamic_cnn.png">
<p>主要包括四个部分,以 argument classification 为例:</p>
<ol>
<li><strong>词向量学习;</strong></li>
<li><strong>Lexical-level 词汇级别特征提取;</strong><ul>
<li>候选论元/触发词及其前后单词的词向量 </li>
</ul>
</li>
<li><strong>Sentence-level 句子级别特征提取;</strong><ul>
<li>输入特征:<ul>
<li>Context-word feature(CWF)</li>
<li>Position feature(PF)<ul>
<li>当前词语和候选论元/触发词之间的相对距离,距离值用向量表示,随机初始化</li>
</ul>
</li>
<li>Event-type feature(EF)<ul>
<li>当前 trigger 对应的事件类型特征</li>
</ul>
</li>
<li>CWF, PF, EF 拼接作为卷积的输入</li>
</ul>
</li>
<li>卷积后,根据 candidate argument 和 predicted trigger 将 feature map 分成三部分,分别对各部分进行最大池化</li>
</ul>
</li>
<li><strong>Output 分类输出</strong><ul>
<li>拼接词汇级别和句子级别的特征 F=[L, P]</li>
<li>O = WF+b 算分,进行 softmax,得到 argument role 的类别</li>
</ul>
</li>
</ol>
<p><strong>Trigger classification 阶段:</strong></p>
<ul>
<li><strong>Lexical-level</strong><ul>
<li>只使用候选触发词和其左右token</li>
</ul>
</li>
<li><strong>Sentence-level</strong><ul>
<li>CWF + PF,PF 只使用候选触发词的位置作为嵌入位置特征</li>
<li>句子由触发词分割成两部分</li>
</ul>
</li>
</ul>
<img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/dynamic_cnn2.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/dynamic_cnn2.png">
<p><strong>DMCNN 的表现:</strong><br><img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/dynamic_cnn3.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/dynamic_cnn3.png"><br><img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/dynamic_cnn4.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/dynamic_cnn4.png"></p>
<p>DMCNN 的效果是突破性的,但分两个阶段的预测仍有误差传递的问题,也没有利用好 trigger 和 argument 之间的依赖关系。</p>
<h3 id="Joint-Model-JRNN"><a href="#Joint-Model-JRNN" class="headerlink" title="Joint Model - JRNN"></a>Joint Model - JRNN</h3><p><a href="http://www.aclweb.org/anthology/N16-1034" target="_blank" rel="external">JRNN: Joint Event Extraction via Recurrent Neural Networks, ACL 2016</a></p>
<p>Nguyen et.al., 2016 通过 RNN 用联合方法解决时间抽取的问题,继承了 Li (2013) 和 Chen (2015) 的优点,并克服了它们的一些缺陷。</p>
<img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/JRNN1.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/JRNN1.png">
<ul>
<li><strong>Encoding phase</strong><ul>
<li>word embedding + entity type embedding + dependency tree relation<br>dependency tree relation 是 binary 的,个人理解应该是维度对应依存树中单词间所有可能的关系(如 conj_and, advcl 等),只有在依存树 W 中存在与 w_i 连接的一条对应边(如 conj_and 连接了 w_i 与 w_j)时,该维度(conj_and 对应维度)的值才设为 1,这个向量在 Li et al., 2013 的研究中是有用的。<br>没有用到位置特征,因为同时预测 trigger 和 argument roles,没有固定的锚点。</li>
<li>双向 GRU 进行编码</li>
</ul>
</li>
<li><strong>Prediction phase</strong><ul>
<li>对 W 对应的 trigger 和 argument role 分别维护了一个 binary memory vector $G^{trg}_i$ , binary memory matrices $G^{arg}_i$ 以及 $G^{arg/trg}_i$ </li>
<li>每个时间点 i,或者说对 $w_i$<ul>
<li>对 $w_i$ 进行 trigger 预测</li>
<li>如果 trigger 预测结果 $t_i$ 是 other,那么 $a_{ij}$ j 从 1-k 都设为 other,然后进行下一步,否则对所有的 entity mention e1, e2,…,ek 进行 argument role 预测</li>
<li>利用上一步的记忆向量以及之前步骤的预测来计算 $G^{trg}_i$, $G^{arg}_i$ and $G^{arg/trg}_i$ </li>
</ul>
</li>
<li><strong>Output:</strong><ul>
<li>trigger subtype $t_i$ for $w_i$</li>
<li>predicted argument roles $a_{i1}$, $a_{i2}$,…$a_{ik}$</li>
<li>memory vector/matrics $G^{trg}_i$, $G^{arg}_i$ and $G^{arg/trg}_i$ </li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Memory 向量代表的是同一个句子中触发词和论元角色之间的相互关系,$G^{trg}_i$ 代表的是 trigger subtypes 之间的关系,表示在 i 之前已经识别出哪些子事件,比如说句子中检测到了 Die 事件,那么很有可能下面会同时会出现 Attack 事件;</p>
<p>$G^{arg}_i$ 代表的是论元角色之间的关系,总结了 entity mention 在过去扮演的 论元角色信息;$G^{arg/trg}_i$ 对应的是 arugment roles 和 trigger subtypes 之间的关系,表示 entity mention 在之前特定 event subtypes 扮演过 argument,$G^{arg/trg}_i[j][t]=1$ 代表 $e_j$ 在之前的 subtype t 中被认为是 argument。 实验表明,$G^{trg}$ 并没有帮助反而会导致整体性能下降,而 $G^{arg/trg}$ 还是很有效的。</p>
<img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/JRNN2.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/JRNN2.png">
<p>当输入句子包含多个事件时(1/N),JRNN 明显优于其他方法。特别是,JRNN 在触发词识别上 DMCNN 好13.9%,而论元分类的相应改进为 6.5%,从而进一步表明 JRNN 具有记忆功能的好处。在单事件句子(1/1)的表现上,JRNN 在触发词分类上仍然是最好的系统,尽管在论元分类上比 DMCNN 要差一些。</p>
<h2 id="弱监督-语料扩充"><a href="#弱监督-语料扩充" class="headerlink" title="弱监督/语料扩充"></a>弱监督/语料扩充</h2><p>有监督的方法需要大量的标注样本,人工标注耗时耗力,还存在一致性的问题,因此弱监督方法也是事件抽取的一个重要分支。Chen 等提出利用部分高质量的标注语料训练分类器,然后利用初步训练好的分类器判断未标注的数据,选取高置信度的分类样本作为训练样本,通过迭代自动扩充训练样本[Chen and Ji, 2009]。Liao 等在相关文档中使用自训练的(Self-Training)的半监督学习方法扩展标注语料,并利用全局推理的方法考虑样例的多样性进而完成事件抽取;进一步提出同时针对词汇和句子两个粒度训练最大熵分类器,并用协同训练(Co-training)的方法扩展标注数据,进而对分类器进行更充分的训练[Liao and Grishman, 2011a; 2011b]。</p>
<p>而目前,弱监督/训练数据生成方面比较流行的方向有 <strong>利用外部资源,通过远程监督,以及跨语料迁移的方法</strong>。</p>
<h3 id="外部资源"><a href="#外部资源" class="headerlink" title="外部资源"></a>外部资源</h3><p><a href="http://www.aclweb.org/anthology/P16-1201" target="_blank" rel="external">Leveraging FrameNet to Improve Automatic Event Detection, ACL2016</a></p>
<p>FrameNet 是语言学家定义及标注的语义框架资源,采用层级的组织结构,有1000+框架、1000+词法单元、150000+标注例句。在结构上,FrameNet 和事件抽取有着很高的相似性,一个框架由一个词法单元和若干框架元素组成,一个事件有触发词和若干事件角色组成。另外,FrameNet 中很多 frame 其实也能够表示某些事件,如<br><img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/framenet.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/framenet.png"></p>
<p>因此,Liu 等利用 ACE 语料训练的分类器去判定 FrameNet 中句子的事件类别,再利用全局推断将 FrameNet 的语义框架和 ACE 中的事件类别进行映射,进而利用 FrameNet 中人工标注的事件样例扩展训练数据以提升事件检测性能 [Liu et.al., 2016b]。<br><img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/framenet1.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/framenet1.png"></p>
<h3 id="远程监督"><a href="#远程监督" class="headerlink" title="远程监督"></a>远程监督</h3><p><a href="http://www.nlpr.ia.ac.cn/cip/~liukang/liukangPageFile/ACL2017-Chen.pdf" target="_blank" rel="external">Automatically Labeled Data Generation for Large Scale Event Extraction, ACL2017</a></p>
<p>Yubo Chen 提出运用结构化的知识库来以及远程监督的方法来自动生成大规模事件语料。</p>
<img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/event_relation.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/event_relation.png">
<p>当把关系抽取中常用的远程监督方法用到事件抽取中时,会发现有下面两个问题,一是<strong>现有事件知识库(如 Freebase)中缺乏触发词信息</strong>,如上图,在关系抽取中,我们可以用两个论元 Barack Obama, Michelle Obama 进行回标,但是在事件抽取中,marriage 这一事件类型在 Freebase 中被表示为 m.02nqglv,所以我们不能直接用事件类型和论元来进行回标,在用 DS 前,必须先检测触发词。</p>
<p>根据 DS 在 RE 中的应用,可以假设如果一个句子中出现了所有的论元,那么这个句子就可以被作为是一个事件,句子中的动词就可以作为触发词。然而<strong>一个事件中的论元可能出现在多个句子中</strong>,如果用所有论元来进行句子的回标,那么能抽出的训练数据就非常少了,所以应该对论元进行排序,选择有代表性的伦愿你进行回标。</p>
<p>整个流程如下,首先对 Freebase 中的核心论元进行检测,根据<strong>角色显著性(role saliency)、事件相关性( event relevance)和核心率(key rate)</strong> 对论元进行优先级排序,接着利用所有的核心论元去 Wikipeida 中回标,根据<strong>触发率(trigger rate)、触发词频率( trigger candidate frequency)、触发词事件频率(trigger event type frequency)</strong>来进行触发词检测,这一阶段得到的触发词表中只有动词,缺少名词,也存在噪声,于是再利用 FrameNet 过滤动词性触发词中的噪声,同时扩展名词性触发词,最后利用 Soft Distant Supervision 来自动生成标注数据。</p>
<img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/Yubo.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/Yubo.png">
<p>还有方法如 <a href="https://arxiv.org/pdf/1603.07954.pdf" target="_blank" rel="external">Karthik Narasimhan et al., EMNLP 2016</a>,从网络获取同一事件的不同报道,再使用强化学习方法,做信息融合的决策(互补信息的融合、冗余信息的选择)。</p>
<img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/karthik.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/karthik.png">
<h3 id="跨语料迁移"><a href="#跨语料迁移" class="headerlink" title="跨语料迁移"></a>跨语料迁移</h3><p>由于目前中文事件抽取缺少公认语料,很多学者尝试利用现有大量的高质量英文标注语料辅助中文事件抽取。Chen 等首次提出该想法并利用跨语言协同训练的 Bootstrap 方法进行事件抽取[Chen and Ji, 2009]。Ji 提出基于中英文单语事件抽取系统和基于并行语料两种构建跨语言同义谓词集合的方法辅助进行中文事件抽取[Ji, 2009],Zhu 等利用机器翻译同时扩大中文和英文训练语料,联合利用两种语料进行事件抽取[Zhu et.al., 2014]。Hsi 等联合利用符号特征和分布式特征的方法,利用英文事件语料提升中文事件抽取的性能[Hsi et.al., 2016]。</p>
<p><a href="http://www.nlpr.ia.ac.cn/cip/~liukang/liukangPageFile/Liu_aaai2018.pdf" target="_blank" rel="external">Event Detection via Gated Multilingual Attention Mechanism, AAAI2018</a></p>
<p>Motivation:</p>
<ol>
<li><strong>多语言一致性</strong>,不同语言中表达了相同含义的句子往往包含相同的语义成分<br>如 MeiGuo TanKe 和 American tank 表达了相同含义,都是武器</li>
<li><strong>多语言互补</strong>,某个词在一种语言中有歧义,但在另一种语言中缺没有歧义<br>如英文 fire,因为有开火和解雇两种意思,所以对应事件可能是 Attack 也可能是 End-Position,然而在中文中开火,Attach 类型,解雇就是 End-Position 类型,两个词没有相同语义</li>
</ol>
<p>所以文章提出了两种 attention 机制,一是利用多语言一致性,分别对每种语言进行单语语境的注意力计算,对每个候选触发词,对其上下文进行注意力机制,注意力权重表示句子中不同单词对预测事件类型的重要性,二是利用互补信息,用 gated cross-lingual attention 来模拟其他语言的可信度,gate 来控制目标语言流向源语言的信息,集成多语言的信息。</p>
<img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/GMLATT.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/GMLATT.png">
<h2 id="中文事件抽取"><a href="#中文事件抽取" class="headerlink" title="中文事件抽取"></a>中文事件抽取</h2><p>目前事件抽取的相关研究大部分是面向英文文本,中文文本的工作才刚起步,一方面,中文的自身特点(需要分词、缺少时态和形态的变换)有一定挑战,另一方面,数据集上也缺乏统一、公认的语料资源和相关评测。尽管如此,近年来中文事件抽取在公开评测、领域扩展及上述的跨语料迁移方面也都取得了一些进展。</p>
<p>公开评测方面,除了在模型方面的创新[Chen and Ng, 2012;Li et.al., 2012a;2013b],在中文语言特性的利用方面,Li 等通过中文词语的形态结构、同义词等信息捕获更多的未知触发词,进而解决中文事件抽取面临的分词错误和训练数据稀疏等问题; 进一步细分中文事件触发词内部的组合语义(复合、附加和转化),进而提高系统的性能[Li et.al., 2012b]。Ding 等利用聚类的方法自动生成新事件类型的语料, 在抽取过程中特别地考虑了待抽取文本的 HowNet 相似度[Ding et.al., 2013]。</p>
<p>特定领域方面,国内很多机构均面向实际应用展开特定领域的事件抽取研究, 覆盖突发灾难、金融、军事、体育、音乐等多个领域。例如,Zhou 等针对金融领域事件中的收购、分红和贷款三个典型事件,提出自动构建抽取规则集的方法进行中文金融领域事件抽取 [Zhou, 2003];Liang 等利用事件框架的归纳和继承特性实现对灾难事件的抽取[Liang and Wu, 2006]。</p>
<p>其他方向的一些 Paper:<br><strong>特征表示:</strong><br>– Argument Attention: Exploiting Argument Information to Improve Event Detection via Supervised Attention Mechanisms (ACL2017)<br><strong>多事件抽取:</strong><br>– HBTNGMA: Collective Event Detection via a Hierarchical and Bias Tagging Networks with Gated<br> Multi-level Attention (EMNLP-2018)<br><strong>篇章级事件抽取:</strong><br>– DCFEE: A Document-level Chinese Financial Event Extraction System based on Automatically Labeled<br> Training Data (ACL 2018)<br><strong>事件关系抽取:</strong><br>– ATT-ERNN: Attention-based Event Relevance Model for Stock Price Movement Prediction (CCKS-2017 Best Paper Award)<br>– MLNN: Event Coreference Resolution via Multi-loss Neural Network without Arguments (CCKS-2018)</p>
<h1 id="事件监测和追踪"><a href="#事件监测和追踪" class="headerlink" title="事件监测和追踪"></a>事件监测和追踪</h1><img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/general2.png" class="ful-image" alt="%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E4%BA%8B%E4%BB%B6%E6%8A%BD%E5%8F%96/general2.png">
<p>主流方法包括基于相似度聚类和基于概率统计两类。在这不多做介绍。以后有时间再补充。</p>
<p><strong>关注公众号回复“事件抽取”获得相关综述及论文下载地址~</strong></p>
]]></content>
<summary type="html">
<p>接上一篇知识抽取-实体及关系抽取,前置知识在这一篇不多做解释啦。<br></p>
</summary>
<category term="NLP" scheme="http://www.shuang0420.cn/categories/NLP/"/>
<category term="Knowledge Graph" scheme="http://www.shuang0420.cn/categories/NLP/Knowledge-Graph/"/>
<category term="NLP" scheme="http://www.shuang0420.cn/tags/NLP/"/>
<category term="Relation Extraction" scheme="http://www.shuang0420.cn/tags/Relation-Extraction/"/>
<category term="Information Extraction" scheme="http://www.shuang0420.cn/tags/Information-Extraction/"/>
<category term="Event Extraction" scheme="http://www.shuang0420.cn/tags/Event-Extraction/"/>
</entry>
<entry>
<title>知识抽取-实体及关系抽取</title>
<link href="http://www.shuang0420.cn/2018/09/15/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E5%AE%9E%E4%BD%93%E5%8F%8A%E5%85%B3%E7%B3%BB%E6%8A%BD%E5%8F%96/"/>
<id>http://www.shuang0420.cn/2018/09/15/知识抽取-实体及关系抽取/</id>
<published>2018-09-15T11:02:27.000Z</published>
<updated>2022-03-13T08:21:40.692Z</updated>
<content type="html"><![CDATA[<p>这一篇是关于知识抽取,整理并补充了上学时的两篇笔记 <a href="http://www.shuang0420.cn/2017/03/18/NLP%20笔记%20-Information%20Extraction/">NLP笔记 - Information Extraction</a> 和 <a href="http://www.shuang0420.cn/2017/04/10/NLP笔记%20-%20Relation%20Extraction/">NLP笔记 - Relation Extraction</a>,梳理了知识抽取的基本方法,包括传统机器学习及经典的深度学习方法。</p>
<a id="more"></a>
<p>知识抽取涉及的“知识”通常是 <strong>清楚的、事实性的信息</strong>,这些信息来自不同的来源和结构,而对不同数据源进行的知识抽取的方法各有不同,从结构化数据中获取知识用 D2R,其难点在于复杂表数据的处理,包括嵌套表、多列、外键关联等,从链接数据中获取知识用图映射,难点在于数据对齐,从半结构化数据中获取知识用包装器,难点在于 wrapper 的自动生成、更新和维护,这一篇主要讲从文本中获取知识,也就是我们广义上说的信息抽取。</p>
<img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E5%AE%9E%E4%BD%93%E5%8F%8A%E5%85%B3%E7%B3%BB%E6%8A%BD%E5%8F%96/general.png">
<p>信息抽取三个最重要/最受关注的子任务:</p>
<ul>
<li><strong>实体抽取</strong><br>也就是命名实体识别,包括实体的检测(find)和分类(classify)</li>
<li><strong>关系抽取</strong><br>通常我们说的<strong>三元组(triple)</strong> 抽取,一个谓词(predicate)带 2 个形参(argument),如 Founding-location(IBM,New York) </li>
<li><strong>事件抽取</strong><br>相当于一种多元关系的抽取</li>
</ul>
<p>篇幅限制,这一篇主要整理实体抽取和关系抽取,下一篇再上事件抽取。</p>
<h1 id="相关竞赛与数据集"><a href="#相关竞赛与数据集" class="headerlink" title="相关竞赛与数据集"></a>相关竞赛与数据集</h1><p>信息抽取相关的会议/数据集有 <strong>MUC、ACE、KBP、SemEval</strong> 等。其中,<strong>ACE(Automated Content Extraction)</strong> 对 MUC 定义的任务进行了融合、分类和细化,<strong><a href="https://tac.nist.gov/2017/KBP/" target="_blank" rel="external">KBP(Knowledge Base Population)</a></strong> 对 ACE 定义的任务进一步修订,分了四个独立任务和一个整合任务,包括</p>
<ul>
<li><strong>Cold Start KB (CSKB)</strong><br>端到端的冷启动知识构建</li>
<li><strong>Entity Discovery and Linking (EDL)</strong><br>实体发现与链接</li>
<li><strong>Slot Filling (SF)</strong><br>槽填充</li>
<li><strong>Event</strong><br>事件抽取</li>
<li><strong>Belief/Sentiment (BeSt)</strong><br>信念和情感</li>
</ul>
<p>至于 SemEval 主要是词义消歧评测,目的是增加人们对词义、多义现象的理解。<br><img src="http://images.shuang0420.cn/images/%E7%9F%A5%E8%AF%86%E6%8A%BD%E5%8F%96-%E5%AE%9E%E4%BD%93%E5%8F%8A%E5%85%B3%E7%B3%BB%E6%8A%BD%E5%8F%96/SemEval.png"></p>
<p>ACE 的 17 类关系<br><img src="http://images.shuang0420.cn/images/NLP%E7%AC%94%E8%AE%B0%20-%20Relation%20Extraction/2.jpg" class="ful-image" alt="2.jpg"></p>
<p>具体的应用实例<br><img src="http://images.shuang0420.cn/images/NLP%E7%AC%94%E8%AE%B0%20-%20Relation%20Extraction/3.jpg" class="ful-image" alt="3.jpg"></p>
<p>常用的 Freebase relations<br><figure class="highlight plain"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div></pre></td><td class="code"><pre><div class="line">people/person/nationality,</div><div class="line">people/person/profession,</div><div class="line">biology/organism_higher_classification,</div><div class="line">location/location/contains</div><div class="line">people/person/place-of-birth</div><div class="line">film/film/genre</div></pre></td></tr></table></figure></p>
<p>还有的一些世界范围内知名的高质量大规模开放知识图谱,如包括 DBpedia、Yago、Wikidata、BabelNet、ConceptNet 以及 Microsoft Concept Graph等,中文的有开放知识图谱平台 OpenKG……</p>
<h1 id="实体抽取"><a href="#实体抽取" class="headerlink" title="实体抽取"></a>实体抽取</h1><p>实体抽取或者说命名实体识别(NER)在信息抽取中扮演着重要角色,主要抽取的是文本中的原子信息元素,如<strong>人名、组织/机构名、地理位置、事件/日期、字符值、金额值</strong>等。实体抽取任务有两个关键词:<strong>find & classify</strong>,找到命名实体,并进行分类。<br><img src="http://images.shuang0420.cn/images/NLP%20%E7%AC%94%E8%AE%B0%20-Information%20Extraction/2.jpg" class="ful-image" alt="2.jpg"></p>
<p><strong>主要应用:</strong></p>
<ul>
<li>命名实体作为索引和超链接</li>
<li>情感分析的准备步骤,在情感分析的文本中需要识别公司和产品,才能进一步为情感词归类</li>
<li>关系抽取(Relation Extraction)的准备步骤</li>
<li>QA 系统,大多数答案都是命名实体</li>