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.rhkb.cn/news/343027.html

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

相关文章

基于fabric封装一个简单的图片编辑器(vue 篇)

介绍 前言vue demo版本react 版本 前言 对 fabric.js 进行二次封装,实现图片编辑器的核心功能。核心代码 不依赖 ui响应式框架vue ,react 都适用。 只写了核心编辑相关代码便于大家后续白嫖二次开发 核心代码我就没有打包发布 会 和 业务代码一起放到项目中。 vu…

鸿蒙轻内核M核源码分析系列九 互斥锁Mutex

多任务环境下会存在多个任务访问同一公共资源的场景,而有些公共资源是非共享的临界资源,只能被独占使用。鸿蒙轻内核使用互斥锁来避免这种冲突,互斥锁是一种特殊的二值性信号量,用于实现对临界资源的独占式处理。另外,…

博客系统测试报告

博客系统 测试报告 一、项目背景 一个Web网站程序,你可以观看到其他用户博客也可以登录自己的账号发布博客,通过使用Selenium定位web元素、操作测试对象等方法来对个人博客系统的进行测试,测试的核心内容有用户登录、博客列表及博客数量的展…

pypi 发布自己的包

注册pypi个人用户 网址:https://pypi.org 目录结构dingtalk_utils 必须-pkgs- __init__.py .gitignore LICENSE 必须 README.md 必须 requirements.txt setup.py 必须安装依赖 pip install setuptools wheel安装上传工具 pip install twinesetup.py i…

基于ChatGLM3的本地问答机器人部署流程

基于ChatGLM3的本地问答机器人部署流程 前言一、确定文件结构1.新建文件夹储存本地模型2.下载源码和模型 二、Anaconda环境搭建1.创建anaconda环境2.安装相关库3.设置本地模型路径4.启动 三、构建本地知识库1.下载并安装postgresql2.安装c库3.配置向量插件 四、线上运行五、 全…

【全开源】JAVA打车小程序APP打车顺风车滴滴车跑腿源码微信小程序打车源码

:构建便捷出行新体验 一、引言:探索打车系统小程序源码的重要性 在数字化快速发展的今天,打车系统小程序已成为我们日常生活中不可或缺的一部分。它以其便捷、高效的特点,极大地改变了我们的出行方式。而背后的关键,…

从零开始学JAVA

一、编写Hello world程序 public class JavaMain1 {//主程序执行入口,main方法public static void main(String[] args){System.out.println("Hello world!");} } 运行结果 Hello world! java编写主程序常见错误: 1、System ---首字母没有…

外汇天眼:金融服务补偿计划(FSCS)确认已任命清算人为TenetConnect Services有限公司

2024年6月5日,Tenet Group有限公司的董事们任命了Interpath有限公司的Ed Boyle、Howard Smith和Rob Spence为联合清算人。Ed Boyle和Rob Spence也被任命为其子公司Tenet有限公司、TenetConnect有限公司和TenetConnect Services有限公司的联合清算人。Tenet Mortgage…

应对800G以太网挑战:数据中心迁移

在过去几年中,云基础设施和服务的大规模使用推动了对更多带宽、更快速度和更低延迟性能的需求。交换机和服务器技术的改进要求布线和架构随之调整。因此,800G以太网对数据中心迁移的需求,特别是对速率(包括带宽、光纤密度和通道速…

突破性技术: 大语言模型LLM量化激活outliers异常值抑制

LLM过去有两种突破性技术大大提升了量化精度,分别是group-wise量化和GPTQ/AWQ量化。前者相比于过去的per-tensor和per-channel/per-axis量化提出了更细粒度的对channel拆分为更小单元的量化方式,后者通过巧妙的算法明显提升了4bit量化的精度。 LLM量化存…

接口的应用、 适配器设计模式

接口的应用 适配器设计模式 Inter package com.itheima.a09;public interface Inter {public abstract void show1();public abstract void show2();public abstract void show3();public abstract void show4();}InterAdapter package com.itheima.a09; //抽象 public abs…

二说springboot3的自动配置机制

大家好,这里是教授.F 目录 SpringBootApplication: EableAutoConfiguration: 上一篇文章粗略的讲了自动配置机制,二说系列将从源码的角度进行讲解。 SpringBootApplication: 首先我们还是得从SpringBootApplication…

2 - 寻找用户推荐人(高频 SQL 50 题基础版)

2.寻找用户推荐人 考点: sql里面的不等于,不包含null -- null 用数字判断筛选不出来 select name from Customer where referee_id !2 OR referee_id IS NULL;

Cesium401 (Unauthorized)https://api.cesium.com/v1/assets/2/endpoint未授权问题

目录 前言1.原因分析2.解决问题1.禁用默认的imageryProvider2.禁用图层切换3.移除所有默认图层4.使用自己的地形(可选) 3.最终解决方案4.总结 前言 在初始化Cesium的Viewer以后,Viewer会自动去访问Cesium官网的资源,如果访问不到官网的资源,就…

Prometheus + Grafana + Alertmanager 系统监控

PrometheusGrafana 系统监控 1. 简介1.1 Prometheus 普罗 米修斯1.2 Grafana 2. 快速试用2.1 Prometheus 普罗 米修斯2.2 Prometheus 配置文件2.3 Grafana 2. 使用 Docker-Compose脚本部署监控服务3. Grafana 配置3.1 配置数据源 Prometheus3.2 使用模板ID 配置监控模板3.3 使用…

2024/6/7 英语每日一段

A recent review study examining a decade of research on technology and sleep found the link is more nuanced than previously thought. “It’s an interaction between a person’s vulnerabilities--and not everyone has these vulnerabilities--and the type of act…

基于python flask的旅游景点评论数据可视化大屏实现,包括数据采集

背景 在旅游行业中,了解游客对旅游景点的评论和评价对于景点管理和市场营销至关重要。通过采集旅游景点评论数据并进行可视化分析,可以帮助景点管理者更好地了解游客对景点的看法和体验,发现优劣势,优化服务和提升用户满意度。基…

天诚公租房、人才公寓NB-IOT人脸物联网智能门锁解决方案

近期,全国已有超70城推出商品房“以旧换新”。各地商品房“以旧换新”主要采取国企收购、市场联动、税费补贴三种模式,二手房和新房市场交易活跃度均有提升。 一、人才公寓掀起建设浪潮 事实上,旧房被收购后将被纳入保障性租赁住房&#xf…

【递归、搜索与回溯】搜索

搜索 1.计算布尔二叉树的值2.求根节点到叶节点数字之和3. 二叉树剪枝4.验证二叉搜索树5.二叉搜索树中第K小的元素6.二叉树的所有路径 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一…

软件管理及部分命令

sed命令 格式: sed [选项] 操作 目标文件 选项: -i:修改原始文件【如果不加-i,那就是仅仅修改内存中的文件副本】 案例:将1.txt中的tom修改成jerry。 sed -i "s/tom/jerry/g" 1.txt 将1…