bert_base_chinese入门

news/2024/4/28 8:18:41/文章来源:https://blog.csdn.net/LIjin_1006/article/details/136924371

import torch
from transformers import AutoTokenizer, AutoModelForMaskedLM
model_name="bert-base-chinese"
tokenizer = AutoTokenizer.from_pretrained(model_name)
# 带有语言模型头的模型
model = AutoModelForMaskedLM.from_pretrained(model_name)

input_text='人生该如何起头'
inx_token=tokenizer.encode(input_text)# 索引序列,加了开始索引101和结束索引102
#开始标记[CLS],结束标记[SEP],中间每个索引对应一个token
text_token=tokenizer.convert_ids_to_tokens(inx_token)
with torch.no_grad():
    output=model(torch.tensor([inx_token]))
print(type(output))
last_hidden=output['logits']
print(last_hidden.shape,last_hidden)# (1,9,21128)(batch_size,seq_len,d_model)
print(len(last_hidden[0,0,:]),max(last_hidden[0,0,:]),min(last_hidden[0,0,:]))
from transformers import AutoModel
# 不带语言模型头的模型
no_head_model=AutoModel.from_pretrained(model_name)
tensor_token=torch.tensor([inx_token])# tensor小写是int64,Tensor大写是float32
print(tensor_token.shape,tensor_token.dtype)
with torch.no_grad():
    no_head_output=no_head_model(tensor_token)
last_hidden=no_head_output['last_hidden_state']
print(last_hidden.shape,last_hidden)# (1,9,768)
from transformers import AutoModelForSequenceClassification
#分类模型
class_model=AutoModelForSequenceClassification.from_pretrained(model_name)
with torch.no_grad():
    class_output=class_model(tensor_token)
class_output=class_output['logits']
print(class_output.shape,class_output)# 形状:(1,2)
input_text1='我家的小狗是黑色的'
input_text2='我家的小狗是什么颜色的呢?'
#句子对,开始索引101,句子间分割102,第二个句子的结束102
# inx_token=tokenizer.encode(input_text1,input_text2)
# text_token=tokenizer.convert_ids_to_tokens(inx_token)
# print(text_token)# [CLS],[SEP],[SEP],索引对应分词字符串
# return_tensors:返回pytorch数据,padding:不够长度的填充0,truncation:过长的阶段
inx_tok=tokenizer(input_text2,input_text1,\
                     return_tensors='pt',padding=True, truncation=True)
input_ids=inx_tok['input_ids']
token_type_ids=inx_tok['token_type_ids']
print(type(input_ids),type(token_type_ids))
from transformers import AutoModelForQuestionAnswering
aq=AutoModelForQuestionAnswering.from_pretrained(model_name)
with torch.no_grad():
    aq_output=aq(input_ids,token_type_ids=token_type_ids)
start_inxes=aq_output['start_logits'][0]
end_inxes=aq_output['end_logits'][0]
print(len(start_inxes),len(end_inxes))
start=torch.argmax(start_inxes)
end=torch.argmax(end_inxes)
(input_text1+input_text2)[start:end]
# 定义问题和上下文  
question = "你好,请问今天天气怎么样?"  
context = "今天是晴天,气温适中,非常适合户外活动。" 
# 使用分词器对问题和上下文进行编码  
inputs = tokenizer(question, context, return_tensors='pt', \
                   padding=True, truncation=True)
input_ids = inputs['input_ids']  
attention_mask = inputs['attention_mask'] 
# 在Transformers库中,模型并不是通过数字本身来识别分割符的,
# 而是通过分词器(Tokenizer)对输入文本的处理来识别这些特殊标记。
# 在不计算梯度的情况下进行推理  
with torch.no_grad():  
    outputs =aq(input_ids, attention_mask=attention_mask)  
