基于令牌级 BERT 嵌入的趋势生成句子级嵌入

一、说明

        句子(短语或段落)级别嵌入通常用作许多 NLP 分类问题的输入,例如,在垃圾邮件检测和问答 (QA) 系统中。在我上一篇文章发现不同级别的BERT嵌入的趋势中,我讨论了如何生成一个向量表示,该表示包含有关上下文嵌入值相对于同一令牌的静态嵌入的变化的信息,然后您可以将其用作生成句子级嵌入的组件。本文扩展了此主题,探讨了您需要从句子中的哪些标记中派生此类趋势向量,以便能够为整个句子生成有效的嵌入。

二、直觉

        与此相关的第一个问题是:您需要从句子中的多少个标记中派生嵌入才能为整个句子生成有效的嵌入?如果你还记得上一篇文章中的讨论,我们得到了一个向量——派生为句子中最重要的单词——其中包括有关整个句子上下文的信息。但是,为了更好地了解句子上下文,最好为与该最重要的单词在语法上最相关的单词提供这样的向量。我们为什么需要这个?

        生活中一个简单的类比可以帮助回答这个问题:如果你坐在塔内的餐厅里欣赏周围的美景,你考虑的景色将不包括塔本身。要拍摄塔楼景观的照片,您首先需要离开塔楼。

        好的,我们如何确定与句子中最重要的单词在语法上最相关的单词?(也就是说,您需要根据前面的类比决定拍摄塔的最佳位置)答案是:借助注意力权重,您也可以从BERT模型获得。

三、实现

        在遵循本文其余部分讨论的代码之前,您需要参考上一篇文章中提供的示例(我们将使用该示例中定义的模型和派生向量表示)。您需要做的唯一更正如下: 创建模型时,请确保使模型不仅返回隐藏状态,还返回注意力权重:

