自然语言处理实践(新闻文本分类)-Task2 数据分析

NLP基础实验②:TextCNN实现THUCNews新闻文本分类 一、TextCNN 下图是14年这篇文章提出的TextCNN的结构。fastText 中的网络结果是完全没有考虑词序信息的,而它用的 n-gram 特征 trick 恰恰说明了局部序列信息的重要意义。卷积神经网络(CNN Convolutional Neural Network)最初在图像领域取得了巨大成功,CNN原理就不讲了,核心点在于可以捕捉局部相关性,具体到文本分类任务中可以利用CNN来提... 阅读详情

1. 准备工作

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from collections import Counter

df = pd.read_csv(r'./data/train_set.csv', sep = '\t')
print(df.head())
   label                                               text
0      2  2967 6758 339 2021 1854 3731 4109 3792 4149 15...
1     11  4464 486 6352 5619 2465 4802 1452 3137 5778 54...
2      3  7346 4068 5074 3747 5681 6093 1777 2226 7354 6...
3      2  7159 948 4866 2109 5520 2490 211 3956 5520 549...
4      3  3646 3055 3055 2490 4659 6065 3370 5814 2465 5...

可以看出原数据的结构十分简单,只有标签和文本。其中文本中的每一个字符都用数字进行了替换(匿名化处理),而标签也是用数字来指代的类别。标签的对应的关系如下:{'科技': 0, '股票': 1, '体育': 2, '娱乐': 3, '时政': 4, '社会': 5, '教育': 6, '财经': 7, '家居': 8, '游戏': 9, '房产': 10, '时尚': 11, '彩票': 12, '星座': 13}。这个信息是官网提供的。

另外,由于原始数据的量级较大,如果内存不支持一次读入的话可以在读取时传入nrows参数来决定读取前多少条数据。

2. 统计新闻文本的长度

df['text_len'] = df['text'].apply(lambda x: len(x.split(' ')))
df['text_len'].describe()
count    200000.000000
mean        907.207110
std         996.029036
min           2.000000
25%         374.000000
50%         676.000000
75%        1131.000000
max       57921.000000
Name: text_len, dtype: float64

以上是文本长度的统计结果。可以发现最短的只用2个字符,而最长的可以有57921个字符。

plt.hist(df['text_len'], bins = 200)
plt.show()
图2.1 文本长度的分布直方图

可以看到绝大多数的文本长度都是在1000字符以下的。

3. 统计新闻类别的分布

df['label'].value_counts()
0     38918
1     36945
2     31425
3     22133
4     15016
5     12232
6      9985
7      8841
8      7847
9      5878
10     4920
11     3131
12     1821
13      908
Name: label, dtype: int64
df['label'].value_counts().plot.bar()
图3.1 各类别新闻数量统计

可以看出各类别的数据分布是很不平衡的。多的接近40000,少的1000都没有,因此后续需要做一些处理来处理不平衡带来的影响。

4. 字符分布统计

4.1 高频字符和低频字符

all_lines = ' '.join(list(df['text']))
word_count = Counter(all_lines.split(" "))
word_count = sorted(word_count.items(), key = lambda d:d[1], reverse = True)

print(len(word_count))
print(word_count[0])
print(word_count[-1])
6869
('3750', 7482224)
('3133', 1)

可以看出全体文本一共有6869个不同的字符,其中出现次数最多的是3750,最少的是3133。实际上高频词和低频词远不止这两个。

4.2 高覆盖率的字符

df['text_unique'] = df['text'].apply(lambda x: ' '.join(list(set(x.split(' ')))))
all_lines = ' '.join(list(df['text_unique']))
word_count = Counter(all_lines.split(" "))
word_count = sorted(word_count.items(), key = lambda d: int(d[1]), reverse = True)

print(word_count[0])
print(word_count[1])
print(word_count[2])
('3750', 197997)
('900', 197653)
('648', 191975)

找到前三个覆盖全文本次数最多的字符,当然还有很多其他高覆盖次数的字符。这些字符很有可能是标点符号或者常用但是无实义的词汇。这些词汇最后都应该收录到停用词表中。不过,除了当作停用词,我们还可以用它们来挖掘一些其他的信息。

4.3 尾字符

 说到标点符号,对于我们的数据而言,最容易被识别为标点符号的应该就是每条尾部的字符。因此我们有必要再看看尾字符的分布情况。

