NLP之Bert多分类实现案例(数据获取与处理)

文章目录

  • 1. 代码解读
    • 1.1 代码展示
    • 1.2 流程介绍
    • 1.3 debug的方式逐行介绍
  • 3. 知识点

1. 代码解读

1.1 代码展示

import json
import numpy as np
from tqdm import tqdmbert_model = "bert-base-chinese"from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained(bert_model)
# spo中所有p的关系标签 (text --> p label)
p_entitys = ['丈夫', '上映时间', '主持人', '主演', '主角', '作曲', '作者', '作词', '出品公司', '出生地', '出生日期', '创始人', '制片人', '号', '嘉宾', '国籍','妻子', '字', '导演', '所属专辑', '改编自', '朝代', '歌手', '母亲', '毕业院校', '民族', '父亲', '祖籍', '编剧', '董事长', '身高', '连载网站']max_length = 300
train_list = []
label_list = []
with open(file="../data/train_data.json", mode='r', encoding='UTF-8') as f:data = json.load(f)for line in tqdm(data):text = tokenizer.encode(line['text'])token = text[:max_length] + [0] * (max_length - len(text))train_list.append(token)# 获取当前文本的标准答案 (spo中的p)new_spo_list = line['new_spo_list']label = [0.] * len(p_entitys)  # 确定label的标签长度for spo in new_spo_list:p_entity = spo['p']['entity']label[p_entitys.index(p_entity)] = 1.0        label_list.append(label)
train_list = np.array(train_list)
label_list = np.array(label_list)
val_train_list = []
val_label_list = []
# 加载和预处理验证集
with open('../data/valid_data.json', 'r', encoding="UTF-8") as f:data = json.load(f)for line in tqdm(data):text = line["text"]new_spo_list = line["new_spo_list"]label = [0.] * len(p_entitys)for spo in new_spo_list:p_entity = spo["p"]["entity"]label[p_entitys.index(p_entity)] = 1.        token = tokenizer.encode(text)token = token[:max_length] + [0] * (max_length - len(token))val_train_list.append((token))val_label_list.append(label)
val_train_list = np.array(val_train_list)
val_label_list = np.array(val_label_list)

1.2 流程介绍

这段代码的整体流程和目的是为了对中文文本进行自然语言处理任务的准备工作,这里似乎是为了一个文本分类或关系提取任务。具体步骤如下:

  1. 导入必要的库:

    • json:用于处理JSON数据格式。
    • numpy:科学计算库,用于高效地处理数组操作。
    • tqdm:用于在循环操作中显示进度条。
  2. 指定BERT模型的类型(bert-base-chinese),用于中文文本。

  3. 使用transformers库中的AutoTokenizer来加载指定BERT模型的分词器。

  4. 定义一组中文实体关系标签(p_entitys),这些看起来是用于文本中特定实体之间关系的标签。

  5. 设置一个最大序列长度(max_length)为300,以限制处理文本的长度。

  6. 初始化两个空列表train_listlabel_list,用于存储训练数据的特征和标签。

  7. 加载并处理训练数据(train_data.json):

    • 使用json.load()读取文件内容。
    • 使用tokenizer.encode()将每行文本转换为BERT词汇表中的token IDs。
    • 如果文本长度短于max_length,则用0填充。
    • 解析每个文本的new_spo_list以构建标签向量,其中如果关系存在于文本中,则相应位置为1,否则为0。
  8. train_listlabel_list转换为NumPy数组,以便进一步处理。

  9. 对验证集进行与训练集相同的处理,并存储在val_train_listval_label_list

代码的目的是将中文文本及其对应的实体关系标签转换为机器学习模型可以接受的数值格式。这个过程通常是自然语言处理任务中文本预处理的一部分,特别是在使用BERT这类预训练语言模型的情况下。

你需要完成的工作可能包括:

  • 确保你有正确配置的环境和库来运行这段代码。
  • 如果这是第一次运行,确保你下载了bert-base-chinese模型和分词器。
  • 准备train_data.jsonvalid_data.json数据文件。
  • 运行代码并监视进度条以确保数据正在被正确处理。

1.3 debug的方式逐行介绍

下面逐行解释代码的功能:

import json
import numpy as np
from tqdm import tqdm

这三行代码是导入模块,json用于处理JSON格式的数据,numpy是一个广泛使用的科学计算库,tqdm是一个用于显示循环进度的库,可以在长循环中给用户反馈。

bert_model = "bert-base-chinese"

这行代码定义了变量bert_model,将其设置为"bert-base-chinese",指的是BERT模型的中文预训练版本。

from transformers import AutoTokenizer

transformers库导入AutoTokenizer,这是Hugging Face提供的一个用于自动获取和加载预训练分词器的类。

