1 赛题理解

1.1 比赛内容

对新闻文本的类别进行预测。比赛提供了包含14个新闻类别的文本数据,分为训练集和测试集A,B。训练集包含20万条新闻文本数据,测试集A,B分别包含5万条新闻文本数据。所有的新闻文本按照字符级别进行了匿名处理。

1.2 评价指标

评价指标为F1分数:

其中,precision表示分类的准确率,recall表示分类的召回率。

2 数据读取与分析

2.1 数据总体分布信息

以训练集为分析数据。总共包括20万条新闻以及对应的标签数据 。新闻标签共有14个类别,符号对应关系如下:{‘科技’: 0, ‘股票’: 1, ‘体育’: 2, ‘娱乐’: 3, ‘时政’: 4, ‘社会’: 5, ‘教育’: 6, ‘财经’: 7, ‘家居’: 8, ‘游戏’: 9, ‘房产’: 10, ‘时尚’: 11, ‘彩票’: 12, ‘星座’: 13}。不同类别的数据分布如下图所示。

注意到类别的新闻数量差距较大,因此在使用模型进行分类预测时需要考虑到类别不平衡的问题。

对于这20万条新闻信息,新闻文本长度的统计结果如下所示:
count 200000.0
mean 907.2
std 996.0
min 2.0
25% 374.0
50% 676.0
75% 1131.0
max 57921.0

新闻文本平均长度为907个字符,大多数新闻文本的长度小于2000。

2.2 新闻字符分析

以下对新闻的字符信息进行分析。
新闻文本一共包含6869个字符,其分布情况如下所示:
count 6869.0
mean 26414.5
std 146124.1
min 1.0
25% 25.0
50% 459.0
75% 7258.0
max 7482224.0
其中数量最多的前20个字符如下图所示:

这数量最多的前20个字符在所有新闻中覆盖率为:
[0.989985, 0.959875, 0.988265, 0.811675, 0.882715, 0.835805, 0.881245, 0.793565, 0.815855, 0.846855, 0.780045, 0.88655, 0.778645, 0.81535, 0.676225, 0.81534, 0.796865, 0.724985, 0.619885, 0.82428]
可以看到3750,900和648这三个字符的覆盖率非常高,很有可能是标点符号。
如果讲3750, 900和648看作标点符号,则新闻文本句子数量的统计信息如下:
count 200000.0
mean 81.0
std 87.0
min 1.0
25% 29.0
50% 57.0
75% 103.0
max 3460.0
新闻文本平均由81条短句组成。
各个类别的新闻,最多的字符及其数量如下所示:
(0, 3750, 1267331, 0.0371),
(1, 3750, 1200686, 0.0373),
(2, 3750, 1458331, 0.0457),
(3, 3750, 774668, 0.0446),
(4, 3750, 360839, 0.037),
(5, 3750, 715740, 0.0524),
(6, 3750, 469540, 0.0376),
(7, 3750, 428638, 0.0419),
(8, 3750, 242367, 0.0434),
(9, 3750, 178783, 0.0365),
(10, 3750, 180259, 0.0402),
(11, 3750, 83834, 0.044),
(12, 3750, 87412, 0.0402),
(13, 3750, 33796, 0.0506)

3 基于机器学习的文本分类方法

文本分类问题可以使用机器学习方法来进行处理,而这里的关键步骤是将文本信息做向量化处理。自然语言处理中对文本信息进行向量化处理通常有两类方法,一类是单词离散式表示方法,包括对词向量进行one-hot处理后再使用词袋模型来表示文档、使用Ngram方法进行处理后使用词袋模型、使用TF-IDF方法表示文档等;另一类是单词分布式表示方法,包括使用word2vec方法对单词进行向量化再进行处理、使用语义环境词嵌入等方法表示单词再进行处理。这里先使用一些离散式单词表示方法对文档进行抽象后,再使用机器学习方法进行分类。

先使用词袋模型对文档进行处理,从而得到表示各个文档的词袋向量。再以其为输入,进行岭回归(Ridge regression,多元线性回归的特殊处理,损失函数中加入了权重系数的平方和损失项),在使用10000条文档信息作为输入的情况下,F1值最终达到了0.659。(模型对数据量敏感,计算时间严重依赖于模型的输入数据量,因此只选择了10000条数据进行处理,由于模型较为简单,其预测效果随着模型输入样本达到一定数量后基本不变化,预计对最终的实验结果影响不大。)

以上述词袋模型+岭回归为基准模型,以下将从两个方面进行改进。第一个方面是使用更优异的文档表示模型,如将词袋模型改为TF-IDF模型;另一个方面是选择更复杂的机器学习分类模型进行处理,如将岭回归模型改为集成数模型(LightGBM)。先介绍一下在第一个方面的改进效果。在使用TF-IDF方法后(同样只选择了10000条文本数据),模型预测的F1值达到了0.863。模型的预测效果出现了大幅度的提升,可见文档文本表示对模型的预测效果起着重要的作用。