df['tail_char'] = df['text'].apply(lambda x: x.split(' ')[-1])
df['tail_char'].value_counts().sort_values(ascending = False)
900     85040
2662    39273
885     14473
1635     7379
2465     7076
        ...  
2722        1
5813        1
5374        1
1122        1
4567        1
Name: tail_char, Length: 1897, dtype: int64

可以发现,有一些字符出现在大多数文本的尾部。因此它们很有可能是跟句号功能类似的标点符号。而考虑到前面3750出现的次数非常的高,我们有理由认为3750应该是作用类似于逗号用于句子中间的符号。

df['tail_char_percent'] = df['text'].apply(lambda x: x.split().count(x.split()[-1]) \
                                           / len(x.split()))
df['tail_char_percent']
0         0.012299
1         0.028807
2         0.001309
3         0.007006
4         0.006515
            ...   
199995    0.001152
199996    0.000876
199997    0.018644
199998    0.005587
199999    0.021926
Name: tail_char_percent, Length: 200000, dtype: float64

横向地看尾字符在同一个文本中出现的频率也可以说明一些问题。

5. 作业

【1】假设字符3750,字符900和字符648是句子的标点符号,请分析赛题每篇新闻平均由多少个句子构成?

def count_sentences(x):
    word_list = x.split(' ')
    sentences = 0
    sentences = x.count('3750') + x.count('900') + x.count('648')
    if x[-1] in ['3750', '900', '648']:
        return sentences
    else:
        return sentences + 1

df['sentences'] = df['text'].apply(count_sentences)
df['sentences'].hist(bins = 20)
图5.1 句子长度分布情况
df['sentences'].mean()
80.80237

这里使用了很粗略的做法,就是把发现出现频次最高的3个字符作为句子的分隔符。实际上根据上面的分析3750是不应该包含在内的。

【2】统计每类新闻中出现次数最多的字符。

grouped = df.groupby('label')

def statistics_top_char(x):
    all_lines = ' '.join(list(x))
    word_count = Counter(all_lines.split(" "))
    word_count = sorted(word_count.items(), key = lambda d: int(d[1]), reverse = True)
    for i in word_count:
        if i[0] not in ['3750', '900', '648']:
            return i 

top_char = grouped['text'].apply(statistics_top_char)
top_char
label
0     (3370, 503768)
1     (3370, 626708)
2     (7399, 351894)
3     (6122, 187933)
4     (4411, 120442)
5     (6122, 159125)
6     (6248, 193757)
7     (3370, 159156)
8      (6122, 57345)
9      (7328, 46477)
10     (3370, 67780)
11     (4939, 18591)
12     (4464, 51426)
13      (4939, 9651)
Name: text, dtype: object

从这个结果中我们可以发现实际上还有好多其他的停用词是我们没有发掘出来的,在进行后续的工作前有必要将它们都找出来并进行适当的处理。

NLP新闻文本分类比赛学习笔记 NLP新闻文本分类比赛学习笔记NLP赛事 - Task1 赛题理解赛题理解解题思路 NLP赛事 - Task1 赛题理解 赛题理解 赛题名称:零基础入门NLP之新闻文本分类 赛题目标:通过这道赛题可以引导大家走入自然语言处理的世界,带大家接触NLP的预处理、模型构建和模型训练等知识点。 赛题任务:赛题以自然语言处理为背景,要求选手对新闻文本进行分类,这是一个典型的字符识别问题。 赛题数据 赛题以匿名处理后的新闻数据为赛题数据,数据集报名后可见并可下载。赛题数据为新闻文本,并按照字符级别进行匿名处理。整合划 阅读详情

相关推荐

【nlp】1.3 文本数据分析(标签数量分布、句子长度分布、词频统计与关键词词云)

文本数据分析能够有效帮助我们理解数据语料,快速检查出语料可能存在的问题, 并指导之后模型训练过程中一些超参数的选择。标签数量分布句子长度分布词频统计与关键词词云。

lys_828的博客 1224

自然语言处理进阶手册--新闻文本数据分类

自然语言处理进阶手册--新闻文本数据分类

学习中 1158

机器学习之自然语言处理——中文分词jieba库详解(代码+原理)

