当前位置: 首页 > news >正文

# 深度学习笔记(9)huggingface 构建数据集

# 深度学习笔记(9)huggingface 构建数据集

一、怎么处理数据

药品评价数据集:https://archive.ics.uci.edu/dataset/462/drug+review+dataset+drugs+com

# 定义数据文件的路径,分别指定训练集和测试集的文件名
data_files = {"train": "drugsComTrain_raw.tsv",  # 训练集文件路径"test": "drugsComTest_raw.tsv"     # 测试集文件路径
}# 使用load_dataset函数加载数据集,指定数据格式为csv
# data_files参数指定了训练集和测试集的文件路径
# delimiter参数指定了文件中的分隔符为制表符("\t")
drug_dataset = load_dataset("csv", data_files=data_files, delimiter="\t"
)

测试的时候为了训练速度,做一个采样,真实环境是不采样的

#选择一小部分数据集:drug_sample = drug_dataset["train"].shuffle(seed=42).select(range(1000))#采样
# Peek at the first few examples
drug_sample[:5]
#病人ID,症状...评分,评论
'Unnamed: 0': [87571, 178045, 80482, 159268, 205477],   #病人id'condition': ['Gout, Acute',                           #症状'ibromyalgia','Inflammatory Conditions','Birth Control','Depression'],'date': ['September 2, 2015',       #日期'November 7, 2011','June 5, 2013','October 21, 2010','July 13, 2013'],'drugName': ['Naproxen', 'Duloxetine', 'Mobic', 'TriNessa', 'Pristiq'],  #药名'rating': [9.0, 3.0, 10.0, 10.0, 10.0],  #评分'review': ['"like the previous person mention, I'm a  #评论

二、基本操作

数据集的基本处理操作
1.更换列名,把名字都写的好听好认识
2.将所有大写的都转换成小写
3.转换之前要注意先把所有的空值剔除掉
4.要计算每一个样本中评论的长度
5.对长度小于30的文本数据进行剔除
6.文本清洗去掉一些爬虫留下的痕迹
7.删除一些无用的列名,一般保存ID和标签之类的即可

1.更改列名

# 遍历数据集的不同部分(通常是训练集和测试集)
for split in drug_dataset.keys():# 断言每个部分中的数据行数与"Unnamed: 0"列的唯一值数量相等# 这意味着"Unnamed: 0"列中的每个值都是唯一的,没有重复assert len(drug_dataset[split]) == len(drug_dataset[split].unique("Unnamed: 0"))

更改id

# 重命名数据集中的列,将"Unnamed: 0"列名改为"patient_id"
drug_dataset = drug_dataset.rename_column(original_column_name="Unnamed: 0", new_column_name="patient_id"
)# 打印数据集的列名以确认更改
print(drug_dataset["train"].column_names)# 如果需要查看数据集的具体内容,可以打印前几行
# 例如,查看训练集的前5条记录
print(drug_dataset["train"].head())

2.去掉空值

from datasets import load_dataset# 假设数据集已经被加载到 drug_dataset 中
# drug_dataset = load_dataset(...)# 使用 filter 方法来剔除 "condition" 字段为 None 的样本
drug_dataset = drug_dataset.filter(lambda x: x["condition"] is not None)# 现在,drug_dataset 应该只包含 "condition" 字段非空的样本
# 打印数据集的一些信息来验证这一点
print(drug_dataset)

3.把condition字段转成小写

from datasets import load_dataset
2
# 定义一个函数,将"condition"字段的值转换为小写
def lowercase_condition(example):return {"condition": example["condition"].lower()}# 假设数据集已经被加载到 drug_dataset 中
# drug_dataset = load_dataset(...)# 使用 map 方法将 lowercase_condition 函数应用到数据集的每个样本上
drug_dataset = drug_dataset.map(lowercase_condition)# 现在,drug_dataset 中的 "condition" 字段值应该都是小写的
# 你可以通过打印数据集的前几行来验证这一点
print(drug_dataset["train"].head())

4.统计下评论的长度

from datasets import load_dataset

