零基础入门NLP - 天池新闻文本分类Task3笔记
零基础入门NLP - 天池新闻文本分类
以下以Datawhale与天池举办的新闻文本分类这个NLP赛题做的NLP入门Task2笔记
赛题链接:https://tianchi.aliyun.com/competition/entrance/531810/introduction.
Task3:基于机器学习的文本分类
本章将介绍使用机器学习模型来解决文本分类问题
文本表示方法
在自然语言领域,文本是不定长度的。文本表示成计算机能够运算的数字或向量的方法一般称为词嵌入(Word Embedding)方法。词嵌入将不定长的文本转换到定长的空间内,是文本分类的第一步。
One-hot
这里的One-hot与数据挖掘任务中的操作是一致的,即将每一个单词使用一个离散的向量表示。具体将每个字/词编码一个索引,然后根据索引进行赋值。
One-hot表示方法的例子如下:
句子1:我 爱 北 京 天 安 门
句子2:我 喜 欢 上 海
首先对所有句子的字进行索引,即将每个字确定一个编号:
{
‘我’: 1, ‘爱’: 2, ‘北’: 3, ‘京’: 4, ‘天’: 5,
‘安’: 6, ‘门’: 7, ‘喜’: 8, ‘欢’: 9, ‘上’: 10, ‘海’: 11
}
在这里共包括11个字,因此每个字可以转换为一个11维度稀疏向量:
我:[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
爱:[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
…
海:[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]
Bag of Words
Bag of Words(词袋表示),也称为Count Vectors,每个文档的字/词可以使用其出现次数来进行表示。
句子1:我 爱 北 京 天 安 门
句子2:我 喜 欢 上 海
直接统计每个字出现的次数,并进行赋值:
句子1:我 爱 北 京 天 安 门
转换为 [1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0]
句子2:我 喜 欢 上 海
转换为 [1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1]
在sklearn中可以直接CountVectorizer来实现这一步骤:
from sklearn.feature_extraction.text import CountVectorizer
corpus = ['This is the first document.','This document is the second document.','And this is the third one.','Is this the first document?',
]
vectorizer = CountVectorizer()
vectorizer.fit_transform(corpus).toarray()
N-gram
N-gram与Count Vectors类似,不过加入了相邻单词组合成为新的单词,并进行计数。
如果N取值为2,则句子1和句子2就变为:
句子1:我爱 爱北 北京 京天 天安 安门
句子2:我喜 喜欢 欢上 上海
TF-IDF
TF-IDF 分数由两部分组成:第一部分是词语频率(Term Frequency),第二部分是逆文档频率(Inverse Document Frequency)。其中计算语料库中文档总数除以含有该词语的文档数量,然后再取对数就是逆文档频率。
TF(t)= 该词语在当前文档出现的次数 / 当前文档中词语的总数
IDF(t)= log_e(文档总数 / 出现该词语的文档总数)
基于机器学习的文本分类
接下来我们将对比不同文本表示算法的精度,通过本地构建验证集计算F1得分。
# Count Vectors + RidgeClassifier
# Count Vectors + RidgeClassifierimport pandas as pdfrom sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import RidgeClassifier
from sklearn.metrics import f1_scoretrain_df = pd.read_csv('../data/train_set.csv', sep='\t', nrows=15000)vectorizer = CountVectorizer(max_features=3000)
train_test = vectorizer.fit_transform(train_df['text'])clf = RidgeClassifier()
clf.fit(train_test[:10000], train_df['label'].values[:10000])val_pred = clf.predict(train_test[10000:])
print(f1_score(train_df['label'].values[10000:], val_pred, average='macro'))
# 0.7422037924439758
TF-IDF + RidgeClassifier
# TF-IDF + RidgeClassifierimport pandas as pdfrom sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import RidgeClassifier
from sklearn.metrics import f1_scoretrain_df = pd.read_csv('../data/train_set.csv', sep='\t', nrows=15000)tfidf = TfidfVectorizer(ngram_range=(1,3), max_features=3000)
train_test = tfidf.fit_transform(train_df['text'])clf = RidgeClassifier()
clf.fit(train_test[:10000], train_df['label'].values[:10000])val_pred = clf.predict(train_test[10000:])
print(f1_score(train_df['label'].values[10000:], val_pred, average='macro'))
# 0.8721598830546126
总结
除去以上两种方法之外,还可以尝试其他机器学习去做。如经典的分类模型逻辑回归,还有树模型XGB等,笔者后续会补充以及会介绍基于深度学习的文本分类。
零基础入门NLP - 天池新闻文本分类Task3笔记相关推荐
- 零基础入门NLP之新闻文本分类挑战赛——赛题理解
假期还有两周左右就结束了,正巧,Datawhale联合天池发布了零基础入门NLP的学习,于是报名参加了零基础入门NLP-新闻文本分类. 本人之前刚接触NLP没多久,记录一下学习的历程,供和我一样的小白 ...
- 天池零基础入门NLP - 新闻文本分类Top1方案的bert4torch复现
天池有些长期比赛可以练习玩玩(还可以继续提交),于是试了下简单的新闻文本分类任务,Top1的解决方案思路是"预训练+fgm+交叉验证模型融合",代码是基于bert4keras的,本 ...
- 【初学者入门】零基础入门NLP - 新闻文本分类
序言 从今天开始入门学习NLP,虽然有点晚,但是我觉得任何时候都值得开始,尤其是面对你去感兴趣的事情.今天的任务是 [零基础入门NLP - 新闻文本分类],这是天池大赛中的入门级算法比赛,入口链接请自 ...
- Task01——零基础入门NLP - 新闻文本分类之赛题理解
本篇目标 首先本篇文章会对赛题进行介绍以及个人对赛题的理解,带大家接触NLP的预处理.模型构建和模型训练等知识点. 赛题介绍 赛题名称:零基础入门NLP - 新闻文本分类 赛题任务:赛题以自然语言处理 ...
- 零基础入门NLP - 新闻文本分类
本文是对阿里云新人竞赛中的"零基础入门NLP - 新闻文本分类"解体过程进行的记录,目前仅使用了textCNN模型进行预测,后续还会考虑使用LSTM进行对比. 赛题数据 赛题以新闻 ...
- 零基础入门NLP - 新闻文本分类,正式赛第一名方案分享
零基础入门NLP - 新闻文本分类,正式赛第一名方案分享:https://mp.weixin.qq.com/s/7WpZUqdlItBToLYuRLm44g
- 天池零基础入门NLP竞赛实战:Task4-基于深度学习的文本分类3-基于Bert预训练和微调进行文本分类
Task4-基于深度学习的文本分类3-基于Bert预训练和微调进行文本分类 因为天池这个比赛的数据集是脱敏的,无法利用其它已经预训练好的模型,所以需要针对这个数据集自己从头预训练一个模型. 我们利用H ...
- 零基础入门推荐系统(新闻推荐)
零基础入门推荐系统(新闻推荐) 比赛介绍 本次新人赛是Datawhale与天池联合发起的零基础入门系列赛事第五场 -- 零基础入门推荐系统之新闻推荐场景下的用户行为预测挑战赛. 赛题简介 此次比赛是新 ...
- android 自动补全方法,Android零基础入门|自动完成文本框AutoCompleteTextView
原标题:Android零基础入门|自动完成文本框AutoCompleteTextView 上一期学习的Spinner的使用,掌握的怎么样?本期一起来学习AutoCompleteTextView的使用. ...
最新文章
- 邓海建:让网约车成为智慧城市的“老司机”
- .NET平台常用的开发组件
- IOS 开发中 Whose view is not in the window hierarchy 错误的解决办法
- DevSecOps简介(二)
- Tomcat server.xml详解
- 【数据库】MySQL表的增删改查
- bzoj 4548: 小奇的糖果 bzoj 3658: Jabberwocky(双向链表+树状数组)
- Thread 类的属性和方法
- 指数历史估值源码分享,寻找最佳底部机会!
- 如何成为一个优秀的互联网营销人员?(互联网销售/网络营销职位从菜鸟到大神应该学习的内容)
- Spring 核心 之 AOP
- 让他们有事可做( 云中漫步zai)
- PS_一寸照片换背景底色
- LORA+4G无线组网的方案
- C++ 操作Word入门教程
- 全球与中国硅通孔(TSV)市场深度研究分析报告
- Ubuntu18.04运行校园网客户端
- @kubernetes(k8s)label标签的使用及service代理模式
- 基于Spring事件模型实现观察者模式的工程实践
- 第三种是经典著作阅读法
热门文章
- DLLMain返回值
- cuda2 向量加法
- node.js毕业设计安卓考研学习APP(程序+APP+LW)
- [PMP]师傅领进门,修行在个人-致领才PMP学习之旅
- 基于JAVA校园社团活动管理系统计算机毕业设计源码+系统+数据库+lw文档+部署
- Python 抖音无水印视频下载
- java宅急送下载_pom.xml · blucywei/java宅急送物流管理项目 - Gitee.com
- HTML5期末大作业:生鲜水果蔬菜商城网站设计——天天生鲜水果蔬菜商城(10页) web前端设计与开发期末作品/期末大作业
- 使用Python下载抖音无水印视频
- HIVE HWI 搭建过程