目录文本分类概述文本分类的应用文本分类的挑战文本分类的算法应用文本分类所需知识中文分词神器-jiebajieba分词的三种模式词性标注载入词典(不分词)词典中删除词语(不显示)停用词过滤调整词语的词频关键词提取基于TF-IDF算法的关键词提取基于 TextRank 算法的关键词抽取返回词语在原文的起止位置(论文常用算法)词频统计(附智能程序)每文一语 文本分类概述 文本分类的应用 在大数据时代,网络上的文本数据日益增长。采用文本分类技术对海量数据进行科学地组织和管理显得尤为重要。 文本作为分布最广、数据量最

迷茫与徘徊只会让你陷入绝境,欢迎私信博主,带你开始提升变现价值! 5300

如何统计文本长度和句子长度累积函数

文本长度可视化

当回首往事的时候,不会因虚度年华而悔恨,也不会因碌碌无为而羞愧。 3579

搜狗实验室新闻数据 文本分类

搜狗实验室新闻数据 文本分类

DBeaver连接IoTDB避坑指南:手动配置JDBC驱动的完整流程(附问题排查)

本文提供了在DBeaver中手动配置Apache IoTDB JDBC驱动的完整流程与避坑指南。详细解析了从驱动创建、库文件添加(关键是指向整个lib目录)到连接测试的每一步,并重点针对常见的ClassNotFoundException、连接拒绝等错误提供了深度排查方案,帮助用户高效建立图形化管理连接。

weixin_28327051的博客 393

Datawhale - 入门NLP之新闻文本分类 - task2 数据分析

前面已经学习记录了: Datawhale - 入门NLP之新闻文本分类 - task1 赛题理解 今天继续学习记录:task2 数据分析,主要是对巡检集的数据进行分析,统计,了解数据整体的分布情况! 1 竞赛数据来源 竞赛数据来源,进入天池实验室 -- “零基础入门NLP - 新闻文本分类”: https://tianchi.aliyun.com/competition/entrance/531810/information,然后点击报名参赛,再点击“赛题与数据”...

何小义的博客 510

手把手教你用FPGA解析AD9680的JESD204B数据流(附Verilog代码)

本文详细介绍了如何利用FPGA解析AD9680的JESD204B数据流,包括协议核心机制、硬件平台搭建、Verilog代码实现及调试技巧。通过实战案例和代码示例,帮助工程师快速掌握高速ADC数据采集与处理技术,提升系统性能。

weixin_33640562的博客 371

NLP入门--新闻文本分类Task2

NLP入门学习笔记TASK2数据读取数据分析句子长度分布新闻类别分布字符分布 数据读取 对于该数据集的读取基于pandas库。 import pandas as pd train_df=pd.read_csv('C:/Users/Administrator/Desktop/wenbenfenlei/train_set.csv',sep='\t') train_df.head() 第一行导入pandas工具库,第二行读取csv格式的训练集文件,第三行显示前五行的数据。结果如下: label text

m0_46790753的博客 258

【飞控】UAV Toolbox Support Package for PX4 Autopilots安装与配置

安装配置UAV Toolbox Support Package for PX4 Autopilots硬件安装包

m0_58373406的博客 1613

损失函数大汇总(四十三)(Boundary Loss附公式推导与代码)

摘要 Boundary Loss是一种针对图像分割任务的边界优化损失函数,特别适用于小目标、细长结构和类别不平衡场景。它通过引入真实边界的有符号距离场(SDF),将边界距离优化问题转化为区域积分形式。与Dice Loss等区域重叠损失不同,Boundary Loss更关注预测边界与真实边界的精确对齐,而非整体区域重叠。其核心公式为像素级SDF值与预测概率的乘积求和,通过梯度调整使预测概率在真实边界内部升高、外部降低。该损失通常与区域型损失(如CE或Dice)联合使用,形成"区域分割+边界修正&qu

悦学共鸣,温柔以待,汇聚光芒,共同成长 354

天池零基础入门NLP之新闻文本分类task2--数据分析

nlp文本分类Task2–数据分析 1.对赛题数据进行了读取 2.对新闻长度,label分布进行了可视化 3.分析了赛题每篇新闻平均句子长度,每类新闻中出现次次数最多的字符 4.分析了每类新闻中的关键词 import numpy as np import matplotlib.pyplot as plt import pandas as pd %matplotlib inline data_df = pd.read_csv('data/train_set.csv',sep='\t') data_df.h

