Hugging Face实战-系列教程19:文本摘要建模实战1 之 数据清洗(中文商城评价数据处理方法)

news2024/12/23 4:33:59

🚩🚩🚩Hugging Face 实战系列 总目录

有任何问题欢迎在下面留言
本篇文章的代码运行界面均在Jupyter Notebook中进行
本篇文章配套的代码资源已经上传

文本摘要建模实战1 之 数据清洗
文本摘要建模实战2 之 Tokenizer处理

1 任务概述

1.1 任务概述

  1. 摘要任务要去解决一个什么事情呢
  2. 就是输入一个文章,输出一个总结归纳性的文字或者标题
  3. 输入也是文本,输出也是文本的text-to-text任务
  4. 对原本的文本进行精简,输入长文本,输出短文本
  5. 用一个长文本生成一个标题,用一个标题生成一个长文本,都是文本摘要建模的任务

1.2 数据与任务解析

在这里插入图片描述

数据下载链接,也可以通过代码中加载

这个数据集也是Hugging Face内置的数据集,这个数据集有多个语言版本,我们选中文的就好:
在这里插入图片描述
这个数据中我们主要关注两个字段:(review_body和review_title),其他的我们暂时不需要用,这个数据中body就是我们的输入,title就是我们的标签输出

1.3 数据展示

from datasets import load_dataset
chinese_dataset = load_dataset("A:/amazon_reviews_multi")
chinese_dataset
  1. 从datasets 模块导入load_dataset方法
  2. 从本地路径加载数据
  3. 打印出数据

DatasetDict({
 train: Dataset({
  features: [‘id’, ‘text’, ‘label’, ‘label_text’],
  num_rows: 200000
 })
 validation: Dataset({
  features: [‘id’, ‘text’, ‘label’, ‘label_text’],
  num_rows: 5000
 })
 test: Dataset({
  features: [‘id’, ‘text’, ‘label’, ‘label_text’],
  num_rows: 5000
 })
})

这个数据集中,数据是比较大的,因为包含了各种各样的数据,训练集达到 了20万,验证测试都是5千

def show_samples(dataset, num_samples=3, seed=40):
    sample = dataset["train"].shuffle(seed=seed).select(range(num_samples))
    for example in sample:
        print(f"\n'>> Title: {example['review_title']}'")
        print(f"'>> Review: {example['review_body']}'")
show_samples(chinese_dataset)
  1. 展示样本函数
  2. 从训练集中展示选取3条数据样本
  3. 遍历取出样本
  4. 打印标题
  5. 打印长文本

‘>> Title: 重修版的结局’ ’
‘>> Review:’
重修版的结局还是跟原版没什么很大出入…虽然说把原来伏笔用上句式古风可是结局感觉给人有点仓促’
‘>> Title: 盗版书!!!’
‘>> Review:’
这是盗版书,中间翻不开,胶装在一起的,如果想要翻开看全图,书都要撕掉的感觉,装订特别烂,我才翻了几次就有掉页的趋势,后悔后悔’
‘>> Title: 一分钱一分货’ ‘>> Review: 除了便宜真没什么好的,即便4档面包靠里一面还是会胡,设7档有什么意义。’

2 数据预处理

2.1 查看所有类别

  1. 数据种类挺多的,咱们训练次数比较少,就选一个类别的
  2. 先转换成pandas格式来统计
  3. 书比较多,数据还算可以,咱们就用书的来玩
chinese_dataset.set_format("pandas")#格式转pnadas,这点用着还挺方便
chinese_df = chinese_dataset["train"][:]#对训练数据统计
# 前20个类别的数量
chinese_df["product_category"].value_counts()[:20]
  1. 格式转pnadas,这点用着还挺方便
  2. 取出训练数据
  3. 对训练数据进行各个列的值进行统计,打印统计结果

book   63058
digital_ebook_purchase   19006
apparel   11804
shoes   9877
beauty   9401
kitchen   9170
home   8222
other   7525
grocery   7425
wireless   6432
baby_product   6172
drugstore   6072
sports   6015
pc   4821
toy   3670
home_improvement   3239
watch   3133
electronics   3059
luggage   2984
office_product 2855
Name: product_category, dtype: int64

很明显书占的最多,就只要书这个类别了,看看转换成pandas数据格式后的数据展示,前五条:
在这里插入图片描述

2.2 只要书这个类别

def filter_books(example):
    return ( example["product_category"] == "book")
chinese_dataset.reset_format()
chinese_dataset = chinese_dataset.filter(filter_books)
show_samples(chinese_dataset)
  1. 过滤类别的函数
  2. 返回只要书的类别
  3. 首先转换为 Hugging Face要求的数据格式
  4. 把选用类别的函数给到它
  5. 再用展示样本的函数进行展示

打印结果:

’ Title: 非常推荐!’
‘>> Review: 一本从教育学角度考察慕课发展的书 对理清慕课发展历程非常有帮助!’
‘>> Title: 唠叨’
‘>> Review: 一个人的碎碎念,就是没地方唠叨了,全跑书里来喋喋不休’
‘>> Title: 心碎’
‘>> Review:
只有一层塑料袋装着,到的时候皱皱巴巴不成样子,我的地图啊,亚马逊你让我太失望了(还跟那么多书一起买的,包装都没有),心碎’

