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词向量

posted @ 2020-07-21 23:40  柔南青空  阅读(159)  评论(0编辑  收藏  举报