文献阅读:Sentence-BERT:Sentence Embeddings using Siamese BERT-Networks

文献阅读:Sentence-BERT:Sentence Embeddings using Siamese BERT-Networks 1. 文章简介2. 主要方法介绍3. 主要实验内容 1. Unsupervised STS2. Supervised STS3. Downsteam SentEval Evaluation4. Ablation Study4. 结论 & 思考

文献链接:https://arxiv.org/pdf/1908.10084.pdf

1. 文章简介

这篇文章目前来说也算是一篇比较老的文章了,算是紧跟着bert之后的一篇基于bert的后续考察。

众所周知,bert之后的一种标准范式就是用[CLS]的embedding来进行后续sentence level任务(例如分类问题)的输入进行finetune。因此,一种直接的想法就是,如果我直接用[CLS]的embedding作为sentence的embedding是否能够得到一个比较好的效果,如果不行的话,那么我是否可以通过其他的一些方式来获得一个较好的sentence embedding的表达。

2. 主要方法介绍

这篇文章首先考察了一下直接使用bert的[CLS]的embedding作为sentence embedding进行了一下效果评估,发现效果不好,然后在此基础上考察如何优化其效果。

其得出的结论也挺简单的,就是在bert的基础上在下游任务中进行finetune,然后把sentence embedding的部分进行截取作为sentence的embedding即可。

模型结构具体如下图所示:

文献阅读:Sentence-BERT:Sentence Embeddings using Siamese BERT-Networks

其中,下游的finetune任务这篇文献中选用的是SNLI以及NLI任务,而初始化的模型则是使用的bert以及Roberta只能说整体的思路还是非常的直接的。

3. 主要实验内容

文献中一共给出了6个实验的实验结果,这里给出个人觉得比较重要的4个实验结果进行一下展示。

1. Unsupervised STS

首先我们看一下只使用SNLI以及NLI数据集进行finetune之后的模型直接在STS当中的效果,给出实验结果如下:

文献阅读:Sentence-BERT:Sentence Embeddings using Siamese BERT-Networks

可以看到,除了在SICK-R数据集上SentenceBert基本上是碾压了之前其他的sentence embedding的方法,而SICK-R数据上面的落后作者认为是训练数据集的gap导致的,这个也没有足够的证据,不过整体上这个结果基本没有啥太大的问题,还是可以认为SentenceBert效果上确实可以超越之前所有的方法。

2. Supervised STS

上述实验证明了SentenceBert方式确实利用了bert本身的参数信息,拥有很好的性能表现,而这里则是通过监督学习的方式证明上述模型架构在监督学习的情况下能够获得更好地性能表达。

文献阅读:Sentence-BERT:Sentence Embeddings using Siamese BERT-Networks

3. Downsteam SentEval Evaluation

而除了在sentence embedding本身的Spearman correlation之外,这里主要是看其训练得到的embedding信号是否有助于下游的NLP任务。

这里采用的测试数据集为SentEval,其结果如下表所示:

文献阅读:Sentence-BERT:Sentence Embeddings using Siamese BERT-Networks

可以看到,其训练得到的sentence embedding也的确能够辅助下游任务,其效果是可适配的。

4. Ablation Study

最后,文献中做了一些消解实验来考察了一下embedding的使用方式以及训练过程中embedding的使用方式。

得到结果如下表所示:

文献阅读:Sentence-BERT:Sentence Embeddings using Siamese BERT-Networks

可以看到,整体上来说,要从bert这边获得sentence的embedding,pooling的方式还是比直接拿cls效果更好,而且sentence embedding在训练过程中的使用方式上面,文中的方式似乎还是有明显的优势的。

4. 结论 & 思考

整体而言,这篇文章在我看来最大的意义在于说是对Bert的模型的复用,大模型预训练的结果是真的香,不过时至今日基本这也是共识了。

另外就是这篇文章还指出了bert的直接的[CLS]token的embedding直接用来作为sentence embedding效果并不好,必须要经过下游任务的finetune才能够达到一个好的效果,这个虽然不是文章的核心内容,不过于我而言倒算是一个比较有用的结论,也算是侧面印证了Roberta关于Bert对于NSP任务较弱的观点,毕竟在Bert当中,[CLS]token的embedding信息完全是通过NSP任务来进行有效学习的。

以上就是文献阅读:Sentence-BERT:Sentence Embeddings using Siamese BERT-Networks的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/21355.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月1日 12:28:43
下一篇 2025年11月1日 12:30:47