model = BertModel.from_pretrained(‘bert-base-uncased’,output_hidden_states = True, # so that the model returns all hidden-states.output_attentions = True) 

        其他所有内容,包括例句,都可以不加修改地使用。实际上,我们只使用第一个例句:“我想要一个苹果。

        下面我们将确定语法上最接近最重要单词的单词(在这个特定示例中为 Want)。为此,我们检查所有 12 层中的注意力权重。首先,我们创建一个空数组(我们不计算特殊符号,不包括第一个和最后一个符号):

a = np.empty([0, len(np.sum(outputs[0].attentions[0][0][11].numpy(), axis=0)[1:-1])])

接下来,我们填写注意力权重矩阵:

for i in range(12):a = np.vstack([a,np.sum(outputs[0].attentions[0][0][i].numpy(), axis=0)[1:-1]])

我们对标点符号不感兴趣。因此,我们将删除矩阵中的最后一列:

a = np.delete(a, -1, axis=1)

所以我们的矩阵现在看起来如下(12x4,即 12 层和 4 个单词)

print(a)
[[0.99275106 1.00205731 0.76726311 0.72082734][0.7479955 1.16846883 0.63782167 1.39036024][1.23037624 0.40373796 0.57493907 0.25739866][1.319888 1.21090519 1.37013197 0.7479018 ][0.48407069 1.15729702 0.54152751 0.57587731][0.47308242 0.61861634 0.46330488 0.47692096][1.23776317 1.2546916 0.92190945 1.2607218 ][1.19664812 0.51989007 0.48901123 0.65525496][0.5389185 0.98384732 0.8789593 0.98946768][0.75819892 0.80689037 0.5612824 1.10385513][0.14660755 1.10911655 0.84521955 1.00496972][0.77081972 0.79827666 0.45695013 0.36948431]]

        现在让我们确定 Want 的哪些层(索引为 1 的第二列)最受关注:

print(np.argmax(a,axis=1))
b = a[np.argmax(a,axis=1) == 1]
array([1, 3, 0, 2, 1, 1, 3, 0, 3, 3, 1, 1])

        接下来,我们可以确定在 Want 处于领先地位的层中,哪个令牌在 Want 之后引起更多关注。为此,我们首先删除“想要”列,然后探索其余三个:

c = np.delete(b, 1, axis=1)
d = np.argmax(c, axis =1)
print(d)
counts = np.bincount(d)
print(np.argmax(counts))
[0 2 2 2 0]
2

        上面显示,我们有苹果这个词(在这里删除Want之后,Apple的索引是2)作为与单词Want在语法上最相关的一个。这是意料之中的,因为这些词分别表示直接宾语和及物动词。

_l12_1 = hidden_states[0][12][0][4][:10].numpy()
_l0_1 = hidden_states[0][0][0][4][:10].numpy()
_l0_12_1 = np.log(_l12_1/_l0_1)
_l0_12_1 = np.where(np.isnan(_l0_12_1), 0, _l0_12_1)

        现在让我们比较一下从单词Apple和Want的嵌入派生的向量。

print(_l0_12_1)
array([ 3.753544 , 1.4458075 , -0.56288993, -0.44559467, 0.9137548 ,0.33285233, 0. , 0. , 0. , 0. ],dtype=float32)print(l0_12_1) # this vector has been defined in the previous post
array([ 0. , 0. , 0. , 0. , -0.79848075,0.6715901 , 0.30298436, -1.6455574 , 0.1162319 , 0. ],dtype=float32)

        如您所见,上述两个向量中的一对匹配元素中的一个值在大多数情况下为零,而另一个值为非零 — 即向量看起来互补(记住塔视图类比:从塔上可以看到相邻的景点,但为了看到塔本身——也许是主要景点——你需要离开它)所以, 您可以安全地按元素对这些向量求和,以将可用信息组合到单个向量中。

s = _l0_12_1 + l0_12_1
print(s)
array([ 3.753544 , 1.4458075 , -0.56288993, -0.44559467, 0.11527407,1.0044425 , 0.30298436, -1.6455574 , 0.1162319 , 0. ],dtype=float32)

        上面的向量接下来可以用作句子级分类的输入。

四、结论

        本文提供了从静态嵌入转向上下文嵌入时如何根据令牌级 BERT 嵌入的趋势生成句子级嵌入的直观信息以及代码。然后,可以将此句子级嵌入用作BERT生成的用于句子分类的CLS令牌嵌入的替代方法,这意味着您可以尝试这两种方法,看看哪一个最适合您的特定问题。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

docker安装国产开源数据库tidb 单机版

docker pull pingcap/tidb 创建目录,然后安装tidb mkdir -p /data/tidb/data 创建容器 docker run --name tidb -d -v /data/tidb/data:/tmp/tidb --privilegedtrue -p 4000:4000 -p 10080:10080 pingcap/tidb:latest TiDB 简介 | PingCAP 文档中心

LabVIEW使用图像处理进行交通控制性能分析

LabVIEW使用图像处理进行交通控制性能分析 采用普雷维特、拉普拉斯、索贝尔和任意的空间域方法对存储的图像进行边缘检测,并获取实时图像。然而,对四种不同空间域边缘检测方法的核的性能分析。 以前,空路图像存储在数据库中,道路…

Python 使用Hadoop 3 之HDFS 总结

Hadoop 概述 Hadoop 是一个由Apache 软件基金会开发的分布式基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力进行高速运算和存储。 Hadoop 实现一个分布式文件系统(Hadoop Distributed File Sy…

电脑键盘打不了字按哪个键恢复?最新分享!

“有没有朋友知道电脑键盘为什么会莫名其妙就打不了字?明明用得好好的,突然就打不了字了,真的让人很迷惑!有什么方法可以解决吗?” 电脑键盘为我们的办公提供了很大的方便,我们可以利用键盘输入我们需要的文…

Redis对象和五种常用数据类型

Redisobject 对象 对象分为键对象和值对象 键对象一般是string类型 值对象可以是string,list,set,zset,hash q:redisobj的结构 typedef struct redisObject { //类型 unsigned type:4; //编码 unsigned encoding:4; //指向底层实现…

diffusion model (七) diffusion model是一个zero-shot 分类器

Paper: Your Diffusion Model is Secretly a Zero-Shot Classifier Website: diffusion-classifier.github.io/ 文章目录 相关阅读背景方法大意diffusion model的背景知识如何将diffusion model应用到zero-shot classification如何求解 实验参考文献 相关阅读 diffusion mode…

数学建模之“层次分析法”原理和代码详解

一、层次分析法简介 层次分析法(Analytic Hierarchy Process,AHP)是一种用于多准则决策分析和评估问题的定量方法,常用于数学建模中。它是由数学家托马斯赛蒂(Thomas Saaty)开发的。 层次分析法将复杂的决…

【k8s、云原生】基于metrics-server弹性伸缩

第四阶段 时 间:2023年8月17日 参加人:全班人员 内 容: 基于metrics-server弹性伸缩 目录 一、Kubernetes部署方式 (一)minikube (二)二进制包 (三)Kubeadm 二…

【数据结构】二叉搜索树

🚀 作者简介:一名在后端领域学习,并渴望能够学有所成的追梦人。 🐌 个人主页:蜗牛牛啊 🔥 系列专栏:🛹数据结构、🛴C 📕 学习格言:博观而约取&…

近 2000 台 Citrix NetScaler 服务器遭到破坏

Bleeping Computer 网站披露在某次大规模网络攻击活动中,一名攻击者利用被追踪为 CVE-2023-3519 的高危远程代码执行漏洞,入侵了近 2000 台 Citrix NetScaler 服务器。 研究人员表示在管理员安装漏洞补丁之前已经有 1200 多台服务器被设置了后门&#x…

shell之正则表达式及三剑客grep命令

一、正则表达式概述 什么是正则表达式? 正则表达式是一种描述字符串匹配规则的重要工具 1、正则表达式定义: 正则表达式,又称正规表达式、常规表达式 使用字符串描述、匹配一系列符合某个规则的字符串 正则表达式 普通字符: 大小写字母…

【网络编程系列】网络编程实战

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

什么是CSS预处理器?请列举几个常见的CSS预处理器。

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS预处理器是什么?⭐ 常见的CSS预处理器⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是…

《安富莱嵌入式周报》第320期:键盘敲击声解码, 军工级boot设计,开源CNC运动控制器,C语言设计笔记,开源GPS车辆跟踪器,一键生成RTOS任务链表

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版: https://www.bilibili.com/video/BV1Cr4y1d7Mp/ 《安富莱嵌入式周报》第320期:键盘敲击…

【STM32】FreeRTOS互斥量学习

互斥量(Mutex) 互斥量又称互斥信号量(本质也是一种信号量,不具备传递数据功能),是一种特殊的二值信号量,它和信号量不同的是,它支持互斥量所有权、递归访问以及防止优先级翻转的特性…

iPhone删除的照片能恢复吗?不小心误删了照片怎么找回?

iPhone最近删除清空了照片还能恢复吗?大家都知道,照片对于我们来说是承载着美好回忆的一种形式。它记录着我们的平淡生活,也留住了我们的美好瞬间,具有极其重要的纪念价值。 照片不小心误删是一件非常难受的事,那么iP…

2023最新水果编曲软件FL Studio 21.1.0.3267音频工作站电脑参考配置单及系统配置要求

音乐在人们心中的地位日益增高,近几年音乐选秀的节目更是层出不穷,喜爱音乐,创作音乐的朋友们也是越来越多,音乐的类型有很多,好比古典,流行,摇滚等等。对新手友好程度基本上在首位,…

仪表板展示 | DataEase看中国:2023年中国电影市场分析

背景介绍 随着《消失的她》、《变形金刚:超能勇士崛起》、《蜘蛛侠:纵横宇宙》、《我爱你》等国内外影片的上映,2023年上半年的电影市场也接近尾声。据国家电影专资办初步统计,上半年全国城市院线票房达262亿元,已经超…

2022年06月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;小白鼠再排队 N只小白鼠(1 < N < 100)&#xff0c;每只鼠头上戴着一顶有颜色的帽子。现在称出每只白鼠的重量&#xff0c;要求按照白鼠重量从小到大的顺序输出它们头上帽子的颜色。帽子的颜色用 “red”&#xff0c;“blue”等字符串来表示。不同的小白…

BUUCTF [MRCTF2020]Ezpop解题思路

题目代码 Welcome to index.php <?php //flag is in flag.php //WTF IS THIS? //Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95 //And Crack It! class Modifier {protected $var;publi…