新闻文本分类之旅 机器学习
天池-零基础入门NLP
- 新闻文本分类
- 导入相关库
- 读入数据
- 文本表示
- 训练模型
- 输出上传文件
- 存在问题
新闻文本分类
比赛地址
文本分类的任务是将给定的文本划分到事先规定的文本类别。
- 赛题难度:
- 匿名数据 + 长文本 + 类别不均衡。
- 解题思路:
- 思路1:TF-IDF提取特征 + SVM分类;
- 思路2:训练FastText词向量并分类;
- 思路3:训练Word2Vec词向量 + TextCNN模型分类;
- 思路4:训练Bert词向量并分类;
- 思路5:Bert分类 + 统计特征的树模型;
- 思路6:……
- 赛题中每个新闻包含的字符个数平均为1000个,还有一些新闻字符较长;
- 赛题中新闻类别分布不均衡,科技类新闻样本量接近4万,星座类新闻(13)样本量不到1千;
- 赛题总共包括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元语法能够体现邻接词组的关系,但是它难以捕捉句子中距离较远的词和词之间的关系。
- 每个新闻平均字符个数较多,可能需要截断。
- 由于类别不均衡,会严重影响模型的精度。
新闻文本分类之旅 机器学习相关推荐
- 基于机器学习的新闻文本分类
Task1-数据探索分析 数据存储 由于用pandas一次性读取20w条数据显示memoryerror,内存不够,所以想到把数据存到数据库中,随用随取比较简便.把训练集20w条数据存到了mongodb ...
- 【nlp】天池学习赛-新闻文本分类-机器学习
目录 1.读取数据 查看句子长度 2.可视化 2.1.新闻的字数分布 2.2.新闻文本类别统计 3.数据分析 3.1.统计每个字符出现的次数 3.2.统计不同字符在句子中出现的次数 4.文本特征提取 ...
- Task01——零基础入门NLP - 新闻文本分类之赛题理解
本篇目标 首先本篇文章会对赛题进行介绍以及个人对赛题的理解,带大家接触NLP的预处理.模型构建和模型训练等知识点. 赛题介绍 赛题名称:零基础入门NLP - 新闻文本分类 赛题任务:赛题以自然语言处理 ...
- 【项目实战课】NLP入门第1课,人人免费可学,基于TextCNN的新闻文本分类实战...
欢迎大家来到我们的项目实战课,本期内容是<基于TextCNN的新闻文本分类实战>. 所谓项目课,就是以简单的原理回顾+详细的项目实战的模式,针对具体的某一个主题,进行代码级的实战讲解,可以 ...
- 【新闻文本分类】(task4)使用gensim训练word2vec
学习总结 (1)学习训练Word2Vec 词向量,为后面task搭建 TextCNN 模型.BILSTM 模型训练预测作准备.Word2vec 的研究中提出的模型结构.目标函数.负采样方法.负采样中的 ...
- 基于BERT的新闻文本分类
2017年Transformer模型横空出世,encoder-decoder的创新效果显著,2018年Google又提出了BERT预训练模型,可谓是大大推动了NLP的进步,关于transformer和 ...
- 天池比赛——新闻文本分类比赛(零基础入门NLP)
1 赛题理解 1.1 比赛内容 对新闻文本的类别进行预测.比赛提供了包含14个新闻类别的文本数据,分为训练集和测试集A,B.训练集包含20万条新闻文本数据,测试集A,B分别包含5万条新闻文本数据.所有 ...
- 自然语言处理(二)基于CNN的新闻文本分类
自然语言处理(二) 1.Task1 数据集探索 1.1下载数据集 1.2数据集的描述 1.3 数据的预处理 1.4 CNN卷积神经网络 1.5 训练与验证 2.IMDB 2.1下载 IMDB 数据集 ...
- 基于 LSTM-Attention 的中文新闻文本分类
1.摘 要 经典的 LSTM 分类模型,一种是利用 LSTM 最后时刻的输出作为高一级的表示,而另一种是将所有时刻的LSTM 输出求平均作为高一级的表示.这两种表示都存在一定的缺陷,第一种缺失了前面的 ...
最新文章
- java.io.FileNotFoundException: /storage/emulated/0/one.mp4 (Permission denied)
- php 静态方法和非静态方法的调用说明
- Swift - 12 - 区间运算符和for-in
- android cts 编译,使用 Android studio 分析运行 CTS 用例
- Spring Annotation(@Autowire、@Qualifier)
- TP-LINK WN823N 无线驱动 ubuntu
- java程序能转变为javafx_躁!DJ 风格 Java 桌面音乐播放器
- java的睡眠方式有几种_java的几种定时任务
- Eclipse 安装教程附免费安装包资源
- php数组中随机抽取,PHP 数组中随机抽取一些元素_PHP教程
- ae导出gif插件_AE脚本-快速输出GIF动图格式插件脚本 GifGun 1.7.7 Win/Mac 支持AE CC 2019...
- 鸡汤_产品经理职责概要
- HIVE语法基础及实战----干货
- 移动端 H5 开发指南 涉及html、css、js三大方向
- android google map v2 获取当前位置,如何在google map v2中获取当前位置信息?
- Python bool布尔类型(解析)
- 对字下面添加下划虚线
- ARM 汇编的操作 设置CPU寄存器BASEPRI
- 塔望食业洞察|预制菜行业市场现状、发展趋势及未来思考
- C++开发工程师学习路线