这种方法是huggingface推荐的,感觉我先pandas处理好再转换成Hugging Face的数据格式也可以

看一下筛选后的数据维度:

chinese_dataset

DatasetDict({
  train: Dataset({
    features: [‘review_id’, ‘product_id’, ‘reviewer_id’, ‘stars’, ‘review_body’, ‘review_title’, ‘language’, ‘product_category’],
    num_rows: 63058
  })
  validation: Dataset({
    features: [‘review_id’, ‘product_id’, ‘reviewer_id’, ‘stars’, ‘review_body’, ‘review_title’, ‘language’, ‘product_category’],
    num_rows: 1563
  })
test: Dataset({
    features: [‘review_id’, ‘product_id’, ‘reviewer_id’, ‘stars’, ‘review_body’, ‘review_title’, ‘language’, ‘product_category’],
    num_rows: 1567
  })
})

现在我们训练集只有6万条数据了,验证测试都是1500条多

2.3 标签处理

  • 过滤掉标签太短的,这样不利于建模
  • 我们希望预测出来的结果别就两个字
books_dataset = chinese_dataset.filter(lambda x: len(x["review_title"]) > 4)

标签必须要大于4个词的数据我们才要

再看一下我们的数据

books_dataset

DatasetDict({
  train: Dataset({
    features: [‘review_id’, ‘product_id’, ‘reviewer_id’, ‘stars’, ‘review_body’, ‘review_title’, ‘language’, ‘product_category’],
    num_rows: 36452
  })
  validation: Dataset({
    features: [‘review_id’, ‘product_id’, ‘reviewer_id’, ‘stars’, ‘review_body’, ‘review_title’, ‘language’, ‘product_category’],
    num_rows: 902
  })
test: Dataset({
  features: [‘review_id’, ‘product_id’, ‘reviewer_id’, ‘stars’, ‘review_body’, ‘review_title’, ‘language’, ‘product_category’],
  num_rows: 904
  })
})

文本摘要建模实战1 之 数据清洗
文本摘要建模实战2 之 Tokenizer处理

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

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

相关文章

『踩坑记录』IDEA Spring initialzr新建Spring项目不能选择jdk8的解决方法

问题描述 Spring initializr新建Spring项目不能选低版本java 解决方法 默认官方start.spring.io已不支持自动生成低版本jkd的Spring项目,自定义用阿里云的starter即可 用阿里云的就能支持低版本jdk了 完 欢迎关注我的CSDN博客 :Ho1aAs 版权属于&a…

【C++】POCO学习总结(十九):哈希、URL、UUID、配置文件、日志配置、动态库加载

【C】郭老二博文之:C目录 1、哈希 1.1 说明 std::map和std::set 的性能是:O(log n) POCO哈希的性能比STL容器更好,大约快两; POCO中对应std::map的是:Poco::HashMap; POCO中对应std::set的是 Poco::Hash…

【04】GeoScene导出海图或者电子航道图000数据成果

1创建一个带有覆盖面和定义的产品 如果你没有已存在的S-57数据,你可以通过捕捉新的产品覆盖范围(多边形产品范围)及其所需的产品定义信息(产品元数据)来为新产品创建基础。 注: 如果你已经有一个S-57数据…

3800个字彻底弄清cortex

3800个字彻底弄清cortex arm内核发展历史cortexM0系列芯片系统框图通用寄存器m0特殊寄存器m3/m4/m7特殊寄存器 MSP和PSPxPSRPRIMASKCONTROLFAULTMASKBASEPRI 栈空间操作异常和中断 系统异常 NVIC可嵌套向量中断控制器系统操作寄存器 NVIC寄存器系统控制块SCB寄存器SysTick寄存…

算法训练第四十一天|343. 整数拆分、96. 不同的二叉搜索树

343. 整数拆分: 题目链接 给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k > 2 ),并使这些整数的乘积最大化。 返回 你可以获得的最大乘积 。 示例 : 输入: n 2 输出: 1 解释: 2 1 1, 1 1 1。解答&…

银行测试:第三方支付平台业务流,功能/性能/安全测试方法(超详细整理)

1、第三方支付平台的功能和结构特点 在信用方面,第三方支付平台作为中介,在网上交易的商家和消费者之间作一个信用的中转,通过改造支付流程来约束双方的行为,从而在一定程度上缓解彼此对双方信用的猜疑,增加对网上购物…

IDEA报错处理

问题1 IDEA 新建 Maven 项目没有文件结构 pom 文件为空 将JDK换成1.8后解决。 网络说法:别用 java18,换成 java17 或者 java1.8 都可以,因为 java18 不是 LTS 版本,有着各种各样的问题。。

PowerShell实战:Get-Content命令使用详解

