关于MediaEval数据集的Dataset构建(Text部分-使用PLM BERT)

import random
import numpy as np
import pandas as pd
import torch
from transformers import BertModel,BertTokenizer
from tqdm.auto import tqdm
from torch.utils.data import Dataset
import re
"""参考Game-On论文"""
"""util.py"""
def set_seed(seed_value=42):random.seed(seed_value)np.random.seed(seed_value)# 用于设置生成随机数的种子torch.manual_seed(seed_value)torch.cuda.manual_seed_all(seed_value)
"""util.py""""""文本预处理-textGraph.py"""
# 文本DataSet类def text_preprocessing(text):"""- Remove entity mentions (eg. '@united')- Correct errors (eg. '&amp;' to '&')@param    text (str): a string to be processed.@return   text (Str): the processed string."""# Remove '@name'text = re.sub(r'(@.*?)[\s]', ' ', text)# Replace '&amp;' with '&'text = re.sub(r'&amp;', '&', text)# Remove trailing whitespacetext = re.sub(r'\s+', ' ', text).strip()# removes linkstext = re.sub(r'(?P<url>https?://[^\s]+)', r'', text)# remove @usernamestext = re.sub(r"\@(\w+)", "", text)# remove # from #tagstext = text.replace('#', '')return textclass TextDataset(Dataset):def __init__(self,df,tokenizer):# 包含推文的主文件框架self.df = df.reset_index(drop=True)# 使用的分词器self.tokenizer = tokenizerdef __len__(self):return len(self.df)def __getitem__(self, idx):if torch.is_tensor(idx):idx = idx.tolist()# 帖子的文本内容text = self.df['tweetText'][idx]# 作为唯一标识符的id ‘tweetId'unique_id = self.df['tweetId'][idx]# 创建一个空的列表来存储输出结果input_ids = []attention_mask = []# 使用tokenizer分词器encoded_sent = self.tokenizer.encode_plus(text = text_preprocessing(text), # 这里使用的是预处理的句子,而不是直接对原句子使用tokenizeradd_special_tokens=True,        # 添加[CLS]以及[SEP]等特殊词元max_length=512,                 # 最大截断长度padding='max_length',            # padding的最大长度return_attention_mask=True,     # 返回attention_masktruncation=True                 #)# 获取编码效果input_ids = encoded_sent.get('input_ids')# 获取attention_mask结果attention_mask = encoded_sent.get('attention_mask')# 将列表转换成张量input_ids = torch.tensor(input_ids)attention_mask =torch.tensor(attention_mask)return {'input_ids':input_ids,'attention_mask':attention_mask,'unique_id':unique_id}def store_data(bert,device,df,dataset,store_dir):lengths = []bert.eval()for idx in tqdm(range(len(df))):sample = dataset.__getitem__(idx)print('原始sample[input_ids]和sample[attention_mask]的维度:',sample['input_ids'].shape,sample['attention_mask'].shape)# 升维input_ids,attention_mask = sample['input_ids'].unsqueeze(0),sample['attention_mask'].unsqueeze(0)input_ids = input_ids.to(device)attention_mask = attention_mask.to(device)# 得到唯一标识属性unique_id = sample['unique_id']# 计算token的个数num_tokens = attention_mask.sum().detach().cpu().item()"""不生成新的计算图,而是只做权重更新"""with torch.no_grad():out = bert(input_ids=input_ids,attention_mask=attention_mask)# last_hidden_state.shape是(batch_size,sequence_length,hidden_size)out_tokens = out.last_hidden_state[:,1:num_tokens,:].detach().cpu().squeeze(0).numpy() # token向量# 保存token级别表示filename = f'{emed_dir}{unique_id}.npy'try:np.save(filename, out_tokens)print(f"文件{filename}保存成功")except FileNotFoundError:# 文件不存在,创建新文件并保存np.save(filename, out_tokens)print(f"文件{filename}创建成功并保存成功")lengths.append(num_tokens)## Save semantic/ whole text representation# 保存语义  也就是整个文本的表示out_cls = out.last_hidden_state[:,0,:].unsqueeze(0).detach().cpu().squeeze(0).numpy() ## cls vectorfilename = f'{emed_dir}{unique_id}_full_text.npy'# 尝试保存.npy文件,如果文件不存在则自动创建try:np.save(filename, out_cls)print(f"文件{filename}保存成功")except FileNotFoundError:# 文件不存在,创建新文件并保存np.save(filename, out_cls)print(f"文件{filename}创建成功并保存成功")return lengthsif __name__=='__main__':device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")# 根目录root_dir = "./dataset/image-verification-corpus-master/image-verification-corpus-master/mediaeval2015/"emed_dir = './Embedding_File'# 文件路径train_csv_name = "tweetsTrain.csv"test_csv_name = "tweetsTest.csv"# 加载PLM和分词器tokenizer = BertTokenizer.from_pretrained('./bert/')bert = BertModel.from_pretrained('./bert/', return_dict=True)bert = bert.to(device)# 用于存储每个推文的Embeddingstore_dir ="Embed_Post/"# 创建训练数据集的Embedding表示df_train = pd.read_csv(f'{root_dir}{train_csv_name}')df_train = df_train.dropna().reset_index(drop=True)# 训练数据集的编码结果train_dataset = TextDataset(df_train,tokenizer)lengths = store_data(bert, device, df_train, train_dataset, store_dir)## Create graph data for testing set# 为测试集创建Embedding表示df_test = pd.read_csv(f'{root_dir}{test_csv_name}')df_test = df_test.dropna().reset_index(drop=True)test_dataset = TextDataset(df_test, tokenizer)lengths = store_data(bert, device, df_test, test_dataset, store_dir)"""文本预处理-textGraph.py"""

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

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

