| |
|
开发:
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中,样本 ?的训练目标如下: 是一个控制 softmax 分布的一个超参数,通常设为0.05,(?越大,分布越平滑; 越小,正负样本差距就越大),可以加快收敛。 ?为一个batch的大小,?函数表示的是余弦相似度计算,?表示??的增强样本(不同dropout得到的)。 但上面的训练目标的分母仅仅是对原样本和所有的增强样本进行了累加,但没有将一个batch中不同的原样本进行累加,因此还是比较喜欢苏神提供的训练目标,如下: 再来一个图就更清楚了,下图中 a 表示的是原句子,p 表示的是增强后的句子。 ? ?上图红色区域是不计算的部分,因为自己和自己计算相似度是没有意义的。 模型训练无监督训练过程,究竟是如何对句子进行dropout的呢? 首先,将原句子直接复制一份,得到 sent_a 与 sent_b输入到 Bert 中,得到pool_output,然后通过下面代码将形状为torch.Size ([16, 768])的 pooler_output 被重新整形为torch.Size([ 8, 2, 768]),其中8是batch_size。
原论文提供的代码适合英文数据集,如果是要做中文数据集任务,可以使用苏神提供的代码。 要使用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 ?特别推荐一篇文章:在 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实现源码解读 - 知乎 ??????? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |