Hugging Face实战-系列教程19:文本摘要建模实战1 之 数据清洗(中文商城评价数据处理方法)
🚩🚩🚩Hugging Face 实战系列 总目录
有任何问题欢迎在下面留言
本篇文章的代码运行界面均在Jupyter Notebook中进行
本篇文章配套的代码资源已经上传
文本摘要建模实战1 之 数据清洗
文本摘要建模实战2 之 Tokenizer处理
1 任务概述
1.1 任务概述
- 摘要任务要去解决一个什么事情呢
- 就是输入一个文章,输出一个总结归纳性的文字或者标题
- 输入也是文本,输出也是文本的text-to-text任务
- 对原本的文本进行精简,输入长文本,输出短文本
- 用一个长文本生成一个标题,用一个标题生成一个长文本,都是文本摘要建模的任务
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
- 从datasets 模块导入load_dataset方法
- 从本地路径加载数据
- 打印出数据
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)
- 展示样本函数
- 从训练集中展示选取3条数据样本
- 遍历取出样本
- 打印标题
- 打印长文本
‘>> Title: 重修版的结局’ ’
‘>> Review:’
重修版的结局还是跟原版没什么很大出入…虽然说把原来伏笔用上句式古风可是结局感觉给人有点仓促’
‘>> Title: 盗版书!!!’
‘>> Review:’
这是盗版书,中间翻不开,胶装在一起的,如果想要翻开看全图,书都要撕掉的感觉,装订特别烂,我才翻了几次就有掉页的趋势,后悔后悔’
‘>> Title: 一分钱一分货’ ‘>> Review: 除了便宜真没什么好的,即便4档面包靠里一面还是会胡,设7档有什么意义。’
2 数据预处理
2.1 查看所有类别
- 数据种类挺多的,咱们训练次数比较少,就选一个类别的
- 先转换成pandas格式来统计
- 书比较多,数据还算可以,咱们就用书的来玩
chinese_dataset.set_format("pandas")#格式转pnadas,这点用着还挺方便
chinese_df = chinese_dataset["train"][:]#对训练数据统计
# 前20个类别的数量
chinese_df["product_category"].value_counts()[:20]
- 格式转pnadas,这点用着还挺方便
- 取出训练数据
- 对训练数据进行各个列的值进行统计,打印统计结果
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)
- 过滤类别的函数
- 返回只要书的类别
- 首先转换为 Hugging Face要求的数据格式
- 把选用类别的函数给到它
- 再用展示样本的函数进行展示
打印结果:
’ 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
??})
})
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!