天池-零基础入门NLP

  • 新闻文本分类
    • 导入相关库
    • 读入数据
    • 文本表示
    • 训练模型
    • 输出上传文件
    • 存在问题

新闻文本分类

比赛地址
文本分类的任务是将给定的文本划分到事先规定的文本类别。

  • 赛题难度:

    • 匿名数据 + 长文本 + 类别不均衡。
  • 解题思路:
    • 思路1:TF-IDF提取特征 + SVM分类;
    • 思路2:训练FastText词向量并分类;
    • 思路3:训练Word2Vec词向量 + TextCNN模型分类;
    • 思路4:训练Bert词向量并分类;
    • 思路5:Bert分类 + 统计特征的树模型;
    • 思路6:……
  1. 赛题中每个新闻包含的字符个数平均为1000个,还有一些新闻字符较长;
  2. 赛题中新闻类别分布不均衡,科技类新闻样本量接近4万,星座类新闻(13)样本量不到1千;
  3. 赛题总共包括7000-8000个字符。

导入相关库

import numpy as np
import pandas as pd
from sklearn.model_selection import KFold
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.svm import LinearSVC  # 可以使用其它机器学习模型
from sklearn.metrics import f1_score

读入数据

train_df = pd.read_csv('../data/train_set.csv', sep='\t')
test_df = pd.read_csv('../data/test_a.csv', sep='\t')

文本表示

向量空间模型

tfidf = TfidfVectorizer(sublinear_tf=True,strip_accents='unicode',analyzer='word',token_pattern=r'\w{1,}',stop_words='english',ngram_range=(1,3),max_features=10000)tfidf.fit(pd.concat([train_df['text'], test_df['text']]))
train_word_features = tfidf.transform(train_df['text'])
test_word_features = tfidf.transform(test_df['text'])

训练模型

k折交叉验证
LinearSVC模型

X_train = train_word_features
y_train = train_df['label']
X_test = test_word_featuresKF = KFold(n_splits=5, random_state=7)
clf = LinearSVC()
# 存储测试集预测结果 行数:len(X_test) ,列数:1列
test_pred = np.zeros((X_test.shape[0], 1), int)
for KF_index, (train_index,valid_index) in enumerate(KF.split(X_train)):print('第', KF_index+1, '折交叉验证开始...')# 训练集划分x_train_, x_valid_ = X_train[train_index], X_train[valid_index]y_train_, y_valid_ = y_train[train_index], y_train[valid_index]# 模型构建clf.fit(x_train_, y_train_)# 模型预测val_pred = clf.predict(x_valid_)print("LinearSVC准确率为:",f1_score(y_valid_, val_pred, average='macro'))# 保存测试集预测结果test_pred = np.column_stack((test_pred, clf.predict(X_test)))  # 将矩阵按列合并
# 多数投票
preds = []
for i, test_list in enumerate(test_pred):preds.append(np.argmax(np.bincount(test_list)))
preds = np.array(preds)