tokenizer = AutoTokenizer.from_pretrained(bert_model)

使用from_pretrained方法创建了一个tokenizer对象,这个分词器将根据bert_model变量指定的模型进行加载。

p_entitys = [...]

这里列出了所有可能的关系标签,用于将文本中的关系映射为一个固定长度的标签向量。

max_length = 300

定义了一个变量max_length,设置为300,用于后面文本序列的最大长度。

train_list = []
label_list = []

初始化两个列表train_listlabel_list,分别用于存储处理后的文本数据和对应的标签数据。

with open(file="../data/train_data.json", mode='r', encoding='UTF-8') as f:

打开训练数据文件train_data.json,以只读模式('r')和UTF-8编码。

    data = json.load(f)

加载整个JSON文件内容到变量data

    for line in tqdm(data):

data中的每一项进行迭代,tqdm将为这个循环显示一个进度条。

        text = tokenizer.encode(line['text'])

使用分词器将文本编码为BERT的输入ID。

        token = text[:max_length] + [0] * (max_length - len(text))

这行代码截取或填充编码后的文本至max_length长度。

        train_list.append(token)

将处理后的文本添加到train_list列表中。

        new_spo_list = line['new_spo_list']

提取当前条目的关系列表。

        label = [0.] * len(p_entitys)

创建一个与关系标签数量相同长度的零向量。

        for spo in new_spo_list:

遍历当前条目的每一个关系。

            p_entity = spo['p']['entity']

从关系中提取实体。

            label[p_entitys.index(p_entity)] = 1.0

在标签向量中,将对应实体的索引位置设为1.0,表示该关系在文本中出现。

        label_list.append(label)

将构建好的标签向量添加到label_list

train_list = np.array(train_list)
label_list = np.array(label_list)

将列表转换为NumPy数组,便于后续处理。

接下来的代码块与之前的相似,只是针对验证数据集valid_data.json进行操作。

val_train_list = []
val_label_list = []

初始化用于验证集的两个列表。

with open('../data/valid_data.json', 'r', encoding="UTF-8") as f:

打开验证数据文件。

接下来的代码块与处理训练数据时相同,也是加载数据、对文本进行编码、生成标签向量、然后将它们添加到相应的验证集列表中。

val_train_list = np.array(val_train_list)
val_label_list = np.array(val_label_list)

最后,同样地,将验证集的列表转换为NumPy数组。

这段代码整体上是用来处理和准备数据,使其适合输入到一个神经网络模型中去。它不仅编码文本,还构造了与之相对应的标签,这在训练和验证机器学习模型时是必需的。

3. 知识点

在这里插入图片描述
三元组解释了两个实体或者实体和属性之间的关系。
O是S的什么P,例如鲁迅是《呐喊》的导演吴京是《战狼》的导演
在这里插入图片描述

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

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

相关文章

Open3D(C++) 最小二乘拟合平面(间接平差法)

目录 一、算法原理1、原理概述2、参考文献二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 1、原理概述 通过传统最小二乘法对点云数据进行平面拟合时,可将误差只归因于一个方向上,本文假设误差只存在于 Z Z

Monarch Mixer:一种性能比Transformer更强的网络架构

六年前,谷歌团队在arXiv上发表了革命性的论文《Attention is all you need》。作为一种优势的机器学习网络架构,Transformer技术迅速席卷全球。Transformer一直是现代基础模型背后的主力架构,并且在不同的应用程序中取得了令人印象深刻的成功…

tbh着色

在tbh中,着色之前,首先可以可以创建多个色板,如果不同角色颜色不一样,就可以创建多个色板,每一个色板代表的角色不同。 1、创建色板 有两种方式: 方法一:在颜色菜单中,点击左上角 …

SQL面试

#(1)请写出要查询员工J开头的名字其工号(EMPNO)及部门名称(DEPTNA)的 SQL语句SELECT e.emp,e.name,d.deptna FROM emp e left join dept d on d.deptno e.deptno where e.name like J%#(2)请写出要查询 Kevin 所在部门的部门代号(DEPTNO)及部门名称(DEPTNA)的 SQL 语句SELECT e…

D-Link管理系统默认账号密码

默认口令为 admin:admin 登陆成功 文笔生疏,措辞浅薄,望各位大佬不吝赐教,万分感谢。 免责声明:由于传播或利用此文所提供的信息、技术或方法而造成的任何直接或间接的后果及损失,均由使用者本人负责, 文章…

【RabbitMQ】RabbitMQ 集群的搭建 —— 基于 Docker 搭建 RabbitMQ 的普通集群,镜像集群以及仲裁队列