# 假设数据集已经被加载到 drug_dataset 中
# drug_dataset = load_dataset(...)# 定义一个函数,计算评论中的单词数量
def compute_review_length(example):return {"review_length": len(example["review"].split())}# 使用 map 方法将 compute_review_length 函数应用到数据集的每个样本上
drug_dataset = drug_dataset.map(compute_review_length)# 现在,每个样本都应该有一个 "review_length" 字段
# 打印数据集的前几行来验证这一点
print(drug_dataset["train"].head())
{'condition': 'left ventricular dysfunction','date': 'May 20, 2012','drugName': 'Valsartan','patient_id': 206461,'rating': 9.0,'review': '"It has no side effect, I take it in combination of Bystolic 5 Mg and Fish Oil"','review_length': 17,'usefulCount': 27}

可以看到 ,多出来’review_length这一列

 drug_dataset["train"].sort("review_length")[:3]#按长度排序

5.去掉过短的

过短的评论对建模帮助不大

drug_dataset = drug_dataset.filter(lambda x: x["review_length"] > 30)
print(drug_dataset.num_rows)

6.处理一些爬虫留下的问题

直接调用包就行,包如下

import html #直接调包就行text = "I'm a transformer called BERT"
html.unescape(text)

应用到我这个项目代码如下

new_drug_dataset = drug_dataset.map(lambda x: {"review": [html.unescape(o) for o in x["review"]]}, batched=True
)

你正在使用 map 方法结合一个 lambda 函数来遍历 drug_dataset 数据集中的每个样本,并对 “review” 字段中的每个元素应用 - html.unescape() 函数。这样做是为了将 “review” 字段中的任何 HTML 实体字符转换回普通字符。
map 方法:这是 Hugging Face datasets 库中的方法,用于对数据集中的每个样本应用一个函数。
lambda x: …:这是一个匿名函数,用于定义对每个样本的操作。
html.unescape():这是 html 模块中的一个函数,用于将 HTML 实体字符转换回普通字符。
batched=True:这个参数告诉 map 方法在处理数据时使用批处理,这通常可以提高处理效率。

7.删除无用id等

from transformers import AutoTokenizertokenizer = AutoTokenizer.from_pretrained("bert-base-cased")
def tokenize_and_split(examples):return tokenizer(examples["review"],truncation=True,max_length=128,return_overflowing_tokens=True,#如果一句话超过了长度,会展开成多句话)   

转换成pandas

train_df = drug_dataset["train"][:]
frequencies = (train_df["condition"].value_counts().to_frame().reset_index().rename(columns={"index": "condition", "condition": "frequency"})
)
frequencies.head()

转完了记得转回去

from datasets import Datasetfreq_dataset = Dataset.from_pandas(frequencies)
freq_dataset

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。


http://www.mrgr.cn/news/34675.html

相关文章:

  • kubernetes网络(三)之bird的路由反射器的使用
  • 大数据新视界 --大数据大厂之 Reactjs 在大数据应用开发中的优势与实践
  • npm、yarn、pnpm 最新国内镜像源设置和常见问题解决
  • Axure精选各类组件案例集锦:设计灵感与实战技巧
  • 速盾:网页游戏部署高防服务器有什么优势?
  • Spring MVC 执行流程
  • FortiGate 硬盘格式化指南
  • C++11新特性和扩展(1)
  • LLMs之Qwen:Qwen2.5的简介、安装和使用方法、案例应用之详细攻略
  • 防护装备穿戴与否检测系统源码分享
  • Algo-Lab 2 Stack Queue ADT
  • GUI编程之MATLAB入门详解(01)
  • 开箱元宇宙| 探索 Great Entertainment Group 如何利用 Web3 和数字创新重新定义活动体验
  • poi生成的ppt,powerPoint打开提示内容错误解决方案
  • Qanything 2 0源码解析系列1:新建知识库
  • 【OpenAI o1背后技术】Sef-play RL:LLM通过博弈实现进化
  • JAVA_17
  • 大数据系统调优:从DAG到单机
  • 【ZYNQ 开发】填坑!双核数据采集系统LWIP TCP发送,运行一段时间不再发送且无法ping通的问题解决
  • 【已解决】如何使用JAVA 语言实现二分查找-二分搜索折半查找【算法】手把手学会二分查找【数据结构与算法】