赞
踩
第一次参加Datawhale组队学习,希望自己能克服困难,坚持下来,比自己优秀的人实在太多了。
第一个学习任务,理解赛题。这次组队学习是边打比赛边学习的方式,以输出倒逼输入。这次自然语言处理(NLP)对应的比赛是: 零基础入门NLP - 新闻文本分类 。
今天的学习目标:
①理解赛题背景;
②初步认识赛题数据;
③理解赛题的解题思路。
赛题数据为新闻文本,可能出于保密和防止作弊的行为,数据按照字符级别进行了匿名处理。数据类别共有14个:科技、 股票、体育、娱乐、时政、社会、教育、财经、家居、游戏、房产、时尚、彩票、星座;对应的label值为0~13。官方给出的数据构成:训练集20w条样本,测试集A包括5w条样本,测试集B包括5w条样本。 官方评价标准为类别f1_score的均值。预测结果以csv文件的形式提交。
读出训练数据并输出前10行进行观察。
import pandas as pd
train_df = pd.read_csv('./data/train_set.csv', sep='\t', nrows=1000)
print(train_df.head(10))
输出结果
label text
0 2 2967 6758 339 2021 1854 3731 4109 3792 4149 15...
1 11 4464 486 6352 5619 2465 4802 1452 3137 5778 54...
2 3 7346 4068 5074 3747 5681 6093 1777 2226 7354 6...
3 2 7159 948 4866 2109 5520 2490 211 3956 5520 549...
4 3 3646 3055 3055 2490 4659 6065 3370 5814 2465 5...
5 9 3819 4525 1129 6725 6485 2109 3800 5264 1006 4...
6 3 307 4780 6811 1580 7539 5886 5486 3433 6644 58...
7 10 26 4270 1866 5977 3523 3764 4464 3659 4853 517...
8 12 2708 2218 5915 4559 886 1241 4819 314 4261 166...
9 3 3654 531 1348 29 4553 6722 1474 5099 7541 307 ...
读出测试集A并输出前10行进行观察。
import pandas as pd
test_df = pd.read_csv('./data/test_a.csv', sep='\t', nrows=1000)
print(test_df.head(10))
输出结果
text
0 5399 3117 1070 4321 4568 2621 5466 3772 4516 2...
1 2491 4109 1757 7539 648 3695 3038 4490 23 7019...
2 2673 5076 6835 2835 5948 5677 3247 4124 2465 5...
3 4562 4893 2210 4761 3659 1324 2595 5949 4583 2...
4 4269 7134 2614 1724 4464 1324 3370 3370 2106 2...
5 4061 3792 2434 6065 5612 2738 1008 2252 5620 9...
6 307 768 600 7539 920 1362 2109 6758 3223 5430 ...
7 3770 2461 2151 4525 5708 4436 7349 4436 5422 2...
8 6235 6248 5620 1919 4097 7539 6122 1903 4893 6...
9 1141 4411 6902 1995 6054 2035 2112 6139 2717 2...
初步结论:匿名后的数据,以数字字符代替文本,标点符号也被匿名处理了,每条数据的长短不一。
官方给出的标价标准是f1_score的均值。
计算公式:
F
1
=
2
∗
p
r
e
c
i
s
i
o
n
+
r
e
c
a
l
l
p
r
e
c
i
s
i
o
n
∗
r
e
c
a
l
l
F1 = 2 ∗ \frac{precision+recall}{precision∗recall} \quad
F1=2∗precision∗recallprecision+recall
这种f1_score是应用到二分类问题中的,但赛题是多分类问题,则需要用到Macro-F1:统计各个类别的TP、FP、FN、TN,分别计算各自的Precision和Recall,得到各自的F1值,然后取平均值得到Macro-F1。在sklearn中可以直接调取使用。
from sklearn.metrics import f1_score
f1_score(y_true, y_pred, average='macro')
无法直接使用中文分词操作是这次赛题的难点。Datawhale给出的学习资料中提示我们,需要先对匿名字符进行建模,再完成文本分类。这其中会涉及到特征提取和分类模型两部分。
Datawhale还给出了四个思路:
①TF-IDF+机器学习分类器:直接使用TF-IDF提取文本特征,使用SVM、LR、XGBoost等分类器进行分类。
②FastText:FastText是入门款词向量,可以快速构建分类器。
③WordVec+深度学习分类器:WordVec是进阶款词向量,并通过构建TextCNN、TextRNN、BiLSTM等深度学习分类完成分类。
④Bert词向量:Bert是高配款词向量,具有强大的建模学习能力。
已经初步理解题目,找到解题方向。但是我没有特征提取的经验,对词向量也比较陌生,在理解解题思路过程中遇到较大的困难,暂时无法总结出这一部分的知识和思路。但是正因如此,我找到了更加明确的学习道路,我需要加紧把自然语言处理的基础知识补上。
第一天的正式学习完成度还不够高,但的确感受到这次组队学习对我帮助很大,例如逼我写了人生第一篇blog,哈哈哈。坚持下去,加油。
参考资料
[1]: 【评价指标】详解F1-score与多分类MacroF1&MicroF1:https://cloud.tencent.com/developer/article/1661221
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。