相关文章

C++:设计包含min 函数的栈

目录 题目 代码实现 输出 题目 定义栈的数据结构&#xff0c;要求添加一个min 函数&#xff0c;能够得到栈的最小元素。 要求函数min、push 以及pop 的时间复杂度都是O(1)。 代码实现 #include <iostream>template<typename T>class stack { public:stack() {…

k倍区间c++

题目 输入样例&#xff1a; 5 2 1 2 3 4 5输出样例&#xff1a; 6 思路 本题默认所有读者已经理解了如何求前缀和。 可以利用双层循环分别枚举左端点和右端点即可枚举完所有区间&#xff0c;而对于每个区间&#xff0c;利用一维前缀和判断它是否是一个k倍区间&#xff0c;是…

GraphQL

从表中查询10条数据 {user_info(_limit: 100) {idname} }根据id查询数据 {user_info(_where: {id: 1727515006802587648}_order_by: {create_time: _desc}_limit: 10) {idname} }外键联表查询(特别注意写法:update_by.id): {speaker_info(update_by.id: {_eq: 1729043650301…

外包干了8天,技术退步明显。。。。。

先说一下自己的情况&#xff0c;本科生&#xff0c;19年通过校招进入杭州某软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:PanGesture)

拖动手势事件&#xff0c;当滑动的最小距离超过设定的最小值时触发拖动手势事件。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 接口 PanGesture(value?: { fingers?: number; direction?: PanDir…

sudo command not found

文章目录 一句话Intro其他操作 一句话 sudo 某命令 改成 sudo -i 某命令 试试。 -i 会把当前用户的环境变量带过去&#xff0c;这样在sudo的时候&#xff0c;有更高的权限&#xff0c;有本用户的环境变量(下的程序命令)。 -i, --login run login shell as the target user; a …

腾讯云学生服务器申请入口、续费优惠价格和常见问题解答

2024年腾讯云学生服务器优惠活动「云校园」&#xff0c;学生服务器优惠价格&#xff1a;轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年&#xff0c;轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&#xff0c;CVM云服务器2核4G配置842.4元一年&…

Gemini 初体验

1 使用体验 同样需要科学上网。速度很快&#xff0c;而且还不要钱&#xff0c;据说使用太多可能被限流。对于小语种翻译效果比 GPT-4 好&#xff0c;其它还没测试。可通过 ChatBox 界面调用&#xff0c;也可使用 Python 调用。 2 使用 ChatBox 方式调用 在 build with gemin…

【目标分类检测测试指标】

目标分类指标 目标分类指标是指在机器学习和深度学习中&#xff0c;用于衡量模型对目标类别预测准确度的一系列评价标准。以下是一些常见的目标分类指标及其详细说明&#xff0c;并附上Python代码示例&#xff08;以PyTorch为例&#xff09;&#xff1a; 准确率&#xff08;Ac…

应用层协议--HTTP

目录 一.HTTP是什么&#xff1f; 二.HTTP的请求和响应 a.请求&#xff1a; b.响应&#xff1a; 三.URL 四.Header 1.Host 2. Content-Length 3. Content-Type a. 请求 b. 响应 4. Referer 5. User-Agent 6. Cookie 一.HTTP是什么&#xff1f; HTTP是一种应用层协议&#xff0c…

springboot实现多线程开发(使用@Async注解,简单易上手)

根据springboot的核心思想便捷开发&#xff0c;使用多线程也变得简单起来&#xff0c;通过一下几个步骤即可实现。 核心注解 EnableAsync将此注解加在启动类上&#xff0c;使项目支持多线程。 Async 使用我们的Async注解在所需要进行多线程的类上即可实现。 配置线程池 …

算法刷题Day1 | 704.二分查找、27.移除元素

目录 0 引言1 二分查找1.1 我的解题1.2 修改后1.3 总结 2 移除元素2.1 暴力求解2.2 双指针法&#xff08;快慢指针&#xff09; &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;算法专栏&#x1f4a5; 标题&#xff1a;代码随想录算法训练营第一天…

【MySQL】子查询优化、排序优化和覆盖索引

一、子查询优化 子查询可以通过一个SQL语句实现比较复杂的查询。但是子查询的效率不高。原因在于 执行子查询时&#xff0c;MySQL为内层查询语句的结果建立一个临时表&#xff0c;在查询结束后&#xff0c;会撤销这些临时表。这就导致消耗过多的CPU和IO资源&#xff0c;产生大…

AI 训练中 不收敛、欠拟合、过拟合、泛化能力是什么意思?

问题描述&#xff1a; AI 训练中 不收敛、欠拟合、过拟合、泛化能力是什么意思&#xff1f; 解答&#xff1a; 在人工智能&#xff08;AI&#xff09;训练过程中&#xff0c;你可能会遇到几个常见的问题&#xff0c;如不收敛、欠拟合、过拟合以及泛化能力的问题。这些问题通…

什么是攻防演练,能给企业带来什么

随着互联网技术的发展和企业信息化程度的提高&#xff0c;企业面临的网络安全威胁越来越多。为了保护企业的信息安全&#xff0c;攻防演练已经成为企业安全运营中不可或缺的一部分。攻击者通常会利用各种方法来破坏企业的安全系统和数据&#xff0c;因此企业需要像攻击者一样思…

C++ primer plus 学习 4.8 newdelete与存储空间

程序4.22 #include<iostream> #include<cstring> using namespace std;// 按照输入的字符串的长度来分配内存空间 char* getname(void){// 最大长度79char tmp[80]; // tmp自动存储&#xff0c;在栈中cout << "输入字符串: ";cin >> tmp;…

数据库自连接

力扣题目链接https://leetcode.cn/problems/employees-earning-more-than-their-managers https://leetcode.cn/problems/duplicate-emails/ 去重 select distinct… 数据库自连接通常在以下情况下需要使用&#xff1a; 层次关系查询&#xff1a;当表中的数据具有层次结构&…

Linux操作系统-05-文件查找与归档压缩

熟练使用find命令进行文件查找 熟练使用gerep命令对文件内容进行查找 熟练使用tar等命令进行文件归档与解压缩 一、文件查找 1、find命令 基本格式 &#xff1a;find 起始目录 查找类型 查找条件 #命令实例 find -name "hello.txt" #查找当前目…

灵活沟通,解决复杂功能需求与费用分歧

在软件开发领域&#xff0c;客户对于复杂功能的需求是司空见惯的事情。然而&#xff0c;当客户表达对此功能的渴望&#xff0c;却不愿支付相应费用时&#xff0c;良好的沟通就显得尤为关键。以下是一些建议&#xff0c;帮助你在这种情况下巧妙处理&#xff0c;达成双方满意的解…

QT 笔记 QGraphicsScene介绍

QT QGraphicsScene类介绍 分别介绍了以下内容&#xff1a; 类说明公共属性公共函数设置相关的函数槽函数信号量Event事件 1.类说明 QGraphicsScene是Qt中用于管理2D图形项&#xff08;QGraphicsItem&#xff09;的场景类。它充当了图形项的容器&#xff0c;负责管理图形项的…