目录 一、Get-Content介绍 二、语法格式 三、参数详解 四、使用案例 4.1 获取文件内容 4.2 获取文件前三行内容 4.3 获取文件最后三行内容 4.4通过管道方式获取最后两行内容 4.5使用逗号作为分隔符 4.6 Filter方式读取多个文件 4.7 Include方式读取多个文件 一、Get-Content介绍…

安装android studio

记录一下安装android studio的过程: 1.首先安装android studio到某一文件夹后,在C盘用户目录下可以看到.android文件夹。C:\Users\22515\AppData\Local\Google目录下也会出现AndroidStudio2022.2文件夹。(注意:用户名&#xff0c…

还在为学MyBatis发愁?史上最全,一篇文章带你学习MyBatis

文章目录 前言一、📖MyBatis简介1.Mybatis历史2.MyBatis特性3.对比(其他持久化层技术) 二、📣搭建MyBatis1.开发环境2.创建maven工程3.创建MyBatis核心配置文件4.创建mapper接口5.创建MyBatis的映射文件6.通过junit测试功能7.加入…

lambda自定义比较规则-sort函数或优先队列

Lambda表达式的一般形式为 [captures](params){body}对于优先队列的自定义排序规则&#xff0c;常见方法是写成结构体形式 struct cmp{bool operator()(pair<int,int> map1,pair<int,int> map2){return map1.second>map2.second;} }; priority_queue<pair&…

【C语言】自定义类型——枚举、联合体

引言 对枚举、联合体进行介绍&#xff0c;包括枚举的声明、枚举的优点&#xff0c;联合体的声明、联合体的大小。 ✨ 猪巴戒&#xff1a;个人主页✨ 所属专栏&#xff1a;《C语言进阶》 &#x1f388;跟着猪巴戒&#xff0c;一起学习C语言&#x1f388; 目录 引言 枚举 枚举…

利用原始套接字解决mac地址错误问题【南瑞SysKeeper-2000】

一&#xff1a;案例描述 一键可视顺控图像智能项目在网络部署过程中&#xff0c;对网络限制隔离安全性要求很高&#xff0c;用到正向隔离装置&#xff08;南瑞SysKeeper-2000型号&#xff09;。 图一 正向装置示意图 现场发现问题&#xff1a;直连网线情况下&#xff0c;我方…

排序 | 冒泡 插入 希尔 选择 堆 快排 归并 非递归 计数 基数 排序

排序 | 冒泡 插入 希尔 选择 堆 快排 归并 非递归 计数 基数 排序 文章目录 排序 | 冒泡 插入 希尔 选择 堆 快排 归并 非递归 计数 基数 排序前言&#xff1a;冒泡排序插入排序希尔排序选择排序堆排序快速排序--交换排序三数取中快速排序hoare版本快速排序挖坑法快速排序前后指…

Git总结 | Git面试都问些啥?

什么是Git为什么要用Git等等这些相信看到该标题点进来的同学也不希望浪费时间再看一遍&#xff0c;那么直接进入主题&#xff0c;对于日常工作中常用的Git相关操作进行整理&#xff0c;一起看看吧 面试官&#xff1a;你常用的Git操作是什么? 候选人&#xff1a;git clone 面试…

Java序列化、反序列化-为什么要使用序列化?Serializable接口的作用?

什么是序列化和反序列化&#xff1f; 把对象转换成字节序列把字节序列恢复成对象 结合OSI七层协议模型&#xff0c;序列化和反序列化是在那一层做的&#xff1f; 在OSI七层模型中&#xff0c;序列化工作的层级是表示层。这一层的主要功能包括把应用层的对象转换成一段连续的二进…

5.5 DataFrame.rolling()创建滚动窗口对象

DataFrame.rolling创建滚动窗口对象 一、介绍二、代码一、介绍 DataFrame.rolling() 是 pandas 中用于创建滚动窗口对象的函数,它可以对时间序列或其他类型的数据进行滚动计算。下面是该函数的一些参数说明: DataFrame.rolling(window, min_periods=None, center=False, win_…

Flink系列之:自定义函数

Flink系列之&#xff1a;自定义函数 一、自定义函数二、概述三、开发指南四、函数类五、求值方法六、类型推导七、自动类型推导八、定制类型推导九、确定性十、内置函数的确定性十一、运行时集成十二、标量函数十三、表值函数十四、聚合函数十五、表值聚合函数 一、自定义函数 …

Windows使用VNC Viewer远程桌面Ubuntu【内网穿透】

文章目录 前言1. ubuntu安装VNC2. 设置vnc开机启动3. windows 安装VNC viewer连接工具4. 内网穿透4.1 安装cpolar【支持使用一键脚本命令安装】4.2 创建隧道映射4.3 测试公网远程访问 5. 配置固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址5.3 测试…

微信小程序背景图片设置

问题 :微信小程序通过css:background-image引入背景图片失败 [渲染层网络层错误] pages/wode/wode.wxss 中的本地资源图片无法通过 WXSS 获取&#xff0c;可以使用网络图片&#xff0c;或者 base64&#xff0c;或者使用<image/>标签 解决方法微信小程序在使用backgroun…