不再的blog 987

超分辨率重建:ESPCN与SRGAN技术对比

超分辨率重建:ESPCN与SRGAN技术对比​ 人工智能,计算机视觉,大模型,AI,超分辨率重建是一种通过技术手段,将低分辨率图像转换为高分辨率图像的过程。它的目的是恢复低分辨率图像中丢失的细节信息,使图像具有更高的清晰度和视觉质量。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 7万+

零基础入门NLP - 天池新闻文本分类Task2笔记

零基础入门NLP - 天池新闻文本分类 以下以Datawhale与天池举办的新闻文本分类这个NLP赛题做的NLP入门Task2笔记 赛题链接:https://tianchi.aliyun.com/competition/entrance/531810/introduction. Task2:数据读取与数据分析 主要内容为数据读取和数据分析,具体使用Pandas库完成数据读取操作,并对赛题数据进行分析构成。 数据读取 赛题数据使用csv格式进行存储。因此可以直接用Pandas完成数据读取的操作。 import

qq_39544991的博客 268

【乐企】开票控制服务

例子:企业信息初始化。

九七的博客 451

RK3588 ENV 环境配置之 fw_printenv

RK3588 ENV环境配置指南 本文详细介绍了在RK3588平台上配置ENV环境变量的完整流程。首先需要在parameter分区表中划分env分区,然后在U-Boot中配置MMC偏移地址。接着编译fw_printenv工具并部署到目标设备,配置fw_env.config文件指定存储位置。重点解决了内核中读写ENV时遇到的CRC校验问题,通过U-Boot的saveenv命令初始化环境变量存储区域。最后展示了如何使用fw_printenv/fw_setenv工具在内核中读写ENV变量,并建议将配置集成到根文件

501846585_QQAndroid_java 1030

天池NLP新闻文本分类学习赛心得-Task2

天池NLP新闻文本分类学习赛心得-Task2 赛题链接:https://tianchi.aliyun.com/competition/entrance/531810/introduction 今天按照昨天的存储方法后,再次读取数据相比昨天耗时就小的多了,并对文本数据进行初步处理及分析。 先来探究每条文本长度分布如何: 可以看到总共统计了20w条文本数据记录,其中最长的有57921个字符,最短的只有两个字符,字符长度基本上都在1500个左右。 下面在来看看哪种类型的新闻文本最多: 由下面的label对应

weixin_46281427的博客 345

【ITS模型】基于MATLAB的ITS宽带短波信道模型的建模和仿真

1.软件版本 MATLAB2010b 2.本算法理论知识 对短波信道建模具有里程碑意义的是沃特森在1970年发表的一篇文章,文章中提出了一种静态模型,并在大气中进行了实验验证。 此静态模型可以描述为高斯散射增益抽头延迟线模型,即Watterson模型。 Watterson信道模型是经典的窄带短波信道模型,在这个模型中,信道衰落是瑞利幅度分布,而在每种传播模式中多普勒扩展的功率谱满足高斯分布。Watterson模型没有定义延时扩展的形状,认为各个多径传输模式中不存在延时扩展。其...

FPGA/MATLAB学习教程/源码/项目合作开发 2757

自然语言处理实践(新闻文本分类)-Task1 赛题理解

1.赛题介绍 赛题:Datawhale零基础入门NLP赛事 地址:https://tianchi.aliyun.com/competition/entrance/531810/introduction?spm=5176.12281973.1005.1.3dd52448NqFj16 赛题以自然语言处理为背景,要求选手根据新闻文本字符对新闻的类别进行分类,这是一个经典文本分类问题。通过这道赛题可以引导大家走入自然语言处理的世界,带大家接触NLP的预处理、模型构建和模型训练等知识点。 2. 数据介绍 .

Zee_Chao的博客 737

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

NLP之新闻文本分类——Task2

