来自句子转换器:转换器和池化组件

news2024/11/17 9:49:48

一、说明

         转换器和池化组件,它们来自 Bert 在 SentenceTransformer 对象中预先训练的模型。

        在我之前的文章中,我用拥抱面转换器介绍了预训练模型来计算句子之间的余弦相似性分数。在这篇文章中,我们将深入研究变压器模型的参数。句子转换器对象允许我们加载预先训练的模型,我们可以观察模型参数,例如最大序列长度和池化方法。但是这些参数意味着什么,我们如何修改它们以满足我们的需求?这篇文章解决了这些问题,并提供了对这些参数的更深入理解。

        使用转换器模型,可以使用相同的内核架构,而无需重新训练内核。预先训练的转换器模型是使用大量训练数据开发的,通常会由Google或OpenAI等组织产生大量成本。我们很幸运,这些模型随后免费供公众使用。在这些预训练模型中最受欢迎的是由Google AI开发的BERT(来自变压器的双向编码器表示)。在本文中,我使用“bert-base-uncased”模型。让我们加载模型:

from sentence_transformers import SentenceTransformer, util

model = SentenceTransformer("bert-base-uncased")
model

"""output:
SentenceTransformer(
  (0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: BertModel 
  (1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False})
) """

        我们在这里可以看到的输出是包含转换器池化组件的对象:SentenceTransformer

  •  Transformer 中,我们可以看到最大序列长度为 512 个标记,小写参数为 false。变压器模型是BertModel。
  • 在将一系列嵌入转换为句子嵌入的过程的池化操作中,池化操作使用平均池化方法创建 768 维句子嵌入。

        现在,我将深入解释变压器和池化的这些参数,以及如何修改它们以满足我们的目标。

二、最大序列长度

        对于 BERT 预训练模型,最大序列长度参数为 512 个令牌作为默认值。BERT模型通常限制为512个代币。变压器模型,如BERT,RoBERTa,DistilBERT等,具有运行时和内存要求,该要求随着输入的长度呈指数级增长。这限制了变压器的使用限于有限长度的输入。BERT和类似模型的典型值是512个单词,相当于大约300-400个英语单词。比这更长的文本被缩短为第一个 x 字片段。

        您可以使用以下代码更改最大序列长度:

from sentence_transformers import SentenceTransformer, util

model = SentenceTransformer("bert-base-uncased")
model

"""output:
SentenceTransformer(
  (0): Transformer({'max_seq_length': 512, 'do_lower_case': False}) with Transformer model: BertModel 
  (1): Pooling({'word_embedding_dimension': 768, 'pooling_mode_cls_token': False, 'pooling_mode_mean_tokens': True, 'pooling_mode_max_tokens': False, 'pooling_mode_mean_sqrt_len_tokens': False})
) """

三、做小写转化

        通过将do_lower_case设置为 true 或 false,可以将 BERT 模型的预训练作为“无大小写”或“大小写”版本完成。我使用了模型“bert-base-uncased”,它不做小写的单词。

        “不大小写”版本表示文本在标记化之前已转换为小写,例如,“Gulsum Bu”变为“gulsum bu”。另一方面,“大小写”表示保留原始大小写和重音符号,例如“Gulsum Bu”。

        设置为 表示输入文本在标记化之前将转换为小写,例如,“Gulsum Bu”将变为“gulsum bu”。设置为 to 表示在标记化过程中将保留输入文本的原始大小写,例如“Gulsum Bu”。do_lower_caseTruedo_lower_caseFalse

四、词嵌入维度:“word_embedding_dimension”

        NLP 中的单词嵌入是数字格式的单词表示。令牌嵌入层将单词转换为固定维向量表示。在BERT的情况下,每个单词都表示为768维向量。

        例如,我们有一个 8 个代币示例。令牌嵌入层会将每个字段标记转换为 768 维矢量表示。如果我们包含批处理轴,这会导致我们的 6 个输入标记被转换为形状的矩阵 (8, 768) 或形状的张量 (1, 8, 768)。

五、池化方法

  • CLS 池化

它被使用得很常见。此方法涉及在每个句子的开头添加一个特殊的 <CLS> 标记。此特殊令牌的目的是在句子级别捕获信息。因此,池化层只需选择 CLS 令牌嵌入作为句子嵌入即可聚合。

  • 平均池化

这是一种简单的池化方法。均值池涉及平均BERT产生的所有上下文化词嵌入。

  • 最大池化

最大池化利用令牌嵌入随时间推移的最大值。它涉及在每个时间步长获取令牌嵌入的最大值以生成句子嵌入。

  • 均方池

它涉及平均BERT产生的所有上下文化单词嵌入的平方。

例如,我们有“伯特基无壳”模型。在该模型中,我们将平均池化方法作为默认值。我们可以更改所有变压器模型的池化方法。我给出了两种方法来更改池化类型。