# 获取起始和结束位置的得分  
start_logits = outputs.start_logits[0] 
end_logits = outputs.end_logits[0] 
# 显示得分(通常会有很多,对应文本中的每个token)  
display(start_logits, end_logits) 
# 获取最大值的索引:使用torch.argmax或其他类似函数,
# 找到start_logits和end_logits中最大值对应的索引。
# 这些索引表示答案在输入文本中的起始和结束位置。
print(torch.argmax(start_logits),torch.argmax(end_logits))
# 获取最大值的索引  
start_index = torch.argmax(start_logits)  
end_index = torch.argmax(end_logits) 
# 确保索引在有效范围内  
max_len = input_ids.size(1) 
start_index = start_index.item() 
end_index = end_index.item() 
start_index = max(0, start_index)  
end_index = min(max_len - 1, end_index)  
# 确保起始位置在结束位置之前  
if start_index > end_index:  
    # 可以选择忽略这种情况,或者设置一个默认的答案或错误消息  
    answer = "无效的预测!"  
else:  
    # 使用分词器将token IDs转换回文本  
    tokenizer = AutoTokenizer.from_pretrained(model_name)  
    answer_tokens = tokenizer.convert_ids_to_tokens(input_ids[0, start_index:end_index+1]) 
    print(answer_tokens)
    answer = tokenizer.decode(input_ids[0, start_index:end_index+1])  
print(f"Answer: {answer}")


 

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

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

相关文章

【任职资格】某大型制造型企业任职资格体系项目纪实

该企业以业绩、责任、能力为导向,确定了分层分类的整体薪酬模式,但是每一名员工到底应该拿多少工资,同一个岗位的人员是否应该拿同样的工资是管理人员比较头疼的事情。华恒智信顾问认为,通过任职资格评价能实现真正的人岗匹配&…

java注解的实现原理

首先我们常用的注解是通过元注解去编写的, 比如: 元注解有Target 用来限定目标注解所能标注的java结构,比如标注方法,标注类; Retention则用来标注当前注解的生命周期;比如source,class&…

【CSS】CSS基础1(CSS基本介绍+常见样式设计)

目录 什么是CSS? 语法规范 常见样式 例子 代码展示 什么是CSS? 点击以下链接了解更多: ​​​​​​​ ​​​​​https://baike.baidu.com/item/%E5%B1%82%E5%8F%A0%E6%A0%B7%E5%BC%8F%E8%A1%A8/524980?fromModulelemma_inlink(英文…

项目四-图书管理系统

1.创建项目 流程与之前的项目一致,不再进行赘述。 2.需求定义 需求: 1. 登录: ⽤⼾输⼊账号,密码完成登录功能 2. 列表展⽰: 展⽰图书 3.前端界面测试 无法启动!!!--->记得加入mysql相关操作记得在yml进行配置 配置后启动…

java常用IO流功能——转换流,打印流,数据流,序列化流概述

前言: 整理下IO流的相关知识点笔记,打好基础,daydayup!!! 之前整理了下 字节流,字符流和缓冲流,有需要的可以看这里 java常用应用程序编程接口(API)——IO流概述及字节流的使用 java常用IO流功…

Spring:面试八股

文章目录 参考Spring模块CoreContainerAOP 参考 JavaGuide Spring模块 CoreContainer Spring框架的核心模块,主要提供IoC依赖注入功能的支持。内含四个子模块: Core:基本的核心工具类。Beans:提供对bean的创建、配置、管理功能…

❤ leetCode简易题1-两数之和、简易2--回文数判断、简易14-最长公共前缀

❤ leetCode简易题1-两数之和、简易题14- 最长公共前缀 1、简易1-两数之和 ① 题目要求 数字A B target,以target为求和结果,找出数组中符合的A、B数字下标。 第一次做的时候完全脑子一片蒙,随后认真看了看题目发现是发现找符合target和…

论文导读 | 漫谈编辑问题

摘要 本文着眼于深度学习模型在各个领域中的编辑问题,从通用的分类器编辑算法切入,展开介绍针对扩散模型的图像编辑问题和针对大语言模型的知识编辑问题,希望能为读者关于“修改模型的行为”这一话题提供一些启发。 引言 当我们训练好一个…

【问题分析】InputDispatcher无焦点窗口ANR问题【Android 14】

