BERT应用——文本间关联性分析

  本文结合了自然语言处理(NLP)和深度学习技术,旨在分析一段指定的任务文本中的动词,并进一步探讨这个动词与一系列属性之间的关联性。具体技术路径包括文本的词性标注、语义编码和模型推断。
在这里插入图片描述

一、技术思路

  1. NLP和词性标注

  在自然语言处理中,理解文本通常开始于基础的语法分析,包括词性标注(POS Tagging)。这一过程涉及识别文本中每个单词的语法类别,如名词、动词等。在本代码中,使用了spaCy这一开源NLP库,它包含预训练的语言模型来执行包括词性标注在内的多种语言分析任务。通过识别任务文本中的主动词,我们可以抓住句子的行动指令,这对于理解任务的本质至关重要。

  1. 深度学习模型BERT

  代码中采用的BERT模型是一种预训练的变换器模型,具有处理各种语言理解任务的能力。BERT模型的核心优势在于其双向编码器表示,能够理解单词在上下文中的复杂关系。通过对BERT模型的进一步训练或微调,它可以适应特定的文本分类任务,如判断文本属性是否与特定动词相关。

  1. 语义编码和模型推断

  文本编码是将文本转换为模型能够处理的格式的过程,通常涉及分词和数字化表示。在BERT中,使用特定的分词器将文本转换为一系列的token,然后将这些token转换为索引,这些索引对应于BERT模型训练时使用的词汇表。这种编码后的数值形式允许模型处理并理解原始文本。

  在属性的相关性判断上,代码首先将每个属性独立地进行编码,然后通过BERT模型进行推断,输出每个属性与动词的相关性得分。通过设定阈值,可以决定哪些属性与动词具有高度相关性。这一步骤是基于模型学习到的语言特征,判断不同属性对于完成任务的相关性和重要性。

二、代码实现

from transformers import BertTokenizer, BertForSequenceClassification
import torch
import spacy# 加载spaCy的英语语言模型
nlp = spacy.load("en_core_web_sm")# 加载预训练的bert-base-uncased模型和分词器
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")
model = BertForSequenceClassification.from_pretrained("bert-base-uncased")# 任务文本
task_text = "Please take the cup for me"
# 已知的物品属性
attribute_text = "graspable, containable, red, cylinder shape"# 处理任务文本
doc = nlp(task_text)# 提取最关键的动词
main_verb = None
for token in doc:if "VB" in token.tag_:main_verb = token.textbreak# 打印最关键的动词
if main_verb:print(f"The main verb is: {main_verb}")
else:print("No main verb found in the sentence.")# 分词并编码任务文本
task_tokens = tokenizer.encode(main_verb, add_special_tokens=True, max_length=32, truncation=True,padding='max_length')
print('task_tokens: ', task_tokens)
task_input_ids = torch.tensor(task_tokens).unsqueeze(0)  # 添加批次维度
print('task_input_ids: ', task_input_ids)# 分词并编码每个属性
attributes = attribute_text.split(", ")
is_related = []# 阈值用于判断属性是否与任务相关
threshold = 0.5# 遍历每个属性并判断相关性
for attribute in attributes:attribute_tokens = tokenizer.encode(attribute, add_special_tokens=True, max_length=32, truncation=True,padding='max_length')attribute_input_ids = torch.tensor(attribute_tokens).unsqueeze(0)# 推理with torch.no_grad():attribute_output = model(input_ids=attribute_input_ids)print('attribute_output: ', attribute_output)# 获取模型的分类分数attribute_scores = attribute_output.logitsprint(attribute_scores)# 检查标签为1的类别(相关性)print(attribute_scores[0][1])is_related_attribute = attribute_scores[0][1] > thresholdis_related.append((attribute, is_related_attribute))print(is_related)
# 打印结果
for attribute, related in is_related:if related:print(f"任务文本与属性 '{attribute}' 相关")else:print(f"任务文本与属性 '{attribute}' 不相关")

输出结果

