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,一经查实,立即删除!

相关文章

Audio音频资源播放

1、<audio>标签播放音频和使用AudioContext播放音频的区别&#xff1f; 以下是详细的比较&#xff1a; 定义与用途&#xff1a; <audio>标签&#xff1a;是HTML5提供的一个元素&#xff0c;用于在网页上嵌入音频内容&#xff0c;如音乐或音频流。它主要用于简单的…

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

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

MySQL Shell 使用指南

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

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

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

WHAT - reflect-metadata

目录 一、介绍1.1 产生背景1.2 目标1.2 主要功能 二、对象的元数据三、场景&#xff1a;依赖注入四、场景&#xff1a;ORM&#xff08;对象关系映射&#xff09; 一、介绍 reflect-metadata 是一个JavaScript库&#xff0c;用于在运行时获取和操作JavaScript对象的元数据。它提…

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

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

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

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

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

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

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

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

HTML 基础操作知识

1.标题标签h1--h6,逐级缩小&#xff0c;双标记&#xff0c;属性&#xff1a;对其属性align 例&#xff1a;<h1 align"center">学雷锋&#xff0c;为人民服务</h1> 2.段落标签&#xff1a;p,双标记&#xff0c;属性:对其属性align …

【游戏】赚钱模拟器2.0版

赚钱模拟器2.0版出了&#xff01; int main(){p.rr(1000,1000,14).hide();//pen.button(id,string,col,size, dir,x,y,bgcol,edgecol);p.moveTo(0,100);p.button(0,"开始游戏",5,50,0,0,-200,1,5);pen.text("作者&#xff1a;小羊",5,50,0,0,-40,1);while…

跨语言系统中的功能通信:Rust、Java、Go和C++的最佳实践

在现代软件开发中&#xff0c;使用多种编程语言构建复杂系统已成为一种常见的做法。每种编程语言都有其独特的优势和适用场景&#xff0c;这使得在同一个系统中使用多种语言变得合理且高效。然而&#xff0c;这也带来了一个重要的挑战&#xff1a;如何在这些不同语言之间实现高…

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

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

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

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

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

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

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

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

Python怎么hook:深入探索Python的Hook机制

Python怎么hook&#xff1a;深入探索Python的Hook机制 在Python编程中&#xff0c;hook&#xff08;钩子&#xff09;是一种强大的机制&#xff0c;它允许我们在不修改原有代码的情况下&#xff0c;对特定事件或函数调用的执行流程进行拦截和修改。然而&#xff0c;Python本身…

嵌入式笔试面试刷题(day17)

文章目录 前言一、单片机中断处理的流程是什么&#xff1f;二、进程间通信中使用锁和同步的目的是什么&#xff1f;三、define和const在内存占用上的差异是什么&#xff1f;#defineconst比较例子对比 四、波特率是什么&#xff0c;为什么双方波特率要相同&#xff0c;高低波特率…

上海市计算机学会竞赛平台2024年1月月赛丙组最大的和

题目描述 给定两个序列 &#x1d44e;1,&#x1d44e;2,…,&#x1d44e;&#x1d45b;a1​,a2​,…,an​ 与 &#x1d44f;1,&#x1d44f;2,…,&#x1d44f;&#x1d45b;b1​,b2​,…,bn​&#xff0c;请从这两个序列中分别各找一个数&#xff0c;要求这两个数的差不超过给…

JSP 中使用 (c 标签) c:if 标签进行 if/条件 判断

前言 JSTL全名为JavaServer Pages Standard Tag Library。JSTL是由JCP(Java Community Process)所制定的标准规范&#xff0c;它主要提供给Java Web开发人员一个标准通用的标签函数库。 想了解更多参考这里。 <c:if> 标签 <c:if> 标签是JSTL标签核心标签之一 …