注 意 : \color{#FF7D00}{注意:} 注意:此处留出法和k折交叉验证效果相差无几。

输出上传文件

submission = pd.read_csv('../data/test_a_sample_submit.csv')
submission['label'] = preds
submission.to_csv('../output/LinearSVC_submission.csv', index=False)

存在问题

  • 虽然n元语法能够体现邻接词组的关系,但是它难以捕捉句子中距离较远的词和词之间的关系。
  • 每个新闻平均字符个数较多,可能需要截断。
  • 由于类别不均衡,会严重影响模型的精度。

新闻文本分类之旅 机器学习相关推荐

  1. 基于机器学习的新闻文本分类

    Task1-数据探索分析 数据存储 由于用pandas一次性读取20w条数据显示memoryerror,内存不够,所以想到把数据存到数据库中,随用随取比较简便.把训练集20w条数据存到了mongodb ...

  2. 【nlp】天池学习赛-新闻文本分类-机器学习

    目录 1.读取数据 查看句子长度 2.可视化 2.1.新闻的字数分布 2.2.新闻文本类别统计 3.数据分析 3.1.统计每个字符出现的次数 3.2.统计不同字符在句子中出现的次数 4.文本特征提取 ...

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

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

  4. 【项目实战课】NLP入门第1课,人人免费可学,基于TextCNN的新闻文本分类实战...

    欢迎大家来到我们的项目实战课,本期内容是<基于TextCNN的新闻文本分类实战>. 所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行代码级的实战讲解,可以 ...

  5. 【新闻文本分类】(task4)使用gensim训练word2vec

    学习总结 (1)学习训练Word2Vec 词向量,为后面task搭建 TextCNN 模型.BILSTM 模型训练预测作准备.Word2vec 的研究中提出的模型结构.目标函数.负采样方法.负采样中的 ...

  6. 基于BERT的新闻文本分类

    2017年Transformer模型横空出世,encoder-decoder的创新效果显著,2018年Google又提出了BERT预训练模型,可谓是大大推动了NLP的进步,关于transformer和 ...

  7. 天池比赛——新闻文本分类比赛(零基础入门NLP)

    1 赛题理解 1.1 比赛内容 对新闻文本的类别进行预测.比赛提供了包含14个新闻类别的文本数据,分为训练集和测试集A,B.训练集包含20万条新闻文本数据,测试集A,B分别包含5万条新闻文本数据.所有 ...

  8. 自然语言处理(二)基于CNN的新闻文本分类

    自然语言处理(二) 1.Task1 数据集探索 1.1下载数据集 1.2数据集的描述 1.3 数据的预处理 1.4 CNN卷积神经网络 1.5 训练与验证 2.IMDB 2.1下载 IMDB 数据集 ...

  9. 基于 LSTM-Attention 的中文新闻文本分类

    1.摘 要 经典的 LSTM 分类模型,一种是利用 LSTM 最后时刻的输出作为高一级的表示,而另一种是将所有时刻的LSTM 输出求平均作为高一级的表示.这两种表示都存在一定的缺陷,第一种缺失了前面的 ...

最新文章

  1. java.io.FileNotFoundException: /storage/emulated/0/one.mp4 (Permission denied)
  2. php 静态方法和非静态方法的调用说明
  3. Swift - 12 - 区间运算符和for-in
  4. android cts 编译,使用 Android studio 分析运行 CTS 用例
  5. Spring Annotation(@Autowire、@Qualifier)
  6. TP-LINK WN823N 无线驱动 ubuntu
  7. java程序能转变为javafx_躁!DJ 风格 Java 桌面音乐播放器
  8. java的睡眠方式有几种_java的几种定时任务
  9. Eclipse 安装教程附免费安装包资源
  10. php数组中随机抽取,PHP 数组中随机抽取一些元素_PHP教程
  11. ae导出gif插件_AE脚本-快速输出GIF动图格式插件脚本 GifGun 1.7.7 Win/Mac 支持AE CC 2019...
  12. 鸡汤_产品经理职责概要
  13. HIVE语法基础及实战----干货
  14. 移动端 H5 开发指南 涉及html、css、js三大方向
  15. android google map v2 获取当前位置,如何在google map v2中获取当前位置信息?
  16. Python bool布尔类型(解析)
  17. 对字下面添加下划虚线
  18. ARM 汇编的操作 设置CPU寄存器BASEPRI
  19. 塔望食业洞察|预制菜行业市场现状、发展趋势及未来思考
  20. C++开发工程师学习路线

热门文章

  1. c语言程序设计科学出版社课后答案,程序设计基础C语言科学出版社.doc
  2. 傅立叶分析导论-7有限傅立叶分析
  3. Maven使用指南(超详细)
  4. FPGA编程按键消抖
  5. STM32串口第一字节消失或者误码的原因和解决方案
  6. Vue文本json对比vue_code_diff
  7. fpga控制sdram存储器的读写2:sdram初始化
  8. 51单片机之蜂鸣器与LED流水灯的简单结合
  9. cf战队服务器在哪个位置,新手玩家进入战队服,你必须懂的几点
  10. 5、【易混淆概念集】-第四章 1 项目启动会 VS 项目开工会 变更控制的流程