Datawhale 之NLP学习-打卡(一)
Task1 赛题理解
1.赛题理解
赛题名称:零基础入门NLP之新闻文本分类
赛题目标:入门自然语言处理,接触NLP的预处理、模型构建和模型训练等知识点
赛题任务:对新闻文本进行分类
2.学习目标
理解赛题背景与赛题数据
3.赛题数据
报名比赛后即可下载相应数据:
以匿名处理后的新闻数据为赛题数据
组成:训练集 测试集A 测试集B 数据提交格式样本
4.数据标签
数据集中的标签对应关系:{'科技': 0, '股票': 1, '体育': 2, '娱乐': 3, '时政': 4, '社会': 5, '教育': 6, '财经': 7, '家居': 8, '游戏': 9, '房产': 10, '时尚': 11, '彩票': 12, '星座': 13}
5.测评指标
评价标准为类别 f1_score的均值,结果越大越好
关于f1_score的理解, f1分数是分类问题的一个衡量标准,值在0~1之间
公式:
\(F_1 = 2\cdot\frac{precision \cdot recall}{precision+recall}\)
每个类别有:
\(precision_i=\frac{TP}{TP+FP}\) (1)
\(recall_i=\frac{TP}{TP+FN}\) (2)
最后的结果(宏平均):
\(f1_i=2\cdot\frac{precision_i \cdot recall_i}{precision_i+recall_i}\) (3)
\(score=\frac{1}{n}\sum f1_i\) (4)
其中:
precision-精准度/查准率
recall-召回率/查全率
TP(True Positive)-预测答案正确
FP(False Positive)-错将其他类预测为本类
FN(False Negative)-本类标签预测为其他类标签
Python实现:
from sklearn.metrics import f1_score
#预测结果
pred_ls = [0,1,1,2,0,1]
#实际标签
true_ls = [0,2,0,1,0,1]
#求f1_score
#属性average:二分类问题则选择参数binary;
#如果考虑类别的不平衡性,需要计算类别的加权平均,则使用weighted;
#如果不考虑类别的不平衡性,计算宏平均,则使用macro
f1=f1_score(true_ls,pred_ls,average='macro')
分析上诉代码:
对于类0:TP=2,FP=1,FN=0,precision=2/3,recall=1,f1_score=4/5
对于类1:TP=1,FP=1,FN=2,precision=1/2,recall=1/3,f1_score=2/5
对于类2:TP=0,FP=1,FN=1,precision=0,recall=0,f1_score=0
宏平均分数为0.400
6.数据读取
使用pandas库完成数据的读、取、分析等操作
import pandas as pd
data_df = pd.read_csv("[path]\train_set.csv", seq='\t')
7.解题思路
赛题难点:给出的数据是匿名化的,无法直接使用中文分词等操作
参考思路:TF-IDF + 机器学习分类器;FastText;WordVec + 深度学习分类器;Bert词向量