#First way to change pooling method. Mean pooling to CLS pooling
from sentence_transformers import SentenceTransformer, models
model = SentenceTransformer('bert-base-uncased')
model = models.Pooling(model[0].get_word_embedding_dimension(),
                                  pooling_mode_mean_tokens=False,
                                  pooling_mode_cls_token=True,
                                  pooling_mode_max_tokens=False)

#Second way to change pooling method. Mean pooling to CLS pooling  
model1 = SentenceTransformer('bert-base-uncased')
model1[1].pooling_mode_mean_tokens = False
model1[1].pooling_mode_cls_token = True

        总之,本文介绍了变压器模型的参数,特别关注最大序列长度、小写参数和池化方法。通过提供全面的解释和一些基本代码示例,它旨在让读者更好地了解如何操作他们的转换器模型。这些参数对于自定义模型以最好地满足特定任务或应用程序的需求至关重要。有了从本文获得的知识,读者应该能够修改模型,以便在他们自己的NLP项目中取得更好的结果。

        请随时在下面留下任何问题或建议。
 

参考资料和引用

Computing Sentence Embeddings — Sentence-Transformers documentation。

居尔苏姆·布达科奥卢

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/890175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unity 编辑器资源导入处理函数 OnPreprocessTexture:深入解析与实用案例

Unity 编辑器资源导入处理函数 OnPreprocessTexture 用法 点击封面跳转下载页面 简介 在Unity中&#xff0c;我们可以使用编辑器资源导入处理函数&#xff08;OnPreprocessTexture&#xff09;来自定义处理纹理资源的导入过程。这个函数是继承自AssetPostprocessor类的&#x…

.NET Core6.0使用NPOI导入导出Excel

一、使用NPOI导出Excel //引入NPOI包 HTML <input type"button" class"layui-btn layui-btn-blue2 layui-btn-sm" id"ExportExcel" onclick"ExportExcel()" value"导出" />JS //导出Excelfunction ExportExcel() {…

微信小程序OCR插件,实现身份证、行驶证、银行卡、营业执照和驾驶证等识别

随着科技的不断发展&#xff0c;图片识别技术已经成为了当下移动互联网中的热点话题。而基于微信小程序和 OCR 插件的图文识别方案&#xff0c;更是成为了越来越多小程序开发者关注和研究的问题。本文中&#xff0c;我将为大家介绍微信小程序 OCR 插件&#xff0c;帮助大家实现…

并发编程系列-分而治之思想Forkjoin

我们介绍过一些有关并发编程的工具和概念&#xff0c;包括线程池、Future、CompletableFuture和CompletionService。如果仔细观察&#xff0c;你会发现这些工具实际上是帮助我们从任务的角度来解决并发问题的&#xff0c;而不是让我们陷入线程之间如何协作的繁琐细节&#xff0…

Linux学习之基本指令一

在学习Linux下的基本指令之前首先大家要知道Linux下一切皆目录&#xff0c;我们的操作基本上也都是对目录的操作&#xff0c;这里我们可以联想我们是如何在windows上是如何操作的&#xff0c;只是形式上不同&#xff0c;类比学习更容易理解。 目录 01.ls指令 02. pwd命令 0…

Android Ble蓝牙App(六)请求MTU与显示设备信息

前言 在上一篇文章中已经了解了数据操作的方式&#xff0c;而数据交互的字节长度取决于我们手机与蓝牙设备的最大支持长度。 目录 Ble蓝牙App&#xff08;一&#xff09;扫描Ble蓝牙App&#xff08;二&#xff09;连接与发现服务Ble蓝牙App&#xff08;三&#xff09;特性和属…

财报解读:多元化布局,亲亲食品欲摘“果冻之王”头衔?

提及亲亲食品&#xff0c;大多数消费者的印象是其果冻、虾条等产品&#xff0c;而随着消费升级、休闲零食行业竞争的加剧&#xff0c;亲亲食品近年来也想“多条腿走路”&#xff0c;持续进行着产品创新。 不过&#xff0c;在市场看来&#xff0c;承载其转型愿景的新品并未带来…

ORB-SLAM2学习笔记8之特征点提取、生成描述子的ORBextractor

文章目录 0 引言1 特征点提取1.1 提取流程1.2 ORBextractor.cc1.2.1 成员函数1.2.2 成员变量 1.3 构建图像金字塔1.3.1 为什么要构建图像金字塔1.3.2 金字塔参数设置 1.4 提取ORB特征点1.4.1 Fast角点检测1.4.2 特征点提取流程1.4.3 八叉树筛选及非极大值抑制 2 描述子生成2.1 …

【数据集】GRNWRZ V2.0(全球河流网络和相应的水资源分区)介绍及下载

