一.比赛背景
在本次Datawhale的竞赛当中,我们有一个具有20w条训练集,5w条测试集的数据集。整个数据集里面包含了各种分类不同的文本,每一个文本在训练集里都进行了标注label,这个label能够让我们知道训练集里面的句子是属于哪一个类别的数据。本次竞赛的文本分类一共有14个类别的数据,分别是:财经,彩票,房产,家居,教育,科技,社会,时尚,时政,体育,星座,游戏和娱乐。那么我们来看看数据集长啥样:
其中,在数据集中标签的对应的关系如下:{'科技': 0, '股票': 1, '体育': 2, '娱乐': 3, '时政': 4, '社会': 5, '教育': 6, '财经': 7, '家居': 8, '游戏': 9, '房产': 10, '时尚': 11, '彩票': 12, '星座': 13}。这个数据集我们打开只会看到我们text的数据,而不会看到每一条text所对应的label,这是因为在csv文件当中标注的label是不会显示出来的,我们需要将其使用pandas进行读入,然后再通过dataframe来查看这个文件,就可以看到训练集数据的label了!
二.测评指标
在本次比赛当中我们使用了f1_score的测评指标,什么是f1_scrore呢?我们来看看它的定义:
相当于f1_score就是精确率和召回率的一个调和均值,这个算法和物理当中求解电阻的方法非常相似,那么什么是精确率呢?
2.1精确率(Precision)
精确率的定义如下:
也就是真正确的样本和我们模型所认为正确的样本的比值。那么什么是召回率呢?
2.2召回率(Recall)
召回率的公式如下:
这个公式和precision的公式唯一不同的则是分母,用到了所有真正正样本的数量,而precision用到的则是预测为预测为正类样本的数量。把这两个公式结合一下就可以得到我们的F1_score了,这是一个在文本分类领域很常见的指标。
三.提取数据
我们现在用pandas对数据进行读取,代码如下:
import pandas as pd
train_df = pd.read_csv('train_set.csv', sep='\t')
单引号之内的字符串表示读取训练集的路径,后面还可以加上nrow表示读取csv文件的行数,一般情况下不使用这个参数,因为会对文件当中的所有数据进行读取,如果只需要其中的一部分数据进行训练,则只需对数据进行切片训练即可。
四.解题思路
一般情况下我们会使用基于深度学习的方法处理自然语言处理的问题,因为基于深度学习的方法往往会表现得更好,当前最先进的方法则是word2vec和bert了,我们最好首先尝试这两个模型对文本处理。
来源:oschina
链接:https://my.oschina.net/u/4353069/blog/4415193