├── .gitignore ├── notes ├── ABSA │ └── ABSA_note.md ├── SANs │ ├── Multi-Granularity Self-Attention.png │ ├── mask_head.png │ ├── tree-transformer.png │ ├── 百变Self-Attention .md │ └── 百变Self-Attention .pdf └── attack │ ├── SMART (ICLR 2020 under review).md │ ├── free.png │ ├── kpgd.jpg │ ├── text attack.md │ └── text attack.pdf └── readme.md /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | notes/SANs/百变Self-Attention .docx 3 | -------------------------------------------------------------------------------- /notes/ABSA/ABSA_note.md: -------------------------------------------------------------------------------- 1 | #### A Novel Aspect-Guided Deep Transition Model for Aspect Based Sentiment Analysis 2 | 3 | 主要是Aspect-Guided Encoder,由两个GRU组成:Aspect-guided GRU 和 Transition GRU 4 | 5 | - Aspect-guided GRU:初始阶段编码一些aspect相关和无关的信息; 6 | 7 | - Transition GRU:每个时间步的T-GRU要作为输入,输入到下一个时间步的A-GRU; 8 | 9 | Aspect-Reconstruction:为了把Aspect的信息编码到句子表示中,设计了重构方法。两个任务,两个损失函数。 10 | 11 | #### Aspect-based Sentiment Classification with Aspect-specific Graph Convolutional Networks 12 | 13 | 引入了GCN 14 | 15 | 整个模型: 16 | 17 | - Embedding 和 Bi-LSTM做底层表示; 18 | - 句子的句法依存树作为GCN的输入得到面向aspect的特征,输出后做了一个mask。 19 | - 上两步的输出做一个Aspect-aware Attention; 20 | - softmax输出 21 | 22 | 感觉效果不是很好。 23 | 24 | #### CAN: Constrained Attention Networks for Multi-Aspect Sentiment Analysis 25 | 26 | 特色在于 constrained attention networks。 27 | 28 | ALSC (aspect level sentiment classification)Attention Layer:apsect和sentence的attention; 29 | 30 | ACD(aspect category detection) Attention Layer:结构和ALSC一样的。 31 | 32 | 对应有两个prediction 33 | 34 | 整个模型加了一个Regularization Layer单元。 35 | 36 | 看表格结果比上一个paper要好 37 | 38 | #### Syntax-Aware Aspect Level Sentiment Classification with Graph Attention Networks 39 | 40 | TODO 41 | 42 | -------------------------------------------------------------------------------- /notes/SANs/Multi-Granularity Self-Attention.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PengboLiu/NLP-Papers/70682dde22fae08f8e9d0b2f85b781f8e2073974/notes/SANs/Multi-Granularity Self-Attention.png -------------------------------------------------------------------------------- /notes/SANs/mask_head.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PengboLiu/NLP-Papers/70682dde22fae08f8e9d0b2f85b781f8e2073974/notes/SANs/mask_head.png -------------------------------------------------------------------------------- /notes/SANs/tree-transformer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PengboLiu/NLP-Papers/70682dde22fae08f8e9d0b2f85b781f8e2073974/notes/SANs/tree-transformer.png -------------------------------------------------------------------------------- /notes/SANs/百变Self-Attention .md: -------------------------------------------------------------------------------- 1 | [TOC] 2 | 3 | # 百变Self-Attention 4 | 5 | #### 导读 6 | 7 | > *维护了一个NLP论文集仓库:* 8 | 9 | 首先简单讲一下Self Attention。 10 | 11 | Self Attention原本是Transformer中的一个结构,现在很多时候也被单独拿出来作为一个特征抽取器。输入是一个Query向量,一个Key向量和一个Value向量。在Self Attention中,三者相同。$d_k$ 是模型维度。 12 | $$ 13 | \text { Attention }(Q, K, V)=\operatorname{softmax}\left(\frac{Q K^{T}}{\sqrt{d_{k}}}\right) V 14 | $$ 15 | 如果是Multi-Head Attention,那就把多个Attention拼在一起。 16 | $$ 17 | \text { MultiHead }\left.(Q, K, V)=\text { Concat (head_ }_{1}, \ldots, \text { head_ }\right) W^{O} 18 | $$ 19 | 简单粗暴又有效,那么能不能对这种结构进行一些改进呢? 20 | 21 | 首先是EMNLP 2019中,腾讯AI LAB的三篇关于改进SANs的论文。(本文中,Self Attention Networks简记为SANs) 22 | 23 | ------ 24 | 25 | #### [Self-Attention with Structural Position Representations](https://arxiv.org/pdf/1909.00383.pdf) 26 | 27 | 在Transformer中,SANs本身不能表示句子结构的,句子的序列信息是靠“position encoding”得到的。 28 | 29 | 本文对此进行改进,在SANs中融合了结构性的位置表示信息,以此增强SANs对句子潜在结构的建模能力。当然并没有舍弃原有的position encoding,**本文是把序列信息和结构信息一并使用**。 30 | 31 | **结构化位置表示:**position encoding是根据句子中单词的实际位置建模,而本文引入了依存句法树表示单词之间的关系。直觉上来说,这种方法能挖掘出更多关于句子中各个词语之间的依存信息。 32 | 33 | 本文介绍了两种位置:绝对结构位置和相对结构位置(使用Stanford Parser) 34 | 35 | - 绝对结构位置:把主要动词作为原点,然后计算依存树上每个单词到原点的距离; 36 | 37 | - 相对结构位置:根据以下规则计算每两个单词之间的距离 38 | 39 | - 在依存树的一条边上,两个单词的绝对结构位置之差就是相对结构位置; 40 | 41 | - 如果不在同一条边,两个单词的绝对结构位置之和乘1(两个单词在句子中正序)或-1(两个单词在句子中正序逆序)或0(同一个单词); 42 | 43 | 最后,序列绝对位置和结构绝对位置通过非线性函数结合在一起得到绝对位置的表示。至于相对位置,因为每个时间步的单词都不同,方法和绝对位置表示也不一样。这里,作者参考了[Self-Attention with Relative Position Representations](https://arxiv.org/pdf/1803.02155.pdf)中的方法。 44 | 45 | 作者在NMT和 Linguistic Probing Evaluation两个任务上进行试验,结果表明无论是相对结构位置还是绝对结构位置都能更好地在句法和语义层面上建模,从而达到更好的效果。 46 | 47 | ------ 48 | 49 | #### [Multi-Granularity Self-Attention for Neural Machine Translation](https://arxiv.org/pdf/1909.02222.pdf) 50 | 51 | 上一篇论文是利用Parser生成依存句法树进而改变SANs的输出,这篇论文则在SANs的结构做了一些改动,目的类似,也是为了增加句子的句法结构信息。 52 | 53 | 多粒度的Self Attention简称为MG-SA,结合多头注意力和短语建模。一方面,在多头注意力中拿出几个“头”在N元语法和句法维度对短语建模;然后,利用短语之间的相互作用增强SANs对句子结构建模的能力(还是structure modeling)。 54 | 55 | 本文的motivation有两方面: 56 | 57 | 1. 和上一篇论文类似,考虑短语模式学习句子的潜在结构; 58 | 2. 最近很多论文表明,SANs中很多“head”并没有被充分利用,这样何不试试把一些“head”做别的事情从而改善SANs的性能; 59 | 60 | 改进后的MG-SA如下: 61 | $$ 62 | \mathbf{H}_{g}=F_{h}(\mathbf{H}) 63 | $$ 64 | 65 | $$ 66 | \mathbf{Q}^{h}, \mathbf{K}^{h}, \mathbf{V}^{h}=\mathbf{H} \mathbf{W}_{Q}^{h}, \mathbf{H}_{g} \mathbf{W}_{K}^{h}, \mathbf{H}_{g} \mathbf{W}_{V}^{h} 67 | $$ 68 | 69 | $$ 70 | \mathbf{O}^{h}=\operatorname{ATT}\left(\mathbf{Q}^{h}, \mathbf{K}^{h}\right) \mathbf{V}^{h} 71 | $$ 72 | 73 | $$ 74 | \mathrm{MG}-\mathrm{SA}(\mathbf{H})=\left[\mathbf{O}^{1}, \ldots, \mathbf{O}^{\mathrm{N}}\right] 75 | $$ 76 | 77 | $ATT$ 就是经典的Self Attention,无需多言。可以看出,主要的改动在于 $\mathbf{H}_{g}​$(文章称之为生成的短语级记忆)。计算方法也就是文章提到的“Multi-Granularity”表示: 78 | 79 | **多粒度表示(Multi-Granularity Representation)** 80 | 81 | 首先是得到短语划分并对其合成,如图(a),然后短语标签监督和短语交互可以进一步增强短语表示在结构上的建模能力。最终得到的MG-SA如图(b)。 82 | 83 | ![](Multi-Granularity Self-Attention.png) 84 | 85 | - **短语划分(Phrase Partition)**:句子划分成若干个不重叠的长度为n个单词的短语。此外,又提出了句法级的短语划分(当然也要靠句法树),得到的短语输入为 $P_{\mathbf{x}}=\left(p_{1}, \dots, p_{M}\right)​$; 86 | 87 | - **合成策略(Composition Strategies)**:$g_m = COM(p_m)​$ ,$COM​$一般是CNN、RNN或者是SANs; 88 | 89 | - **短语标签监督(Phrase Tag Supervision)**:得到的 $g_m$,我们再使用它预测短语的标签(就是NP、VP、PP这些) 90 | 91 | 预测方法(softmax)和损失函数(负对数似然)如下: 92 | $$ 93 | p_{\theta_{i}}=\operatorname{softmax}\left(W_{t} g_{i}+b_{t}\right), i=1, \ldots, M 94 | $$ 95 | 96 | $$ 97 | \mathcal{L}_{t a g}=-\sum_{i=1}^{M} t_{i} \log p_{\theta_{i}}\left(t_{i}\right) 98 | $$ 99 | 100 | - **短语间的交互(Phrase Interaction )**:想让句子的短语得到交互,直觉肯定是要引入循环式的结构($REC$),那LSTM当之无愧了。本文采用了ICLR2019提出的Ordered Neurons LSTM (ON-LSTM,关于ON-LSTM的介绍,可以参考苏建林的博客 )。到此为止,我们终于得到了$H_g​$。 101 | $$ 102 | H_g = REC(G_X) 103 | $$ 104 | 105 | 106 | **训练和实验**: 107 | 108 | - 训练时的损失函数需要把刚才定义的短语标签预测损失加起来; 109 | - 在机器翻译任务上做了若干组实验,并进行了可视化分析; 110 | - 完成了 [Does string-based neural mt learn source syntax](https://www.isi.edu/natural-language/mt/emnlp16-nmt-grammar.pdf) 中的任务来评估MG-SA多粒度短语建模的能力。 111 | 112 | ------ 113 | 114 | #### [Towards Better Modeling Hierarchical Structure for Self-Attention with Ordered Neurons](https://arxiv.org/pdf/1909.01562.pdf) 115 | 116 | 看论文标题就知道,又是一篇对SANs结构改进的文章,而且也使用了刚才提到的ON-LSTM。本文的贡献有二: 117 | 118 | 1. 层次结构(要区别与上文的句法结构)可以更好地对SANs建模; 119 | 2. 证明了ON-LSTM对有助于NMT任务; 120 | 121 | 这里,我们主要看看对SANs的改进。 122 | $$ 123 | \begin{array}{l}{\mathbf{H}_{\mathrm{RNNs}}^{K}=\mathrm{ENC}_{\mathrm{RNNS}}(\mathbf{X})} \\ {\mathbf{H}_{\mathrm{SANs}}^{L}=\mathrm{ENC}_{\mathrm{SANs}}\left(\mathbf{H}_{\mathrm{RNNS}}^{K}\right)}\end{array} 124 | $$ 125 | 其实就是输入先使用RNNs编码,然后得到的输出再用SANs编码。这里的RNN就是ON-LSTM,具体细节还是看苏神的博客就好。 126 | 127 | 最后,也没有直接去利用得到的SANs的输出,而是使用 Short-Cut Connection(就是类似Transformer中residual connection的结构)。也算是取之Transformer,用之Transformer。 128 | $$ 129 | \widehat{\mathbf{H}}=\mathbf{H}_{\mathrm{ON}-\mathrm{L} \mathrm{STM}}^{K}+\mathbf{H}_{\mathrm{SANS}}^{L} 130 | $$ 131 | 132 | ------ 133 | 134 | #### [Tree Transformer: Integrating Tree Structures into Self-Attention](https://arxiv.org/pdf/1909.06639.pdf) 135 | 136 | 同样是来自EMNLP2019的paper,这篇paper对SANs的改进主要是在两个相邻单词之间增加了一个“Constituent Attention”模块,从而达到树结构的效果(也就是 Tree Transformer)。 137 | 138 | ![](tree-transformer.png) 139 | 140 | 图(A)是Tree Transformer的结构。以图为例,输入“the cute dog is wagging its tail”。在layer0,cute和dog组成一个“Constituent”,its和tail组成一个“Constituent”。在layer1,两个相邻的“Constituent”可能融合在一起,所以“Constituent”的尺寸是越来越大的,到最顶层就只有一个“Constituent”了。那么怎么划分一个“Constituent”呢? 141 | 142 | 文章引入了“Constituent Attention”、“ Neighboring Attention”和“Hierarchical Constraint”的概念。 143 | 144 | 首先是Neighboring Attention,q和k和经典的transformer结构中的意义相同。 145 | $$ 146 | s_{i, i+1}=\frac{q_{i} \cdot k_{i+1}}{d} 147 | $$ 148 | 149 | $$ 150 | p_{i, i+1}, p_{i, i-1}=\operatorname{softmax}\left(s_{i, i+1}, s_{i, i-1}\right) 151 | $$ 152 | 153 | $$ 154 | \hat{a}_{i}=\sqrt{p_{i, i+1} \times p_{i+1, i}} 155 | $$ 156 | 157 | 得到的 $\hat{a}_{i}​$还需“Hierarchical Constraint”的处理,至于为什么后面会说。 158 | $$ 159 | a_{k}^{l}=a_{k}^{l-1}+\left(1-a_{k}^{l-1}\right) \hat{a}_{k}^{l} 160 | $$ 161 | 最后一步,终于要计算“Constituent Attention”了! 162 | $$ 163 | C_{i, j}=\prod_{k=i}^{j-1} a_{k} 164 | $$ 165 | $C_{i, j}$由 $i,j$ 之间的 $a_k$ 连乘得到。不过这么做有个问题就是某个$a_k$特别小的话,连乘起来的结果会趋近于0,所以我们用对数和的形式代替它: 166 | $$ 167 | C_{i, j}=e^{\sum_{k=i}^{j-1} \log \left(a_{k}\right)} 168 | $$ 169 | “Constituent Attention”要怎么去用呢?并不是单独作为一个结构,而是在原有的attention概率分布前乘上这个“Constituent Attention”就好了。 170 | $$ 171 | E=C \odot \operatorname{softmax}\left(\frac{Q K^{T}}{d}\right) 172 | $$ 173 | 在这,解释一下“Hierarchical Constraint”:因为attention的每一个layer,都不小于前一个layer,为了保证这种层次性,我们需要添加这样一种限制,使得每一层的“Constituent Attention”都要大于上一层的。 174 | 175 | 图(B)是整个Tree Transformer的结构,图(C)是Constituent Attention的热力图,可以看到,确实有了分块的效果。 176 | 177 | 值得一提的是,文章还单独一节介绍了Tree Transformer中的Neighboring Attention,可以看做一种无监督的parsing,也算是意料中的收货吧。 178 | 179 | ------ 180 | 181 | #### [Are Sixteen Heads Really Better than One?](https://arxiv.org/pdf/1905.10650.pdf) 182 | 183 | NeurIPS 2019的文章,来自CMU Neubig团队,一篇偏重解释性的文章。 184 | 185 | 文章讨论的是SANs是不是真的需要那么多heads。讨论这件事,就需要删除掉一些heads做对比实验。head具体怎么删除呢?文章中的做法是将一些head参数矩阵置0进行mask。 186 | 187 | - **去掉一个head的影响** 188 | 189 | ![](mask_head.png) 190 | - 在WMT模型中的encoder部分,分别将其中96(16heads*6层)个单独去掉。绝大部分的head被单独去掉BLEU反而有所提升,极少数的几个(4个)去掉之后效果会稍差。论文还做了一组实验,证明了:在inference阶段,绝大部分的head被单独去掉不会对效果有什么太大影响; 191 | - BERT中,同样单独去掉head,大概有50个head,在去掉其中一个的时候效果反而要好于原始bert模型。大部分的head在被单独的去掉的时候,效果不会损失太多。 192 | 193 | - **只留下一个head** 194 | 195 | 96个head去掉一个直观上一想确实不会有太大影响。作者又进一步删除掉更多的heads:在某个layer内只保留一个head。结果,无论是BERT还是NMT,对实验效果都没什么太大的影响。 196 | 197 | 需要注意的是,机器翻译中,self attention保留一个head影响不大,但是Encoder-Decoder的attention则需要更多的head。 198 | 199 | - **不同的数据集,head的重要程度相同吗?** 200 | 201 | 论文给出的答案是基本呈正相关的。这里的是去掉某个head,然后分别在两个不同的数据集(MNLI-matched和MNLI-mismatche)中进行测试,观察这个head对效果的影响是否在两个数据集的表现一致。当然,这里的实验做的可能做的不够充分。 202 | 203 | - **启发式迭代剪枝head** 204 | 205 | 那么如果想在不同层之间同时去掉一些head呢?作者给出了一种启发式的策略。 206 | 207 | $$ 208 | \begin{array}{l}{I_{h}=\mathbb{E}_{x \sim X}\left|\frac{\partial \mathcal{L}(x)}{\partial \xi_{h}}\right|} \\ {I_{h}=\mathbb{E}_{x \sim X}\left|\operatorname{Att}_{h}(x)^{T} \frac{\partial \mathcal{L}(x)}{\partial \operatorname{Att}_{h}(x)}\right|}\end{array} 209 | $$ 210 | 211 | ​ 根据求导得到的 $I_h$,每次去掉10%的head。 212 | 213 | 之前知乎上有个问题: [为什么Transformer 需要进行 Multi-head Attention?](https://www.zhihu.com/question/341222779/answer/868039515) 相信这篇文章可以某种程度上回答一下此问题。当然,对head数量的探索,肯定不止于此。 214 | 215 | ------ 216 | 217 | #### [Analyzing Multi-Head Self-Attention: Specialized Heads Do the Heavy Lifting, the Rest Can Be Pruned](https://arxiv.org/pdf/1905.09418.pdf) 218 | 219 | 对head数量剪枝的还有ACL2019的这一篇。作者十分良心,写了篇博客解释自己的论文()。本文的实验非常非常详尽,如果看了上一篇文章还对head剪枝感兴趣不妨先看看这篇文章对应的博客。 220 | 221 | 文章的结论大概如下: 222 | 223 | - 只有一小部分头对于翻译任务似乎很重要(上一篇文章也得到了类似的结论); 224 | - 重要的头有一到多个功能:位置、句法、低频词等; 225 | - encoder端的head很多都可以被减掉(是不是又似曾相识); 226 | 227 | ------ 228 | 229 | #### 总结与思考 230 | 231 | 读完几篇论文,做一个小小的总结: 232 | 233 | - 目前的Transformer结构,encoder端的head是存在冗余的,Multi-Head其实不是必须的; 234 | - 丢掉一些head反而能提升性能,大概有点像dropout? 235 | - 不同的head似乎有不同的分工; 236 | - 结构信息对文本建模很重要,无论是什么方法即使是Transformer; 237 | - 目前对SANs的改造还比较浅层,不够大刀阔斧; 238 | 239 | 其实即便现在预训练语言模型方兴未艾,但是对于其依赖的多头注意力的机理还不是很清楚,还有很多相关工作没有完成。不妨让我们期待一下明年的ACL/EMNLP/NAACL上会对Transformer和SANs做出怎样的解释及改进吧! 240 | 241 | -------------------------------------------------------------------------------- /notes/SANs/百变Self-Attention .pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PengboLiu/NLP-Papers/70682dde22fae08f8e9d0b2f85b781f8e2073974/notes/SANs/百变Self-Attention .pdf -------------------------------------------------------------------------------- /notes/attack/SMART (ICLR 2020 under review).md: -------------------------------------------------------------------------------- 1 | ### FREELB: ENHANCED ADVERSARIAL TRAINING FOR LANGUAGE UNDERSTANDING(ICLR 2020 under review) 2 | 3 | 优化目标如下: 4 | $$ 5 | \min _{\boldsymbol{\theta}} \mathbb{E}_{(\boldsymbol{Z}, \boldsymbol{y}) \sim \mathcal{D}}\left[\frac{1}{K} \sum_{t=0}^{K-1} \max _{\boldsymbol{\delta}_{t} \in \mathcal{I}_{t}} L\left(f_{\boldsymbol{\theta}}\left(\boldsymbol{X}+\boldsymbol{\delta}_{t}\right), y\right)\right] 6 | $$ 7 | 相当于把原始的batch替换成了K倍的虚拟batch,一个虚拟的batch包括了$X+\delta_{0}, \dots, X+\delta_{K-1}$(都是一个一个的embedding)。基于PGD的对抗训练方法最小化每个训练样本的单个估计点的最大风险(有点绕)。而FreeLB方法可以几乎没有多余开销的情况下最小化每个梯度上升步骤的最大风险。 8 | 9 | FreeLB方法的droput也区别于一般的fine tuning过程,在每个max步骤中,mask都是相同的。 10 | 11 | FreeLB算法文字叙述如下: 12 | 13 | 每个epoch,每个minibatch内:初始化随机扰动 ${\delta}_{0}$ 和中间变量 $g_0$,然后从t = 1到K(K inner ascent steps):迭代更新 ${\delta}_{t}$ 和 $g_t$,直到t = k时,梯度下降更新一次模型参数:$\theta \leftarrow \theta-\tau g_{K}​$。 14 | 15 | 16 | 17 | 18 | 19 | ### SMART (ICLR 2020 under review) 20 | 21 | 文章说被accept后会放出代码 22 | 23 | 主要是关于fine tuning的两点: 24 | 25 | 1、Smoothness-Inducing Adversarial Regularization :看公式的意思是在损失函数中自己设计了一个正则项(文章叫smoothness-inducing adver- sarial regularizer)。**文章的意思是正则项使局部空间有连续性,所以即使改变一两个词输出也不会有变化**,这里阻止了Adversarial Attack的攻击。 26 | 27 | 2、Bregman Proximal Point Optimization :在优化器做文章,似乎借用之前的方法(vanilla Bregman proximal point )。优化参数时也有个正则项保证每次优化不会和上次的参数偏离太多。 28 | 29 | 3、Momentum的加速 -------------------------------------------------------------------------------- /notes/attack/free.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PengboLiu/NLP-Papers/70682dde22fae08f8e9d0b2f85b781f8e2073974/notes/attack/free.png -------------------------------------------------------------------------------- /notes/attack/kpgd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PengboLiu/NLP-Papers/70682dde22fae08f8e9d0b2f85b781f8e2073974/notes/attack/kpgd.jpg -------------------------------------------------------------------------------- /notes/attack/text attack.md: -------------------------------------------------------------------------------- 1 | # NLP中的对抗文本“攻防” 2 | 3 | 开篇之前,我们要明确一下对抗样本(adversarial examples)的概念:对输入样本故意添加一些人无法察觉的细微的干扰,导致模型预测出一个错误的输出。这里,细微的干扰(perturbation)被视为对抗样本。那么制造一些对抗样本检测模型是否具有鲁棒性就称之为“攻”(adversarial attack),对模型进行一些改动以应付这些攻击的办法就是“防”(adversarial training)。 4 | 5 | 研究对抗样本和对抗训练有什么用呢?我们在做研究的时候总是在一些标准的数据集进行实验,但是真正到工业界落地使用,测试环境往往会有很多脏数据,这些数据可能和正确的数据差别很小很小,人类很容易就能猜出数据背后的意思,但是我们训练好的模型却不能很好的进行识别,从而导致误识别、误分类。本文将以若干篇近期发表的文章为例,介绍文本中的对抗样本生成和防御。 6 | 7 | ## 如何产生对抗文本? 8 | 9 | 在图像领域,我们改动几个像素点就可以产生对抗样本。但是在文本中就行不通了,我们要保证改动前后语义大体相似,这就要求我们不能随便增删改某一个字(比如把一句话中的“好”改成“坏”,极可能会对句子的情感造成影响,这时就不能称之为一个好的对抗样本了)。在这里,我们既可以在词向量维度添加扰动,也可以离散地在文本层面上添加扰动。这里我选取了最近的几篇论文来分享一下生成对抗文本的不同方法。 10 | 11 | #### [Is BERT Really Robust? A Strong Baseline for Natural Language Attack on Text Classification and Entailment](https://arxiv.org/pdf/1907.11932.pdf) (AAAI 2020) 12 | 13 | 作者开源了一个生成对抗文本的工具 **TextFooler**()。 14 | 15 | 首先,作者把生成对抗样本这一问题重新定义了一下: 16 | $$ 17 | F\left(X_{a d v}\right) \neq F(X), \text { and } \operatorname{Sim}\left(X_{a d v}, X\right) \geq \epsilon 18 | $$ 19 | 我们的目的是要找到符合这样条件的样本:模型预测和原样本不同,但是语义却又和原样本相似。作者设计了两阶段的方法寻找我们需要的对抗样本。 20 | 21 | **第一步: 单词重要程度排序** 22 | 23 | 一句话中,主要靠某些单词决定文本的类别。我们在这里要选择最能影响结果的单词。怎么找到这样的单词?作者设计了一个打分函数,根据每个单词的得分排序就好了。我在这里用语言叙述一下好了:所谓的分数来自于全连接后的 $softmax$ 函数输出结果,如果当前词删去前后,模型预测结果不变,那当前词的得分就是模型输出结果前后的差;如果当前词删去前后模型预测结果变了,说明这个词还是非常关键的,这时当前词的得分等于正确类别前后预测分数的差加上错误类别前后预测的差。 24 | 25 | 作者还做了一些后处理,如去除停用词。 26 | 27 | **第二步:Word Transformer ** 28 | 29 | 找到了最应该被替换掉的单词,下一步自然是寻找换上来什么词。在文本中,需要满足三点: 30 | 31 | 1. 语义和原词相近:不需要解释吧,起码意思得一致,不然弄出来的对抗样本有什么意义呢; 32 | 2. 符合上下文:文本特殊就特殊在这,我们要让换上来的词不那么“违和”; 33 | 3. 使模型的结果是错的:一个好的对抗样本的目的就是迷惑模型,所以这一条也是自然而然的; 34 | 35 | 作者为了寻找合适的替换词,采取了以下步骤: 36 | 37 | - 同义词提取:embedding是衡量语义的好工具, 对整个embedding词典求和被替换词语义相似的词。比如,50个相似度大于0.7的; 38 | - 词类(POS)检查:在候选单词中,为了保证语法顺畅,做一个筛选:选择和原单词词类相同的词; 39 | - 语义相似度检查:为了保证前后两句话语义一致,使用 [Universal Sentence Encoder](https://arxiv.org/pdf/1803.11175.pdf) 把两个句子编码到高维空间然后计算相似度,大于阈值的加入到 最终候选集中; 40 | - 生成对抗样本:在候选集中,如果有对抗样本的模型预测和之前不同的,在其中选一个语义相似度和之前最大的,如果没有,选一个预测输出分数最低的; 41 | 42 | 至此,我们就找到了这句话的对抗样本。 43 | 44 | #### [On the Robustness of Self-Attentive Models](https://www.aclweb.org/anthology/P19-1147.pdf) (ACL 2019) 45 | 46 | 本文提出了一些生成对抗文本的方法,并证明了基于self attention的模型(比如Transformer、BERT)比其他模型鲁棒性更高。这里主要介绍一下文章提到的对抗文本的生成方法。 47 | 48 | ##### Attack方法(1-3是之前的方法,4和5是本文的工作) 49 | 50 | 1. Random Attack:顾名思义,在词表中随机找到一个词进行替换; 51 | 2. List-based Attack:在近义词表中找到句子中每个词的替换,目的是让模型预测到错误的标签。近义词可以使用embedding计算相似度得到; 52 | 3. GS-GR:Greedy Select + Greedy Replace,名字就很粗暴,对一句话中每个词替换成padding,检测哪个词是”weak spot“,也就是最容易被攻击的。然后我们在词典中选择一个词去替换改词,直到模型预测错误标签为止; 53 | 4. Greedy Select + Embedding Constraint:GS-GR方法并没有考虑语义,可能把语句变成意义完全相反的句子。比如:“this is a good restaurant” 转变为“this is a bad restaurant.”。确实预测出错误标签,但是语义也完全改变了,这并不是我们的本意。作者的解决方法:使用句子级别的embedding作为约束。也就是说,替换了一个词,改动前后的sentence embedding不会变化太多。这种方法在方法三的基础上需要找到一个使改动前后的sentence embedding变化最小的单词; 54 | 5. Attention-based Select:基于attention的模型,改变attention score最高或最低的单词会影响模型的预测,根据这一点把对应的单词做替换。可以随机替换,文章称为AS-GR,也可以利用前面那种计算embedding相似度的方法,文章称之为AS-EC; 55 | 56 | 57 | 58 | ## 如何进行对抗训练? 59 | 60 | 对抗训练目前有很多针对图像和文本的研究,本文选择几篇文章展开对比一下不同的对抗训练方法。 61 | 62 | 一般来说,我们把对抗训练过程抽象成为一个$Min-Max​$问题(Aleksander Madry,ICLR 2017): 63 | 64 | $$min_θρ(θ)\;,\;where\; ρ(θ) = E_{(x,y) ~ D}[max_{δ∈S} L(θ, x + δ, y) ]​$$ 65 | 66 | 1. 内部的最大化问题:找到一个对抗样本,使得损失函数的结果尽可能的大,也就是模拟一个攻击过程,选择攻击性最强的样本,这种攻击方法称为"投影梯度下降"(projected gradient descent, PGD),重复K次就是K-PGD。如果在自然语言中,就是对词嵌入加一个数值的扰动,但是又不能太离谱,需要加一些正则化的约束; 67 | 2. 外部的最小化问题:目的是找到一组网络参数,让受到攻击的样本损失函数输出尽可能小,也就是用对抗样本训练一个更加稳定的网络; 68 | 69 | 看算法流程图可能会更清晰一点。 70 | 71 | ![](kpgd.jpg) 72 | 73 | 但是$Min-Max​$方法计算比较复杂,可以看出输入一组数据要进行多次求导反向传播更新参数,据说MNIST这种数据集也要训练一晚上,于是诞生了一些改进其方法的工作。 74 | 75 | #### [Adversarial Training for Free!](https://arxiv.org/abs/1904.12843) (NeurIPS 2019) 76 | 77 | “Free”的意思是对抗训练不会产生额外的操作就可以完成对抗训练。 78 | 79 | 能达到这种效果的基本是思想是:最大化部分和最小化部分共享梯度。在整个训练过程中$min​$和$max​$的损失函数、网络结构是相同的,反向传播过程也是相同的,网络中各个结点的偏导数也是相同的,如果求导的时候输入和模型权重相同,最大化和最小化的梯度值也相同。有了这种理论基础就可以共享梯度了。作者提供了实现代码。 80 | 81 | [PyTorch实现](https://github.com/mahyarnajibi/FreeAdversarialTraining) 82 | 83 | [TensorFlow实现](https://github.com/ashafahi/free_adv_train) 84 | 85 | 算法流程图如下: 86 | 87 | ![](free.png) 88 | 89 | 对比之前的K-PGD算法的流程我们可以明显发现,这里把$min$和$max$的参数更新放在一起了,也就自然而然加快了对抗训练速度。 90 | 91 | 这里m的取值一般<10,因为迭代次数过多产生的对抗样本可能和原样本相去甚远了。epoch也要调小一点,比如在K-PGD中模型参数迭代了N次,这里我们大致算一下保证“FREE”算法也能迭代参数N次就可以了(一个minibatch里参数会更新m次),所以一个相对小的epoch超参数,可以达到和K-PGD相似的鲁棒性,大大减少了对抗训练的时间。论文还提到可以适当加大模型尺寸来学习到更鲁棒的模型。 -------------------------------------------------------------------------------- /notes/attack/text attack.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PengboLiu/NLP-Papers/70682dde22fae08f8e9d0b2f85b781f8e2073974/notes/attack/text attack.pdf -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | ### Multi-Modal NMT 2 | 3 | [A Shared Task on Multimodal Machine Translation and Crosslingual Image Description](http://aclweb.org/anthology/W16-2346) (CMT 2016) 4 | 5 | [Attention-based Multimodal Neural Machine Translation](https://www.aclweb.org/anthology/W16-2360) (CMT 2016) 6 | 7 | [Doubly-Attentive Decoder for Multi-modal Neural Machine Translation](http://aclweb.org/anthology/P17-1175) (ACL 2017) 8 | 9 | [An empirical study on the effectiveness of images in Multimodal Neural Machine Translation](http://aclweb.org/anthology/D17-1095) (ENNLP 2017) 10 | 11 | 12 | 13 | ### Summarization 14 | 15 | [Unsupervised Opinion Summarization with Content Planning](https://rktamplayo.github.io/publications/aaai21.pdf) (AAAI 2021) 16 | 17 | ### Text Generation 18 | 19 | [Towards Faithful Neural Table-to-Text Generation with Content-Matching Constraints](https://www.aclweb.org/anthology/2020.acl-main.101/) [ACL 2020] 20 | 21 | [Long and Diverse Text Generation with Planning-based Hierarchical Variational Model](https://arxiv.org/abs/1908.06605) [EMNLP 2019] 22 | 23 | ### RNN 24 | 25 | [Ordered Neurons: Integrating Tree Structures into Recurrent Neural Networks](https://openreview.net/pdf?id=B1l6qiR5F7) \[ICLR 2019] 26 | 27 | ### Transformer & Attention 28 | 29 | [Multi-Granularity Self-Attention for Neural Machine Translation](https://arxiv.org/abs/1909.02222) [EMNLP 2019] 30 | 31 | [Tree Transformer Integrating Tree Structures into Self-Attention](https://arxiv.org/abs/1909.06639) [EMNLP 2019] 32 | 33 | [Analyzing Multi-Head Self-Attention: Specialized Heads Do the Heavy Lifting, the Rest Can Be Pruned](https://arxiv.org/abs/1905.09418) [ACL 2019] 34 | 35 | [Self-Attention with Structural Position Representations](https://arxiv.org/abs/1909.00383) [EMNLP 2019] 36 | 37 | [Are Sixteen Heads Really Better than One?](https://link.zhihu.com/?target=https%3A//arxiv.org/pdf/1905.10650.pdf) [NIPS 2019] 38 | 39 | [Towards Better Modeling Hierarchical Structure for Self-Attention](https://arxiv.org/abs/1909.01562) [EMNLP 2019] 40 | 41 | [An Analysis of Encoder Representations in Transformer-Based Machine Translation](https://www.aclweb.org/anthology/W18-5431/) [EMNLP 2018] 42 | 43 | [How Much Attention Do You Need? A Granular Analysis of Neural Machine Translation Architectures?](https://link.zhihu.com/?target=https%3A//www.aclweb.org/anthology/P18-1167)[ACL 2018] 44 | 45 | [Self-Attention with Relative Position Representations](https://arxiv.org/abs/1803.02155) [NAACL 2018] 46 | 47 | ### Word Embedding 48 | 49 | [Single Training Dimension Selection for Word Embedding with PCA](https://arxiv.org/abs/1909.01761) [EMNLP 2019] 50 | 51 | [Improving Word Embedding by Adversarial Training](https://arxiv.org/pdf/1809.06858.pdf) [NIPS 2018] 52 | 53 | ### Knowledge Graph Embedding 54 | 55 | [Knowledge Graph Embedding Based Question Answering](http://research.baidu.com/Public/uploads/5c1c9a58317b3.pdf) [WSDM 2019] 56 | 57 | ### Sentiment Analysis 58 | 59 | [Relational Graph Attention Network for Aspect-based Sentiment Analysis](https://www.aclweb.org/anthology/2020.acl-main.295/) [ACL 2020] 60 | 61 | [A Novel Aspect-Guided Deep Transition Model for Aspect Based Sentiment Analysis](https://arxiv.org/pdf/1909.00324.pdf) [EMNLP 2019] 62 | 63 | [Aspect-based Sentiment Classification with Aspect-specific Graph Convolutional Networks](https://arxiv.org/pdf/1909.03477.pdf) [EMNLP 2019] 64 | 65 | [CAN: Constrained Attention Networks for Multi-Aspect Sentiment Analysis]() [EMNLP 2019] 66 | 67 | [Syntax-Aware Aspect Level Sentiment Classification with Graph Attention Networks](https://arxiv.org/pdf/1909.02606.pdf) [EMNLP 2019] 68 | 69 | [Attentional Encoder Network for Targeted Sentiment Classification](https://arxiv.org/pdf/1902.09314.pdf) 70 | 71 | [Knowing What, How and Why: A Near Complete Solution for Aspect-based Sentiment Analysis](https://arxiv.org/pdf/1911.01616.pdf) 72 | 73 | [Transfer Capsule Network for Aspect Level Sentiment Classification](https://www.aclweb.org/anthology/P19-1052) [ACL 2019] 74 | 75 | [Progressive Self-Supervised Attention Learning forAspect-Level Sentiment Analysis](https://www.aclweb.org/anthology/P19-1053) [ACL 2019] 76 | 77 | [Multi-grained Attention Network for Aspect-LevelSentiment Classification](https://www.aclweb.org/anthology/D18-1380.pdf) [EMNLP 2018] 78 | 79 | [IARM: Inter-Aspect Relation Modeling with Memory Networks in Aspect-Based Sentiment Analysis](https://www.aclweb.org/anthology/D18-1377.pdf) [EMNLP 2018] 80 | 81 | [A Position-aware Bidirectional Attention Network for Aspect-levelSentiment Analysis](https://www.aclweb.org/anthology/C18-1066.pdf) [COLING 2018] 82 | 83 | ### Neural Machine Translation 84 | 85 | [Neural Machine Translation](https://arxiv.org/abs/1709.07809) [Tutorials by Philipp Koehn] 86 | 87 | [Neural Machine Translation by Jointly Learning to Align and Translate](https://arxiv.org/pdf/1409.0473) [ICLR 2015] 88 | 89 | ### Adversarial Attack 90 | 91 | [FREELB: ENHANCED ADVERSARIAL TRAINING FOR LANGUAGE UNDERSTANDING](https://arxiv.org/pdf/1909.11764.pdf) [ICLR 2020 under review] 92 | 93 | [Is BERT Really Robust? A Strong Baseline for Natural Language Attack on Text Classification and Entailment](https://arxiv.org/pdf/1907.11932.pdf) [AAAI 2020] 94 | 95 | [MIXUP INFERENCE: BETTER EXPLOITING MIXUP TO DEFEND ADVERSARIAL ATTACKS](https://arxiv.org/abs/1909.11515) [ICLR 2020 under review] **TODO** 96 | 97 | [On the Robustness of Self-Attentive Models](https://www.aclweb.org/anthology/P19-1147.pdf) [ACL 2019] 98 | 99 | [TEXTBUGGER: Generating Adversarial Text Against Real-world Applications](https://arxiv.org/pdf/1812.05271.pdf) [NDSS 2019] 100 | 101 | [Generating Natural Language Adversarial Examples](https://arxiv.org/pdf/1804.07998.pdf) [EMNLP 2018] 102 | 103 | [Adversarial examples in the physical world](https://arxiv.org/pdf/1607.02533) [ICLR 2017] 104 | 105 | ### CROSS-LINGUAL Word Embedding 106 | 107 | [CROSS-LINGUAL ALIGNMENT VS JOINT TRAINING: A COMPARATIVE STUDY AND A SIMPLE UNIFIED FRAMEWORK](https://arxiv.org/pdf/1910.04708.pdf) 108 | 109 | [Bilingual Lexicon Induction with Semi-supervision in Non-Isometric Embedding Spaces](https://www.aclweb.org/anthology/P19-1018) [ACL 2019] 110 | 111 | [Unsupervised Bilingual Lexicon Induction from Mono-lingual Multimodal Data](https://arxiv.org/abs/1906.00378) [AAAI 2019] 112 | 113 | ### 114 | --------------------------------------------------------------------------------