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

Hugging Face 实战系列 总目录

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

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

1 任务概述

1.1 任务概述

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

1.2 数据与任务解析

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

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

这个数据集也是Hugging Face内置的数据集,这个数据集有多个语言版本,我们选中文的就好:
Hugging Face实战-系列教程19:文本摘要建模实战1 之 数据清洗(中文商城评价数据处理方法)_第2张图片
这个数据中我们主要关注两个字段:(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数据格式后的数据展示,前五条:
Hugging Face实战-系列教程19:文本摘要建模实战1 之 数据清洗(中文商城评价数据处理方法)_第3张图片

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处理

你可能感兴趣的:(Hugging,Face实战,nlp,文本摘要建模,Hugging,Face)