相关推荐

  • Windows Fences桌面组,HTML+CSS文件分区炫!

    通过HTML+CSS构建分区界面,结合Electron或Wallpaper Engine实现Windows桌面图标分组效果。1、使用HTML定义多个容器,通过CSS设置绝对定位与半透明背景,模拟Fences分区;2、利用Electron封装为原生应用,配置透明无边框窗口并置底显示;3、或将页面导入W…

    2025年12月23日
    000
  • 处理React Markdown中的BBCode:从误解到解决方案

    本文旨在解决在react应用中使用`react-markdown`库渲染文本时,误将bbcode标签识别为markdown语法的问题。核心内容是明确bbcode与markdown的区别,并提供通过预处理将bbcode转换为markdown的解决方案,从而实现正确的渲染,并讨论相关注意事项。 理解问题…

    2025年12月23日
    000
  • 解决React Markdown无法解析BBCode标签的问题

    本文旨在解决在react应用中使用`react-markdown`库处理非标准标记语言(如bbcode)时遇到的问题。核心方案是识别输入文本并非markdown,而是bbcode,并通过引入bbcode到markdown的预转换步骤,使`react-markdown`能够正确解析并渲染内容。文章将详…

    2025年12月23日
    200
  • React应用中BBCode与Markdown的桥接:使用转换器进行内容渲染

    在react应用中,当从api获取包含bbcode格式的文本时,直接使用`react-markdown`库可能无法正确解析,因为它期望的是markdown语法。本文将探讨如何识别并解决这一问题,通过引入bbcode到markdown的转换器,实现内容的准确渲染,确保非标准标记能够被react组件正确…

    2025年12月23日
    000
  • React Markdown处理BBCode:从非标准标记到HTML的转换指南

    在使用`react-markdown`库渲染文本时,如果遇到类似`[h2]标题[/h2]`这样的非标准标记(通常是bbcode),`react-markdown`会将其视为普通文本而非html标签。核心解决方案是,在将文本传递给`react-markdown`之前,先使用专门的bbcode转mark…

    2025年12月23日
    000
  • 怎样搭建C++的虚拟现实引擎环境 Unreal Engine VR项目设置

    搭建c++++的vr引擎环境需先安装unreal engine及必要sdk,接着创建支持vr的c++项目,再配置c++代码与vr输入绑定,最后进行构建与调试。1. 安装ue并选择合适版本,搭配visual studio及对应vr sdk;2. 创建c++项目时启用xr设置并选择设备插件;3. 编写代…

    2025年12月18日 好文分享
    300
  • 怎样配置C++的AR/VR交互环境 OpenXR与手势识别库集成

    配置c++++的ar/vr交互环境需先搭建开发环境,再集成openxr运行时,接着接入手势识别库,最后进行调试与优化。1. 搭建基础环境包括选择windows系统、安装visual studio、相关sdk及图形api,并运行示例程序验证环境;2. 集成openxr需下载sdk、设置项目依赖、加载必…

    2025年12月18日 好文分享
    000
  • .NET中的IDisposable接口和using语句是什么?如何正确释放非托管资源?

    IDisposable 接口定义 Dispose 方法用于显式释放资源,using 语句确保对象在作用域结束时自动调用 Dispose,防止资源泄漏。 IDisposable 接口和 using 语句是 .NET 中管理资源释放的重要机制,尤其用于处理非托管资源(如文件句柄、数据库连接、网络连接、G…

    2025年12月17日
    000
  • Selenium WebDriver元素信息提取指南

    本文详细介绍了如何使用Selenium WebDriver从网页元素中提取数据。通过遍历定位到的WebElement列表,并结合.text方法获取可见文本、.get_attribute()方法获取元素属性,以及在父元素内部进一步定位子元素来获取特定信息(如商品价格和浮动值),从而实现高效、精准的网页…

    2025年12月14日
    000
  • 从 Selenium 元素中提取信息的实用指南

    本文旨在帮助开发者掌握使用 Selenium 从网页元素中提取信息的核心技巧。通过清晰的代码示例,我们将演示如何定位元素并获取其属性和文本内容,从而高效地抓取所需数据。此外,我们还将介绍一些常用的方法,以便更好地理解和操作 Selenium 中的 WebElement 对象。 定位元素 在使用 Se…

    2025年12月14日
    000
  • Selenium Web元素数据提取指南:从列表到具体信息

    本教程详细阐述了如何利用Selenium从网页元素列表中高效提取所需信息。通过迭代WebElement对象并运用.text方法获取文本内容,以及.get_attribute()方法获取元素属性值,读者将学会精确地从复杂的网页结构中抓取数据,为自动化测试和数据抓取任务奠定坚实基础。 理解Seleniu…

    2025年12月14日
    000
  • Playwright 教程:高效处理浏览器新窗口与弹出页

    本教程详细介绍了如何使用 Playwright 捕获并操作浏览器新打开的窗口或弹出页。核心在于利用 page.expect_popup() 上下文管理器,确保在触发弹出事件前做好监听准备,并在弹出后获取其页面对象,进而进行元素定位与交互,确保自动化流程的顺畅执行。 捕获新窗口与弹出页的核心机制 在进…

    2025年12月14日
    000
  • Playwright自动化测试中如何高效处理新窗口与弹窗

    本文详细讲解了在Playwright自动化测试中如何高效、准确地处理新窗口(Popup)的场景。通过利用page.expect_popup()上下文管理器,可以捕获并控制由用户操作触发的新浏览器窗口。教程将提供具体的代码示例,指导读者如何在新窗口中定位元素、执行操作,并强调了在实际应用中处理弹窗的注…

    2025年12月14日
    000
  • 为欧洲翻新蒸汽甲板构建可用性检查器

    Steam Deck 已成为便携式PC游戏玩家的革命性产品。然而,由于供应有限,获取翻新机型并非易事。为此,我开发了一个基于Python的Steam Deck可用性检查器,用于监控欧洲市场上翻新Steam Deck的库存情况。 本文将深入探讨该项目的技术细节,提供实用代码片段,并欢迎其他开发者贡献代…

    2025年12月13日
    000
  • PHP解析Steam Web API JSON数据:正确处理数组访问的教程

    本教程旨在解决php在处理json数据时,特别是从steam web api获取的数据中,将json数组误作对象属性访问导致的`parse error`。我们将详细解释`json_decode`的行为、json数组与php数组的对应关系,并提供正确的数组元素访问方法,确保您能高效、无误地解析复杂js…

    2025年12月13日
    000
  • 解决PHP解析JSON时数字键访问的语法错误

    本文旨在解决php在解析json数据时,因尝试使用对象属性语法(`->0`)访问实际上是数组的数字索引元素而导致的语法错误。我们将深入探讨此错误的根本原因,提供正确的数组访问方法(`[0]`),并通过代码示例和最佳实践,帮助开发者理解并避免此类常见问题,确保json数据能够被正确、高效地处理。…

    2025年12月13日
    000
  • 如何在PHP中实现基于MySQL的动态分页查询

    本教程详细介绍了如何在php环境中,结合mysql数据库,实现动态分页查询功能。文章从计算总记录数和总页数开始,逐步讲解如何根据用户请求的页码构建动态sql查询(使用`limit`子句和预处理语句),以及如何生成交互式的分页导航链接,从而优化大量数据的展示和用户体验。 在Web应用中,当数据库中存在…

    2025年12月13日
    000
  • PHP与MySQL:实现数据库查询结果分页显示详解

    本文将详细介绍如何使用php和mysql实现数据库查询结果的分页显示功能。通过计算总记录数、确定每页显示数量以及动态生成sql `limit` 子句,我们将构建一个完整的后端逻辑,并结合html/css创建交互式分页导航。本教程涵盖从数据查询到页面渲染的全过程,旨在帮助开发者高效管理大量数据展示。 …

    2025年12月13日
    000
  • 解决“尝试获取非对象属性”错误:对象传递给类时的常见问题

    本文旨在帮助开发者解决在将对象传递给类时遇到的“Trying to get property of non-object”错误。通过分析常见原因,并提供示例代码,帮助你理解并避免此类问题,确保代码的稳定性和可靠性。 在开发过程中,经常需要将数据库查询结果或其他对象传递给类进行处理。然而,有时会遇到“…

    2025年12月12日
    000
  • PHP/Laravel中“尝试获取非对象属性”错误的深度解析与解决方案

    本教程深入探讨php和laravel开发中常见的“trying to get property ‘x’ of non-object”错误。文章将分析该错误发生的根本原因,包括变量为空、非对象类型以及构造函数中属性初始化不当等问题。通过实际代码示例,我们将学习如何有效调试、验证…

    2025年12月12日
    000

发表回复

登录后才能评论
关注微信