文章目录 一、集群分类1.1 普通模式1.2 镜像模式1.3 仲裁队列 二、普通集群2.1 目标集群2.2 获取 Erlang Cookie2.3 集群配置2.4 启动集群2.5 测试集群 三、镜像模式3.1 镜像模式的特征3.2 镜像模式的配置3.2.1 exactly 模式3.2.2 all 模式3.2.3 nodes 模式 3.3 测试镜像模式 四…

使用lua-resty-request库编写爬虫IP实现数据抓取

目录 一、lua-resty-request库介绍 二、使用lua-resty-request库进行IP数据抓取 1、获取IP地址 2、设置请求 3、处理数据 三、代码实现 四、注意事项 五、总结 本文将深入探讨如何使用lua-resty-request库在爬虫程序中实现IP数据抓取。我们将首先介绍lua-resty-request…

windows自动登陆

新建文本粘贴下面代码,另存为注册表文件 Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Driver Signing] "Policy"hex:00[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]"DefaultUserN…

UI设计感蓝色商务数据后台网站模板源码

蓝色商务数据后台网站模板是一款适合网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。 演示下载 qnziyw点cn/wysc/qdmb/20852点html

K8S部署时IP问题

本次环境搭建需要安装三台Centos服务器(一主二从);搭配的前提时做好ip的设置 主机IP规划 IP地址的设定需要根据自己主机来设置,在虚拟机的虚拟网络编辑器中看他给你的ip;不要查什么ipconfig了。 在虚拟网络编辑器中…

基于SSM的社区智慧养老监护管理平台

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

回顾十大数据恢复软件,帮助用于恢复丢失的文件!

您是否因丢失计算机上的重要文件而感到恐慌?你不是一个人!数据丢失是许多人面临的严重问题,但幸运的是,有许多解决方案可以恢复数据。 在本文中,我将回顾十大数据恢复软件,以帮助您恢复丢失的文件&#xf…

ChatGPT 的 Text Completion

该章节我们来学习一下 “Text Completion” ,也就是 “文本完成” 。“Text Completion” 并不是一种模型,而是指模型能够根据上下文自动完成缺失的文本部分,生成完整的文本。 ⭐ Text Completion 的介绍 Text Completion 也称为文本自动补全…

QT进度条 QProgressDialog基础、高级和样式表使用详解

一、基础使用 QProgressDialog是Qt中的一个类,用于显示一个进度条和一个取消按钮,让用户可以在长时间的操作中看到进度,并且可以随时取消。QProgressDialog的基本用法是创建一个对象,设置最小值和最大值,然后在循环中…

Rust编程基础核心之所有权(下)

1.变量与数据交互方式之二: 克隆 在上一节中, 我们讨论了变量与数据交互的第一种方式: 移动, 本节将介绍第二种方式:克隆。 如果我们 确实 需要深度复制 String 中堆上的数据,而不仅仅是栈上的数据,可以使用一个叫做 clone 的通用函数。 看下面的代码…

告知粉丝 重要

告知! 亲爱的粉丝朋友们,由于CSDN(博客)平台的限制,被迫转入 公众号!希望粉丝朋友们谅解!我们也是被逼无奈~~ 但我们还是会在CSDN(博客)发文章,但很少。 如果想要接触更好的文章请关注我们公众号,谢谢! 微信公众号:

使用pytorch处理自己的数据集

目录 1 返回本地文件中的数据集 2 根据当前已有的数据集创建每一个样本数据对应的标签 3 tensorboard的使用 4 transforms处理数据 tranfroms.Totensor的使用 transforms.Normalize的使用 transforms.Resize的使用 transforms.Compose使用 5 dataset_transforms使用 1 返回本地…

AD教程 (七)元件的放置

AD教程 (七)元件的放置 第一种放置方法 点击右下角Panels,选择SCH Library,调出原理图库器件列表选中想要放置的元件,点击放置,就会自动跳转到原理图,然后放置即可这种方法需要不断打开元件库…

数据结构--前缀树(Trie)

1. 简介 前缀树是一种数据结构&#xff0c;常用来字符搜索。 2. 实现 包含的操作主要是: 加入串搜索串 代码实现&#xff0c;直接用leetcode_208的题解咯。 代码 class Trie { public:Trie():isEnd(false){for ( int i 0; i < 26;i)child[i] nullptr;}~Trie() {fo…

网络运维Day01

文章目录 环境准备OSI七层参考模型什么是协议&#xff1f;协议数据单元(PDU)设备与层的对应关系什么是IP地址&#xff1f;IP地址分类IP的网络位和主机位IP地址默认网络位与主机位子网掩码默认子网掩码查看IP地址安装CISCO汉化CISCO(可选操作) CISCO之PC机器验证通信 CISCSO之交…