1 问题描述 Monkey跑出的无焦点窗口的ANR问题。 特点: 1)、上层WMS有焦点窗口,为Launcher。 2)、native层InputDispacher无焦点窗口,上层为”recents_animation_input_consumer“请求了焦点,但是”rece…

高防DNS和高防IP一样吗?

高防DNS和高防IP在功能和目标上有所不同,因此它们并不完全相同。 高防DNS是一种针对DNS服务的防护措施,旨在保护域名解析免受DDoS攻击等网络威胁的影响。它利用高防服务器和高防机房的资源,对无效流量进行清洗,保障DNS服务器的安…

零基础学习挖掘PHP网站漏洞

教程介绍 本套课程,分为三个阶段:第一阶段:基础篇 学习PHP开发的基础知识,对PHP常见的漏洞进行分析,第二阶段:进阶篇 实战PHP漏洞靶场,了解市面上的PHP主流网站开发技术,并对市面上…

图解MySQL目录

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) 一 .图解MySQL介绍 重点突击 MySQL 索引、事务、锁、日志等面试常问知识。 二 . 基础篇 执行一条 select 语句,期间发生了什么? : 执行一条 select 语句,期间发生了什…

SQL的事务及其ACID属性

目录 SQL中的事务简介事务和ACID属性SQL事务中的关键命令示例SQL事务的隔离层级1. 未提交读取2. 提交后读取3. 可重复读取4. 可序列化脏读、不可重复读或虚读脏读取不可重复读取(未提交读取)虚读取推荐超级课程: Docker快速入门到精通Kubernetes入门到大师通关课AWS云服务快速…

使用express Vue+Node搭建的网上购物商城

前言 项目采用的技术栈: VueNodeMySQL 前端:用Vue-cli搭建,使用Vue全家桶element-ui 后端:express框架 数据库:MySQL 一、功能 普通用户 注册、登录(图形验证码)定位 (腾讯地图定位功能&#…

查找中常见的树数据结构

查找中常见的树数据结构 一、排序二叉树二、平衡二叉树三、红黑树(自平衡二叉树)四、B树五、B树 在动态查找中常见的树相关的数据结构包括: 排序二叉树(Binary Search Trees)平衡二叉树(AVL Trees&#xff…

ssh 公私钥

一、生成ssh公私钥 生成自定义名称的SSH公钥和私钥对,需要使用ssh-keygen命令,这是大多数Linux和Unix系统自带的标准工具。下面,简单展示如何使用ssh-keygen命令来生成具有自定义名称的SSH密钥对。 步骤 1: 打开终端 首先,打开我…

鸿蒙HarmonyOS应用开发之在NDK工程中使用预构建库

在NDK工程中,可以通过CMake语法规则引入并使用预构建库。在引用预构建库时,模块libs目录中的预构建库,以及在CMakeList.txt编译脚本中声明的预构建库都会被打包。 例如在项目中需要使用预构建库libavcodec_ffmpeg.so,其开发态存放…

【数据库管理操作】Mysql 创建学生数据库及对数据表进行修改

MySQL 创建学生成绩数据库 1.创建数据库 create database studentscore;创建完成之后,如果需要使用该数据,使用use命令 use studentscore;创建表前查看当前数据库中包含的表 show tables; 2.创建bclass表 create table bclass( class_id char(8) …

蓝桥杯刷题day09——霓虹【算法赛】

一、问题描述 晚上,小蓝正无聊的走在大路上,小蓝所在的街区是—个带有赛博朋克风格的街区。 他抬头—看,看到了很多霓虹灯牌。在其中的某一个店铺前,挂着一排的数字灯牌,每一个数字的显示都依靠7段LED管,亮着的灯管组成数字,具体来说如下图所示: 小蓝刚学过数字电路,他…

数据库系统概论-第3章 关系数据库标准语言SQL

3.1 SQL概述 3.2 学生-课程数据库 3.3 数据定义 3.4 数据查询 3.5 数据更新 3.6 空值的处理 3.7 视图 3.8 小结