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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 文本匹配之SimCSE模型 -> 正文阅读

[人工智能]文本匹配之SimCSE模型

目录

前言

模型结构

模型原理

模型训练

特别说明

模型效果

参考

前言

论文全名:SimCSE: Simple Contrastive Learning of Sentence Embeddings

论文地址:https://aclanthology.org/2021.emnlp-main.552.pdf

论文收录于EMNLP2021。

论文提供的代码(pytorch):GitHub - princeton-nlp/SimCSE: EMNLP'2021: SimCSE: Simple Contrastive Learning of Sentence Embeddings

苏神的代码(bert4keras):GitHub - bojone/SimCSE: SimCSE在中文任务上的简单实验

模型结构

SimCSE模型是一种简单的对比句向量表征的框架,包含无监督和有监督两种方法。

无监督学习:会采用Dropout技术,对原始文本进行数据增强,构造出正样本,用于对比学习训练;

监督学习:由于本身有正样本(相近样本),故无需使用Dropout技术,直接训练即可。

模型结构如下:

?

模型原理

SimCSE模型的核心是对比学习,对比学习是通过拉近相似数据的距离,拉远不相似数据的距离为目标,更好地学习数据的表征。使得其在文本匹配任务中产生更好的效果。

论文中,在一个batch中,样本 i?的训练目标如下:

\LARGE \ell_{i}=-\log \frac{e^{\operatorname{sim}\left(\mathbf{h}_{i}^{z_{i}}, \mathbf{h}_{i}^{z_{i}^{\prime}}\right) / \tau}}{\sum_{j=1}^{N} e^{\operatorname{sim}\left(\mathbf{h}_{i}^{z_{i}}, \mathbf{h}_{j}^{z_{j}^{\prime}}\right) / \tau}}

\tau 是一个控制 softmax 分布的一个超参数,通常设为0.05,(\tau?越大,分布越平滑;\tau 越小,正负样本差距就越大),可以加快收敛。

N?为一个batch的大小,sim?函数表示的是余弦相似度计算,{z_{i}^{\prime}}?表示?{z_{i}}?的增强样本(不同dropout得到的)。

但上面的训练目标的分母仅仅是对原样本和所有的增强样本进行了累加,但没有将一个batch中不同的原样本进行累加,因此还是比较喜欢苏神提供的训练目标,如下:

\huge -\sum_{i=1}^{N} \sum_{\alpha=0,1} \log \frac{e^{\cos \left(\boldsymbol{h}_{i}^{(\alpha)}, \boldsymbol{h}_{i}^{(1-\alpha)}\right) / \tau}}{\sum_{j=1, j \neq i}^{N} e^{\cos \left(\boldsymbol{h}_{i}^{(\alpha)}, \boldsymbol{h}_{j}^{(\alpha)}\right) / \tau}+\sum_{j}^{N} e^{\cos \left(\boldsymbol{h}_{i}^{(\alpha)}, \boldsymbol{h}_{j}^{(1-\alpha)}\right) / \tau}}

再来一个图就更清楚了,下图中 a 表示的是原句子,p 表示的是增强后的句子。

?

?上图红色区域是不计算的部分,因为自己和自己计算相似度是没有意义的。

模型训练

无监督训练过程,究竟是如何对句子进行dropout的呢?

首先,将原句子直接复制一份,得到 sent_a 与 sent_b输入到 Bert 中,得到pool_output,然后通过下面代码将形状为torch.Size ([16, 768])的 pooler_output 被重新整形为torch.Size([ 8, 2, 768]),其中8是batch_size。

pooler_output = pooler_output.view((batch_size, args.num_sent, pooler_output.size(-1)))

原论文提供的代码适合英文数据集,如果是要做中文数据集任务,可以使用苏神提供的代码。

要使用SimCSE模型的话,可以直接加载预训练好的模型,如'BERT', 'RoBERTa', 'WoBERT', 'RoFormer', 'BERT-large', 'RoBERTa-large', 'SimBERT', 'SimBERT-tiny', 'SimBERT-small' 等等,具体效果可以看苏神博客的效果对比;

然后得到数据对应预训练模型的encoder向量表示,注意苏神虽然用的是有监督的数据,只用了句子,没有用标签,还是无监督的。

经过SimCSE模型无监督训练后,得到对应的embedding表示。

特别说明

在使用无监督训练时,dropout 通常取较小的数,如0.1,0.05等,也可以参考苏神取的0.3。

随机选了1万条任务数据训练,效果就很好,不一定需要使用所有的数据。

batch_size取64,学习率取1e5,供参考。

模型效果

使用SimCSE模型还是比原模型效果好的,故可以使用预训练模型SimBert + SimCSE模型进行训练。

参考

苏神博客:中文任务还是SOTA吗?我们给SimCSE补充了一些实验 - 科学空间|Scientific Spaceshttps://spaces.ac.cn/archives/8348

刘聪大佬:SimCSE论文精读 - 知乎「句向量表征技术」一直都是NLP领域的热门话题,在BERT前时代,一般都采用word2vec训练出的word-embedding结合pooling策略进行句向量表征,或者在有训练数据情况下,采用TextCNN/BiLSTM结合Siamese network策略进…https://zhuanlan.zhihu.com/p/452761704

?特别推荐一篇文章:在 Pytorch 中为无监督方法实现 SimCSE,描述的很详细。

https://bhuvana-kundumani.medium.com/implementation-of-simcse-for-unsupervised-approach-in-pytorch-a3f8da756839https://bhuvana-kundumani.medium.com/implementation-of-simcse-for-unsupervised-approach-in-pytorch-a3f8da756839GitHub - bhuvanakundumani/SimCSE_unsupervisedContribute to bhuvanakundumani/SimCSE_unsupervised development by creating an account on GitHub.https://github.com/bhuvanakundumani/SimCSE_unsupervised

?simcse损失函数源码解读:SimCSE的loss实现源码解读 - 知乎 ???????

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-01 15:44:16  更:2022-05-01 15:45:18 
 
开发: 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 8:48:57-

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