4 基于Fasttext模型的新闻文本分类方法

前述几种机器学习模型在进行新闻文本分类时均可取得一定的预测效果。实际上,对于一般的机器学习模型而言,在小数据集上预测效果相对理想,然而由于模型的复杂度有限,随着数据集的增加,模型的预测效果却不能获得相应的提升。在这个方面,深度学习模型的优势便发挥了出来。这里我们先使用一种常用的基础的新闻文本分类方法——Fasttext模型来对新闻文本进行分类预测。

Fasttext方法是集中结合了前馈神经网络,字符级别的Ngram方法,和层次softmax方法的混合方法,是一种监督学习模型。其内容如下:
(1)字符级别的Ngram输入:

(2)神经网络架构

(3)层次Softmax方法

这里使用fasttext开源库对比赛数据进行了分类预测,借鉴了DataWhale天池网站上的代码,最后预测得到的F1分数为0.901。

5 基于Word2vec词向量的新闻文本分类方法

前面提到新闻文本分类任务可以拆分成两步来进行,第一步先将文本表示成词向量,第二步则使用机器学习或深度学习模型来对模型输入(词向量)进行分类处理。因为模型的提升也可以从这两个方面来着手。第一种思路是选择更为合适的词向量方法,比如从one-hot词向量转变成Word2vec词向量;而第二种思路则是选择更为有效的预测模型,比如从多元线性回归模型转成集成树模型(GBDT, Xgboost, lightgbm)。在第4节提到的Fasttext方法在这个任务中可以看成是将两个步骤融合起来,同时进行。

在本节中,我们尝试使用Word2Vec方法来生成词向量,再将这些词向量作为模型的输入,用于预测。这里重点参考了DataWhale公布的Word2Vec代码,语料选择的是本任务的语料。在DataWhale提供的参考代码中,模型似乎想要考虑不同类别新闻数量不一致可能带来的影响,使得各个类别的数据分布相对“均匀”,但不太确定这样做是否真的有效。另外模型似乎想要使用十折交叉验证法来进行训练和验证,因此制作了10个均等的数据集,但后续的代码又没真的进行十折交叉验证。感觉代码写的很乱。

以下描述一下使用Word2Vec方法得到词向量的思路,以及得到词向量后使用TextCNN来进行新闻文本分类的思路。Word2Vec 利用大量的语料信息将单词表示成词向量,在词向量的生成过程充分利用了语句中的上下文信息,从而使得词向量能够反映出语义信息。Word2Vec可以将one-hot编码的稀疏词向量表示成稠密编码的低维词向量,并使得词向量具有语义信息。有两种处理方式:CBOW (continuous bag of words ) 方法和Skipgrams方法。CBOW通过建立全连接神经网络,使用一段语句中的n-1个词预测剩下的一个词,从而获得该单词对应的隐向量,并将该向量作为词向量。CBOW通过建立全连接神经网络,使用一段语句中的n-1个词预测剩下的一个词,从而获得该单词对应的隐向量,并将该向量作为词向量。通过这样的处理后,就可以重复表示单词之间的关联关系,语义相近的单词,词向量也相近,从而可以很好地表示单词的语义信息。

通过Word2Vec得到词向量后,可以将文本各个词向量直接相加,从而抽象表示文本,再使用机器学习模型进行处理。这和第3小节中基于词袋模型的处理方法思路是类似的,但这样势必会遗漏文本中的大量信息。另一种思路则采取深度学习方法来进行分类处理。第一种方法可以使用循环神经网络(比如LSTM)来进行处理,这里可以通过单词补充的方式使得模型的输入是定长的。第二种方法可以采用更为复杂的特定模型来进行处理,比如TextCNN方法。还可以考虑引入注意力机制。这里重点介绍一下TextCNN方法。

TextCNN是2014年提出的模型。在对词向量输入进行处理时,使用了CNN。模型的结果如下:

对于句子,模型对输入向量先使用不同卷积核进行卷积操作,再经过两次拼接,最后预测类别。TextCNN方法之后将加以实现。

6 基于Bert预训练模型的新闻文本分类方法

前面提到使用Fasttext, Word2Vec等方法对单词进行分布式表示,再对训练好的词向量使用机器学习或者深度学习的方法来进行处理。然而,前述方法无法解决一词多义的问题,基于语义环境的词嵌入模型被提出来解决这一问题。这些模型包括ELMo, GPT, Bert等。它们往往需要使用极大的文本数据进行预训练,再在特定的任务数据集上进行微调,并用于相关任务的处理。在介绍Bert之前,需要介绍一下Transformer结构。
Transformer完全使用注意力机制的模型,里面的self attention的结构实现了并行计算的功能,其示意图如下。

Transformer包括encoder和decoder两个部分。Bert模型采用了双向的结构,其基本模型是图中的encoder部分。之后会对基于Bert预训练模型预测新闻文本类别的方法进行实现。

