├── Learning_Notes ├── Bert的相关疑问.md ├── CRF(条件随机场).md ├── Contrastive Representation Learning.md ├── DRL(Deep Reinforced Learning).md ├── Deep_Learning(深度学习).md ├── Lasso回归_岭回归_弹性网回归.md ├── Pytorch手撸Attention.md ├── RNN(循环神经网络).md ├── Transformer_20问.md ├── src │ ├── DRL1.png │ ├── DRL2.png │ ├── DRL3.png │ ├── DRL4.png │ ├── DRL5.png │ ├── DRL6.png │ ├── DRL7.png │ ├── EDA.png │ ├── LSL.png │ ├── attention1.png │ ├── attention2.png │ ├── bert-attention.png │ ├── bert-picture.png │ ├── bertflow.png │ ├── bys1.png │ ├── bys2.png │ ├── bys3.png │ ├── cutoff.png │ ├── frp-1.png │ ├── image-20240123141305224.png │ ├── image-20240123141547728.png │ ├── image-20240123142921461.png │ ├── pregnant.png │ ├── qt.png │ ├── simcse.png │ ├── triplet.png │ └── whitek ├── 对比表征学习(一).md ├── 对比表示学习(二)Setence Embedding.md ├── 损失函数.md ├── 混淆矩阵.md ├── 生成模型的疑问与回答.md ├── 贝叶斯公式.md └── 隐马尔可夫模型.md ├── Paper_Reading ├── ClusterNS.md ├── ConSERT.md ├── ESimCSE.md ├── IS-CSE.md ├── PromCSE.md ├── Semi-supervised Sequence Learning.md ├── Sentence Representation Survey.md ├── SimCLR.md ├── Universal Language Model Fine-tuning for Text Classification.md ├── WhitenedCSE.md └── src │ ├── SImCLR │ ├── SRS2 │ ├── SRS3 │ ├── SRS4 │ └── sentenceRepresentationSurvey ├── Paper_Summary ├── ACL Chinese.md └── Sentence_Embedding近两年顶会论文.md └── README.md /Learning_Notes/Bert的相关疑问.md: -------------------------------------------------------------------------------- 1 | # Bert issues 2 | 3 | 关于bert的一些个人疑问,学的一知半解始终没有透彻理解PLM中的一些观点 4 | 5 | * 他是怎么embedding的? 6 | * 词表是什么? 7 | * cls干什么用的? 8 | * 这个双向编码是怎么编的? 9 | * 怎么训练的? 10 | * MLM到底是什么? 11 | 12 | 写这篇blog学习记录 13 | 14 | ___________ 15 | 16 | huggingface发布的关于Bert的文档可以作为一个参考:[huggingface_blog](https://huggingface.co/blog/bert-101) 17 | 18 | ### Masked Language Model 19 | 20 | 随机遮盖文本中的一个单词然后让模型训练去预测这个单词,在这个过程中训练模型的权重使得模型的embedding过程中的向量空间更加接近真实空间 21 | 22 | > **个人见解:** 接近真实空间之后,模型就更容易对masked的单词进行预测。简单的举个例子 ***{猫吃鱼;狗吃肉} --> {猫 [Mask] 鱼;狗 [Mask] 肉}*** :将预测过程想象成一个套圈游戏,最开始的分布可能是猫和鱼靠的很近,但是"吃"离得远,我们的圈无法套到这个"吃"。但是在进行训练后,这些词的分布变得均匀,使得我们可以套到正确(接近真实)的东西。 23 | 24 | ![bert-picture](./src/bert-picture.png) 25 | 26 | 27 | 28 | ### 怎么embedding的? 29 | 30 | BERT使用WordPiece嵌入方法处理输入文本。首先,它将文本分割成更小的片段或“tokens”。然后,每个token被转换成对应的词向量。这些词向量不仅包含了单词的语义信息,还加入了位置编码(Position Encoding),以保留单词在句子中的顺序信息。此外,BERT在每个输入序列的开始添加一个特殊的`[CLS]`标记,并为分隔不同句子或段落的地方添加`[SEP]`标记。 31 | 32 | ```python 33 | #可以在colab进行实践 34 | from transformers import BertTokenizer, BertModel 35 | import torch 36 | 37 | # 加载分词器和模型 38 | #uncased不区分大小写,词表上只有小写 39 | tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') 40 | model = BertModel.from_pretrained('bert-base-uncased') 41 | 42 | # 定义一个句子 43 | sentence = "Hello, BERT. This is a test sentence for embeddings." 44 | 45 | # 分词并添加特殊符号 46 | tokens = tokenizer.tokenize(sentence) 47 | tokens = ['[CLS]'] + tokens + ['[SEP]'] 48 | 49 | # 转换成PyTorch tensors 50 | token_ids = tokenizer.convert_tokens_to_ids(tokens) 51 | tokens_tensor = torch.tensor([token_ids]) 52 | 53 | # 获取嵌入 54 | with torch.no_grad(): 55 | outputs = model(tokens_tensor) 56 | embeddings = outputs.last_hidden_state 57 | 58 | print(f"Tokenized Sentence: {tokens}") 59 | print(f"Token IDs: {token_ids}") 60 | # 展示第一个token([CLS])的嵌入向量 61 | print(f"Embedding of '[CLS]': {embeddings[0][0]}") 62 | print(f"Embedding '[CLS]' len: {len(embeddings[0][0])}") 63 | print(f"Embedding size: {embeddings.size()}") 64 | ``` 65 | 66 | print: 67 | 68 | ```bash 69 | Tokenized Sentence: ['[CLS]', 'hello', ',', 'bert', '.', 'this', 'is', 'a', 'test', 'sentence', 'for', 'em', '##bed', '##ding', '##s', '.', '[SEP]'] 70 | Token IDs: [101, 7592, 1010, 14324, 1012, 2023, 2003, 1037, 3231, 6251, 2005, 7861, 8270, 4667, 2015, 1012, 102] 71 | Embedding of '[CLS]': tensor( 72 | [-1.6189e-01, -1.4461e-01, -1.2250e-01, -1.4407e-01, -3.5012e-01, 73 | -3.8707e-01, 2.7428e-01, 4.0796e-01, 6.6938e-02, -6.9667e-02, 74 | ... 75 | 7.0484e-02, 1.6025e-02, -5.3804e-02, 4.9259e-01, -1.4404e-02, 76 | -3.6002e-01, 1.2062e-01, 8.7608e-01] 77 | ) 78 | Embedding '[CLS]' len: 768 79 | Embedding size: torch.Size([1, 17, 768]) 80 | ``` 81 | 82 | 83 | 84 | ### 词表是什么? 85 | 86 | 词表是预先定义的所有可能token的集合。在BERT中,这个词表是在预训练阶段通过分析预训练数据集构建的,通常包括成千上万的词汇。WordPiece方法允许BERT有效处理未知词汇,通过将未知单词分解成已知的较小片段。 87 | 88 | * #### 词表是提前训练好的吗? 89 | 90 | ​ 词表是在BERT模型的预训练阶段之前就已经确定好的。词表的构建是通过分析预训练数据集来完成的,目的是识别和编码数据集中所有唯一的词汇和词片段(token)。BERT使用的是WordPiece算法来生成这个词表。 91 | 92 | * #### 词表会根据模型训练进行自动调整吗?还是说固定不变? 93 | 94 | ​ 一旦词表被创建并在预训练过程中使用,它就不会根据模型在后续训练或微调过程中的表现进行自动调整或更新。这意味着所有的训练过程,包括预训练和针对特定任务的微调,都依赖于相同的固定词表。 95 | 96 | **兼容性**:保持词表不变确保了模型的输出和行为在整个使用周期内的一致性。这对于模型部署和实际应用是非常重要的,因为改变词表可能导致模型需要重新训练或评估。 97 | 98 | **稳定性**:使用固定词表可以避免训练过程中引入不必要的变化和不确定性。如果词表在训练过程中发生变化,模型的学习目标也会随之变化,可能导致模型性能的波动或下降。 99 | 100 | **效率**:确定并优化一个词表是一个计算成本高昂的过程,特别是在处理大规模数据集时。一旦建立了一个高效且有效的词表,固定使用它可以节省大量的计算资源和时间。 101 | 102 | 103 | 104 | ### cls干什么用的? 105 | 106 | `[CLS]`是一个特殊的标记,添加在每个输入序列的开始。在BERT的上下文中,`[CLS]`标记的输出向量(即经过所有Transformer层处理后的`[CLS]`的最终向量)被用来表示整个输入序列的综合信息。这个向量可以用于各种下游任务,比如分类任务,在这种情况下,`[CLS]`向量被送入一个或多个全连接层以预测类别标签。 107 | 108 | * #### cls向量的拼接方式?是[cls]A[sep] [cls]B[sep] ; 还是[cls]A[sep]B[sep]? 109 | 110 | ​ 处理双句子任务(如句子对分类、问答任务中的问题和段落对比等)时,正确的拼接方式是将两个句子合并为一个输入序列,而不是将每个句子单独拼接`[CLS]`和`[SEP]`。 111 | 112 | ```bash 113 | #双句子任务 114 | [CLS] A [SEP] B [SEP] 115 | ``` 116 | 117 | ​ 在处理单句子任务(分类,预测)时,会对句子做`[CLS]`标注,但是标签不会参与 118 | 119 | ```bash 120 | #单句子任务 121 | [CLS] This movie is fantastic! [SEP] 122 | ``` 123 | 124 | * #### 为什么要用cls标记?别的不行吗? 125 | 126 | ​ 想象一下,你有一堆积木(这里的积木就像是文字),你要用这些积木来建造一个房子(这个房子就是句子的意思)。现在,假设每个积木都有自己的特点,比如颜色、形状等(这些特点就像是词语的含义),而你想通过组合这些积木的方式,来让别人一眼就能看出这是一个房子(也就是让计算机理解句子的意思)。在BERT模型中,`[CLS]`标记就像是你要建造的房子的基石。你首先放下这个基石,然后围绕它来组装其他的积木。在你完成房子(句子)之后,这个基石(`[CLS]`标记)就会变得与众不同,因为它吸收了周围所有积木(词语)的特点,变成了一个能代表整个房子(句子含义)的超级积木。 127 | 128 | ​ 当我们需要计算机做些事情,比如判断一句话是开心的还是难过的时候,计算机就会看这个超级积木(`[CLS]`标记的向量),因为它包含了整个句子的信息。这样,计算机就可以通过这个基石来快速理解整个句子的大致意思,而不需要再去一块一块拆解积木地分析了。 129 | 130 | 131 | 132 | ### 这个双向编码是怎么编的? 133 | 134 | BERT的核心特性之一就是其双向编码能力,这得益于Transformer模型的自注意力(Self-Attention)机制。不同于之前的模型(如RNN或LSTM)只能按照单一方向(从左到右或从右到左)处理序列,BERT通过自注意力机制能够在编码每个token时考虑到整个句子中的所有单词,从而实现真正的双向理解。这意味着BERT在处理任何单词时,都会考虑到它在文本中前后的上下文信息。 135 | 136 | ```python 137 | from transformers import BertTokenizer, BertModel 138 | import torch 139 | 140 | # 初始化分词器和模型 141 | tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') 142 | model = BertModel.from_pretrained('bert-base-uncased') 143 | 144 | # 准备输入 145 | text = "Here is some text to encode" 146 | encoded_input = tokenizer(text, return_tensors='pt')# encoded_input.keys() ==> dict_keys(['input_ids', 'token_type_ids', 'attention_mask']) 147 | 148 | # 获取模型输出 149 | with torch.no_grad(): 150 | output = model(**encoded_input) 151 | #output.key() ==> dict_keys(['last_hidden_state', 'pooler_output']) 152 | 153 | # 获取最后一层的隐藏状态,它包含了句子中每个词的嵌入表示 154 | last_hidden_states = output.last_hidden_state 155 | 156 | # 打印第一个词的嵌入表示(注意,由于添加了特殊标记[CLS]和[SEP],所以实际词的索引要向后偏移) 157 | print(last_hidden_states[0][1]) 158 | ======================================print===================================== 159 | # len(tensor) = 768 160 | tensor([-5.7594e-01, -3.6501e-01, -1.3834e-01, -4.8850e-01, 1.6220e-01, 161 | -3.2118e-01, -1.5293e-01, 8.2259e-01, -2.6262e-01, 6.4759e-01, 162 | ... 163 | -7.5416e-03, -3.8632e-01, -4.4265e-01, 7.2205e-01, -3.5554e-02, 164 | -6.7818e-01, 2.0924e-01, -1.6394e-01]) 165 | 166 | ``` 167 | 168 | * #### 如何观察这个双向编码过程 169 | 170 | ​ 直接通过代码查看BERT的双向编码过程比较抽象,因为这一过程发生在模型内部。我们可以通过可视化注意力权重来间接观察BERT如何在编码时考虑一个词的上下文信息。 171 | 172 | ```python 173 | from transformers import BertTokenizer, BertModel 174 | import torch 175 | import matplotlib.pyplot as plt 176 | import numpy as np 177 | 178 | # 初始化分词器和模型,确保模型被配置为输出注意力权重 179 | tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') 180 | model = BertModel.from_pretrained('bert-base-uncased', output_attentions=True) 181 | 182 | # 准备输入并获取模型输出 183 | text = "Here is some text to encode" 184 | encoded_input = tokenizer(text, return_tensors='pt') 185 | output = model(**encoded_input) 186 | 187 | # 获取第一层的所有头的注意力权重,并计算平均 188 | attentions = output.attentions[0] # 获取第一层的注意力权重 189 | average_attentions = attentions.mean(dim=1)[0] # 计算所有头的平均,取第一个样本 190 | 191 | # 可视化平均注意力权重 192 | plt.figure(figsize=(10, 8)) 193 | plt.imshow(average_attentions.detach().numpy(), cmap='viridis') 194 | 195 | # 设置图表的标签 196 | tokens = tokenizer.tokenize(text) 197 | tokens = ['[CLS]'] + tokens + ['[SEP]'] 198 | plt.xticks(range(len(tokens)), tokens, rotation='vertical') 199 | plt.yticks(range(len(tokens)), tokens) 200 | 201 | plt.colorbar() 202 | plt.show() 203 | ``` 204 | 205 | ![bert-attention](./src/bert-attention.png) 206 | 207 | 上述的热力图可以体现词与词之间的注意力机制,颜色越浅关注度越高 208 | 209 | ```bash 210 | print(average_attentions) 211 | ================================print==================================== 212 | tensor([[0.5816, 0.0537, 0.0278, 0.0491, 0.0344, 0.0906, 0.0495, 0.0314, 0.0820], 213 | [0.1994, 0.1106, 0.1390, 0.1029, 0.1695, 0.0554, 0.0487, 0.1013, 0.0733], 214 | [0.1360, 0.2854, 0.0973, 0.1502, 0.1128, 0.0354, 0.0376, 0.0834, 0.0620], 215 | [0.1396, 0.1915, 0.1803, 0.0876, 0.1416, 0.0675, 0.0559, 0.0657, 0.0704], 216 | [0.1014, 0.1025, 0.0843, 0.1158, 0.1286, 0.0860, 0.0488, 0.2489, 0.0837], 217 | [0.1427, 0.0974, 0.0871, 0.1238, 0.1642, 0.0631, 0.1272, 0.0884, 0.1061], 218 | [0.1830, 0.0640, 0.0636, 0.0537, 0.1148, 0.0693, 0.0858, 0.2486, 0.1173], 219 | [0.1604, 0.0670, 0.0297, 0.0409, 0.1872, 0.0670, 0.2358, 0.0779, 0.1341], 220 | [0.2865, 0.0593, 0.0590, 0.0522, 0.0517, 0.0779, 0.0930, 0.1029, 0.2175]], 221 | grad_fn=) 222 | ``` 223 | 224 | 225 | 226 | ### 怎么训练的? 227 | 228 | BERT的训练分为两个阶段:预训练和微调。 229 | 230 | - **预训练**:在这一阶段,BERT在大规模文本语料库上进行训练,学习语言的通用特征。这一阶段主要包括两种类型的任务:掩码语言模型(MLM)和下一个句子预测(NSP)。 231 | 232 | > 但在后续的一些实验中表示:NSP方法对模型并没有很大的提高甚至没啥用 233 | 234 | - **微调**:在预训练完成后,BERT可以通过在特定任务上的额外训练进行微调,如情感分析、问题回答或文本分类等。在这一阶段,整个模型的参数都会稍作调整以适应特定任务。 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 | -------------------------------------------------------------------------------- /Learning_Notes/CRF(条件随机场).md: -------------------------------------------------------------------------------- 1 | # CRF(Conditional Random Field)、 2 | 3 | 来源:[知乎](https://zhuanlan.zhihu.com/p/148813079) 4 | 5 | ## 1、基础知识 6 | 7 | ### 1.1 图 8 | 9 | > 三要素:顶点、边、关联函数 10 | 11 | 图 $G$ 是指一个有序三元组 $(V(G),E(G),\Psi_G)$ 12 | 13 | * $V(G)$ 是非空集合,其中的元素称为图的**顶点** 14 | * $E(G)$ 是不与 $V(G)$ 相交的集合,其中的元素称为图的**边** 15 | * $\Psi_G$ 是关联函数,使得每条边对应于 $G$ 的无序顶点对(不必相异,这两个顶点可以相同也可以不同) 16 | 17 | 18 | 19 | ### 1.2 无向图 20 | 21 | > 通常简化为 $G=(V,E)$ 22 | 23 | 无向图指边没有方向的图 24 | 25 | 26 | 27 | ### 1.3 马尔可夫随机场 28 | 29 | **场**(field),区别于域(field),需要注意 ??????????? 30 | 31 | 在空间某一区域内,除个别点外,如果对于该区域的每个点 $P$ 都定义了一个确定量 $f(P)$ ,该区域就称为 $f(P)$ 的场。 32 | 33 | 34 | 35 | **随机过程** 36 | 37 | 设 $T$ 是一个无限实数集,把依赖于参数 $t\in T$ 的一族(无限多个)随机变量称为随机过程 38 | 39 | $\lbrace X(t),t\in T\rbrace$ 40 | 41 | 42 | 43 | **随机场** 44 | 45 | 若 $T$ 是 $n$ 维空间的某个子集,即 $t$ 是 $n$ 维向量,此时随机过程又称为随机场。 46 | 47 | > 从平面(随机过程)到向量空间(随机场) 48 | 49 | 50 | 51 | **马尔可夫随机场(概率无向图模型)** 52 | 53 | > 马尔可夫随机场 = 概率无向图模型 54 | 55 | 有马尔可夫性质的随机场称为马尔可夫随机场 56 | 57 | 58 | 59 | **马尔可夫性:** 60 | 61 | $P(Y_v|X,Y_w,w\neq v)=P(Y_v|X,Y_w,w\backsim v)$ 62 | 63 | * $w\backsim v$ 表示在图 $G=(V,E)$ 中与顶点 $v$ 有边连接的所有顶点 $w$ 64 | * $w\neq v$ 表示顶点 $v$ 以外的所有顶点 65 | * $Y_v$ 与 $Y_w$ 为顶点 $v$ 与 $w$ 对应的随机变量 66 | 67 | > 马尔可夫性质:未来只与现在有关,与历史状态无关 68 | > 69 | > 用一个通俗的比喻来形容,一只被切除了大脑的白鼠在若干个洞穴间的蹿动就构成一个马尔科夫链。因为这只白鼠已没有了记忆,瞬间而生的念头决定了它从一个洞穴蹿到另一个洞穴;当其所在位置确定时,它下一步蹿往何处与它以往经过的路径无关。 70 | 71 | 72 | 73 | ### 团(Clique) 74 | 75 | 团,无向图的子图,子图中任意两个顶点均存在一条边 76 | 77 | 最大团,若$C$是无向图$G$的一个团,并且不能再加入任何一个$G$的顶点使其成为更大的团,则称$C$为最大团(Maximal Clique) 78 | 79 | 80 | 81 | ### 无向图的因式分解 82 | 83 | 84 | 85 | ## 2、原理内容 86 | 87 | ### 2.1 条件随机场 88 | 89 | -------------------------------------------------------------------------------- /Learning_Notes/Contrastive Representation Learning.md: -------------------------------------------------------------------------------- 1 | # Contrastive Representation Learning 2 | 3 | > 参考翁莉莲的[Blog](https://lilianweng.github.io/posts/2021-05-31-contrastive/#contrastive-loss),本文主要针对于NLP中的对比学习 4 | 5 | 对比表示学习可以用来优化嵌入空间,使相似的数据靠近,不相似的数据拉远。同时在面对无监督数据集时,对比学习是一种极其有效的自监督学习方式 6 | 7 | ## 对比学习目标 8 | 9 | 在最早期的对比学习中只有一个正样本和一个负样本进行比较,在当前的训练目标中,一个批次的数据集中可以有多个正样本和负样本对。 10 | 11 | ### 对比损失函数 12 | 13 | #### Contrastive loss 14 | 15 | 该[论文](http://yann.lecun.com/exdb/publis/pdf/chopra-05.pdf)是以对比方式进行深度度量学习(deep metric learning)的最早训练目标之一 16 | 17 | 给定一组输入样本 $$\{x_i\}$$,每个样本都有一个对应的标签 $$y_i \in \{1, \dots, L\}$$,共有 $$L$$ 个类别。我们希望学习一个函数 $$f_{\theta}(\cdot) : \mathcal{X} \rightarrow \mathbb{R}^d$$,该函数能将 $$x_i$$ 编码成一个嵌入向量,使得同一类别的样本具有相似的嵌入,而不同类别的样本具有非常不同的嵌入。因此,对比损失(Contrastive Loss)会取一对输入 $$(x_i, x_j)$$,并最小化同一类别样本间的嵌入距离,同时最大化不同类别样本间的嵌入距离。 18 | $$ 19 | \mathcal{L}_{\text{cont}}(x_i, x_j, \theta) = \mathbf{1}[y_i = y_j] \left\| f_\theta(x_i) - f_\theta(x_j) \right\|^2 + \mathbf{1}[y_i \neq y_j] \max(0, \epsilon - \left\| f_\theta(x_i) - f_\theta(x_j) \right\|^2) 20 | $$ 21 | 其中 $$\epsilon$$​ 是一个超参数,用来定义不同类别样本的最低下界。 22 | 23 | #### Triplet loss 24 | 25 | 参考[论文](https://arxiv.org/abs/1503.03832),提出的目的是用来学习在不同姿势和角度下对同一个人进行人脸识别。 26 | 27 | 给定一个锚定输入 $x$,我们选择一个正样本 $x^+$ 和一个负样本 $x^-$,意味着 $x^+$ 和 $x$ 属于同一类,而 $x^-$ 则来自另一个不同的类。三元组损失(Triplet Loss)通过以下公式学习,同时最小化锚定 $x$ 和正样本 $x^+$ 之间的距离,并最大化锚定 $x$ 和负样本 $x^-$​ 之间的距离: 28 | $$ 29 | \mathcal{L}_{\text{triplet}}(x, x^+, x^-) = \sum_{x \in \mathcal{X}} \max \left(0, \|f(x) - f(x^+)\|^2 - \|f(x) - f(x^-)\|^2 + \epsilon \right) 30 | $$ 31 | 其中,边界参数 $\epsilon$ 被配置为相似对与不相似对之间距离的最小偏移量。 32 | 33 | 34 | 35 | #### Lifted Structured Loss 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /Learning_Notes/DRL(Deep Reinforced Learning).md: -------------------------------------------------------------------------------- 1 | # DRL(Deep Reinforced Learning) 2 | 3 | > 参考[李宏毅老师的课程](https://www.youtube.com/watch?v=z95ZYgPgXOY&t=1292s) 4 | > 5 | > github上对公式排版显示很不友好,阅读建议访问[csdn主页](https://blog.csdn.net/weixin_48435461?spm=1000.2115.3001.5343),同步更新 6 | 7 | ## policy gradient 8 | 9 | 有三个基础的组成部分 (坦克大战为例) 10 | 11 | * actor (坦克控制器) 12 | * environments (游戏界面交互) 13 | * reward function (击败敌方坦克获得奖励) 14 | 15 | env 和 reward function 是无法控制的 16 | 17 | 调整actor中的policy,来获得最大的reward (控制坦克达成最大击杀) 18 | 19 | policy决定actor的行为, policy部分就是一个network(即下图的Actor就是一个网络,可以通过网络来算出 $a_i$ ) 20 | 21 | reward不是标量(scalar)而是随机变量(random variable) 22 | 23 | ![image-20240430112223867](./src/DRL1.png) 24 | 25 | 26 | 27 | $$ 28 | \text{Trajectory } \tau = \{s_1, a_1, s_2, a_2, \ldots, s_T, a_T\} 29 | $$ 30 | 31 | $$ 32 | p_\theta(\tau) = p(s_1)p_\theta(a_1|s_1)p(s_2|s_1,a_1)p_\theta(a_2|s_2)p(s_3|s_2,a_2)\dots \\ 33 | = p(s_1)\prod_{t=1}^T p_\theta(a_t|s_t)p(s_{t+1}|s_t,a_t) 34 | $$ 35 | 36 | 轨迹 $\tau$ 是走完整个行动的流程; 37 | 38 | actor的参数给定为 $\theta$ ,在参数确定的情况下,走完轨迹 $\tau$ 的概率是 $p_\theta(\tau)$ 39 | 40 | ![image-20240430113547444](./src/DRL2.png) 41 | $$ 42 | \bar{R}_\theta = \sum_{\tau} R(\tau)p_\theta(\tau) = E_{\tau \sim p_\theta} [R(\tau)] 43 | $$ 44 | 我们希望更新actor中的参数 $\theta$ ,来使得获得的奖励函数 $R(\tau)$ 的均值(也就是期望)越大越好 45 | 46 | 如何求 $\bar{R}_\theta$ 的梯度 $\nabla\bar{R}_\theta$ ,来对actor中的参数 $\theta$ 进行策略梯度更新? $\eta$ 为学习率 47 | $$ 48 | \theta \leftarrow \theta + \eta \nabla \bar{R}_\theta 49 | $$ 50 | 由 $\nabla f(x) = f(x) \nabla \log f(x)$​ 可以推出下述公式 51 | 52 | 53 | $$ 54 | \nabla \bar{R}_\theta = \sum_{\tau} R(\tau) \nabla p_\theta(\tau) = \sum_{\tau} R(\tau) p_\theta(\tau) \frac{\nabla p_\theta(\tau)}{p_\theta(\tau)}= \sum_{\tau} R(\tau) p_\theta(\tau) \nabla \log p_\theta(\tau)\\= E_{\tau \sim p_\theta(\tau)}[R(\tau) \nabla \log p_\theta(\tau)] \approx \frac{1}{N} \sum_{n=1}^N R(\tau^n) \nabla \log p_\theta(\tau^n) \\ 55 | = \frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n} R(\tau^n) \nabla \log p_\theta(a_t^n | s_t^n) 56 | $$ 57 | 58 | 59 | > $\nabla f(x) = f(x) \nabla \log f(x)$ 记住就行,是一个定理公式 60 | > 61 | > $R(\tau)$​ 不要求可微,即使是黑盒也可以 62 | 63 | 表示为: 64 | 65 | 66 | $$ 67 | \nabla \bar{R}_\theta =E_{\tau \sim p_\theta(\tau)}[R(\tau) \nabla \log p_\theta(\tau)] 68 | $$ 69 | 70 | 71 | ![image-20240430130624418](./src/DRL3.png) 72 | 73 | 上图表示我们处理策略梯度时的流程,通过采样一批 $\tau^i$ 来作为一个 $\theta$ 更新的数据集,在更新完参数 $\theta$ 后,再重新采样一批 $\tau^i$ 继续更新;每次采样的 $\tau$ 只使用一次。因为其一直在与环境交互(即采样的 $\tau$ 都来自环境),所以也被称为 on-policy gradient 74 | 75 | 需要注意的是,$R(\tau^n)$​ 在每一步计算梯度时都要作为一个权重被乘上去。 76 | 77 | 78 | 79 | ### Tip 1 80 | 81 | 需要注意的是,我们在实际情况下采样并不能将所有情况都囊括其中,以下图为例,我们可能没有采样到 a 的情况,这会导致在梯度更新后,actor 选择 a 的概率降低;但实际上选择 a 也会提高 reward ,只是我们没有采样到... 82 | 83 | ![image-20240430134333694](./src/DRL4.png) 84 | 85 | 所以我们会优化策略梯度函数: 86 | $$ 87 | \nabla \bar{R}_\theta \approx \frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n} (R(\tau^n) - b) \nabla \log p_\theta(a_t^n | s_t^n) \quad \text{where } b \approx E[R(\tau)] 88 | $$ 89 | 加入一个bias(b)来平衡这个问题,如果奖励不够,策略梯度就是负数。 90 | 91 | 92 | 93 | ### Tip 2 94 | 95 | 根据公式 $\nabla \bar{R}_\theta \approx \frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n} (R(\tau^n) - b) \nabla \log p_\theta(a_t^n | s_t^n) $ 可以知道,$R(\tau^n) - b$ 会作为权重乘在每一次的 $\log p_\theta(a_t^n | s_t^n)$ 中。但以下图的两个例子来说: 96 | 97 | * 左边的 R = +3 说明最终的奖励是 +3 ,但是第一次的行动是 +5 ,第二次是 0 、第三次是 -2 ,说明第三次的行动被第二次影响了,如果没有第二次的行动,第三次行动可能就不会扣分。 98 | * 右边的 R = -7 说明最终的奖励是 -7 ,但是如果没有第二次的行动 +0 ,可能第三次的行动就不仅仅会扣两分了,可能会扣的更多 99 | 100 | ![image-20240430135156829](./src/DRL5.png) 101 | 102 | 所以我们不能简单的将整体的奖励 $R$ 作为权重来进行计算,要结合每一步的奖励进行计算 103 | 104 | * 左边第二次、第三次行动的奖励权重为 -2 而不是乘上整体的奖励 3 105 | * 右边的第二次、第三次行动的奖励权重为 -2 而不是乘上 -7 106 | 107 | ![image-20240430135223352](./src/DRL6.png) 108 | 109 | 参考下述公式 110 | $$ 111 | \nabla \bar{R}_\theta \approx \frac{1}{N} \sum_{n=1}^N \sum_{t=1}^{T_n} (\sum_{t'=t}^{T_n} r_{t'}^n 112 | - b) \nabla \log p_\theta(a_t^n | s_t^n) \quad \text{where } b \approx E[R(\tau)] 113 | $$ 114 | 其中 115 | $$ 116 | R(\tau^n) \rightarrow \sum_{t'=t}^{T_n} r_{t'}^n 117 | $$ 118 | 但由于随着行动次数越长,最开使的奖励影响越小,所以我们也要加入一个缩放因子来减少远距离时,奖励作为权重带来的影响 119 | $$ 120 | \sum_{t'=t}^{T_n} r_{t'}^n \rightarrow \sum_{t'=t}^{T_n} \gamma^{t'-t} r_{t'}^n \quad \text{where } \gamma < 1 121 | $$ 122 | 在上述的推导步骤中,奖励的变化(即 $R(\tau^n) - b$ )可以看作是一个函数: 123 | $$ 124 | R(\tau^n) - b =A^\theta(s_t, a_t) 125 | $$ 126 | 其中 $A = \text{Advantage Function } $ ,这个函数的意义就是我们在 $s_t$ 的情况下执行 $a_t$ 相较于其他的行动能有多好 127 | 128 | 129 | 130 | ## PPO(Proximal Policy Optimization) 131 | 132 | 是Openai默认的强化学习策略 133 | 134 | * On-policy:学习的agent和与环境交互的agent是同一个 135 | 136 | $$ 137 | \nabla \bar{R}_\theta = E_{\tau \sim p_\theta(\tau)}[R(\tau) \nabla \log p_\theta(\tau)] 138 | $$ 139 | 140 | * Off-policy:学习的agent和与环境交互的agent不同 141 | 142 | > 这里的agent可以理解为上文的 actor 143 | 144 | $$ 145 | \nabla \bar{R}_\theta = E_{\tau \sim p_{\theta'}(\tau)}\left[\frac{p_\theta(\tau)}{p_{\theta'}(\tau)} R(\tau) \nabla \log p_\theta(\tau)\right] 146 | $$ 147 | 148 | 为什么要off-policy ? 149 | 150 | 因为在on-policy时,你每一次采样后的 $\tau$ 只能用一次,在更新 $\theta$ 参数后就得重新采样 151 | 152 | 变成off-policy的好处就是一次采样多次使用,不在原始分布 $p(x)$ 上采样,而是在伪分布 $q(x)$ 上采样,然后来训练 $p(x)$ 分布的参数 $\theta$ 153 | 154 | 在做 off-policy 时,我们补充下述方法和公式推导 155 | 156 | ### Importance Sampling 157 | 158 | $$ 159 | E_{x \sim p}[f(x)] \approx \frac{1}{N} \sum_{i=1}^N f(x^i)= \int f(x) p(x) \, dx = \int f(x) \frac{p(x)}{q(x)} q(x) \, dx = E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] 160 | $$ 161 | 162 | * 原来 $x_i$ 是从 $p(x)$ 分布中去抓取,但是通过上述推导,我们可以从 $q(x)$ 分布中抓取 $x_i$ 163 | * $p(x)$ 分布是实际分布, $q(x)$ 分布是模仿实际分布的伪分布 164 | 165 | 在有伪分布 $q(x)$ 后,我们就可以从中抽取 $\theta^{'}$ 来训练 $\theta$ ,由于 $\theta^{'}$ 是固定的,所以可以重复使用,不用再像之前的 $\theta$ 一样每次都得更新。 166 | 167 | 但importance sampling 也有一些问题:**方差会不一样** 168 | 169 | > 方差公式:$Var[X] = E[X^2]-(E[X])^2$ 170 | 171 | $$ 172 | \text{Var}_{x \sim p}[f(x)] = E_{x \sim p}[f(x)^2] - (E_{x \sim p}[f(x)])^2 173 | $$ 174 | 175 | $$ 176 | \text{Var}_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] = E_{x \sim q}\left[\left(f(x) \frac{p(x)}{q(x)}\right)^2\right] - \left(E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]\right)^2 \\ = \int q(x)f(x)^2\frac{p(x)^2}{q(x)^2}dx - \int q(x)^2f(x)^2\frac{p(x)^2}{q(x)^2}dx \\= E_{x \sim p}[f(x)^2\frac{p(x)}{q(x)}] - \left(E_{x \sim p}[f(x)]\right)^2 177 | $$ 178 | 179 | 观察上述两个方差等式我们可以看到,如果 $p(x)$ 分布和 $q(x)$ 分布一样,需要满足下述等式 180 | $$ 181 | E_{x \sim p}[f(x)] = E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right] 182 | $$ 183 | 如果 $ \frac{p(x)}{q(x)}$ 差距很大,即实际分布和伪分布相差很多,那么实际方差与估计方差就会有很大的差距 184 | 185 | > 理想状态下,只要有足够多的采样,上述问题就不是问题。但是实际情况是我们无法做到采样足够多的样本,所以 $E_{x \sim p}[f(x)] = E_{x \sim q}\left[f(x) \frac{p(x)}{q(x)}\right]$ 的左右两侧会产生很大的差别 186 | 187 | 188 | 189 | ### 梯度更新 190 | 191 | $$ 192 | \text{gradient for update} = E_{(s_t,a_t) \sim \pi_\theta} \left[ A^\theta(s_t, a_t) \nabla \log p_\theta(a_t | s_t) \right] \\= E_{(s_t,a_t) \sim \pi_{\theta'}} \left[ \frac{p_\theta(s_t, a_t)}{p_{\theta'}(s_t, a_t)} A^\theta(s_t, a_t) \nabla \log p_\theta(a_t | s_t) \right] \\ = E_{(s_t,a_t) \sim \pi_{\theta'}} \left[ \frac{p_\theta(a_t | s_t) p_\theta(s_t)}{p_{\theta'}(a_t | s_t) p_{\theta'}(s_t)} A^\theta(s_t, a_t) \nabla \log p_\theta(a_t | s_t) \right] 193 | $$ 194 | 195 | 其中 $\frac{p_\theta(s_t)}{p_{\theta'}(s_t)}$ 默认相等然后约掉(因为不好算,所以认为他们近似等价并约分) 196 | 197 | 有推导公式 $\nabla f(x) = f(x) \nabla \log f(x)$ ,观察上述梯度等式可以发现, 198 | $$ 199 | f(x) =p_\theta(a_t | s_t)\\ \nabla \log f(x)=\nabla \log p_\theta(a_t | s_t) 200 | $$ 201 | 所以 202 | $$ 203 | \nabla f(x)=f(x) \nabla \log f(x) =p_\theta(a_t | s_t)\nabla \log p_\theta(a_t | s_t)=\nabla p_\theta(a_t | s_t) 204 | $$ 205 | 即梯度为 206 | $$ 207 | \nabla = E_{(s_t,a_t) \sim \pi_{\theta'}} \left[ \frac{\nabla p_\theta(a_t | s_t)}{p_{\theta'}(a_t | s_t) } A^{\theta'}(s_t, a_t) \right] 208 | $$ 209 | 由梯度可以推出关于 $\theta'$ 的奖励目标函数 210 | $$ 211 | J^{\theta'}(\theta) = E_{(s_t, a_t) \sim \pi_{\theta'}} \left[ \frac{p_\theta(a_t | s_t)}{p_{\theta'}(a_t | s_t)} A^{\theta'}(s_t, a_t) \right] 212 | $$ 213 | 214 | ### PPO算法 215 | 216 | $$ 217 | J^{k}_{PPO}(\theta) = J^{\theta^k}(\theta) - \beta KL(\theta, \theta^k)\\ 218 | 219 | J^{\theta^k}(\theta) \approx \sum_{(s_t, a_t)} \frac{p_\theta(a_t | s_t)}{p_{\theta^k}(a_t | s_t)} A^{\theta^k}(s_t, a_t)\\ 220 | \text{If } KL(\theta, \theta^k) \geq KL_{\text{max}}, \text{ increase } \beta \\ 221 | \text{If } KL(\theta, \theta^k) \leq KL_{\text{min}}, \text{ decrease } \beta \\ 222 | $$ 223 | 224 | 在后面加上了KL散度 225 | 226 | * 初始化策略参数 $\theta^0$。 227 | * 在每次迭代中: 228 | * 使用 $\theta^k$ 与环境交互,收集 $\{s_t, a_t\}$,并计算优势 $A^{\theta^k}(s_t, a_t)$。 229 | * 找到优化 $J_{PPO}(\theta)$的 $\theta$。 230 | 231 | ### PPO的第二种方式 232 | 233 | $$ 234 | J_{PPO2}^{\theta^k}(\theta) \approx \sum_{(s_t, a_t)} \min \left( \frac{p_\theta(a_t | s_t)}{p_{\theta^k}(a_t | s_t)} A^{\theta^k}(s_t, a_t), \text{clip}\left(\frac{p_\theta(a_t | s_t)}{p_{\theta^k}(a_t | s_t)}, 1 - \xi, 1 + \xi\right) A^{\theta^k}(s_t, a_t) \right) 235 | $$ 236 | 237 | clip是一个选择函数 238 | 239 | * 当 $\frac{p_\theta(a_t | s_t)}{p_{\theta^k}(a_t | s_t)} < 1 -\xi$ 时选 $1 -\xi$ 240 | * 当$\frac{p_\theta(a_t | s_t)}{p_{\theta^k}(a_t | s_t)} > 1 +\xi$ 时选 $1 +\xi$ 241 | 242 | * 当 $1 -\epsilon < \frac{p_\theta(a_t | s_t)}{p_{\theta^k}(a_t | s_t)} < 1 +\xi$ 时选 $\frac{p_\theta(a_t | s_t)}{p_{\theta^k}(a_t | s_t)}$ 243 | 244 | ![image-20240430175358580](./src/DRL7) 245 | 246 | > 绿线是 $\frac{p_\theta(a_t | s_t)}{p_{\theta^k}(a_t | s_t)} A^{\theta^k}(s_t, a_t)$的范围 247 | > 248 | > 蓝线是clip选择后的范围 249 | > 250 | > x轴是 $\frac{p_\theta(a_t | s_t)}{p_{\theta^k}(a_t | s_t)}$​ 的比值 251 | > 252 | > 我们不希望真实分布 $p_\theta(x)$ 和伪分布 $p_{\theta'}(x)$ 相差太大,也就是这个比值最好是在1左右 253 | > 254 | > 这里尝试对上图进行解释: 255 | > 256 | > * 当 $A > 0$ 时,说明 s 和 a 获得的奖励是好的,说明此时 $p_\theta(a_t | s_t)$ 做出的决策是正确的,我们希望它越大越好,此时目标函数(红线)会把概率往上推,但只能推到一定的程度 257 | > * 当 $A < 0$ 时,说明 s 和 a 获得的奖励是好的,说明此时 $p_\theta(a_t | s_t)$ 做出的决策是错误的,我们希望它越小越好,此时目标函数(红线)就把概率往下推,但也不会推的很小 258 | -------------------------------------------------------------------------------- /Learning_Notes/Deep_Learning(深度学习).md: -------------------------------------------------------------------------------- 1 | # Deep Learning 2 | 3 | ## 1、黑盒内部 4 | 5 | **理解神经网络和深度学习:** 6 | 7 | 本质上来说神经网络可以拟合任何东西,不管这个数据集有多抽象,神经网络都能拟合出一条关于这个数据集的函数。 8 | 9 | 深度学习就是因为神经网络的层数很深,所以叫深度学习 10 | 11 | 神经网络 = big fancy squiggle fitting machines 12 | 13 | 14 | 15 | **激活函数的意义:** 16 | 17 | 不同Dosage的指标经过激活函数后再相加,所得结果就是绿色曲线上的点 18 | 19 | 20 | 21 | ## 链式法则 22 | 23 | **Intercept(截距)**: 24 | 25 | - 在线性回归中,截距是指当所有自变量(解释变量)的值为零时,因变量的期望值。在 $y = mx + b$ 形式的线性方程中, $b$ 就是截距,它是直线与 $y$ 轴的交点的 $y$-坐标。 26 | - 截距是模型的一个参数,它表示了数据在因变量轴上的起始点。 27 | 28 | **Bias(偏差)**: 29 | 30 | - 在统计学中,偏差是指一个估计量与被估计的真实值之间的差异。如果一个估计量系统地偏离真实值,那么它就是有偏的。 31 | - 在机器学习中,偏差是指算法在训练数据上的表现与在未知数据上的表现之间的差距。高偏差通常意味着模型过于简单(即欠拟合),无法捕捉数据中的模式。 32 | 33 | 虽然在某些上下文中,“bias”可以用来描述类似于截距的常数项(如在神经网络的权重中),但在统计和回归分析中,它们通常指的是不同的概念。截距是模型的一个直接参数,而偏差是对模型估计精度的一种评估。 34 | 35 | 36 | 37 | A关于B,B关于C,通过链式法则可以知道A关于C 38 | 39 | 链式求导 40 | 41 | 42 | 43 | ### 梯度下降 44 | 45 | 46 | 47 | 在离最优解很远时跨度很大,在靠近最优解时步长减小 48 | 49 | 对损失函数求导,当导数等于0时说明到了最小值 50 | 51 | 学习率就是调整梯度下降步长的做法, $原先所在位置-(所在位置的导数值\times学习率)$ ,所得结果就是需要走到的位置 52 | 53 | * 导数值越大,所在点的左右两侧越陡峭,意味着所走步长越大 54 | * 导数值越小,所在点趋近函数的最小值,意味着要缩小步长 55 | 56 | > 当有多个需要调整的参数时,这里的导数就是Loss函数对该参数的偏导数值 57 | 58 | **步骤** 59 | 60 | 1、对损失函数中的每一个参数求导,用行话来说,就是对损失函数求梯度 61 | 62 | 2、随机给参数赋值 63 | 64 | 3、将参数值传到导数中(梯度) 65 | 4、计算步长: $Step\ Size=Slop\times Learning\ Rate$ 66 | 67 | 5、计算新的参数值: $New\ Parameter=Old\ Parameter - Step\ Size$ 68 | 69 | 3到5的步骤循环操作直到步长非常小或者达到最大步数 70 | 71 | 72 | 73 | ## 反向传播 74 | 75 | standard deviation 标准差 76 | 77 | standard normal distribution 标准正态分布 78 | 79 | 80 | 81 | 反向传播所计算的偏导数公式不会因为优化参数而改变,公式还是公式,改变的只是参数 82 | 83 | softplus激活函数: $log(1+e^x)$ 84 | 85 | 86 | 87 | **链式法则 + 梯度下降** 是反向传播的核心 88 | 89 | 90 | 91 | ## ArgMax and Softmax 92 | 93 | 94 | 95 | **argmax:** 最大值为1,其他都为0 96 | 97 | **缺点:** 无法用它来优化神经网络中的权重和偏置,因为斜率为0,所以导数为0,无法进行梯度下降 98 | 99 | 100 | 101 | **softmax:** $softmax_i(Output\ Values)=\frac{e^{Output\ Value_i}}{\sum^k_{j=1}e^{Output\ Value_i}}$ 102 | 103 | 104 | 105 | ## 交叉熵 106 | 107 | $Cross\ Entropy_p=-log_e(p)$ 108 | 109 | 交叉熵可以放大预测错误的损失,导数值更大,反向传播后的步长跨度更大,更快趋向于Loss的最小值 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | -------------------------------------------------------------------------------- /Learning_Notes/Lasso回归_岭回归_弹性网回归.md: -------------------------------------------------------------------------------- 1 | # Lasso回归(L1)、 岭回归(L2)、弹性网回归 2 | 3 | 偏差(bais)与方差(variance)的区别 4 | 5 | 机器学习方法无法捕捉真实关系的现象被称为偏差 6 | 7 | 一般来说,训练集中偏差较小的测试集中方差可能很大 8 | 9 | 10 | 11 | 交叉验证(cross-validation) 12 | 13 | 最小二乘法(least square) 14 | 15 | 逻辑回归 16 | 17 | knn是一个有监督方法 18 | 19 | * 这里的k是指选择k个临近样本来进行投票,获得哪个族群的投票最多,就把这个点分类到该族群中 20 | 21 | k-means是无监督方法 22 | 23 | * 这里的K是你选择要将数据分成K个族群 24 | * k随机选择,在elbow point的k是最佳簇数量 25 | 26 | ---- 27 | 28 | ## Lasso回归: 29 | 30 | 罚函数为 $\lambda \times (|slope|+ |w_{1}|+|w_2|...)$ 31 | 32 | > 公式的括号中包含所有的权重变量,斜率和 $w$ 都算是一个等式的变量 33 | 34 | Lasso回归可以除去等式中的无用变量 35 | 36 | 相较于岭回归来说,Lasso回归对于包含许多无用变量的等式来说更加有用 37 | 38 | 在一堆特征里面找出主要的特征,那么L1正则化(Lasso回归)更是首选 39 | 40 | ## 岭回归: 41 | 42 | 岭回归在最小二乘法的基础上,在损失函数中加入了罚函数 $\lambda \times (slope^{2}+w_1^{2}+w_2^{2}...)$ ,slope是斜率, $\lambda$ 的存在是为了防止过拟合,值越大,预测值对斜率的敏感程度越低;尝试不同的 $\lambda$ 值来进行交叉验证,选择方差最小的值 43 | 44 | > 公式的括号中包含所有的权重变量,斜率和 $w$ 都算是一个等式的变量 45 | 46 | 允许拟合函数在训练集上有少许偏差,但是能降低其在测试集上的方差 47 | 48 | 最小二乘法算出的权重比岭回归算出的权重更加敏感(更加大) 49 | 50 | 在数据量比参数量少的情况下,岭回归可以解决最小二乘法解决不了的问题 51 | 52 | ## 弹性网回归(Elastic Net Regression) 53 | 54 | 罚函数 $\lambda_1 \times (|slope|+ |w_{1}|+|w_2|...)+\lambda_2 \times (slope^{2}+w_1^{2}+w_2^{2}...)$ 55 | 56 | 将套索回归和岭回归的罚函数结合 57 | 58 | > 公式的括号中包含所有的权重变量,斜率和 $w$ 都算是一个等式的变量 -------------------------------------------------------------------------------- /Learning_Notes/Pytorch手撸Attention.md: -------------------------------------------------------------------------------- 1 | # Pytorch手撸Attention 2 | 3 | 注释写的很详细了,对照着公式比较下更好理解,可以参考一下[知乎的文章](https://zhuanlan.zhihu.com/p/410776234) 4 | 5 | ## 注意力机制 6 | 7 | ![image-20240416192048826](./src/attention1.png) 8 | 9 | ```python 10 | import torch 11 | import torch.nn as nn 12 | import torch.nn.functional as F 13 | 14 | 15 | class SelfAttention(nn.Module): 16 | def __init__(self, embed_size): 17 | super(SelfAttention, self).__init__() 18 | self.embed_size = embed_size 19 | 20 | # 定义三个全连接层,用于生成查询(Q)、键(K)和值(V) 21 | # 用Linear线性层让q、k、y能更好的拟合实际需求 22 | self.value = nn.Linear(embed_size, embed_size) 23 | self.key = nn.Linear(embed_size, embed_size) 24 | self.query = nn.Linear(embed_size, embed_size) 25 | 26 | def forward(self, x): 27 | # x 的形状应为 (batch_size批次数量, seq_len序列长度, embed_size嵌入维度) 28 | batch_size, seq_len, embed_size = x.shape 29 | 30 | Q = self.query(x) 31 | K = self.key(x) 32 | V = self.value(x) 33 | 34 | # 计算注意力分数矩阵 35 | # 使用 Q 矩阵乘以 K 矩阵的转置来得到原始注意力分数 36 | # 注意力分数的形状为 [batch_size, seq_len, seq_len] 37 | # K.transpose(1,2)转置后[batch_size, embed_size, seq_len] 38 | # 为什么不直接使用 .T 直接转置?直接转置就成了[embed_size, seq_len,batch_size],不方便后续进行矩阵乘法 39 | attention_scores = torch.matmul(Q, K.transpose(1, 2)) / torch.sqrt( 40 | torch.tensor(self.embed_size, dtype=torch.float32)) 41 | 42 | # 应用 softmax 获取归一化的注意力权重,dim=-1表示基于最后一个维度做softmax 43 | attention_weight = F.softmax(attention_scores, dim=-1) 44 | 45 | # 应用注意力权重到 V 矩阵,得到加权和 46 | # 输出的形状为 [batch_size, seq_len, embed_size] 47 | output = torch.matmul(attention_weight, V) 48 | 49 | return output 50 | ``` 51 | 52 | ## 多头注意力机制 53 | 54 | ![image-20240416192311672](./src/attention2.png) 55 | 56 | ```python 57 | class MultiHeadAttention(nn.Module): 58 | def __init__(self, embed_size, num_heads): 59 | super().__init__() 60 | self.embed_size = embed_size 61 | self.num_heads = num_heads 62 | # 整除来确定每个头的维度 63 | self.head_dim = embed_size // num_heads 64 | 65 | # 加入断言,防止head_dim是小数,必须保证可以整除 66 | assert self.head_dim * num_heads == embed_size 67 | 68 | self.q = nn.Linear(embed_size, embed_size) 69 | self.k = nn.Linear(embed_size, embed_size) 70 | self.v = nn.Linear(embed_size, embed_size) 71 | self.out = nn.Linear(embed_size, embed_size) 72 | 73 | def forward(self, query, key, value): 74 | # N就是batch_size的数量 75 | N = query.shape[0] 76 | 77 | # *_len是序列长度 78 | q_len = query.shape[1] 79 | k_len = key.shape[1] 80 | v_len = value.shape[1] 81 | 82 | # 通过线性变换让矩阵更好的拟合 83 | queries = self.q(query) 84 | keys = self.k(key) 85 | values = self.v(value) 86 | 87 | # 重新构建多头的queries,permute调整tensor的维度顺序 88 | # 结合下文demo进行理解 89 | queries = queries.reshape(N, q_len, self.num_heads, self.head_dim).permute(0, 2, 1, 3) 90 | keys = keys.reshape(N, k_len, self.num_heads, self.head_dim).permute(0, 2, 1, 3) 91 | values = values.reshape(N, v_len, self.num_heads, self.head_dim).permute(0, 2, 1, 3) 92 | 93 | # 计算多头注意力分数 94 | attention_scores = torch.matmul(queries, keys.transpose(-2, -1)) / torch.sqrt( 95 | torch.tensor(self.head_dim, dtype=torch.float32)) 96 | attention = F.softmax(attention_scores, dim=-1) 97 | 98 | # 整合多头注意力机制的计算结果 99 | out = torch.matmul(attention, values).permute(0, 2, 1, 3).reshape(N, q_len, self.embed_size) 100 | # 过一遍线性函数 101 | out = self.out(out) 102 | 103 | return out 104 | ``` 105 | 106 | ## demo测试 107 | 108 | #### self-attention测试 109 | 110 | ```python 111 | # 测试自注意力机制 112 | batch_size = 2 113 | seq_len = 3 114 | embed_size = 4 115 | 116 | # 生成一个随机数据 tensor 117 | input_tensor = torch.rand(batch_size, seq_len, embed_size) 118 | 119 | # 创建自注意力模型实例 120 | model = SelfAttention(embed_size) 121 | 122 | # print输入数据 123 | print("输入数据 [batch_size, seq_len, embed_size]:") 124 | print(input_tensor) 125 | 126 | # 运行自注意力模型 127 | output_tensor = model(input_tensor) 128 | 129 | # print输出数据 130 | print("输出数据 [batch_size, seq_len, embed_size]:") 131 | print(output_tensor) 132 | ``` 133 | 134 | ```bash 135 | 输入数据 [batch_size, seq_len, embed_size]: 136 | tensor([[[0.7579, 0.7342, 0.1031, 0.8610], 137 | [0.8250, 0.0362, 0.8953, 0.1687], 138 | [0.8254, 0.8506, 0.9826, 0.0440]], 139 | 140 | [[0.0700, 0.4503, 0.1597, 0.6681], 141 | [0.8587, 0.4884, 0.4604, 0.2724], 142 | [0.5490, 0.7795, 0.7391, 0.9113]]]) 143 | 144 | 输出数据 [batch_size, seq_len, embed_size]: 145 | tensor([[[-0.3714, 0.6405, -0.0865, -0.0659], 146 | [-0.3748, 0.6389, -0.0861, -0.0706], 147 | [-0.3694, 0.6388, -0.0855, -0.0660]], 148 | 149 | [[-0.2365, 0.4541, -0.1811, -0.0354], 150 | [-0.2338, 0.4455, -0.1871, -0.0370], 151 | [-0.2332, 0.4458, -0.1867, -0.0363]]], grad_fn=) 152 | ``` 153 | 154 | #### MultiHeadAttention 155 | 156 | 多头注意力机制务必自己debug一下,主要聚焦在理解如何拆分成多头的,不结合代码你很难理解多头的操作过程 157 | 158 | 1、`queries.reshape(N, q_len, self.num_heads, self.head_dim).permute(0, 2, 1, 3)` 处理之后的 `size = torch.Size([64, 8, 10, 16])` 159 | 160 | - 通过上述操作,`queries` 张量的最终形状变为 `[N, self.num_heads, q_len, self.head_dim]`。这样的排列方式使得每个注意力头可以单独处理对应的序列部分,而每个头的处理仅关注其分配到的特定维度 `self.head_dim` 161 | - 这个形状是为了后续的矩阵乘法操作准备的,其中每个头的查询将与对应的键进行点乘,以计算注意力分数 162 | 163 | 2、`attention_scores = torch.matmul(queries, keys.transpose(-2, -1)) / torch.sqrt( 164 | torch.tensor(self.head_dim, dtype=torch.float32))` 将reshape后的`quries`的后两个维度进行转置后点乘,对应了 $Q \cdot K^T$ ;根据demo这里的头数为8,所以公式中对应的下标 $i$ 为8 165 | 166 | 3、在进行完多头注意力机制的计算后通过 `torch.matmul(attention, values).permute(0, 2, 1, 3).reshape(N, q_len, self.embed_size)` 整合,变回原来的 `[batch_size,seq_length,embed_size]`形状 167 | 168 | ```python 169 | # 测试多头注意力 170 | embed_size = 128 # 嵌入维度 171 | num_heads = 8 # 头数 172 | attention = MultiHeadAttention(embed_size, num_heads) 173 | 174 | # 创建随机数据模拟 [batch_size, seq_length, embedding_dim] 175 | batch_size = 64 176 | seq_length = 10 177 | dummy_values = torch.rand(batch_size, seq_length, embed_size) 178 | dummy_keys = torch.rand(batch_size, seq_length, embed_size) 179 | dummy_queries = torch.rand(batch_size, seq_length, embed_size) 180 | 181 | # 计算多头注意力输出 182 | output = attention(dummy_values, dummy_keys, dummy_queries) 183 | print(output.shape) # [batch_size, seq_length, embed_size] 184 | ``` 185 | 186 | ```bash 187 | torch.Size([64, 10, 128]) 188 | ``` 189 | 190 | > 如果你难以理解权重矩阵的拼接和拆分,推荐[李宏毅的attention课程(YouTobe)](https://www.youtube.com/watch?v=hYdO9CscNes) -------------------------------------------------------------------------------- /Learning_Notes/RNN(循环神经网络).md: -------------------------------------------------------------------------------- 1 | # RNN 2 | 3 | **slot filling:** 4 | 5 | 用于对话系统或是语音助手,主要目的是从用户的输入中提取出关键信息并将信息放到预定的“槽”中(slot) 6 | 7 | 比如:我明天上午十点要和玛丽在苏州中心的星巴克见面 8 | 9 | **意图:** 见面安排 10 | 11 | **日期:** 明天 12 | 13 | **时间:** 上午十点 14 | 15 | **地点:** 苏州中心的星巴克 16 | 17 | **人物:** 玛丽 18 | 19 | 上述例子中,意图、日期、时间、地点、人物就是预定的槽,slot filling的目的就是为了将句子中的信息提取出来放到相应的槽中 20 | 21 | 22 | 23 | **为什么要用rnn?** 24 | 25 | 举一个简单的例子来说,传统的神经网络理解句子是靠编码的向量 26 | 27 | *在今天晚上到达苏州* 28 | 29 | *在今天晚上离开苏州* 30 | 31 | 上述两句话在传统方法中,**今天晚上** 和 **苏州** 是转换成向量重点关注的,但是对于 **到达** 和 **离开** 而言,可能他们不属于地点或是时间范畴内,则会被冠以相同的向量标注,那么上述两个句子中,一个是离开苏州,一个是到达苏州的意思就没有被传达到对应的向量中,也就是说,上述两个句子转换成向量后的表示是一样的;输入到模型中后就会有同样的结果(但其实这两个句子的意思完全不一样)**苏州** 要么就都是出发地的几率最高,要么就都是目的地的几率最高 32 | 33 | 我们需要一个能在表示时记住 **到达** 和 **离开** 的编码方式 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /Learning_Notes/Transformer_20问.md: -------------------------------------------------------------------------------- 1 | # Transformer QA 2 | 3 | [**原文链接**](https://www.qinglite.cn/doc/701264759473e2afe),这里做一些知识补充 4 | 5 | **1、为什么Transformer要使用多头注意力机制?** 6 | 7 | * 为了解决模型在对当前位置的信息进行编码时,会过度的将注意力集中于自身位置的问题 8 | * 一定程度上ℎ越大整个模型的表达能力越强,越能提高模型对于注意力权重的合理分配 9 | * [知乎链接](https://www.zhihu.com/question/341222779) 10 | 11 | 12 | 13 | **2、Transformer为什么Q和K使用不同的权重矩阵生成,为何不能使用同一个值进行自身的点乘?** 14 | 15 | * 不同的矩阵可以保证在不同的空间进行投影,增强表达能力和泛化能力 16 | * [中文链接](https://www.zhihu.com/question/319339652) 17 | * [英文链接](https://medium.com/dissecting-bert/dissecting-bert-part-1-d3c3d495cdb3) 18 | 19 | 20 | 21 | **3、Transformer计算attention的时候为何选择点乘而不是加法?两者计算复杂度和效果上有什么区别?** 22 | 23 | * 为了计算更快。矩阵加法在加法这一块的计算量确实简单,但是作为一个整体计算attention的时候相当于一个隐层,整体计算量和点积相似。在效果上来说,从实验分析,两者的效果和dk相关,dk越大,加法的效果越显著。 24 | * 当前矩阵乘法有非常成熟的加速实现 25 | * 可以参考第四问的链接,里面也对这个问提做出了一定的解释 26 | 27 | 28 | 29 | **4、为什么在进行softmax之前需要对attention进行scaled(为什么除以dk的平方根),并使用公式推导进行讲解** 30 | 31 | * 简单的归纳:attention有加分和乘法两种,在乘法attention中,极大的点积值会会将整个softmax推向梯度平缓区,使得收敛困难,所以要对其进行scaled 32 | * [详细解释](https://www.zhihu.com/question/339723385) 33 | 34 | 35 | 36 | **5、在计算attention score的时候如何对padding做mask操作?** 37 | 38 | * 对需要mask的位置设为负无穷,再对attention score进行相加 39 | * 目前没有找到针对该问题的文章,如果想要深入了解可以参考源码 40 | 41 | 42 | 43 | **6、为什么在进行多头注意力的时候需要对每个head进行降维?(可以参考上面一个问题)** 44 | 45 | * 将原有的高维空间转化为多个低维空间并再最后进行拼接,形成同样维度的输出,借此丰富特性信息,降低了计算量 46 | * 在**不增加时间复杂度**的情况下,同时,借鉴**CNN多核**的思想,在**更低的维度**,在**多个独立的特征空间**,**更容易**学习到更丰富的特征信息。 47 | 48 | ​ [知乎海晨威老师的回答](https://www.zhihu.com/question/350369171/answer/3304713324) 49 | 50 | 51 | 52 | **7、大概讲一下Transformer的Encoder模块?** 53 | 54 | * 输入嵌入-加上位置编码-多个编码器层(每个编码器层包含全连接层,多头注意力层和点式前馈网络层(包含激活函数层)) 55 | 56 | * [链接](https://ifwind.github.io/2021/08/18/Transformer%E7%9B%B8%E5%85%B3%E2%80%94%E2%80%94%EF%BC%888%EF%BC%89Transformer%E6%A8%A1%E5%9E%8B/) 57 | 58 | 59 | 60 | **8、为何在获取输入词向量之后需要对矩阵乘以embedding size的开方?意义是什么?** 61 | 62 | * embedding matrix的初始化方式是xavier init,这种方式的方差是1/embedding size,因此乘以embedding size的开方使得embedding matrix的方差是1,在这个scale下可能更有利于embedding matrix的收敛。 63 | * [知乎链接](https://zhuanlan.zhihu.com/p/442509602) 64 | 65 | 66 | 67 | **9、简单介绍一下Transformer的位置编码?有什么意义和优缺点?** 68 | 69 | * 因为self-attention是位置无关的,无论句子的顺序是什么样的,通过self-attention计算的token的hidden embedding都是一样的,这显然不符合人类的思维。因此要有一个办法能够在模型中表达出一个token的位置信息,transformer使用了固定的positional encoding来表示token在句子中的绝对位置信息。 70 | * [位置编码](https://zhuanlan.zhihu.com/p/106644634) [意义](https://zhuanlan.zhihu.com/p/630082091) 71 | 72 | **10、你还了解哪些关于位置编码的技术,各自的优缺点是什么?** 73 | 74 | * 相对位置编码(RPE)1.在计算attention score和weighted value时各加入一个可训练的表示相对位置的参数。2.在生成多头注意力时,把对key来说将绝对位置转换为相对query的位置3.复数域函数,已知一个词在某个位置的词向量表示,可以计算出它在任何位置的词向量表示。前两个方法是词向量+位置编码,属于亡羊补牢,复数域是生成词向量的时候即生成对应的位置信息。 75 | 76 | * 关于位置编码我也没有太多的学习,会在之后的更新补充 77 | 78 | 79 | 80 | **11、简单讲一下Transformer中的残差结构以及意义。** 81 | 82 | * encoder和decoder的self-attention层和ffn层都有残差连接。反向传播的时候不会造成梯度消失。 83 | * [知乎链接](https://zhuanlan.zhihu.com/p/459065530) 84 | 85 | 86 | 87 | **12、为什么transformer块使用LayerNorm而不是BatchNorm?LayerNorm 在Transformer的位置是哪里?** 88 | 89 | * 多头注意力层和激活函数层之间。CV使用BN是认为channel维度的信息对cv方面有重要意义,如果对channel维度也归一化会造成不同通道信息一定的损失。而同理nlp领域认为句子长度不一致,并且各个batch的信息没什么关系,因此只考虑句子内信息的归一化,也就是LN 90 | 91 | 92 | 93 | **13、简答讲一下BatchNorm技术,以及它的优缺点。** 94 | 95 | * 批归一化是对每一批的数据在进入激活函数前进行归一化,可以提高收敛速度,防止过拟合,防止梯度消失,增加网络对数据的敏感度。 96 | 97 | 98 | 99 | **14、简单描述一下Transformer中的前馈神经网络?使用了什么激活函数?相关优缺点?** 100 | 101 | * 输入嵌入-加上位置编码-多个编码器层(每个编码器层包含全连接层,多头注意力层和点式前馈网络层(包含激活函数层))-多个解码器层(每个编码器层包含全连接层,多头注意力层和点式前馈网络层)-全连接层,使用了relu激活函数 102 | 103 | 104 | 105 | **15、Encoder端和Decoder端是如何进行交互的?(在这里可以问一下关于seq2seq的attention知识)** 106 | 107 | * 通过转置encoder_ouput的seq_len维与depth维,进行矩阵两次乘法,即q*kT*v输出即可得到target_len维度的输出 108 | 109 | 110 | 111 | **16、Decoder阶段的多头自注意力和encoder的多头自注意力有什么区别?(为什么需要decoder自注意力需要进行 sequence mask)** 112 | 113 | * Decoder有两层mha,encoder有一层mha,Decoder的第二层mha是为了转化输入与输出句长,Decoder的请求q与键k和数值v的倒数第二个维度可以不一样,但是encoder的qkv维度一样。 114 | 115 | 116 | 117 | **17、Transformer的并行化提现在哪个地方?Decoder端可以做并行化吗?** 118 | 119 | * Transformer的并行化主要体现在self-attention模块,在Encoder端Transformer可以并行处理整个序列,并得到整个输入序列经过Encoder端的输出,但是rnn只能从前到后的执行 120 | * 训练的时候可以,但是交互的时候不可以 121 | 122 | 123 | 124 | **18、简单描述一下wordpiece model 和 byte pair encoding,有实际应用过吗?** 125 | 126 | * 传统词表示方法无法很好的处理未知或罕见的词汇(OOV问题) 127 | * 传统词tokenization方法不利于模型学习词缀之间的关系” 128 | * BPE(字节对编码)或二元编码是一种简单的数据压缩形式,其中最常见的一对连续字节数据被替换为该数据中不存在的字节。后期使用时需要一个替换表来重建原始数据。 129 | * 优点:可以有效地平衡词汇表大小和步数(编码句子所需的token次数)。 130 | * 缺点:基于贪婪和确定的符号替换,不能提供带概率的多个分片结果。 131 | 132 | 133 | 134 | **19、Transformer训练的时候学习率是如何设定的?Dropout是如何设定的,位置在哪里?Dropout 在测试的需要有什么需要注意的吗?** 135 | 136 | * LN是为了解决梯度消失的问题,dropout是为了解决过拟合的问题。在embedding后面加LN有利于embedding matrix的收敛。 137 | 138 | 139 | 140 | **20、引申一个关于bert问题,bert的mask为何不学习transformer在attention处进行屏蔽score的技巧?** 141 | 142 | * BERT和transformer的目标不一致,bert是语言的预训练模型,需要充分考虑上下文的关系,而transformer主要考虑句子中第i个元素与前i-1个元素的关系。 -------------------------------------------------------------------------------- /Learning_Notes/src/DRL1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/DRL1.png -------------------------------------------------------------------------------- /Learning_Notes/src/DRL2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/DRL2.png -------------------------------------------------------------------------------- /Learning_Notes/src/DRL3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/DRL3.png -------------------------------------------------------------------------------- /Learning_Notes/src/DRL4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/DRL4.png -------------------------------------------------------------------------------- /Learning_Notes/src/DRL5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/DRL5.png -------------------------------------------------------------------------------- /Learning_Notes/src/DRL6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/DRL6.png -------------------------------------------------------------------------------- /Learning_Notes/src/DRL7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/DRL7.png -------------------------------------------------------------------------------- /Learning_Notes/src/EDA.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/EDA.png -------------------------------------------------------------------------------- /Learning_Notes/src/LSL.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/LSL.png -------------------------------------------------------------------------------- /Learning_Notes/src/attention1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/attention1.png -------------------------------------------------------------------------------- /Learning_Notes/src/attention2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/attention2.png -------------------------------------------------------------------------------- /Learning_Notes/src/bert-attention.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/bert-attention.png -------------------------------------------------------------------------------- /Learning_Notes/src/bert-picture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/bert-picture.png -------------------------------------------------------------------------------- /Learning_Notes/src/bertflow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/bertflow.png -------------------------------------------------------------------------------- /Learning_Notes/src/bys1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/bys1.png -------------------------------------------------------------------------------- /Learning_Notes/src/bys2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/bys2.png -------------------------------------------------------------------------------- /Learning_Notes/src/bys3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/bys3.png -------------------------------------------------------------------------------- /Learning_Notes/src/cutoff.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/cutoff.png -------------------------------------------------------------------------------- /Learning_Notes/src/frp-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/frp-1.png -------------------------------------------------------------------------------- /Learning_Notes/src/image-20240123141305224.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/image-20240123141305224.png -------------------------------------------------------------------------------- /Learning_Notes/src/image-20240123141547728.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/image-20240123141547728.png -------------------------------------------------------------------------------- /Learning_Notes/src/image-20240123142921461.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/image-20240123142921461.png -------------------------------------------------------------------------------- /Learning_Notes/src/pregnant.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/pregnant.png -------------------------------------------------------------------------------- /Learning_Notes/src/qt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/qt.png -------------------------------------------------------------------------------- /Learning_Notes/src/simcse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/simcse.png -------------------------------------------------------------------------------- /Learning_Notes/src/triplet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/triplet.png -------------------------------------------------------------------------------- /Learning_Notes/src/whitek: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Learning_Notes/src/whitek -------------------------------------------------------------------------------- /Learning_Notes/对比表征学习(一).md: -------------------------------------------------------------------------------- 1 | # 对比表征学习(一) 2 | 3 | > 参考翁莉莲的[Blog](https://lilianweng.github.io/posts/2021-05-31-contrastive/#contrastive-loss),本文主要聚焦于对比损失函数 4 | 5 | 对比表示学习(Contrastive Representation Learning)可以用来优化嵌入空间,使相似的数据靠近,不相似的数据拉远。同时在面对无监督数据集时,对比学习是一种极其有效的自监督学习方式 6 | 7 | ## 对比学习目标 8 | 9 | 在最早期的对比学习中只有一个正样本和一个负样本进行比较,在当前的训练目标中,一个批次的数据集中可以有多个正样本和负样本对。 10 | 11 | ### 对比损失函数 12 | 13 | #### Contrastive loss 14 | 15 | 该[论文](http://yann.lecun.com/exdb/publis/pdf/chopra-05.pdf)是以对比方式进行深度度量学习(deep metric learning)的最早训练目标之一 16 | 17 | 给定一组输入样本 $$\{x_i\}$$,每个样本都有一个对应的标签 $$y_i \in \{1, \dots, L\}$$,共有 $$L$$ 个类别。我们希望学习一个函数 $$f_{\theta}(\cdot) : \mathcal{X} \rightarrow \mathbb{R}^d$$,该函数能将 $$x_i$$ 编码成一个嵌入向量,使得同一类别的样本具有相似的嵌入,而不同类别的样本具有非常不同的嵌入。因此,对比损失(Contrastive Loss)会取一对输入 $$(x_i, x_j)$$,并最小化同一类别样本间的嵌入距离,同时最大化不同类别样本间的嵌入距离。 18 | $$ 19 | \mathcal{L}_{\text{cont}}(x_i, x_j, \theta) = \mathbf{1}[y_i = y_j] \left\| f_\theta(x_i) - f_\theta(x_j) \right\|^2 + \mathbf{1}[y_i \neq y_j] \max(0, \epsilon - \left\| f_\theta(x_i) - f_\theta(x_j) \right\|^2) 20 | $$ 21 | 其中 $$\epsilon$$​ 是一个超参数,用来定义不同类别样本的最低下界。 22 | 23 | #### Triplet loss 24 | 25 | 参考[论文](https://arxiv.org/abs/1503.03832),提出的目的是用来学习在不同姿势和角度下对同一个人进行人脸识别。 26 | 27 | ![image-20240527125804754](.\src\triplet.png) 28 | 29 | 给定一个锚定输入 $x$,我们选择一个正样本 $x^+$ 和一个负样本 $x^-$,意味着 $x^+$ 和 $x$ 属于同一类,而 $x^-$ 则来自另一个不同的类。三元组损失(Triplet Loss)通过以下公式学习,同时最小化锚定 $x$ 和正样本 $x^+$ 之间的距离,并最大化锚定 $x$ 和负样本 $x^-$​ 之间的距离: 30 | $$ 31 | \mathcal{L}_{\text{triplet}}(x, x^+, x^-) = \sum_{x \in \mathcal{X}} \max \left(0, \|f(x) - f(x^+)\|^2 - \|f(x) - f(x^-)\|^2 + \epsilon \right) 32 | $$ 33 | 其中,边界参数 $\epsilon$ 被配置为相似对与不相似对之间距离的最小偏移量。 34 | 35 | 36 | 37 | #### Lifted Structured Loss 38 | 39 | 参考[论文](https://arxiv.org/abs/1511.06452),利用一个训练批次中的所有成对边缘,以提高计算效率。 40 | 41 | ![image-20240527130148375](.\src\LSL.png) 42 | 43 | 设 $D_{ij} = |f(x_i) - f(x_j)|_2 $,一个结构化的损失函数定义如下: 44 | $$ 45 | \mathcal{L}_{\text{struct}} = \frac{1}{2|\mathcal{P}|} \sum_{(i,j) \in P} \max(0, \mathcal{L}_{\text{struct}}^{(ij)})^2 46 | $$ 47 | 其中, 48 | $$ 49 | \mathcal{L}_{\text{struct}}^{(ij)} = D_{ij} + \max \left(\max_{(i,k) \in \mathcal{N}} (\epsilon - D_{ik}), \max_{(j,l) \in \mathcal{N}} (\epsilon - D_{jl})\right) 50 | $$ 51 | 这里 $\mathcal{P}$ 包含了正样本对的集合,而 $\mathcal{N}$ 是负样本对的集合。注意,密集的成对平方距离矩阵可以在每个训练批次中轻松计算。$\max \left(\max_{(i,k) \in \mathcal{N}} (\epsilon - D_{ik}), \max_{(j,l) \in \mathcal{N}} (\epsilon - D_{jl})\right)$ 部分用来挖掘难负样本,然而,这部分不是平滑的,可能会导致在实践中收敛到不好的局部最优。因此,它被放宽为以下形式: 52 | $$ 53 | \mathcal{L}_{\text{struct}}^{(ij)} = D_{ij} + \log \left( \sum_{(i,k) \in \mathcal{N}} \exp(\epsilon-D_{ik}) + \sum_{(j,l) \in \mathcal{N}} \exp(\epsilon-D_{jl}) \right) 54 | $$ 55 | 在论文中,他们还提出通过在每个批次中积极加入一些难分的负样本(hard negative),通过给出几对随机的正样本,来提高负样本的质量 56 | 57 | 58 | 59 | #### N-pair loss 60 | 61 | 多类 N 对损失([paper](https://papers.nips.cc/paper/2016/hash/6b180037abbebea991d8b1232f8a8ca9-Abstract.html))对三重损失进行了泛化,以包括与多个负样本的比较。 62 | 63 | 给定一个包含一个正样本和 $N-1$ 个负样本的 $N+1$ 元组(还要包括样本本身,所以N+1),训练样本为${\{x, x^+, {x_1}^-, \dots, {x_{N-1}}}^-\}$,损失被定义为: 64 | 65 | $$ 66 | \mathcal{L}_{N\text{-pair}}(x, x^+, \{x_i\}_{i=1}^{N-1}) = \log \left( 1 + \sum_{i=1}^{N-1} \exp(f(x)^T f({x_i}^-) - f(x)^T f(x^+)) \right) \\ = -\log \frac{\exp(f(x)^T f(x^+))}{\exp(f(x)^T f(x^+)) + \sum_{i=1}^{N-1} \exp(f(x)^T f({x_i}^-)} 67 | $$ 68 | 69 | 如果我们每个类别只采样一个负样本,这等同于用于多分类的softmax损失。 70 | 71 | 72 | 73 | #### NCE 74 | 75 | **Noise Contrastive Estimation**,论文[链接](https://proceedings.mlr.press/v9/gutmann10a.html) 76 | 77 | 创新点是运行逻辑回归来区分目标数据和噪声。 78 | 79 | 让 $x$ 是目标样本,符合分布 $P(x|C = 1; \theta) = p_\theta(x)$,并且 $\tilde{x}$ 是噪声样本,符合分布 $P(\tilde{x}|C = 0) = q(\tilde{x})$。需要注意逻辑回归模型是模拟对数几率(即 logit),在这种情况下,我们希望对一个来自目标数据分布而非噪声分布的样本 $u$ 的 logit 进行建模: 80 | 81 | $$ 82 | \ell(u) = \log \frac{p_\theta(u)}{q(u)} = \log p_\theta(u) - \log q(u) 83 | $$ 84 | 85 | 将 logits 转换成概率后,通过 sigmoid 函数 $\sigma(\cdot)$,我们可以应用交叉熵损失: 86 | 87 | $$ 88 | L_{NCE} = -\frac{1}{N} \sum_{i=1}^N \left[ \log \sigma(\ell(x_i)) + \log (1 - \sigma(\ell(\tilde{x}_i))) \right] 89 | $$ 90 | 91 | 其中: 92 | 93 | $$ 94 | \sigma(\ell) = \frac{1}{1 + \exp(-\ell)} = \frac{p_\theta}{p_\theta + q} 95 | $$ 96 | 97 | 这里列出了NCE损失的原始形式,它仅使用了一个正样本和一个噪声样本。在许多后续工作中,融合多个负样本的对比损失也广泛被称为NCE。 98 | 99 | 100 | 101 | #### InfoNCE 102 | 103 | 论文[链接](https://arxiv.org/abs/1807.03748),受到NCE的启发,InfoNCE使用分类交叉熵损失函数在一组不相关的噪声样本中寻找正例 104 | 105 | 给定一个上下文向量 $c$,正样本应该从条件分布 $p(x|c)$ 中抽取,而 $N-1$ 个负样本则从与上下文 $c$ 独立的提议分布 $p(x)$ 中抽取。为了简洁,让我们将所有样本标记为 $X = \{x_i\}_{i=1}^N$,其中只有一个 $x_{\text{pos}}$ 是正样本。我们正确检测到正样本的概率为: 106 | 107 | $$ 108 | p(C = \text{pos} | X, c) = \frac{p(x_{\text{pos}}|c) \prod_{i=1, \dots, N; i \neq \text{pos}} p(x_i)}{\sum_{j=1}^N \left[ p(x_j|c) \prod_{i=1, \dots, N; i \neq j} p(x_i) \right]} =\frac{\frac{p(x_{\text{pos}} | c)}{p(x_{\text{pos}})}}{\sum_{j=1}^N \frac{p(x_j | c)}{p(x_j)}}= \frac{f(x_{\text{pos}}, c)}{\sum_{j=1}^N f(x_j, c)} 109 | $$ 110 | 111 | 其中,得分函数 $f(x, c) \propto \frac{p(x|c)}{p(x)}$。 112 | 113 | InfoNCE 损失函数优化了正确分类正样本的负对数概率: 114 | 115 | $$ 116 | \mathcal{L}_{\text{InfoNCE}} = -\mathbb{E}\left[\log \frac{f(x, c)}{\sum_{x'\in X} f(x', c)}\right] 117 | $$ 118 | 119 | 事实上,$f(x, c)$ 估计的密度比 $\frac{p(x|c)}{p(x)}$ 与互通信息优化有关。为了最大化输入 $x$ 和上下文向量 $c$ 之间的互通信息,我们有: 120 | 121 | $$ 122 | I(x; c) = \sum_{x,c} p(x, c) \log \frac{p(x|c)}{p(x)p(c)} = \sum_{x,c} p(x, c) \log \frac{p(x|c)}{p(x)} 123 | $$ 124 | 125 | 其中,$\log \frac{p(x|c)}{p(x)}$ 的对数项由 $f$ 估计。 126 | 127 | 对于序列预测任务,CPC(Contrastive Predictive Coding)模型并不直接建模未来的观测 $p_k(X_{t+k} | C_t)$(这可能相当昂贵),而是模型一个密度函数以保留 $X_{t+k}$ 和 $C_t$ 之间的互信息: 128 | 129 | $$ 130 | f_k(X_{t+k}, c_t) = \exp(z_{t+k}^T W_k c_t) \propto \frac{p(X_{t+k}|c_t)}{p(X_{t+k})} 131 | $$ 132 | 133 | 其中 $z_{t+k}$ 是编码后的输入,$W_k$ 是一个可训练的权重矩阵。 134 | 135 | 136 | 137 | #### Soft-Nearest Neighbors Loss 138 | 139 | Soft-Nearest Neighbors Loss被[Salakhutdinov & Hinton (2007)](https://proceedings.mlr.press/v2/salakhutdinov07a.html) 和[Frosst等人(2019)](https://arxiv.org/abs/1902.01889)进一步扩展,以包含多个正样本。 140 | 141 | 给定一批样本 $\{x_i, y_i\}_{i=1}^B$,其中 $y_i$ 是 $x_i$ 的类别标签,以及一个用于测量两个输入相似性的函数 $f(\cdot, \cdot)$,在温度 $\tau$ 下定义的软最近邻损失为: 142 | 143 | $$ 144 | \mathcal{L}_{snn} = -\frac{1}{B} \sum_{i=1}^B \log \frac{\sum_{j \neq i, y_j = y_i} \exp(-\frac{f(x_i, x_j)}{\tau})}{\sum_{k \neq i} \exp(-\frac{f(x_i, x_k)}{\tau})} 145 | $$ 146 | 147 | 温度参数 $\tau$ 用于调整特征在表示空间中的集中程度。例如,当温度较低时,损失主要由小距离主导,而广泛分散的表征无法产生很大的贡献,因此变得无关紧要。 148 | -------------------------------------------------------------------------------- /Learning_Notes/对比表示学习(二)Setence Embedding.md: -------------------------------------------------------------------------------- 1 | # 对比表示学习(二)Setence Embedding 2 | 3 | > 参考翁莉莲的[Blog](https://lilianweng.github.io/posts/2021-05-31-contrastive/#language-sentence-embedding),本章主要阐述句子嵌入(sentence embedding) 4 | 5 | 个人见解:对比学习最早始于CV,但是由于对比学习在使用大量无标签数据时对向量空间的优化很好([SimCSE](https://arxiv.org/abs/2104.08821)),所以目前使用对比学习来优化embedding space是一个不错的方法 6 | 7 | ## 文本扩增 8 | 9 | 绝大部分视觉应用中的对比方法依赖于创造每个图像的增强版本,但是在句子扩增中会变得非常有挑战性。因为不同于图片,在扩增句子的同时非常容易改变句子本身的语义。 10 | 11 | ### Lexical Edit(词汇编辑) 12 | 13 | **EDA**(*Easy Data Augmentation*;[paper](https://arxiv.org/abs/1901.11196))定义了一组简单但有效的文本增强操作。给定一个句子,EDA随机选择以下四种操作: 14 | 15 | * 同义词替换(Synonym replacement):用同义词随机替换 $n$ 个单词(不能是stop word)。 16 | 17 | * 随机插入(Random insertion):在句子的随机位置插入一个随机选择的非停用词的同义词。 18 | 19 | * 随机交换(Random swap):随机交换两个词,并重复此操作 $n$ 次。 20 | 21 | * 随机删除(Random deletion):以一定概率 $p$ 随机删除句子中的每个词。 22 | 23 | 其中 $p = \alpha$ 和 $n = \alpha \times \text{sentence\_length}$,按照直觉来看,长句子在吸收更多噪声同时能保持原始标签(原始句子的意思)。超参数 $\alpha$ 大致指示一次增强可能改变的句子中的单词百分比。 24 | 25 | 研究表明,与没有使用EDA的基线相比,EDA能够在多个分类基准数据集上提高分类准确性。在较小的训练集上,性能提升更为显著。EDA中的所有四种操作都有助于提高分类准确性,但在不同的 $\alpha$ 值下达到最优(参考下图)。 26 | 27 | ![image-20240527193057015](.\src\EDA.png) 28 | 29 | 在上下文增强([Sosuke Kobayashi, 2018](https://arxiv.org/abs/1805.06201))中,位于位置 $i$ 的单词 $ w_i $ 的替换可以从给定的概率分布 $p(\cdot | S \setminus \{w_i\})$中平滑采样,该分布由双向语言模型如BERT预测。 30 | 31 | 32 | 33 | ### Back-translation(回译) 34 | 35 | **CERT** (*Contrastive self-supervised Encoder Representations from Transformers*;[paper](https://arxiv.org/abs/2005.12766)) 通过回译的方式来产生增强后的数据。不同语言的各种翻译模型可用于创建不同方式的数据增强。一但我们有了文本样本的噪声版本,就可以通过对比学习框架来训练sentence embedding 36 | 37 | 38 | 39 | ### Dropout and Cutoff 40 | 41 | **Cutoff:**[Shen et al.(2020)](https://arxiv.org/abs/2009.13818)受跨视图训练的启发,提出将截止值应用于文本增强。他们提出了三种截断扩增策略: 42 | 43 | * 标记符截断(Token cutoff)会删除一些选定标记符的信息。为确保没有数据泄露,输入(input)、位置(positional)和其他相关嵌入矩阵(embedding matrice)中的相应标记应全部清零 44 | * 特征截断删除一些特征列。 45 | * 跨度截断删除连续的文本块。 46 | 47 | ![image-20240527194919759](.\src\cutoff.png) 48 | 49 | 一个样本可以创建多个增强版本。在训练时,使用了额外的 KL-发散项来衡量不同增强样本预测之间的一致性。 50 | 51 | **SimCSE:**[Gao et al.](https://arxiv.org/abs/2104.08821);在无监督数据中学习时,只需通过句子本身进行预测,将dropout作为噪声。换句话说,他们将dropout视为文本序列的数据增强。一个样本只需输入编码器两次,这两个版本就是正对样本,而其他批次中的样本则被视为负对样本。这种方法感觉上与cutoff很相似,但dropout相对于cutoff处理更灵活。 52 | 53 | ![image-20240527195620820](.\src\simcse.png) 54 | 55 | > 相关内容可以参考阅读笔记 :[Notes](https://github.com/EEE1even/SimCSE_paper_reading) 56 | 57 | 58 | 59 | ### Supervision from Natural Language Inference 60 | 61 | 在语义相似性任务中,未经任何微调的预训练 BERT 句子嵌入性能不佳。因此,我们不能直接使用原始的嵌入,而需要通过进一步微调来完善嵌入。 62 | 63 | Natural Language Inference(NLI)任务是为句子嵌入学习提供监督信号的主要数据源,如 [SNLI](https://nlp.stanford.edu/projects/snli/)、[MNLI](https://cims.nyu.edu/~sbowman/multinli/) 和 [QQP](https://www.kaggle.com/c/quora-question-pairs)。 64 | 65 | #### Sentence-BERT 66 | 67 | **SBERT:** ([Reimers & Gurevych, 2019](https://arxiv.org/abs/1908.10084)) 依赖于暹罗(Siamese)和三重(triplet)网络架构来学习句子嵌入,这样,句子的相似性就可以通过嵌入对之间的余弦相似性来估算。需要注意的是这个框架依赖于监督数据集。实验效果的好坏取决于数据集,所以没有一个较好的优势。 68 | 69 | 70 | 71 | #### BERT-flow 72 | 73 | 如果嵌入是均匀分布在每一个维度中,那么嵌入空间就被认为是各向同性,反之则为各项异性。 [Li et al, (2020)](https://arxiv.org/abs/2011.05864) 在论文中表示,预训练的bert模型学习到了一个非平滑的各向异性的语义嵌入空间,所以导致了在没有进行微调的情况下,在语义相似任务中的垃圾表现。 根据经验,他们发现 BERT 句子嵌入存在两个问题: 词频会使嵌入空间产生偏差。高频词靠近原点,而低频词远离原点。低频词分布稀疏。低频词的嵌入往往离其 k-NN 邻近词较远,而高频词的嵌入则较为密集。**BERT-flow**通过归一化流将嵌入转化为平滑和各向同性的高斯分布。 74 | 75 | ![image-20240527202321127](.\src\bertflow.png) 76 | 77 | 让 $\mathcal{U}$ 代表观察到的BERT句子嵌入空间,$\mathcal{Z}$ 为期望的潜在空间,它是一个标准高斯分布。因此,$p_{\mathcal{Z}}$ 是一个高斯密度函数,并且 $f_{\phi} : \mathcal{Z} \rightarrow \mathcal{U}$ 是一个可逆变换: 78 | 79 | $$ 80 | z \sim p_{\mathcal{Z}}(z), \quad u = f_{\phi}(z), \quad z = f_{\phi}^{-1}(u) 81 | $$ 82 | 83 | 一个基于流的生成模型通过最大化 $\mathcal{U}$ 的边际似然来学习这个可逆映射函数: 84 | 85 | $$ 86 | \max_{\phi} \mathbb{E}_{u=\text{BERT}(s), s\sim \mathcal{D}} \left[ \log p_{\mathcal{Z}}(f_{\phi}^{-1}(u)) + \log \left| \det \frac{\partial f_{\phi}^{-1}(u)}{\partial u} \right| \right] 87 | $$ 88 | 89 | 其中 $s$ 是从文本语料库 $\mathcal{D}$ 中采样的句子。只有流参数 $\phi$ 在优化过程中被优化,而预训练的BERT中的参数保持不变。 90 | 91 | BERT-flow已经被证明可以提高大多数语义文本相似性(STS)任务的性能,无论是否有NLI数据集的监督。因为学习用于校准的归一化流不需要标签,它可以利用整个数据集,包括验证集和测试集。 92 | 93 | 94 | 95 | #### Whitening Operation 96 | 97 | [Su et al. (2021)](https://arxiv.org/abs/2103.15316) 应用了白化操作来改善学习表示的各向同性,并减少句子嵌入的维度。 98 | 99 | 他们将句子向量的均值变换设置为0,协方差矩阵变换为单位矩阵。给定一组样本 $\{x_i\}_{i=1}^N$,让 $\tilde{x}_i$ 和 $\tilde{\Sigma}$ 为变换后的样本和相应的协方差矩阵: 100 | 101 | $$ 102 | \mu = \frac{1}{N} \sum_{i=1}^N x_i, \quad \Sigma = \frac{1}{N} \sum_{i=1}^N (x_i - \mu)(x_i - \mu)^T 103 | $$ 104 | 105 | $$ 106 | \tilde{x}_i = (x_i - \mu)W, \quad \tilde{\Sigma} = W^T \Sigma W = I \text{,因此 } \Sigma = (W^{-1})^T W^{-1} 107 | $$ 108 | 109 | 如果我们得到 $\Sigma$ 的奇异值分解(SVD)$U \Lambda U^T$,我们将有 $W^{-1} = \sqrt{\Lambda} U^T$ 和 $W = U \Lambda^{-\frac{1}{2}}$。注意,在SVD中,$U$ 是一个正交矩阵,其列向量为特征向量,$\Lambda$ 是一个对角矩阵,包含按顺序排列的正特征值。 110 | 111 | 可以通过只取 $W$ 的前 $k$ 列来应用降维策略,这种方法被称为$whitening-k$。 112 | 113 | 在许多 STS 基准测试中,无论是否有 NLI 监督,白化操作都优于 BERT-flow,并在 256 个句子维度上实现了 SOTA。 114 | 115 | 116 | 117 | ### Unsupervised Sentence Embedding Learning 118 | 119 | #### Context Prediction 120 | 121 | **Quick-Thought (QT)vectors** ([Logeswaran & Lee, 2018](https://arxiv.org/abs/1803.02893))将句子表征学习表述为一个分类问题:给定一个句子及其上下文,分类器根据其向量表征("cloze test")将上下文句子与其他对比句子区分开来。这样的表述去除了会导致训练速度减慢的 softmax 输出层。 122 | 123 | ![image-20240527203926189](.\src\qt.png) 124 | 125 | 让 $f(\cdot)$ 和 $g(\cdot)$ 是两个将句子 $s$ 编码成固定长度向量的函数。设 $C(s)$ 为在 $s$ 上下文中的句子集合,$S(s)$ 是候选句子集合,包括只有一个真实上下文句子 $s_c \in S(s)$ 和许多其他非上下文负句子。Quick Thoughts模型学习优化预测唯一真实上下文句子 $s_c$ 的概率。它本质上是在考虑句子对 $(s, s_c)$ 为正样本对时使用NCE损失,而其他对 $(s, s')$ 其中 $s' \in S(s), s' \neq s_c$ 作为负样本。 126 | 127 | $$ 128 | \mathcal{L}_{QT} = -\sum_{s \in D} \sum_{s_c \in C(s)} \log p(s_c | s, S(s)) = -\sum_{s \in D} \sum_{s_c \in C(s)} \log \frac{\exp(f(s)^T g(s_c))}{\sum_{s' \in S(s)} \exp(f(s)^T g(s'))} 129 | $$ 130 | 131 | 这个损失函数计算每个句子$s$及其对应的上下文句子$s_c$的对数概率,相对于所有候选句子的得分的归一化。这有助于模型学习区分正确的上下文句子与其他不相关的句子。 132 | 133 | 134 | 135 | #### Mutual Information Maximization 136 | 137 | **IS-BERT (Info-Sentence BERT)**([Zhang et al. 2020](https://arxiv.org/abs/2009.12061))采用基于相互信息最大化的自监督学习目标,以无监督方式学习良好的句子嵌入。 138 | 139 | IS-BERT的工作流程如下: 140 | 141 | 1. 使用BERT将输入句子 $s$ 编码为长度为 $l$ 的令牌嵌入 $h_{1:l}$。 142 | 2. 然后应用不同核大小(例如1, 3, 5)的1-D卷积网络来处理令牌嵌入序列以捕获n-gram局部上下文依赖性:$c_i = \text{ReLU}(w \cdot h_{i:i+k-1} + b)$。输出序列被填充以保持输入的相同尺寸。 143 | 3. 第 $i$ 个令牌的最终局部表示 $\mathcal{F}_\theta^{(i)}(x)$ 是不同核大小表示的拼接。 144 | 4. 通过在令牌表示 $\mathcal{F}_\theta(x) = \{\mathcal{F}_\theta^{(i)}(x) \in \mathbb{R}^{d \times l}\}_{i=1}^l$ 上应用时间平均池化层计算全局句子表示 $\xi_\theta(x)$。 145 | 146 | 由于互信息估计通常对于连续和高维随机变量来说是难以处理的,IS-BERT依赖于Jensen-Shannon估计器([Nowozin et al., 2016](https://arxiv.org/abs/1606.00709), [Hjelm et al., 2019](https://arxiv.org/abs/1808.06670))来最大化 $\mathcal{E}_\theta(x)$ 和 $\mathcal{F}_\theta^{(i)}(x)$ 之间的互信息: 147 | $$ 148 | I_{JSD}^\omega(\mathcal{F}_\theta^{(i)}(x); \mathcal{E}_\theta(x)) = \mathbb{E}_{x \sim P}[-\text{sp}(-T_\omega(\mathcal{F}_\theta^{(i)}(x); \mathcal{E}_\theta(x)))] - \mathbb{E}_{x \sim P, x' \sim \tilde{P}}[\text{sp}(T_\omega(\mathcal{F}_\theta^{(i)}(x'); \mathcal{E}_\theta(x)))] 149 | $$ 150 | 其中 $T_\omega : \mathcal{F} \times \mathcal{E} \rightarrow \mathbb{R}$ 是一个带参数 $\omega$ 的可学习网络,用于生成判别器得分。负样本 $x'$ 是从分布 $\tilde{P} = P$ 中采样的。$\text{sp}(x) = \log(1 + e^x)$ 是softmax激活函数。 151 | 152 | -------------------------------------------------------------------------------- /Learning_Notes/损失函数.md: -------------------------------------------------------------------------------- 1 | # Loss Function 2 | 3 | ## Cross-Entropy Loss 4 | 5 | [知乎](https://zhuanlan.zhihu.com/p/638725320) 6 | 7 | ### 熵 8 | 9 | $-\sum概率\times实际信息值=信息量期望值=熵$ 10 | 11 | 实际信息量会使用 $-log$​ 来表示 12 | $$ 13 | H(P) = -\sum_{i=1}^{n} P(X = x_i) \log_2 P(X = x_i) 14 | $$ 15 | 16 | ### 交叉熵 17 | 18 | $$ 19 | H(P, Q) = -\sum_{i=1}^{n} P(X = x_i) \log Q(X = x_i) 20 | $$ 21 | 22 | ### 二分类 23 | 24 | $$ 25 | L(y, \hat{y}) = -[y \log(\hat{y}) + (1 - y) \log(1 - \hat{y})] 26 | $$ 27 | 28 | ### 多分类 29 | 30 | $$ 31 | L(y, \hat{y}) = -\sum_{i=1}^{C} y_i \log(\hat{y_i}) 32 | $$ 33 | 34 | ### KL散度 35 | 36 | $$ 37 | D_{KL} (P \| Q) =H(P,Q)-H(P) 38 | $$ 39 | 40 | 41 | $$ 42 | =-\sum_{i=1}^{n} P(x_i) \log Q (x_i) - \left(-\sum_{i=1}^{n} P(x_i) \log P (x_i)\right) = \sum_{i=1}^{n} P (x_i) \log \frac{P(x_i)}{Q (x_i)} 43 | $$ 44 | 45 | 46 | ### 为什么使用交叉熵? 47 | 48 | ​ 训练目的是使得网络实际输出Q尽量逼近真实分布P,由于P为真实分布所以熵H(P)为固定值,故KL散度的大小只由交叉熵决定,所以最小化KL散度等于最小化交叉熵 49 | 50 | -------------------------------------------------------------------------------- /Learning_Notes/混淆矩阵.md: -------------------------------------------------------------------------------- 1 | # 混淆矩阵(Confusion Matrix) 2 | 3 | 部分参考:[html](https://towardsdatascience.com/understanding-confusion-matrix-a9ad42dcfd62) 4 | 5 | ## 一、什么是混淆矩阵? 6 | 7 | | | **True** | **False** | 8 | | ------------ | -------- | --------- | 9 | | **Positive** | TP | FP | 10 | | **Negative** | TN | FN | 11 | 12 | 预测值的衡量是Positive和Negative 13 | 14 | 真实值的衡量是True和False 15 | 16 | ### 举例 17 | 18 | 在这里以是否怀孕为例,预测怀孕为阳性(Positive),预测未怀孕为阴性(Negative)![pregnant.png](./src/pregnant.png) 19 | 20 | #### True Positive 21 | 22 | 解释:模型正确的将正类预测为正类 23 | 24 | 例子:预测一个女人怀孕(Positive)了且她真的怀上了(True) 25 | 26 | #### True Negative 27 | 28 | 解释:模型正确的将负类预测为负类 29 | 30 | 例子:预测一个男人没有怀孕(Negative)且他没有怀孕(True) 31 | 32 | #### False Positive(第一种错误) 33 | 34 | 解释:模型错误的将负类预测为正类,也称为**误报** 35 | 36 | 例子:预测一个男人怀孕了(Positive)但是男人没有怀孕(False) 37 | 38 | #### False Negative(第二种错误) 39 | 40 | 解释:模型错误的将正类预测为负类,被称为**漏报** 41 | 42 | 例子:预测一个女人没有怀孕(Negative)但是她实际上怀孕了(False) 43 | 44 | 45 | 46 | ## 二、为什么需要混淆矩阵? 47 | 48 | 用来衡量分类问题的预测性能 49 | 50 | ## 三、评估指标 51 | 52 | ### Recall(召回率)或Sensitivity(灵敏度) 53 | 54 | $$ 55 | Recall=\frac{TP}{TP+FN} 56 | $$ 57 | 58 | 59 | 60 | 在所有实际为正类的样本中,被正确预测为正类的比例 61 | 62 | ### Precision(精确度) 63 | 64 | $$ 65 | Precision=\frac{TP}{TP+FP} 66 | $$ 67 | 68 | 在所有被预测为正类的样本中,实际为正类的比例 69 | 70 | ### Accuracy(准确率) 71 | 72 | $$ 73 | Accuracy=\frac{TP+TN}{TP+TN+FP+FN} 74 | $$ 75 | 76 | 所有被正确预测的样本(无论正类还是负类)占总样本的比例 77 | 78 | ### F1-Score 79 | 80 | $$ 81 | F1=2\times\frac{Recall\times Precision}{Recall+Precision} 82 | $$ 83 | 84 | F1分数是精确度和召回率的调和平均数(Harmonic Mean),是这两个指标的平衡度量。当需要同时考虑精确度和召回率时,可以选择参考F1 85 | 86 | 87 | 88 | 上述指标各有侧重点,选择哪些指标需要基于具体的应用场景。例如对于医疗诊断,漏诊(FN)的代价远远高于误诊(FP),因此需要更加注重召回率。而对于垃圾邮件检测,会更加关心精确度,避免将重要邮件错分为垃圾邮件 89 | 90 | 91 | 92 | 93 | 94 | -------------------------------------------------------------------------------- /Learning_Notes/生成模型的疑问与回答.md: -------------------------------------------------------------------------------- 1 | # 生成模型与判别模型的区别 2 | 3 | **判别模型:** 直接对条件概率 $P(Y|X)$ 建模,预测 $Y$ 的概率 4 | 5 | > 线性回归模型、SVM、神经网络、boosting、CRF 6 | 7 | **举例:** 确定是山羊还是绵羊,用判别模型就是从历史数据中学习,然后通过提取羊的特征来预测这只羊是山羊的概率、是绵羊的概率,然后取高者 8 | 9 | 10 | 11 | **生成模型:** 对 $P(X,Y)$ 建模,通过贝叶斯公式来求 $P(Y_i|X)$ ,然后选取使 $P(Y_i|X)$ 最大的 $Y_i$ 12 | 13 | > 隐马尔可夫模型HMM、朴素贝叶斯模型、高斯混合模型GMM、LDA、高斯、混合多项式、专家的混合物、马尔可夫的随机场 14 | 15 | **举例:** 利用生成模型是根据山羊的特征首先学习出一个山羊的模型,然后根据绵羊的特征学习出一个绵羊的模型,然后从这只羊中提取特征,放到山羊模型中看概率是多少,在放到绵羊模型中看概率是多少,哪个大就是哪个。 16 | 17 | 18 | 19 | # 生成模型与自回归模型 20 | 21 | 自回归模型是生成模型的子集 22 | 23 | 自回归更多是用于文本生成,但是广义的生成模型是可以生成图像、文本等,不限于特定类型的数据 -------------------------------------------------------------------------------- /Learning_Notes/贝叶斯公式.md: -------------------------------------------------------------------------------- 1 | # 贝叶斯公式 2 | 3 | 参考:[YouTobe](https://www.youtube.com/watch?v=Pu675cHJ7bg) 4 | 5 | ## 一、案例引入 6 | 7 | $$ 8 | P(A|B)=\frac{P(B|A)P(A)}{P(B)} 9 | $$ 10 | 11 | $$ 12 | P(A\cap B)=P(A|B)\times P(B)=P(B|A)\times P(A) 13 | $$ 14 | 15 | 下图给出抛骰子的例子,解释如何推出贝叶斯公式 16 | 17 | ![贝叶斯1](./src/bys1.png) 18 | 19 | ![贝叶斯2](./src/bys2.png) 20 | 21 | 22 | 23 | ## 二、贝叶斯通式 24 | 25 | $$ 26 | P(H|E)=\frac{P(E|H)P(H)}{P(E)}\ \ \ E=Evidence\ ,\ H=Hypothesis 27 | $$ 28 | 29 | 30 | 31 | 贝叶斯定理关注的是:**在已知的证据下,假设成立的概率有多大** 32 | 33 | 34 | 35 | ## 三、公式推理 36 | 37 | ![贝叶斯3](./src/bys3.png) 38 | 39 | 以上图为参考进行下述公式推理: 40 | 41 | 42 | $$ 43 | \bar H:not\ H\ \ \ \ \ \ \ \ P(\bar H)=1-P(H) 44 | $$ 45 | 46 | $$ 47 | P(E)=P(E\cap H)+P(E\cap \bar H)=P(E|H)P(H)+P(E|\bar H)P(\bar H) 48 | $$ 49 | 50 | $$ 51 | P(H|E)=\frac{P(E|H)P(H)}{P(E|H)P(H)+P(E|\bar H)P(\bar H)} 52 | $$ 53 | 54 | 55 | 可以看到贝叶斯公式中分母为证据 $E$ 的概率,但是我们有时并不知道证据 $E$ 的概率,需要通过条件概率来计算 $P(E)$ 56 | 57 | 58 | 59 | ## 四、举例理解 60 | 61 | ### 案例一 62 | 63 | 小明是一个内敛的人,他总是乐于助人,有一个温顺整洁的灵魂,他总是对自己有所要求,并规矩的生活,对细节非常在意。请问小明更可能是农民还是图书管理员? 64 | 65 | Fact:图书管理员与农民的比例是1:50 66 | 67 | | | 样本空间 | 符合条件 | 概率 | 68 | | ---------- | -------- | -------- | ---- | 69 | | 图书管理员 | 10 | 5 | 9% | 70 | | 农民 | 500 | 50 | 91% | 71 | 72 | 接下来用贝叶斯公式进行推导: 73 | 74 | $E:statement\ \ by\ \ people$ 75 | 76 | $P(H):P(librarian)=\frac{1}{1+50}=0.0196$ 77 | 78 | $P(\bar H):P(farmer)=\frac{50}{1+50}=0.9804$ 79 | 80 | 假设:$P(E|H)=0.5\ \ \ \ \ P(E|\bar H)=0.1$ 81 | 82 | 83 | $$ 84 | P(H|E)=\frac{P(E|H)P(H)}{P(E|H)P(H)+P(E|\bar H)P(\bar H)} 85 | $$ 86 | 87 | 88 | $P(H|E)=\frac{0.5\times0.0196}{0.5\times0.0196+0.1\times0.9804}=0.0909$ 89 | 90 | 所以得出:在证据 $E$ 成立(人们对小明的描述)的情况下, $H$ 事件(假设小明为图书管理员)发生的概率为 9.09% 91 | 92 | 93 | 94 | ### 案例二 95 | 96 | 你被检验出可能有一种罕见疾病 97 | 98 | * 在人群中只有0.1%的人会得病 99 | 100 | 这个测试非常准确 101 | 102 | * 如果有这个疾病,检查准确率达到99% 103 | * 如果没有这个疾病,会有2%的误诊为患者 104 | 105 | | | 1000人的样本空间 | 阳性 | 概率 | 106 | | :--- | :--------------- | :--- | :---------------- | 107 | | 疾病 | 1 | 1 | $\frac{1}{20+1}$ | 108 | | 健康 | 999 | 20 | $\frac{20}{20+1}$ | 109 | 110 | 带入贝叶斯公式 111 | 112 | $E$ : 你被检验出有罕见病 113 | 114 | $P(H):患病概率=0.001$ (先验概率) 115 | 116 | $P(\bar H)=0.999$ 117 | 118 | $P(E|H):sensitivity=0.99$(真阳) 119 | 120 | $P(E|\bar H):false\ positive\ rate=0.02$(假阳) 121 | 122 | 123 | $$ 124 | P(H|E)=\frac{P(E|H)P(H)}{P(E|H)P(H)+P(E|\bar H)P(\bar H)} 125 | $$ 126 | 127 | 128 | $P(H|E)=\frac{0.99\times0.001}{0.99\times0.001+0.02\times0.999}=0.0472$(后验概率) 129 | 130 | 通过贝叶斯计算,你被检验出患有罕见病时,你真正患病的概率只有4.72% 131 | 132 | 133 | 134 | **如果再次检测还是为阳性** 135 | 136 | 137 | 138 | 此时的相关证据与假设概率如下 139 | 140 | $P(H)=0.0472$(后验概率:在第一次测得阳性的概率) 141 | 142 | $P(\bar H)=0.9528$ 143 | 144 | $P(E|H):sensitivity=0.99$(真阳) 145 | 146 | $P(E|\bar H):false\ positive\ rate=0.02$(假阳) 147 | 148 | > 除了假设患病概率以外,其他的不变 149 | 150 | 151 | $$ 152 | P(H|E)=\frac{P(E|H)P(H)}{P(E|H)P(H)+P(E|\bar H)P(\bar H)} 153 | $$ 154 | 155 | 156 | $P(H|E)=\frac{0.99\times0.0472}{0.99\times0.0472+0.02\times0.9528}=0.7103$ 157 | 158 | 可以看到,如果两次检测都为阳性,你患病的概率会一下子达到71.03%,与之前的4.72%形成了非常强的对比 159 | 160 | 上述的**迭代运算**也是贝叶斯的核心精神:通过不断的实验累积证据,从而更精准的判断一个假设是否正确 161 | 162 | 163 | 164 | ## 五、先验概率与后验概率 165 | 166 | 参考上述例子分析 167 | 168 | **先验概率**是你提前已经知晓的概率(假设的实际概率) 169 | 170 | 而**后验概率**是在证据成立的前提下,确定假设成立的概率 171 | 172 | 通常情况下,后验概率我们是不得而知,需要通过贝叶斯公式来求得后验概率。所以贝叶斯也是一个求后验概率的公式 173 | 174 | -------------------------------------------------------------------------------- /Learning_Notes/隐马尔可夫模型.md: -------------------------------------------------------------------------------- 1 | # HHM(hidden Markov model) 2 | 3 | ## 一、定义 4 | 5 | ### 1.1 概念定义 6 | 7 | 隐马尔可夫模型是关于时序的概率模型,描述由一个隐藏的马尔可夫链随机生成一个**不可观测**的状态随机序列,再由各个状态生成一个观测从而产生观测随机序列的过程。 8 | 9 | **状态序列(state sequence)**:隐藏马尔可夫链随机生成的状态序列(不可观测) 10 | 11 | **观测序列(observation sequence)**:每个状态生成一个观测,由此产生的观测的随机序列 12 | 13 | 其中序列的每一个位置可以看作一个时刻 14 | 15 | 隐马尔可夫模型组成:初始概率分布、状态转移概率分布、观测概率分布 16 | 17 | ### 1.2 模型定义 18 | 19 | 设 $Q$ 是所有可能的状态集合, $V$ 是所有可能的观测集合: 20 | 21 | 22 | $$ 23 | Q=\lbrace q_1,q_2,...,q_N\rbrace ,\ V=\lbrace v_1,v_2,...,v_M\rbrace 24 | $$ 25 | 26 | 27 | 其中 $N$ 是可能的状态数, $M$ 是可能的观测数 28 | 29 | $I$ 是长度为 $T$ 的状态序列, $O$​ 是对应的观测序列: 30 | 31 | 32 | $$ 33 | I=\lbrace i_1,i_2,...,i_T\rbrace ,\ O=\lbrace o_1,o_2,...,o_T\rbrace 34 | $$ 35 | 36 | 37 | ​ $A$ 是状态转移概率矩阵 : 38 | 39 | $$ 40 | A=[a_{ij}]_{N\times N} 41 | $$ 42 | 43 | 44 | 其中, 45 | 46 | 47 | $$ 48 | a_{ij}=P(i_{t+1}=q_j|i_t=q_i),\ \ i=1,2,...,N;\ \ j=1,2,...,N 49 | $$ 50 | 51 | 52 | 53 | 是在时刻 $t$ 处于状态 $q_i$ 的条件下在时刻 $t+1$ 转移到状态 $q_j$ 的概率。 54 | 55 | ​ $B$ 是观测概率矩阵 56 | 57 | 58 | $$ 59 | B=[b_{j}(k)]_{N\times M} 60 | $$ 61 | 62 | 其中, 63 | 64 | 65 | 66 | $$ 67 | b_{j}(k)=P(o_{t}=v_k|i_t=q_j),\ \ k=1,2,...,M;\ \ j=1,2,...,N 68 | $$ 69 | 70 | 71 | 72 | 是在时刻 $t$ 处于状态 $q_j$ 的条件下生成观测 $v_k$ 的概率。 73 | 74 | ​ $\pi$​ 是初始状态的概率向量: 75 | 76 | 77 | $$ 78 | \pi=(\pi_i) 79 | $$ 80 | 81 | 82 | 83 | 其中, 84 | 85 | $$ 86 | \pi_i=P(i_1=q_i),\ \ i=1,2,...,N 87 | $$ 88 | 89 | 90 | 是时刻 $t=1$ 处于状态 $q_i$ 的概率。 91 | 92 | ​ 隐马尔可夫模型由:初始状态概率向量 $\pi$ 、状态转移概率矩阵 $A$、观测概率矩阵 $B$ 决定。 93 | 94 | 其中 $\pi$ 和 $A$ 决定状态序列,$B$ 决定观测序列。因此隐马尔可夫模型 $\lambda$​ 可以用三元符号表示 95 | 96 | 97 | $$ 98 | \lambda=(A,B,\pi) 99 | $$ 100 | 101 | 102 | $A,B,\pi$ 称为隐马尔可夫三要素。 103 | 104 | ​ $A$ 和 $\pi$ 确定了隐藏马尔可夫链,生成不可观测的状态序列。 $B$ 确定了如何从状态生成观测,与状态序列综合确定观测序列 105 | 106 | 107 | 108 | -------------------------------------------------------------------------------- /Paper_Reading/ClusterNS.md: -------------------------------------------------------------------------------- 1 | # ClusterNS 2 | 3 | [Clustering-Aware Negative Sampling for Unsupervised Sentence Representation](https://aclanthology.org/2023.findings-acl.555.pdf) 4 | 5 | **论文发布之前的方法**:之前的方法主要依赖对比学习,集中于正样本的构造,而将批次中的其他样本简单视为负样本。这种处理忽略了选择合适负样本的重要性,可能导致难负样本的稀缺和误将假负样本排除在外。 6 | 7 | **以前方法的缺点**:以前的方法存在两个主要问题:一是没有有效地挖掘难负样本,这对于模型学习更丰富的特征表示非常关键;二是可能误将与锚点样本相似度较高的假负样本作为真负样本处理,从而损害了模型的性能。 8 | 9 | **这篇论文的创新点**:ClusterNS的创新之处在于结合了聚类信息和对比学习来改进负样本的选择。通过修改的K-means聚类算法在训练过程中提供难负样本,并识别批次中的假负样本,解决了之前方法中的两个主要问题。 10 | 11 | **这篇论文的方法优点**:ClusterNS通过改进负样本的选择,提高了无监督句子表示学习的性能。实验结果表明,与基线方法相比,ClusterNS在语义文本相似性(STS)任务上取得了更好的结果,尤其是在处理假负样本和挖掘难负样本方面显示出其优越性。 12 | 13 | **处理方式**:ClusterNS在每个小批量训练中应用修改后的K-means聚类算法,利用聚类结果提供额外的难负样本和识别假负样本,并使用双向边缘损失(BML)约束假负样本。 -------------------------------------------------------------------------------- /Paper_Reading/ConSERT.md: -------------------------------------------------------------------------------- 1 | # ConSERT 2 | 3 | [A Contrastive Framework for Self-Supervised Sentence Representation Transfer](https://aclanthology.org/2021.acl-long.393.pdf) 4 | 5 | 1. **论文发布之前的方法**: 6 | - 之前的方法主要包括基于BERT的预训练语言模型,这些模型虽然在许多下游任务中表现出色,但直接从BERT中衍生的句子表示证明在语义文本相似性(STS)任务上表现不佳,几乎所有句子对的相似性得分都在0.6到1.0之间,即使一些句子对被人类注释者视为完全无关。 7 | 2. **以前的方法有什么缺点**: 8 | - 之前的方法存在的缺点是BERT衍生的句子表示存在崩溃问题,几乎所有句子都被映射到一个小区域内,因此产生高相似性。这主要是因为BERT的词表示空间是各向异性的,高频词聚集且靠近原点,而低频词稀疏分布。 9 | 3. **这篇论文的创新点**: 10 | - ConSERT通过对比学习在无监督的方式中有效地微调BERT,解决了BERT衍生句子表示的崩溃问题,并使它们更适用于下游任务。此外,论文提出了多种数据增强策略,包括对抗攻击、令牌洗牌、剪切和丢弃,这些策略有效地转移了句子表示到下游任务。 11 | 4. **这篇论文的方法有什么优点**: 12 | - ConSERT的优点包括不引入额外结构或特殊实现、与BERT相同的参数大小、高效性以及包含多种有效且方便的数据增强方法。特别地,在只有1000个未标记文本的情况下,ConSERT就能显著提升性能,展现了其在数据稀缺场景下的鲁棒性。 13 | 5. **这篇论文是怎么处理的**: 14 | - ConSERT使用对比学习的方法,通过鼓励来自同一句子的两个增强视图更接近,同时保持与其他句子的视图距离,重塑了BERT衍生的句子表示空间。对于每个输入文本,应用数据增强模块生成两个版本的令牌嵌入,然后通过BERT编码器计算句子表示,并通过平均池化获得。 -------------------------------------------------------------------------------- /Paper_Reading/ESimCSE.md: -------------------------------------------------------------------------------- 1 | # ESimCSE 2 | 3 | 1. **之前的方法及其缺点:** 4 | - **方法**:之前的方法,特别是SimCSE,采用dropout作为数据增强方式,对输入句子进行两次编码以构建正样本对。SimCSE是基于Transformer的编码器,通过位置嵌入直接编码句子的长度信息,导致正样本对包含相同的长度信息。 5 | - **缺点**:这种方法使得模型倾向于认为长度相同或相似的句子在语义上更为相似,从而引入了偏见。实验结果表明,当句子长度差异≤3时,模型预测的相似度与标准真值的差异更大,验证了这一假设。 6 | 2. **这篇论文的观点及其优点:** 7 | - **观点**:为了缓解SimCSE方法的问题,提出了增强的样本构建方法ESimCSE,引入了词重复(word repetition)和动量对比(momentum contrast)两种优化方式,分别用于改善正样本对和负样本对的构建。 8 | - **优点**:这种方法通过改变正样本对中句子的长度而不改变其语义,减少了由于句子长度信息引入的偏见。同时,通过引入动量对比增加了负样本对的数量,无需额外计算,从而促进了模型向更精细的学习方向发展。 9 | 3. **这篇论文的效果如何?怎么处理的?** 10 | - **效果**:ESimCSE在几个基准数据集上进行的语义文本相似性(STS)任务的实验结果显示,与SimCSE相比,ESimCSE在BERT-base上的平均Spearman相关性提高了2.02%。 11 | - **处理方法**:通过“词重复”和“动量对比”两种策略的引入,ESimCSE分别对正、负样本对进行了优化处理,有效改善了SimCSE存在的问题。 12 | 4. **提升sentence representation的建议:** 13 | - 基于ESimCSE之后,进一步提升句子表示的方法可能包括对现有方法的细微调整以及探索新的数据增强和负样本对构建策略。例如,进一步研究不同类型的数据增强方法对句子语义表示的影响,以及如何有效地利用更多的语料来丰富负样本对的多样性和质量。 14 | - 另一个方向是探索与其他NLP任务(如文本分类、命名实体识别等)的联合学习,以期通过任务间的知识迁移进一步提高句子表示的质量和泛化能力。 15 | - 最后,可以考虑利用最新的自监督学习技术和对比学习的新进展,设计更复杂但效率更高的模型架构和学习机制,以进一步提高句子表示的准确性和鲁棒性。 -------------------------------------------------------------------------------- /Paper_Reading/IS-CSE.md: -------------------------------------------------------------------------------- 1 | # IS-CSE 2 | 3 | [Instance Smoothed Contrastive Learning for Unsupervised Sentence Embedding](https://arxiv.org/pdf/2305.07424.pdf) 4 | 5 | **以前的方法怎么做?** 6 | 7 | * 在无监督对比学习中,一些工作通过优化选择负样本例;使用预设prompt来提取特征;研究扩增对构建句子的影响 8 | 9 | * 每个用于对比学习的embedding只来自一个句子实例,每个embedding被视为自己的一个独特类 10 | * 正样本例都是通过数据扩增获得,负样本例从随机的句子集合中抽取(SimCSE) 11 | * 通过词语重复、插入、删除来对输入句子进行扩增(ESimCSE) 12 | * 随机翻转单词中的第一个字母来对输入进行扩增(CARDS) 13 | 14 | ​ 15 | 16 | **以前的方法有什么问题?** 17 | 18 | * 影响泛化能力 19 | 20 | ​ 几乎上述的所有方法都将每个句子作为一个独特的类,在一个批次中将其与其他句子分开。这会导致模型“自信”的认为每个句子都是一个独立的类,因为在无监督学习中会有一些 false negative pairs 21 | 22 | * 从学习到的高斯分布中抽样生成负样本例,并过滤掉相似度高的负样本例(DCLR),但却并没有利用丰富的正样本emb 23 | 24 | 没有考虑通过采样的语义相似句子的emb来平滑正样本对 25 | 26 | 27 | 28 | **现在的方法怎么做?** 29 | 30 | 受到label smoothing启发 31 | 32 | * 从 dynamic memory buffer 中根据语义相似度来获取正样本组 33 | 34 | * 在组中的emb通过自注意力机制进行汇总产生平滑的实例emb,防止模型的“自信”行为 35 | 36 | * 通过对检索到的语义相似emb进行加权平均操作,来平滑标签 37 | 38 | * 使用先进先出的内存缓冲,在训练的前几个步骤中将sent-emb存储,在构建正例对的时候根据余弦相似度取回,然后通过加权平均操作使得正样本emb平滑 39 | 40 | * 同时使用样例和平滑样例来进行辨别 41 | 42 | 43 | 44 | **现在的方法有什么优点?** 45 | 46 | * 可以促使每个句子与其附近的其他句子相似,而不仅仅是其本身 47 | 48 | * 提高了alignment,但是uniformity上有所下降 49 | 50 | * 减少计算消耗 51 | 52 | * 构造了平滑的emb 53 | 54 | -------------------------------------------------------------------------------- /Paper_Reading/PromCSE.md: -------------------------------------------------------------------------------- 1 | # PromCSE 2 | 3 | [《Improved Universal Sentence Embeddings with Prompt-based Contrastive Learning and Energy-based Learning》](https://aclanthology.org/2022.findings-emnlp.220/) 4 | 5 | ## 什么是Energy-based Learning? 6 | 7 | [知乎](https://www.zhihu.com/question/59264464) 8 | 9 | 设计一个能量函数。在一个数据集中,有数据和标签,如果数据和标签正确(比如图片是猫,标签也是猫),那么这个组合的能量值低。如果数据标签不正确,能量值高。我们希望能量最小化来达到训练目的 10 | 11 | > 最大似然估计和似然估计?[知乎](https://zhuanlan.zhihu.com/p/26614750) 12 | 13 | 14 | 15 | ## Soft Prompt 16 | 17 | 受这篇论文启发:[《The Power of Scale for Parameter-Efficient Prompt Tuning》](https://aclanthology.org/2021.emnlp-main.243.pdf) 18 | 19 | 上述论文受这篇启发:[《Prefix-Tuning: Optimizing Continuous Prompts for Generation》](https://aclanthology.org/2021.acl-long.353.pdf) 20 | 21 | 22 | 23 | 24 | 25 | ## 阅读小结 26 | 27 | **以前的方法有什么缺点?** 28 | 29 | * 在域偏移(domain shift setting)下的表现欠佳,从而阻碍句子表示在实际中的应用 30 | 31 | 将这种缺点表现归结于百万参数预训练模型的参数过载 32 | 33 | * NT-Xent loss在监督学习中不能完全利用hard negatives(与正样本非常相似但属于不同类别的负样本) 34 | * 对预训练模型百万参数的调整可能会造成训练数据分布的过拟合,导致域偏移时的易损性 35 | 36 | 37 | 38 | **以前的方法怎么做?** 39 | 40 | * 使用NT-Xent Loss function来处理监督学习中的句子对 41 | * 总是在大数据集上训练模型并套用在各种任务中 42 | 43 | 44 | 45 | **现在的方法有什么优点?** 46 | 47 | * 缓解向量空间在域迁移时质量下降的问题 48 | * 提高了监督学习的向量空间质量 49 | 50 | 51 | 52 | **现在的方法怎么做?** 53 | 54 | * 在保持预训练模型固定时(冻结),只训练小范围的soft prompt 55 | * 使用Energy-based Hinge loss来支持原来的损失函数,从而加强辨别能力 56 | * 冻结SimCSE的预训练模型并增加多层可学习的Soft Prompt 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /Paper_Reading/Semi-supervised Sequence Learning.md: -------------------------------------------------------------------------------- 1 | # Semi-supervised Sequence Learning 2 | 3 | rnn中的反向传播训练非常困难,所以很少用到nlp中的文本分类; 4 | 5 | rnn在表示顺序结构方面很强大 6 | 7 | 发现可以用lstm结合rnn来训练模型,在不增加额外数据的情况下效果能超越原先的lstm模型(baseline) 8 | 9 | 另一个重要结论:使用更多来自相关任务的无标注数据可以提高后续监督模型的泛化能力 10 | 11 | 用更多的无标注数据训练的无监督学习可以提高监督学习的效果 12 | 13 | 14 | 15 | 两个模型 16 | 17 | * 一个是有句子自解码器(SA-LSTM) 18 | * 这个model有一个sequence autoencoders(用rnn读取输入的长句子到一个单一向量),sequence autoencoders加上外部无标注数据,lstm模型可以比之前的baseline表现的更好 19 | * 一个是加上循环语言模型(LM-LSTM)作为无监督方法 20 | * 用rnn作为无监督训练方式 21 | 22 | 23 | 24 | 优势:简单的fine-tuning 25 | 26 | 不同于Skip-thought vectors 27 | 28 | * 之前的方法是一个更难的目标,因为它用来预测相邻的句子 29 | * 之前的方法是纯粹的无监督学习算法,没有fine-tuning 30 | 31 | 为什么这个方式有效:梯度有捷径,所以autoencoder可以又好又稳定的初始化循环网络 32 | 33 | 34 | 35 | 用无监督学习来优化监督学习,减少句子标注的工作。 36 | -------------------------------------------------------------------------------- /Paper_Reading/Sentence Representation Survey.md: -------------------------------------------------------------------------------- 1 | # Sentence Representation Survey 2 | 3 | [A Comprehensive Survey of Sentence Representations: From the BERT Epoch to the CHATGPT Era and Beyond](https://aclanthology.org/2024.eacl-long.104.pdf) 4 | 5 | ### 1、Background 6 | 7 | 里程碑时间轴 8 | 9 | ![image-20240326095151683](./src/sentenceRepresentationSurvey) 10 | 11 | 有监督与无监督的一些方法汇总 12 | 13 | ![image-20240326095505829](./src/SRS2) 14 | 15 | 组成部分: 16 | 17 | ![image-20240326095702240](./src/SRS3) 18 | 19 | * **Data:** 使用监督学习的标注数据、或是一些基于正例和负例转换产生的数据 20 | * **Model:** 在大量文本上训练好的预训练模型 21 | * **Transform:** 对模型中的表示进行转换来获取句子表征 22 | * **Loss:** 用来将相似句子拉近,不相似句子拉远 23 | 24 | 上述的四个部分在不同程度上影响句子的表征 25 | 26 | ![image-20240326104228442](./src/SRS4) 27 | 28 | ## 2、Supervised 29 | 30 | NLI是评估NLU的一个代理 31 | 32 | 33 | 34 | ## 3、Unsupervised 35 | 36 | 可以看到上图片的绝大部分是围绕无监督学习来做,因为监督学习所需要的标注数据非常难得、 37 | 38 | 目的是为了获取正样本的数据表示(可以理解为正样本的标签) 39 | 40 | ### Better Positives 41 | 42 | 需要仔细的为对比学习选择正负样本对。因为一些数据扩增的改动可能完全改变句子的意思 43 | 44 | ### Surface Level 45 | 46 | 改善句子surface特征会使模型依赖捷径而不是学习语义;需要更有效的数据扩增策略 47 | 48 | ### Model Level : 49 | 50 | SimCSE中的dropout方法 51 | 52 | 专用附件(special component)可以被训练来产生语义相似表示 53 | 54 | ### Representation Level 55 | 56 | 通过模型生成句子的潜在表示能够带来重要的好处。在这样的场景中,可以通过探索表示空间来发现积极的示例。这种方法的明显优势在于它消除了数据增强的需要(当使用由模型生成的句子的潜在表示作为句子表示时,因为这些表示已经包含了丰富的信息和特征,所以就没有必要再进行数据增强了)。 57 | 58 | ### Alternative Methods 59 | 60 | 在缺少大量标注数据的情况下如何通过各种创新方法提取和改进句子的数学表示,以便在机器学习中更有效地使用这些表示。 61 | 62 | ### Alternative Loss and Obejectives 63 | 64 | 对比损失函数的局限性,例如缺乏机制来整合hard negatives(难以从正样本对中区分的负样本) 65 | 66 | * 补充损失 67 | * 修改对比损失 68 | * 不同的损失 69 | 70 | ### Better Negative Sampling 71 | 72 | 选择负样本与选择正样本同样重要 73 | 74 | 如果不能选择好的负样本,会使得损耗梯度逐渐减小,阻碍模型学习有用的表征 75 | 76 | 足量的负样本也很重要 77 | 78 | ### Post-Precessing 79 | 80 | 将词向量变成固定的长度 81 | 82 | 归一化流(normalizing flows) 83 | 84 | 白化 85 | 86 | 后处理技术只在bert上测试了很久,在现在更新的模型上还没有答案 87 | 88 | 89 | 90 | ## 4、Trends 91 | 92 | **Limited advantages of supervision:** 目前的sentence representation在有监督的学习下有事有限。主要还是在无监督学习中进行句子表征的训练学习 93 | 94 | **Downplaying downstream task evaluation:** 在下游任务评估中对句子表征忽视;利用句子表征来强化few-shot文本分类 95 | 96 | **Data-centric innovations:** 针对数据进行创新 97 | 98 | **Keeping up with LLMs:** 在有高质量的数据集时,对比学习相较于提高模型参数来说能产生更好的结果 99 | 100 | 101 | 102 | ## 5、Challenges 103 | 104 | 实际应用与工具的兴起 105 | 106 | 适应不同领域 107 | 108 | 跨语言的句子表征 109 | 110 | 句子表征的普遍性 111 | -------------------------------------------------------------------------------- /Paper_Reading/SimCLR.md: -------------------------------------------------------------------------------- 1 | # SimCLR 2 | 3 | [arxiv](https://arxiv.org/abs/2002.05709) 4 | 5 | > 该论文为CV task 6 | 7 | 论文发现: 8 | 9 | * 扩增数据的构成对于预测任务很重要 10 | * 一个在表征与对比损失之间的可学习非线性变换,提高学习到的表征质量 11 | * 相较于监督学习,对比学习受益于更大的batch size和更深更广的训练网络(比监督学习更依赖数据扩增) 12 | * 使用对比交叉熵损失函数的表征学习受益于正则化的emb 13 | 14 | 15 | 16 | **以前的方法怎么做?** 17 | 18 | * 设计专业的架构(specialized architectures) 19 | * 使用记忆库(memory bank) 20 | 21 | 22 | 23 | **以前的方法有什么缺点?** 24 | 25 | * 繁琐且效果不好 26 | 27 | 28 | 29 | **现在的方法有什么优点?** 30 | 31 | * 架构简单 32 | * 效果SOTA 33 | 34 | 35 | 36 | **现在的方法怎么做?** 37 | 38 | * 使用对比学习框架 39 | 40 | ![image-20240308102346598](./src/SImCLR) -------------------------------------------------------------------------------- /Paper_Reading/Universal Language Model Fine-tuning for Text Classification.md: -------------------------------------------------------------------------------- 1 | # Universal Language Model Fine-tuning for Text Classification 2 | 3 | **论文主要表达** 4 | 5 | 提出了关于nlp的泛化模型,以及关键训练步骤(以前的方法都要从零开始训练) 6 | 7 | 100个标注数据的训练效果可以比之前好100倍 8 | 9 | 10 | 11 | **铺垫知识** 12 | 13 | inductive learning(归纳式学习)对应于meta-learning 从诸多给定任务中学习然后迁移到陌生任务中去 14 | 15 | transductive learning(直推式学习)对应domain adaptation 给定的数据包含目标域的数据,要求训练一个对目标域数据又最小误差的模型 16 | 17 | 18 | 19 | **以前的方法有什么问题?** 20 | 21 | * 从零开始训练,成本大 22 | * 将预训练的embedding当作固定参数对待,限制了参数的有效信息表达 23 | 24 | > thinking 25 | > 26 | > 以前的方式都是随机初始化模型参数,现在追寻的是使用特定方式来初始化参数,以求在其他条件不变的情况下追求更好的效果 27 | 28 | * 使用fine-tuning的归纳式迁移学习在nlp中很失败 29 | * 以前的方法需要大量in-domain数据来达到很好的表现,限制了LM的应用 30 | * 缺少对LM训练方面的知识,一直阻碍着更广泛的应用 31 | * nlp模型通常较为浅(shallow),需要不同的微调方法 32 | * shallow与deep形成比较,相对于cv而言,nlp的模型更加浅 33 | 34 | 35 | 36 | **现在方法解决了什么**? 37 | 38 | * 解决了nlp模型泛化能力不足的问题,可以更广泛的采用 39 | 40 | 41 | 42 | **现在怎么做?** 43 | 44 | * 使用判别微调(*discriminative fine-tuning*) 45 | * 斜三角学习率(*slanted triangular learning rates*) 46 | * 逐渐解冻策略(*gradual unfreezing*) 47 | 48 | 通过这些方式来保留之前学习的知识,防止在fine-tuning时发生灾难性的遗忘 49 | 50 | -------------------------------------------------------------------------------- /Paper_Reading/WhitenedCSE.md: -------------------------------------------------------------------------------- 1 | # WhitenedCSE 2 | 3 | [WhitenedCSE: Whitening-based Contrastive Learning of Sentence Embeddings](https://aclanthology.org/2023.acl-long.677/) 4 | 5 | whitening(白化):去除数据内的冗余信息 6 | 7 | 白化后特性: 8 | 9 | * 线性解耦每个维度的联系。 10 | * 适当缩放每个维度的差异,差异小的放大,差异大的缩小。 11 | 12 | 对于高相似度的句向量来说,就是放大差异 13 | 14 | > 涉及到协方差 15 | 16 | 17 | 18 | 白化学习和对比学习在均匀性方面有很大的冗余度 19 | 20 | 21 | 22 | **论文做了什么?** 23 | 24 | 更好的归一性 25 | 26 | 更好的对齐性 27 | 28 | 在sts数据集上刷了sota 29 | 30 | 31 | 32 | **之前的方法怎么做?** 33 | 34 | * mask language modeling 35 | * 通过后处理来提高归一性,正则化、白化;将学习好的表征映射到各项同性空间 36 | * 将所有样本散布到特征空间来提高对齐性 37 | 38 | 39 | 40 | **之前的方法有什么缺点?** 41 | 42 | * 不能很好的处理归一性和对齐性,不适合句子表征学习(MLM) 43 | 44 | 45 | 46 | **现在的方法怎么做?** 47 | 48 | * 给一个主干特征,SWG(shuffled Group Whitening)随机将特征沿着通道轴划分成多组,每组独立进行白化操作,白化后的特征被喂到对比损失进行优化 49 | 50 | 51 | 52 | **现在的方法有什么优点?** 53 | 54 | * 虽然典型的白化只对归一性有效,但是论文的方法在提升归一性的同时也提升了对齐性 55 | * 产生的所谓“重复”特征实际上各不相同,这增加了正样本的多样性 56 | 57 | 58 | 59 | > github上开源的代码有bug,目前作者还没有修,建议参考论文思路不建议复现 60 | -------------------------------------------------------------------------------- /Paper_Reading/src/SImCLR: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Paper_Reading/src/SImCLR -------------------------------------------------------------------------------- /Paper_Reading/src/SRS2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Paper_Reading/src/SRS2 -------------------------------------------------------------------------------- /Paper_Reading/src/SRS3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Paper_Reading/src/SRS3 -------------------------------------------------------------------------------- /Paper_Reading/src/SRS4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Paper_Reading/src/SRS4 -------------------------------------------------------------------------------- /Paper_Reading/src/sentenceRepresentationSurvey: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/EEE1even/NLP-Learning/59af904dbe38d9654b338d346020e623ab06477c/Paper_Reading/src/sentenceRepresentationSurvey -------------------------------------------------------------------------------- /Paper_Summary/ACL Chinese.md: -------------------------------------------------------------------------------- 1 | ## 2023 ACL Chinese 2 | 3 | **[Fantastic Expressions and Where to Find Them: Chinese Simile Generation with Multiple Constraints](https://aclanthology.org/2023.acl-long.28/)** 4 | 5 | * 引入 controllable simile generation (CSG) 可控比拟语生成 **新任务** 6 | * 提出GraCe数据集,有61.3k的比喻元素注释的中文比喻 7 | * 提出CSG模型Similor 8 | 9 | **[CATS: A Pragmatic Chinese Answer-to-Sequence Dataset with Large Scale and High Quality](https://aclanthology.org/2023.acl-long.168/)** 10 | 11 | * 高质量中文数据集 12 | * 提出统一图表转换方法 13 | 14 | **[Advancing Multi-Criteria Chinese Word Segmentation Through Criterion Classification and Denoising](https://aclanthology.org/2023.acl-long.356/)** 15 | 16 | * 一个简单的基于输入提示的MCCWS模型,可以达到SOTA 17 | 18 | **[READIN: A Chinese Multi-Task Benchmark with Realistic and Diverse Input Noises](https://aclanthology.org/2023.acl-long.460/)** 19 | 20 | * 评测数据集 21 | 22 | **[Multitask Pre-training of Modular Prompt for Chinese Few-Shot Learning](https://aclanthology.org/2023.acl-long.625/)** 23 | 24 | * 中文少样本学习 25 | * [code](https://github.com/Hzfinfdu/MPMP) 26 | 27 | **[CHBias: Bias Evaluation and Mitigation of Chinese Conversational Language Models](https://aclanthology.org/2023.acl-long.757/)** 28 | 29 | * 提出中文偏见数据集 CHBias 30 | * [github](https://github.com/hyintell/CHBias) 31 | 32 | 33 | 34 | **[Are Pre-trained Language Models Useful for Model Ensemble in Chinese Grammatical Error Correction?](https://aclanthology.org/2023.acl-short.77/)** 35 | 36 | * 发现模型合并的PLM对中文语法错误纠正效果非常差 37 | * 测试数据中正确句子的人类参考资料远远不够,而正确句子与地道句子之间的差距值得关注 38 | * 提供了改进方法[code](https://github.com/JamyDon/PLM-based-CGEC-Model-Ensemble) 39 | 40 | 41 | 42 | **[Enhancing Ancient Chinese Understanding with Derived Noisy Syntax Trees](https://aclanthology.org/2023.acl-srw.15/)** 43 | 44 | * 提出confidence-based syntax encoding network (cSEN)来缓解噪声影响 45 | * [文言文-现代文语料库](https://github.com/NiuTrans/Classical-Modern) 46 | 47 | 48 | 49 | **[CWSeg: An Efficient and General Approach to Chinese Word Segmentation](https://aclanthology.org/2023.acl-industry.1/)** 50 | 51 | * 队列训练和多功能解码策略来增强PLM 52 | 53 | 54 | 55 | **[Rethinking Dictionaries and Glyphs for Chinese Language Pre-training](https://aclanthology.org/2023.findings-acl.70/)** 56 | 57 | * 提出 CDBert,通过字典知识和汉字结构来增强中文大模型的语义理解 58 | * 提出多义词判别任务:PolyMRC 59 | * [GitHub](https://github.com/patrick-tssn/CDBert) 60 | 61 | **[WYWEB: A NLP Evaluation Benchmark For Classical Chinese](https://aclanthology.org/2023.findings-acl.204/)** 62 | 63 | * 古文测试任务 64 | 65 | **[Exploiting Hierarchically Structured Categories in Fine-grained Chinese Named Entity Recognition](https://aclanthology.org/2023.findings-acl.211/)** 66 | 67 | * 提出一个数据集FiNE 68 | * 提出一个新方法FG-CNER 69 | 70 | **[A Pilot Study on Dialogue-Level Dependency Parsing for Chinese](https://aclanthology.org/2023.findings-acl.607/)** 71 | 72 | * 提出一个数据集 73 | 74 | **[anko at SemEval-2023 Task 2: Bidirectional LSTM Model Based on Pre-training for Chinese Named Entity Recognition](https://aclanthology.org/2023.semeval-1.132/)** 75 | 76 | * bert的output作为BiLST网络的input 77 | 78 | **[YNUNLP at SemEval-2023 Task 2: The Pseudo Twin Tower Pre-training Model for Chinese Named Entity Recognition](https://aclanthology.org/2023.semeval-1.224/)** 79 | 80 | 81 | 82 | **[Pay Attention to the Robustness of Chinese Minority Language Models! Syllable-level Textual Adversarial Attack on Tibetan Script](https://aclanthology.org/2023.trustnlp-1.4/)** 83 | 84 | * 提出藏文音节级黑盒(Tibetan syllable-level black-box)文本对抗攻击 85 | * 针对少数民族语言的方法 86 | 87 | 88 | 89 | ## 2022 ACL Chinese 90 | 91 | **[CBLUE: A Chinese Biomedical Language Understanding Evaluation Benchmark](https://aclanthology.org/2022.acl-long.544.pdf)** 92 | 93 | * 一个生物数据集 94 | 95 | 96 | 97 | **[TopWORDS-Seg: Simultaneous Text Segmentation and Word Discovery for Open-Domain Chinese Texts via Bayesian Inference](https://aclanthology.org/2022.acl-long.13/)** 98 | 99 | * 用贝叶斯推理在开放中文文本领域来进行词义分割和字词发现 100 | 101 | 102 | 103 | **[RoCBert: Robust Chinese Bert with Multimodal Contrastive Pretraining](https://aclanthology.org/2022.acl-long.65/)** 104 | 105 | * 多模式对比学习预训练 106 | * 多模式:语义、语音、视觉特征 107 | 108 | 109 | 110 | **[Exploring and Adapting Chinese GPT to Pinyin Input Method](https://aclanthology.org/2022.acl-long.133/)** 111 | 112 | * 拼音拆解,完整:wo;开始:w;结束:o 113 | * 让模型利用上下文信息和拼音信息;增强模型对同声母字的辨析 114 | 115 | 116 | 117 | **[Enhancing Chinese Pre-trained Language Model via Heterogeneous Linguistics Graph](https://aclanthology.org/2022.acl-long.140/)** 118 | 119 | * 使用异构语言图谱 120 | 121 | 122 | 123 | ## 2021 ACL Chinese 124 | 125 | 126 | 127 | 128 | 129 | ## Text Classification 130 | 131 | **[Improving Gradient Trade-offs between Tasks in Multi-task Text Classification](https://aclanthology.org/2023.acl-long.144/)** 132 | 133 | **[Hierarchical Verbalizer for Few-Shot Hierarchical Text Classification](https://aclanthology.org/2023.acl-long.164/)** 134 | 135 | **[Peer-Label Assisted Hierarchical Text Classification](https://aclanthology.org/2023.acl-long.207/)** 136 | 137 | **[Randomized Smoothing with Masked Inference for Adversarially Robust Text Classifications](https://aclanthology.org/2023.acl-long.282/)** 138 | 139 | **[HiTIN: Hierarchy-aware Tree Isomorphism Network for Hierarchical Text Classification](https://aclanthology.org/2023.acl-long.432/)** 140 | 141 | **[Efficient Shapley Values Estimation by Amortization for Text Classification](https://aclanthology.org/2023.acl-long.483/)** 142 | 143 | **[TART: Improved Few-shot Text Classification Using Task-Adaptive Reference Transformation](https://aclanthology.org/2023.acl-long.617/)** 144 | 145 | **[Hybrid Uncertainty Quantification for Selective Text Classification in Ambiguous Tasks](https://aclanthology.org/2023.acl-long.652/)** 146 | 147 | **[PESCO: Prompt-enhanced Self Contrastive Learning for Zero-shot Text Classification](https://aclanthology.org/2023.acl-long.832/)** 148 | 149 | **[Prototype-Guided Pseudo Labeling for Semi-Supervised Text Classification](https://aclanthology.org/2023.acl-long.904/)** 150 | 151 | **[Linear Classifier: An Often-Forgotten Baseline for Text Classification](https://aclanthology.org/2023.acl-short.160/)** -------------------------------------------------------------------------------- /Paper_Summary/Sentence_Embedding近两年顶会论文.md: -------------------------------------------------------------------------------- 1 | ## EMNLP 2023 2 | 3 | **[AdaSent: Efficient Domain-Adapted Sentence Embeddings for Few-Shot Classification](https://aclanthology.org/2023.emnlp-main.208/)** 4 | 5 | **[Contrastive Learning of Sentence Embeddings from Scratch](https://aclanthology.org/2023.emnlp-main.238/)** 6 | 7 | **[Ditto: A Simple and Efficient Approach to Improve Sentence Embeddings](https://aclanthology.org/2023.emnlp-main.359/)** 8 | 9 | **[OssCSE: Overcoming Surface Structure Bias in Contrastive Learning for Unsupervised Sentence Embedding](https://aclanthology.org/2023.emnlp-main.448/)** 10 | 11 | **[SimCSE++: Improving Contrastive Learning for Sentence Embeddings from Two Perspectives](https://aclanthology.org/2023.emnlp-main.737/)** 12 | 13 | **[Bridging Continuous and Discrete Spaces: Interpretable Sentence Representation Learning via Compositional Operations](https://aclanthology.org/2023.emnlp-main.900/)** 14 | 15 | **[Zero-Shot Multi-Label Topic Inference with Sentence Encoders and LLMs](https://aclanthology.org/2023.emnlp-main.1008/)** 16 | 17 | **[SentAlign: Accurate and Scalable Sentence Alignment](https://aclanthology.org/2023.emnlp-demo.22/)** 18 | 19 | **[Learning Multilingual Sentence Representations with Cross-lingual Consistency Regularization](https://aclanthology.org/2023.emnlp-industry.25/)** 20 | 21 | **[HiCL: Hierarchical Contrastive Learning of Unsupervised Sentence Embeddings](https://aclanthology.org/2023.findings-emnlp.161/)** 22 | 23 | **[RobustEmbed: Robust Sentence Embeddings Using Self-Supervised Contrastive Pre-Training](https://aclanthology.org/2023.findings-emnlp.305/)** 24 | 25 | **[Improving Contrastive Learning of Sentence Embeddings with Focal InfoNCE](https://aclanthology.org/2023.findings-emnlp.315/)** 26 | 27 | **[DistillCSE: Distilled Contrastive Learning for Sentence Embeddings](https://aclanthology.org/2023.findings-emnlp.547/)** 28 | 29 | **[Role of Context in Unsupervised Sentence Representation Learning: the Case of Dialog Act Modeling](https://aclanthology.org/2023.findings-emnlp.588/)** 30 | 31 | **[On the Dimensionality of Sentence Embeddings](https://aclanthology.org/2023.findings-emnlp.694/)** 32 | 33 | **[Contrastive Learning-based Sentence Encoders Implicitly Weight Informative Words](https://aclanthology.org/2023.findings-emnlp.729/)** 34 | 35 | **[Improving Multi-Criteria Chinese Word Segmentation through Learning Sentence Representation](https://aclanthology.org/2023.findings-emnlp.850/)** 36 | 37 | **[BERT Has More to Offer: BERT Layers Combination Yields Better Sentence Embeddings](https://aclanthology.org/2023.findings-emnlp.1030/)** 38 | 39 | **[Simplify: Automatic Arabic Sentence Simplification using Word Embeddings](https://aclanthology.org/2023.arabicnlp-1.35/)** 40 | 41 | **[Investigating Semantic Subspaces of Transformer Sentence Embeddings through Linear Structural Probing](https://aclanthology.org/2023.blackboxnlp-1.11/)** 42 | 43 | **[Contrastive Learning for Universal Zero-Shot NLI with Cross-Lingual Sentence Embeddings](https://aclanthology.org/2023.mrl-1.18/)** 44 | 45 | **[Jina Embeddings: A Novel Set of High-Performance Sentence Embedding Models](https://aclanthology.org/2023.nlposs-1.2/)** 46 | 47 | **[A Sentence Alignment Approach to Document Alignment and Multi-faceted Filtering for Curating Parallel Sentence Pairs from Web-crawled Data](https://aclanthology.org/2023.wmt-1.38/)** 48 | 49 | ## ACL 2023 50 | 51 | **[Dual-Alignment Pre-training for Cross-lingual Sentence Embedding](https://aclanthology.org/2023.acl-long.191/)** 52 | 53 | * [code](https://github.com/ChillingDream/DAP) 54 | 55 | **[miCSE: Mutual Information Contrastive Learning for Low-shot Sentence Embeddings](https://aclanthology.org/2023.acl-long.339/)** 56 | 57 | **[WhitenedCSE: Whitening-based Contrastive Learning of Sentence Embeddings](https://aclanthology.org/2023.acl-long.677/)** 58 | 59 | **[Composition-contrastive Learning for Sentence Embeddings](https://aclanthology.org/2023.acl-long.882/)** 60 | 61 | **[Going Beyond Sentence Embeddings: A Token-Level Matching Algorithm for Calculating Semantic Textual Similarity](https://aclanthology.org/2023.acl-short.49/)** 62 | 63 | **[Improving Contrastive Learning of Sentence Embeddings from AI Feedback](https://aclanthology.org/2023.findings-acl.707/)** 64 | 65 | **[Sentence Embedding Leaks More Information than You Expect: Generative Embedding Inversion Attack to Recover the Whole Sentence](https://aclanthology.org/2023.findings-acl.881/)** 66 | 67 | **[Alleviating Over-smoothing for Unsupervised Sentence Representation](https://aclanthology.org/2023.acl-long.197/)** 68 | 69 | **[RankCSE: Unsupervised Sentence Representations Learning via Learning to Rank](https://aclanthology.org/2023.acl-long.771/)** 70 | 71 | **[Ranking-Enhanced Unsupervised Sentence Representation Learning](https://aclanthology.org/2023.acl-long.879/)** 72 | 73 | **[Self-Supervised Sentence Polishing by Adding Engaging Modifiers](https://aclanthology.org/2023.acl-demo.48/)** 74 | 75 | **[Exploring Anisotropy and Outliers in Multilingual Language Models for Cross-Lingual Semantic Sentence Similarity](https://aclanthology.org/2023.findings-acl.439/)** 76 | 77 | **[Separating Context and Pattern: Learning Disentangled Sentence Representations for Low-Resource Extractive Summarization](https://aclanthology.org/2023.findings-acl.479/)** 78 | 79 | **[Clustering-Aware Negative Sampling for Unsupervised Sentence Representation](https://aclanthology.org/2023.findings-acl.555/)** 80 | 81 | **[On Isotropy, Contextualization and Learning Dynamics of Contrastive-based Sentence Representation Learning](https://aclanthology.org/2023.findings-acl.778/)** 82 | 83 | ## RepL4NLP 2023 84 | 85 | **[Sen2Pro: A Probabilistic Perspective to Sentence Embedding from Pre-trained Language Model](https://aclanthology.org/2023.repl4nlp-1.26/)** 86 | 87 | **[Relational Sentence Embedding for Flexible Semantic Matching](https://aclanthology.org/2023.repl4nlp-1.20/)** 88 | 89 | **[Grammatical information in BERT sentence embeddings as two-dimensional arrays](https://aclanthology.org/2023.repl4nlp-1.3/)** 90 | 91 | 92 | 93 | ## EACL 2023 94 | 95 | **[LEALLA: Learning Lightweight Language-agnostic Sentence Embeddings with Knowledge Distillation](https://aclanthology.org/2023.eacl-main.138/)** 96 | 97 | **[Are the Best Multilingual Document Embeddings simply Based on Sentence Embeddings?](https://aclanthology.org/2023.findings-eacl.174/)** 98 | 99 | **[Improving Contrastive Learning of Sentence Embeddings from AI Feedback](https://aclanthology.org/2023.findings-acl.707/)** 100 | 101 | **[RobustEmbed: Robust Sentence Embeddings Using Self-Supervised Contrastive Pre-Training](https://aclanthology.org/2023.findings-emnlp.305/)** 102 | 103 | **[Improving Contrastive Learning of Sentence Embeddings with Focal InfoNCE](https://aclanthology.org/2023.findings-emnlp.315/)** 104 | 105 | **[DistillCSE: Distilled Contrastive Learning for Sentence Embeddings](https://aclanthology.org/2023.findings-emnlp.547/)** 106 | 107 | 108 | 109 | ## EMNLP 2022 110 | 111 | **[Kernel-Whitening: Overcome Dataset Bias with Isotropic Sentence Embedding](https://aclanthology.org/2022.emnlp-main.275/)** 112 | 113 | **[Retrofitting Multilingual Sentence Embeddings with Abstract Meaning Representation](https://aclanthology.org/2022.emnlp-main.433/)** 114 | 115 | **[PromptBERT: Improving BERT Sentence Embeddings with Prompts](https://aclanthology.org/2022.emnlp-main.603/)** 116 | 117 | **[English Contrastive Learning Can Learn Universal Cross-lingual Sentence Embeddings](https://aclanthology.org/2022.emnlp-main.621/)** 118 | 119 | **[PCL: Peer-Contrastive Learning with Diverse Augmentations for Unsupervised Sentence Embeddings](https://aclanthology.org/2022.emnlp-main.826/)** 120 | 121 | 122 | 123 | ## ACL 2022 124 | 125 | **[Language-agnostic BERT Sentence Embedding](https://aclanthology.org/2022.acl-long.62/)** 126 | 127 | 128 | 129 | ## CoLING 2022 130 | 131 | **[ESimCSE: Enhanced Sample Building Method for Contrastive Learning of Unsupervised Sentence Embedding](https://aclanthology.org/2022.coling-1.342/)** 132 | 133 | **[An Information Minimization Based Contrastive Learning Model for Unsupervised Sentence Embeddings Learning](https://aclanthology.org/2022.coling-1.426/)** 134 | 135 | **[Smoothed Contrastive Learning for Unsupervised Sentence Embedding](https://aclanthology.org/2022.coling-1.434/)** 136 | 137 | **[Incorporating the Rhetoric of Scientific Language into Sentence Embeddings using Phrase-guided Distant Supervision and Metric Learning](https://aclanthology.org/2022.sdp-1.7/)** -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # NLP学习仓库 2 | 3 | ## 该repo持续更新nlp学习文档 4 | 5 | #### Learning_Notes 6 | 7 | * 学习笔记,主要涉及到NLP处理中遇到的一些数学知识,当然还有一些模型和技术的个人学习文档 8 | 9 | #### Paper_Reading 10 | 11 | * 论文阅读笔记(目前主要更新sentence representation) 12 | 13 | #### Paper_Summary 14 | 15 | * NLP不同领域的论文汇总 16 | 17 | 18 | 19 | 数学公式在GitHub上的呈现有时会有错误,建议克隆到本地后阅读 20 | 21 | ```bash 22 | git clone https://github.com/EEE1even/NLP-Learning.git 23 | ``` 24 | 25 | 也欢迎访问我的[csdn博客](https://blog.csdn.net/weixin_48435461?spm=1000.2115.3001.5343),相关文档会同步更新 26 | --------------------------------------------------------------------------------