The main verb is:take
task_tokens:[101, 2202, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
task_input_ids:tensor([[ 101, 2202, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]])
attribute_output:SequenceClassifierOutput(loss=None, logits=tensor([[ 0.2044, -0.1437]]), hidden_states=None, attentions=None)
tensor([[ 0.2044, -0.1437]])
tensor(-0.1437)
attribute_output:SequenceClassifierOutput(loss=None, logits=tensor([[ 0.2036, -0.1523]]), hidden_states=None, attentions=None)
tensor([[ 0.2036, -0.1523]])
tensor(-0.1523)
attribute_output:SequenceClassifierOutput(loss=None, logits=tensor([[ 0.2480, -0.1076]]), hidden_states=None, attentions=None)
tensor([[ 0.2480, -0.1076]])
tensor(-0.1076)
attribute_output:SequenceClassifierOutput(loss=None, logits=tensor([[ 0.2650, -0.1961]]), hidden_states=None, attentions=None)
tensor([[ 0.2650, -0.1961]])
tensor(-0.1961)
[(‘graspable’, tensor(False)), (‘containable’, tensor(False)), (‘red’, tensor(False)), (‘cylinder shape’, tensor(False))]
任务文本与属性 ‘graspable’ 不相关
任务文本与属性 ‘containable’ 不相关
任务文本与属性 ‘red’ 不相关
任务文本与属性 ‘cylinder shape’ 不相关

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

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

相关文章

独著出书的出版流程是怎样的?

独著出书的出版流程一般包括以下几个步骤: 1. 准备书稿:确保书稿内容完整、准确,并符合出版社的要求。 2. 选择出版社:根据书稿的主题和内容,选择合适的出版社。可以考虑出版社的专业性、声誉和出版范围等因素。 3.…

MySQL Shell 使用指南

前言: MySQL Shell 是官方提供的 MySQL 周边适配组件,是新一代的高级客户端,在 MySQL 8.0 及其以后的版本得以慢慢推广应用。之前笔者因为 MySQL 8.0 用得比较少,一直没有详细使用过这个工具,近期在捣鼓 MySQL 8.0&am…

如何去掉IDEA中烦人的警告波浪线

有时候想去掉idea中那些黄色的红色的warning波浪线,这些不是错误,并不影响执行,一直显示显得让人很烦躁,去"Editor" -> "Inspections"中一个个设置很麻烦。 可以通过设置代码检测级别来降低代码检查的严格…

ChatGPT Prompt技术全攻略-入门篇:AI提示工程基础

系列篇章💥 No.文章1ChatGPT Prompt技术全攻略-入门篇:AI提示工程基础2ChatGPT Prompt技术全攻略-进阶篇:深入Prompt工程技术3ChatGPT Prompt技术全攻略-高级篇:掌握高级Prompt工程技术4ChatGPT Prompt技术全攻略-应用篇&#xf…

文献解读-肿瘤测序-第六期|《基于CRISPR/Cas9技术的肿瘤突变负荷测量新参考物质的开发》

关键词:肿瘤测序;基因组变异检测; 文献简介 标题(英文):Development of a Novel Reference Material for Tumor Mutational Burden Measurement Based on CRISPR/Cas9 Technolog标题(中文&…

【协同感知】Collaborative Perception in Autonomous Driving数据集与论文整理

Collaborative Perception in Autonomous Driving 目前最全的Collaborative Perception整理数据集协同感知论文-【三维目标检测】现实世界下的协同感知理想条件下的协同感知 目前最全的Collaborative Perception整理 https://github.com/Little-Podi/Collaborative_Perception…

【探索全球精彩瞬间,尽享海外短剧魅力!海外短剧系统,您的专属观影平台】

🌟 海外短剧系统,带您走进一个全新的视界,让您随时随地欣赏到来自世界各地的精选短剧。在这里,您可以感受到不同文化的碰撞,品味到各种题材的精髓,让您的生活更加丰富多彩! 🎬 精选…

【Python】【Pyinstaller】打包过程问题记录及解决

一、写在前面 将python脚本打包成.exe可执行文件,使用windows电脑运行。 所需库:pyinstaller 官网链接 命令格式: pyinstaller -F -w (需要打包的文件,文件名之间用空格分隔)二、打包步骤(见图片&#x…

自费出书一般需要多少钱?

自费出书的费用因多种因素而异,包括书号费、审稿费、排版费、封面设计费、纸张及印刷费、仓储物流费等。 以下是一些常见的费用项目和大致价格范围: - 书号费:书号是出版社的特有资源,书号费用在2023年又进一步上涨。目前&#…

Windows文件管理器导航窗口怎么删除第三方生成的无效导航【笔记】

Windows文件管理器导航窗口怎么删除第三方生成的无效导航【笔记】 导航窗口对应项目没有右击删除选项。 提示: 位置不可用 C:\Users\superman…不可用,如果该位置位于这台电脑上,请确保设备或驱动器连接,或者光盘已插入&#xf…

【恶补计算机基础】定点数和浮点数

在计算机中,小数点及其位置并不是显式表示出来的,而是隐含规定的。根据小数点的位置,可以分为两类:定点数和浮点数。 1 定点数 小数点的位置是固定不变的。根据小数点的具体位置,又可以分为两类:定点小数…

Linux-vi编辑器命令使用

一、初始-vi 1、 vi-打开文件并且定位行 有可能会遇到打开一个文件,并定位到指定行的情况 例如,知道某一行代码有错误,可以快速定位到出错代码的位置 可以使用以下命令打开文件$ vi 文件名 行数 提示:如果只带上 而不指定行号&…

Python邮件群发有哪些步骤?如何批量发送?

Python邮件群发的注意事项?怎么使用Python群发邮件? 使用Python进行邮件群发,不仅可以自动化流程,还可以节省大量的时间和精力。AokSend将详细介绍使用Python进行邮件群发的步骤,并在过程中提供实用的建议和注意事项。…

windows下使用命令清空U盘

1、CMD命令打开后输入diskpart命令打开磁盘分区管理工具 diskpart打开如下窗口 Microsoft DiskPart 版本 10.0.19041.3636 Copyright (C) Microsoft Corporation. 在计算机上: DESKTOP-TR9HQRP 2、输入查看所有磁盘命令 list disk打印如下windows 磁盘 ###  状态    …

机械臂码垛机:解读其高效作业与灵活性

在当今高度自动化的工业时代,机械臂码垛机以其高效作业和灵活性,成为了生产线上的得力助手。这款设备不仅大幅提升了生产效率,还显著降低了人工操作的强度和风险,为现代工业发展注入了强大的动力。 机械臂码垛机的高效作业能力令人…

【机器学习】必会降维算法之:奇异值分解(SVD)

奇异值分解(SVD) 1、引言2、奇异值分解(SVD)2.1 定义2.2 应用场景2.3 核心原理2.4 算法公式2.5 代码示例 3、总结 1、引言 一转眼, 小屌丝:鱼哥,就要到每年最开心的节日了:六一儿童…

搭建Vulnhub靶机网络问题(获取不到IP)

搭建好靶场后,在攻击机运行arp-scan -l无法发现靶机IP。 这时候去看下靶机网络有没有问题。 重新启动客户机,一直按e进入安全模式(要是直接开机了就先按shift进入grub界面,再按e)找到ro,将ro改为rw signie…

XM平台的交易模式模式是什么?

外汇交易平台的盈利模式主要分为两种:有交易员平台和无交易员平台。 有交易员平台,也称为做市商平台,为客户提供交易市场,并在需要时与客户持相反方向的交易,从中赚取利润。交易者看到的买入卖出价可能与实际价格不同&…

python 巡检报告中的邮件处理

00.创作背景,在每天的巡检报告中要 要检查oa相关服务器的备份作业是否备份成功 那个备份软件有个功能,就是完成备份作业后,可以发送信息到我的邮箱。 01.通过检查我邮箱的信息,就可以了解那个备份作业的情况。 通过解释邮件的名称可以了解备…

一分钟学习数据安全—自主管理身份SSI架构

上一篇我们概要介绍了SSI的几个组成部分,包括可验证凭证信任三角、治理框架等,后面的介绍文章我们将分别介绍一下相关的技术。 SSI的堆栈演进到现在,综合整个生态中的关键架构决策,普遍接受的是一个四层模型。 如上图所示&#xf…