竞赛打卡
今年想增加一些竞赛经历,冲一冲排行榜,所以用这种方式来记录学习过程,利用【输出】来倒逼【输入】。第一次选择的是入门级新人挑战赛—新闻文本分类挑战赛。训练集和测试集可在天池官网下载
赛题以自然语言处理为背景,要求选手根据新闻文本字符对新闻的类别进行分类。作为一个经典的文本分类问题,它可以引导我们走入自然语言处理的世界,接触NLP的预处理、模型构建和模型训练等知识点
训练集数据为20万条新闻文本,并按照字符级别进行匿名处理,整合划分出14个候选分类类别:财经、彩票、房产、股票、家居、教育、科技、社会、时尚、时政、体育、星座、游戏、娱乐。每条新闻都被编码为整数序列,一个单词对应一个整数。测试集有五万条不带标签的数据,我们的任务是训练模型,将测试集中每一条新闻的标签进行正确分类。
数据读取
赛题数据为CSV存储格式,可以用Pandas直接进行数据读取。它主要用于数据分析,允许从各种文件格式(例如,逗号分隔的值,JSON,SQL,Microsoft Excel导入数据。同时也允许进行各种数据操作操作,例如合并,重塑,选择以及数据清理和数据整理功能。
在这里,我选择用read_csv()方法,先来看一下数据是什么样子
read_csv()可接受以下常用参数
filepath_or_buffer : various
文件路径,a str, 文件相对路径/,绝对路径, URL (including http, ftp, and S3 locations), 或者具有 read() 方法的任何对象 (such as an open file or StringIO).
sep
分隔符,为每行分割的字符,read_csv()默认为",",可设置为‘\t’
nrows
读取文件的行数。用于读取大文件的片段。
更多用法可参考Pandas官网文档
数据分析
新闻文本长度
每行句子的字符使用空格隔开,因此可以用统计空格的数量来计算句子长度
可以看出,每个句子平均由907个字符构成,最短的句子长度是2,最长的句子长度是57921.为了直观感受一下句子长度,我们还可以绘制直方图。
新闻类别分布
数据被划分出14个候选分类类别:财经、彩票、房产、股票、家居、教育、科技、社会、时尚、时政、体育、星座、游戏、娱乐。我们可以具体统计每类新闻样本的个数
在数据集中标签的对应的关系如下:{'科技': 0, '股票': 1, '体育': 2, '娱乐': 3, '时政': 4, '社会': 5, '教育': 6, '财经': 7, '家居': 8, '游戏': 9, '房产': 10, '时尚': 11, '彩票': 12, '星座': 13}
可以看出,在训练集中科技类新闻最多,样本量接近40000,最少的是星座新闻。数据集类别分布存在较为不均匀的情况,会严重影响模型的精度
字符数量统计
观察数据文件,字符之间以空格相隔,我们可以先把所有句子进行拼接,然后统计每个字符出现的次数
从统计结果可以看出,共有6869个字符,其中编号3750出现次数最多,推测可能是标点符号“,”。由此可以想到,我们能大致推测平均一篇新闻由多少个句子构成。
假设编号900是句号,以一个句号作为一个句子的结束。通过统计得出,平均一篇新闻有17个句子,最短的一篇仅有1个句子,最长的一篇新闻有735个句子
对新闻文本进行进一步分析,编号‘3750’,‘648’,‘900’很可能是标点符号。如果不考虑这些标点符号,还可以统计得出每一类新闻中出现次数最多的字符
分析结果
综合以上分析,我们得出的结论有:
1.训练集共20万条新闻,每个句子平均由907个字符构成,最短的句子长度是2,最长的句子长度是57921
2.新闻类别分布不均匀,科技类新闻最多,样本量接近40000,最少的是星座新闻。
3.对新闻文本进行进一步分析,编号‘3750’,‘648’,‘900’在文本中的覆盖率接近99%,很可能是标点符号。
4.训练集中不同类别的新闻中出现的词汇具有特色,但是需要去除共同的常用词。
下篇预告:
基于机器学习的文本分类