Datawhale零基础入门NLP-Task01赛题理解

摘要:本文会对新闻文本分类这个比赛赛题的内容分析,对赛题所给的数据进行说明,并给出初步的解题思路。

比赛链接:https://tianchi.aliyun.com/competition/entrance/531810/introduction
本文结构和框架大部分参考了https://tianchi.aliyun.com/notebook-ai/detail?postId=118252

赛题理解

  • 赛题名称:零基础入门NLP之新闻文本分类
  • 赛题目标:通过这道赛题可以引导大家走入自然语言处理的世界,带大家接触NLP的预处理、模型构建和模型训练等知识点。
  • 赛题任务:赛题以自然语言处理为背景,要求选手对新闻文本进行分类,这是一个典型的字符识别问题。

赛题数据

赛题以新闻数据为赛题数据,数据集报名后可见并可下载。赛题数据为新闻文本,并按照字符级别进行匿名处理。整合划分出14个候选分类类别:财经、彩票、房产、股票、家居、教育、科技、社会、时尚、时政、体育、星座、游戏、娱乐的文本数据。
赛题数据由以下几个部分构成:训练集20w条样本,测试集A包括5w条样本,测试集B包括5w条样本。为了预防选手人工标注测试集的情况,我们将比赛数据的文本按照字符级别进行了匿名处理。处理后的赛题训练数据如下:

label text
6 57 44 66 56 2 3 3 37 5 41 9 57 44 47 45 33 13 63 58 31 17 47 0 1 1 69 26 60 62 15 21 12 49 18 38 20 50 23 57 44 45 33 25 28 47 22 52 35 30 14 24 69 54 7 48 19 11 51 16 43 26 34 53 27 64 8 4 42 36 46 65 69 29 39 15 37 57 44 45 33 69 54 7 25 40 35 30 66 56 47 55 69 61 10 60 42 36 46 65 37 5 41 32 67 6 59 47 0 1 1 68

在数据集中标签的对应的关系如下:{‘科技’: 0, ‘股票’: 1, ‘体育’: 2, ‘娱乐’: 3, ‘时政’: 4, ‘社会’: 5, ‘教育’: 6, ‘财经’: 7, ‘家居’: 8, ‘游戏’: 9, ‘房产’: 10, ‘时尚’: 11, ‘彩票’: 12, ‘星座’: 13}

评测标准

评价标准为类别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)} F1=2(precision+recall)(precisionrecall)
这里使用了机器学习里面常用的一个评价分类模型的方法F1-score。这里面precision表示准确率,recall表示召回率
p r e c i s i o n = T P F P + T P r e c a l l = T P T P + F N precision = \frac{TP}{FP+TP}\\ recall = \frac{TP}{TP+FN} precision=FP+TPTPrecall=TP+FNTP
在上述两式子里,TP即true positive, 就是模型将样本分类为正样本且分类正确的样本数,FP即false positive, 就是模型将样本分类为负样本但分类错误的样本数。同理, TN,FN分别为为true negative和false negative。(注意:这里FP,TP, FN, TN样本的positive和negative,这个都是模型预测的结果,而不是实际上样本为正为负)

所以这里的precision其实就是在模型判定为正的样本里正样本(实际为正的样本)的比例,而recall就是模型判定正确的正样本数占原始数据集(就是被预测的数据集)中所有正样本的比例。precision和recall都可以用来评价分类模型。但在实际应用过程中,这两者都有所缺陷,这里我举两个二分类的例子:垃圾邮件检测和零件故障检测。在垃圾邮件检测中,我们的目的是检测出来的垃圾邮件尽量多的是准确的,不能把非垃圾邮件检测为垃圾邮件。所以这里我们需要使用precision,而不是recall。而在零件的故障检测中,我们目的是要尽可能的把所有故障零件都找出来,这里就要用到recall,而不是precision。recall 体现了模型对正样本的识别能力,recall 越高,说明模型对正样本的识别能力越强,precision 体现了模型对负样本的区分能力,precision越高,说明模型对负样本的区分能力越强。

而从上面F1-score的表达式可以看出,它是上述两者的调和平均。F1-score 越高,说明模型越稳健。

解题思路

赛题思路分析:赛题本质是一个文本分类问题,需要根据每句的字符进行分类。但赛题给出的数据是匿名化的,不能直接使用中文分词等操作,这个是赛题的难点。

因此本次赛题的难点是需要对匿名字符进行建模,进而完成文本分类的过程。由于文本数据是一种典型的非结构化数据,因此可能涉及到特征提取分类模型两个部分。为了减低参赛难度,我们提供了一些解题思路供大家参考:

  • 思路1:TF-IDF + 机器学习分类器

直接使用TF-IDF对文本提取特征,并使用分类器进行分类。在分类器的选择上,可以先选取一些简单的分类器,比如LR, linear SVM,sgd 等进行模型的stacking,最后用lgb或者xgboost进行训练。

这里TF-IDF方法是文本挖掘中常用的一种提取特征的技术,旨在从无结构的文本提取出有结构的数据,从而来进行模型的训练。其中TF就是Term Frequency,就是一个单词在一个document中出现的次数
t f ( w , d ) = # o f   o c c u r r e n c e s   o f   w o r d   w   i n   d o c u m e n t   d tf(w,d) = \#of\ occurrences\ of\ word\ w\ in\ document\ d tf(w,d)=#of occurrences of word w in document d
然后IDF是Inverse document frequency,具体看下面计算公式
i d f ( w ) = l o g 2 ( N # o f   d o c u m e n t s   t h a t   c o n t a i n   w   a t   l e a s t   o n c e ) idf(w) = log_2(\frac{N}{\#of\ documents\ that\ contain\ w\ at\ least\ once}) idf(w)=log2(#of documents that contain w at least onceN)
这里N表示语料库的总文档数。

tf其实就是衡量一个单词w与文档d相关性程度,而idf是评判一个单词w在整个语料库中的关系。如果我们只是用tf来提取特征的话也就是CountVectorizer就会有这样的不足,当某些词在每个文档中都出现多次,那么这个词其实是不具备对文档进行分类的能力的。所以这时候就体现idf的作用了,因为这样出现在很多文档的词idf值是很小的。

而tfidf中和了两者的优点,将其相乘,这样来提取特征就会避免只使用词频的不足。
t f i d f ( w , d ) = t f ( w , d ) ∗ i d f ( w ) tfidf(w,d) = tf(w,d)*idf(w) tfidf(w,d)=tf(w,d)idf(w)

  • 思路2:FastText

FastText是入门款的词向量,利用Facebook提供的FastText工具,可以快速构建出分类器。

  • 思路3:WordVec + 深度学习分类器

WordVec是进阶款的词向量,并通过构建深度学习分类完成分类。深度学习分类的网络结构可以选择TextCNN、TextRNN或者BiLSTM。

  • 思路4:Bert词向量

Bert是高配款的词向量,具有强大的建模学习能力。

参考文献:

  1. 维基百科 https://zh.wikipedia.org/wiki/F-score

  2. Manning, Ragavan, Schütze, “Introduction to Information Retrieval”, chapters 6 and 13 through 18:https://nlp.stanford.edu/IR-book/pdf/irbookprint.pdf

你可能感兴趣的:(Datawhale零基础入门NLP-Task01赛题理解)