Task2——数据读取与数据分析 1.学习目标 学习使用Pandas读取赛题数据 分析赛题数据的分布规律 2.数据读取 这里的read_csv由三部分构成: 读取的文件路径,这里需要根据改成你本地的路径,可以使用相对路径或绝对路径; 分隔符sep,为每列分割的字符,设置为\t即可; 读取行数nrows,为此次读取文件的函数,是数值类型(由于数据集比较大,建议先设置为100); import pandas as pd train_df = pd.read_csv('datalab/72510/train_se

DZZ18803835618的博客 361

NLP入门Task2 数据读取与数据分析(以新闻文本分类赛事进行学习)

在datawhale组织的天池大赛学习:入门NLP(以新闻文本分类赛事进行学习)。 本节内容主要以Pandas对数据进行读取和分析。 目录:一、数据读取及查看二、数据分析1. 句子长度分析2. 新闻类别分析3. 字符数量统计三、结论四、作业 一、数据读取及查看 读取数据集并查看: import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline df = pd.read_csv('input/

sinat_31405379的博客 553

零基础入门NLP- 新闻⽂文本分类

零基础入门NLP- 新闻⽂文本分类 比赛地址https://tianchi.aliyun.com/competition/entrance/531810/introduction Task1 赛题理理解 赛题数据为新闻文本,并按照字符级别进行匿名处理,整合划分出14个候选分类:财经、彩票、房产、股票、家居、教育、科技、社会、时尚、时政、体育、星座、游戏、娱乐。 评测指标为类别f1_score的均值。 解题思路 思路1:TF-IDF+机器学习分类器 TF-IDF算法介绍 思路2:FastText FastTe

qq_40267462的博客 496

NLP入门--新闻文本分类Task1

NLP入门学习笔记TASK1背景介绍数据下载和分析数据读取解题思路 背景介绍 本次学习任务是基于天池的nlp入门比赛–零基础入门之NLP文本新闻分类,该赛题以当下非常火热的自然语言处理为背景,要求选手使用模型对各种新闻文本语料进行分类,以提高分类精度为目标。 数据下载地址为 [数据下载链接] 数据下载和分析 数据下载地址为 数据下载链接,该数据下载需要先报名对应的比赛,如下图所示点击报名完成相应报名步骤即可。 从官网上下载得到的数据只是提供了压缩包的下载地址,需要自行去下载然后解压,最终会得到这样的几个数

m0_46790753的博客 351

NLP学习实践天池赛Task2

NLP天池赛Task1 数据读取与数据分析 学习目标 数据读取 数据分析 句子长度分析 新闻类别分布 字符分布统计 数据分析的结论 本章小结 本章作业 数据读取与数据分析 本章主要内容为数据读取和数据分析,具体使用Pandas库完成数据读取操作,并对赛题数据进行分析构成。 学习目标 学习使用Pandas读取赛题数据 分析赛题数据的分布规律 数据读取 赛题数据虽然是文本数据,每个新闻是不定长的,但任然使用csv格式进行存储。因此可以直接用Pandas完成数据读取的操作。 1. imp

CharlieTang的博客 250

NLP新闻文本分类学习赛 - Task2 数据读取与数据分析

本章主要内容为数据读取和数据分析,具体使用Pandas库完成数据读取操作,并对赛题数据进行分析构成。 本章作业 假设字符3750,字符900和字符648是句子的标点符号,请分析赛题每篇新闻平均由多少个句子构成? import pandas as pd from collections import Counter import re //分隔符sep,将每列分割开的字符,设置为\t即可; train_df = pd.read_csv('TRAIN_DATA/train_set.csv', sep='\

知识空间 376

Datawhale零基础入门NLP赛事 - Task2 数据读取与数据分析

Datawhale零基础入门NLP赛事 - Task2 数据读取与数据分析一、赛事名称及介绍二、数据探索性分析 一、赛事名称及介绍 赛事名称:: 零基础入门NLP - 新闻文本分类. 赛事介绍: 赛题简介 赛题以新闻数据为赛题数据,赛题数据为14个类别的新闻文本,要求选手对新闻文本进行分类。(为了防止人工标注,官方对赛事数据的文本按照字符级别进行了匿名处理) 难度分析 该赛题难度相对较低,适合广大NLP小白入门。 二、数据探索性分析 数据读取: # 文件读取 train= pd.read_c

weixin_46545555的博客 167
上一篇: 自然语言处理实践(新闻文本分类)-Task1 赛题理解
下一篇: 自然语言处理实践(新闻文本分类)-Task3 简单词向量+机器学习算法
Zee_Chao
博客等级 码龄11年 168粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值