天池比赛——新闻文本分类比赛(零基础入门NLP)相关推荐

  1. 天池零基础入门NLP - 新闻文本分类Top1方案的bert4torch复现

    天池有些长期比赛可以练习玩玩(还可以继续提交),于是试了下简单的新闻文本分类任务,Top1的解决方案思路是"预训练+fgm+交叉验证模型融合",代码是基于bert4keras的,本 ...

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

    零基础入门NLP - 天池新闻文本分类 以下以Datawhale与天池举办的新闻文本分类这个NLP赛题做的NLP入门Task2笔记 赛题链接:https://tianchi.aliyun.com/co ...

  3. 【初学者入门】零基础入门NLP - 新闻文本分类

    序言 从今天开始入门学习NLP,虽然有点晚,但是我觉得任何时候都值得开始,尤其是面对你去感兴趣的事情.今天的任务是 [零基础入门NLP - 新闻文本分类],这是天池大赛中的入门级算法比赛,入口链接请自 ...

  4. Task01——零基础入门NLP - 新闻文本分类之赛题理解

    本篇目标 首先本篇文章会对赛题进行介绍以及个人对赛题的理解,带大家接触NLP的预处理.模型构建和模型训练等知识点. 赛题介绍 赛题名称:零基础入门NLP - 新闻文本分类 赛题任务:赛题以自然语言处理 ...

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

    本文是对阿里云新人竞赛中的"零基础入门NLP - 新闻文本分类"解体过程进行的记录,目前仅使用了textCNN模型进行预测,后续还会考虑使用LSTM进行对比. 赛题数据 赛题以新闻 ...

  6. 天池零基础入门NLP竞赛实战:Task4-基于深度学习的文本分类3-基于Bert预训练和微调进行文本分类

    Task4-基于深度学习的文本分类3-基于Bert预训练和微调进行文本分类 因为天池这个比赛的数据集是脱敏的,无法利用其它已经预训练好的模型,所以需要针对这个数据集自己从头预训练一个模型. 我们利用H ...

  7. 零基础入门NLP之新闻文本分类挑战赛——赛题理解

    假期还有两周左右就结束了,正巧,Datawhale联合天池发布了零基础入门NLP的学习,于是报名参加了零基础入门NLP-新闻文本分类. 本人之前刚接触NLP没多久,记录一下学习的历程,供和我一样的小白 ...

  8. 零基础入门NLP - 新闻文本分类,正式赛第一名方案分享

    零基础入门NLP - 新闻文本分类,正式赛第一名方案分享:https://mp.weixin.qq.com/s/7WpZUqdlItBToLYuRLm44g

  9. 【天池学习赛】零基础入门NLP - 新闻文本分类

    一.赛题描述 赛题数据为新闻文本,并按照字符级别进行匿名处理.整合划分出14个候选分类类别:财经.彩票.房产.股票.家居.教育.科技.社会.时尚.时政.体育.星座.游戏.娱乐的文本数据. 赛题任务:赛 ...

最新文章

  1. relay.build调用关系
  2. 国家微生物科学数据中心微生物组学数据汇交指南
  3. IT巨头混战平板市场三大系统争霸格局初现
  4. 好莱坞电影公司系列电影
  5. mysql分库主键_分库主键设计-Mysql
  6. win7关闭系统索引服务器,win7系统如何关闭索引服务
  7. 此版本的visual studio无法打开下列项目_深度学习实现高精度钢琴曲转谱Piano transcription项目简明使用教程...
  8. 获取当前html的名字,c#获取当前页面名字
  9. 工业循环冷却水处理设计规范_循环冷却水系统及其水处理
  10. SpringMVC【校验器、统一处理异常、RESTful、拦截器】
  11. NDVI归一化差异植被指数
  12. gnuplot的常用技巧
  13. pandas数据分组聚合——groupby()、aggregate()、apply()、transform()和filter()方法详解
  14. Android发送短信SMS的编程
  15. java中outer的用法
  16. 详解2.5G/5G/10G Base-T以太网接口物理层一致性测试!
  17. C++一本通题库1005
  18. php cakephp like,cakephp常见知识点汇总
  19. 绘图技巧 | 超多种类在线可视化图表制作工具推荐
  20. 贾跃亭被法院列入“老赖”黑名单,这下真成“下周回国假药停”了?

热门文章

  1. win7 声卡安装失败修复方法
  2. JavaScript-switch条件分支语句
  3. 心情不美丽,爬了一些美图,独自欣赏!
  4. Vue 监听刷新 切屏
  5. Failed to introspect Class [org.springframework.cloud.gateway.config.GatewayAutoConfiguration$NettyC
  6. OSChina 周二乱弹 —— 春节假期已经完全结束
  7. 菜谱 延安特色美食小吃
  8. 双操作系统安装(五)Windows及Manjaro Linux双系统安装教程
  9. HP2132打印机简易说明
  10. About kettle carte