IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> DiffCSE -> 正文阅读

[人工智能]DiffCSE

DiffCSE模型

这篇论文DiffCSE: Difference-based Contrastive Learning for Sentence Embeddings提出了 DiffCSE,一种用于学习句子嵌入的无监督对比学习框架。 DiffCSE 学习对原始句子和编辑句子之间的差异敏感的句子嵌入,其中编辑句子是通过随机mask原始句子然后从masked language模型中采样获得的。DiffCSE是对SimCSE模型的优化。这篇论文是发表于2022NAACL,代码地址为代码

论文亮点

(1)目前在Semantic Textual Similarity (STS)任务上的SOTA模型
(2)运用不变性,使用基于 dropout 的增强作为不敏感变换和基于 MLM 的单词替换作为敏感变换,对句子进行等变对比学习操作。这会导致基于原始句子和转换句子之间的差异的额外交叉熵损失。

模型

DiffCSE是无监督对比学习,模型分为sentence encoder f f f,generator G G G,discriminator D D D 。模型结构图如下:
diffcse模型
模型左边 sentence encoder f f f是输入的的句$ x , 用 t r a n s f o r m e r e n c o d e r 编 码 , 与 S i m C S E 相 类 似 , 对 句 子 ,用transformer encoder 编码,与SimCSE相类似,对句子 transformerencoderSimCSE x $进行随机mask后得到 x ′ x^{'} x 输入到Generator中生成mask处的词得到句子 x ′ ′ = G ( x ′ ) x^{''} = G(x^{'}) x=G(x),在用discriminator进行判断句子 x ′ ′ x^{''} x的词是否为替换还是原来的词。这里的generator G G G和discriminator D D D与ELECTRA中的generator,discriminator的相类似,不同之处在于:
(1)discriminator D D D是有条件的判别,结合了sentence encoder中的句子embedding向量 h = f ( x ) h = f(x) h=f(x)反向传播更新 f f f使得sentence encoder f f f更好的表达句子 x x x的语义信息向量 h h h,从而使得 G G G更好的区分 x x x x ′ ′ x^{''} x的细微差别。
(2)在训练过程中generator G G G是固定,句子表征固定,参数不更新
(3)在下游任务,只是用sentence encoder f f f表征句子 embeddings

Loss

模型loss分两个部分,分别为对比loss和Replaced Token Detection (RTD) loss。
(1)对比loss

L c o n t r a s t = ? log ? e s i m ( h i , h i + ) / τ ∑ j = 1 N e s i m ( h i , h j + ) / τ \mathcal{L}_{contrast} = -\log\frac{e^{sim(h_{i}, h_{i}^{+})/\tau}}{\sum_{j=1}^{N}e^{sim(h_{i}, h_{j}^{+})/\tau}} Lcontrast?=?logj=1N?esim(hi?,hj+?)/τesim(hi?,hi+?)/τ?
其中 N N N表示batch 大小,batch间样本构建反例,分母包括自身正例和其他样本的反例,反例间足够远,cos值尽可能的小, τ \tau τ为温度参数。
(2)Replaced Token Detection (RTD) loss
L R T D \mathcal{L}_{RTD} LRTD?是discriminator D D D恢复随机mask后词的edit 句子和原来句子的间的loss。给定长度为 T T T的句子 x = [ x ( 1 ) , x ( 2 ) , . . . , x ( T ) ] x = [x_{(1)},x_{(2)},...,x_{(T)}] x=[x(1)?,x(2)?,...,x(T)?],随机mask 向量为 m = [ m ( 1 ) , m ( 2 ) , . . . , m ( T ) ] m = [m_{(1)},m_{(2)},...,m_{(T)}] m=[m(1)?,m(2)?,...,m(T)?],得到mask后的句子 x ′ = m ? x x^{'} = m \cdot x x=m?x,discriminator D D D恢复 x ′ x^{'} x中的mask掉的词得到句子 x ′ ′ = G ( x ′ ) x^{''} = G(x^{'}) x=G(x), loss L R T D x \mathcal{L}_{RTD}^{x} LRTDx?

L R T D = ∑ i N L R T D x i \mathcal{L}_{RTD} = \sum_{i}^{N}\mathcal{L}_{RTD}^{x_{i}} LRTD?=iN?LRTDxi??
其中 L R T D x i \mathcal{L}_{RTD}^{x_{i}} LRTDxi??为:

L R T D x i = ∑ i = 1 T ( ? 1 ( x ( t ) ′ ′ = x ( t ) ) log ? D ( x ′ ′ , h , t ) ? 1 ( x ( t ) ′ ′ ≠ x ( t ) ) log ? D ( x ′ ′ , h , t ) ) \mathcal{L}_{RTD}^{x_{i}} = \sum_{i=1}^{T}\Large(-\Large\boldsymbol{1} (x^{''}_{(t)}=x_{(t)})\log D(x^{''}, \boldsymbol{h}, t)\\- \Large\boldsymbol{1}(x^{''}_{(t)}\neq x_{(t)})\log D(x^{''}, \boldsymbol{h}, t)) LRTDxi??=i=1T?(?1(x(t)?=x(t)?)logD(x,h,t)?1(x(t)??=x(t)?)logD(x,h,t))
(3) loss
L = L c o n t r a s t + λ L R T D \mathcal{L} = \mathcal{L}_{contrast} + \lambda \mathcal{L}_{RTD} L=Lcontrast?+λLRTD?
其中 λ \lambda λ为参数,根据实际数据任务重新调参,论文默认为0.005,当 λ \lambda λ为0时,loss为SimCSE模型的loss

模型参数说明

(1)sentence encoder f f f和 discriminator D D D中的参数进行更新,generator G G G参数固定
(2)模型训练后进行推理或者下游任务,只使用sentence encoder f f f获取句子embedding
(3)sentence encoder f f f和 discriminator D D D的预训练模型使用的是BERT或者Roberta
(4)generator G G G预训练模型使用的是DistilRoBERTa,因为在STS-B数据集以及transfer mask任务上使用DistilRoBERTa的效果比较使用Bert base,Bert tiny等这些预训练模型效果好,如下图:
在这里插入图片描述

(5)句子随机mask占比为30%的时候,模型效果好
DiffCSE
(6)loss 中的 λ \lambda λ 为0.005的时候效果比较好,当 λ \lambda λ 为0时模型为SimCSE。
(7)在sentence encoder f f f Pooler Choice取[CLS]特征后进行了batch normalization,这里选取两层的pooler结果以及batch normalization,在sts-b以及transfer mask任务效果比较好
DiffCSE
加入batch normalization 代码如下

class ProjectionMLP(nn.Module):
    def __init__(self, config):
        super().__init__()
        in_dim = config.hidden_size
        hidden_dim = config.hidden_size * 2
        out_dim = config.hidden_size
        affine=False
        list_layers = [nn.Linear(in_dim, hidden_dim, bias=False),
                       nn.BatchNorm1d(hidden_dim),
                       nn.ReLU(inplace=True)]
        list_layers += [nn.Linear(hidden_dim, out_dim, bias=False),
                        nn.BatchNorm1d(out_dim, affine=affine)]
        self.net = nn.Sequential(*list_layers)

    def forward(self, x):
        return self.net(x)

在DiffCSE中的Pooler Choice选择有"cls", “cls_before_pooler”, “avg”, “avg_top2”, "avg_first_last"等。

实验结果

后期补充实验结果。

如果表述不当,欢迎指正,谢谢。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-25 11:36:15  更:2022-05-25 11:37:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:45:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码