数据介绍 论文&#xff1a;J2022-A data set of global river networks and corresponding water resources zones divisions v2 论文下载地址 GRNWRZV1.0由严登华教授&#xff08;中国水利水电科学研究院&#xff09;团队开发&#xff0c;以全球90mDEM数据为基础&#xff0c;结…

SpringBoot-Mybatis 入门(数据库增删改查)

创建SpringBoot-Mybatis项目 创建新项目&#xff0c;注意Type要选择Maven Spring Boot的版本没啥硬性要求&#xff0c;一般开开发环境 依赖必选MySQL Driver、MyBatis Framework&#xff1b; 选Spring Web是为了辅助未来的web开发&#xff1b; Lombok是个人开发习惯。 配置 …

【C++精华铺】8.C++模板初阶

目录 1. 泛型编程 2. 函数模板 2.1 函数模板的概念及格式 2.2 函数模板的原理 2.3 模板的实例化 2.4 模板参数的匹配原则 3. 类模板 3.1 类模板格式 3.2 类模板的实例化 1. 泛型编程 什么是泛型编程&#xff1f;泛型编程是避免使用某种具体类型而去使用某种通用类型来进行…

FT2000+低温情况下RTC守时问题

1、背景介绍 飞腾2000芯片通过I2C连接一块RTC时钟芯片&#xff08;BellingBL5372&#xff09;来实现麒麟信安系统下后的守时功能。目前BIOS支持UEFI功能&#xff0c;BIOS上电后能获取RTC时间&#xff0c;并将时间写入相应的UEFI变量或内存区域&#xff0c;操作系统上电后使用U…

大模型基础02:GPT家族与提示学习

大模型基础&#xff1a;GPT 家族与提示学习 从 GPT-1 到 GPT-3.5 GPT(Generative Pre-trained Transformer)是 Google 于2018年提出的一种基于 Transformer 的预训练语言模型。它标志着自然语言处理领域从 RNN 时代进入 Transformer 时代。GPT 的发展历史和技术特点如下: GP…

产业园区数字孪生3d可视化全景展示方案

随着数字经济的发展&#xff0c;数字技术给企业发展带来了机遇的同时&#xff0c;也为企业管理带来挑战。比如园区运维&#xff0c;不仅体量大&#xff0c;复杂的运维管理系统&#xff0c;落地难度也较高。那么如何通过数字化手段重塑园区运营&#xff0c;打通园区各业务数据孤…

LimeReport设置当前打印时间

拉一个文本控件&#xff0c;然后填入下面信息&#xff1a; $S{ var curDate new Date(); var strYear curDate.getFullYear().toString(); var strMonth (curDate.getMonth() 1).toString(); var strDay curDate.getDate().toString(); var strHour curDate.getHours().…

句子变形金刚:变相的含义

一、说明 变形金刚完全重建了自然语言处理&#xff08;NLP&#xff09;的格局。在变形金刚出现之前&#xff0c;由于循环神经网络&#xff08;RNN&#xff09;&#xff0c;我们的翻译和语言分类很好——它们的语言理解能力有限&#xff0c;导致许多小错误&#xff0c;而且在大块…

mybatis-x插件的使用

mybatis-x能够帮助我们快速通过数据库生成实体类&#xff0c;mapper层&#xff0c;service层等 下面就带大家如何使用 首先我们去idea里面下载mybatis-x&#xff0c;如下图 我们还需要使用idea连接mysql数据库。效果如下图 接下来我们右键选中表&#xff0c;再选择第一项这个mm…

Panorama SCADA软件在无人值守水泵房的应用

应用背景 城市自来水公司、工矿企业的水泵房普遍数量较多&#xff0c;分布也较分散&#xff0c;在管理上通常会存在需要不定时开关泵、水泵故障不能及时发现、操作人员需24小时轮班值守、人员管理成本高等问题。 虹科Panorama是一个用于构建数据采集、SCADA 和历史解决方案的软…

华为云零代码新手教学-体验通过Astro Zero快速搭建微信小程序

您将会学到 您将学会如何基于Astro零代码能力&#xff0c;DIY开发&#xff0c;完成问卷、投票、信息收集、流程处理等工作&#xff0c;还能够在线筛选、分析数据。实现一站式快速开发个性化应用&#xff0c;体验轻松拖拽开发的乐趣。 您需要什么 环境准备 注册华为云账号、实…

【socket编程简述】TCP UDP 通信总结、TCP连接的三次握手、TCP断开的四次挥手

Socket&#xff1a;Socket被称做 套接字&#xff0c;是网络通信中的一种约定。 Socket编程的应用无处不在&#xff0c;我们平时用的QQ、微信、浏览器等程序.都与Socket编程有关。 三次握手 四次断开 面试可…