赛题数据为新闻文本,并按照字符级别进行匿名处理。整合划分出14个候选分类类别:财经、彩票、房产、股票、家居、教育、科技、社会、时尚、时政、体育、星座、游戏、娱乐的文本数据。
赛题数据由以下几个部分构成:训练集20w条样本,测试集A包括5w条样本,测试集B包括5w条样本。如下:
在数据集中标签的对应的关系如下:
{'科技': 0, '股票': 1, '体育': 2, '娱乐': 3, '时政': 4, '社会': 5, '教育': 6, '财经': 7, '家居': 8, '游戏': 9, '房产': 10, '时尚': 11, '彩票': 12, '星座': 13}
评价标准为类别f1_score的均值,选手提交结果与实际测试集的类别进行对比,结果越大越好。
可以通过sklearn完成f1_score计算:
from sklearn.metrics import f1_score
y_true = [0, 1, 2, 0, 1, 2]
y_pred = [0, 2, 1, 0, 0, 1]
f1_score(y_true, y_pred, average='macro')
TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与数据挖掘的常用加权技术,常用于挖掘文章中的关键词,而且算法简单高效,常被工业用于最开始的文本数据清洗。
TF-IDF有两层意思,一层是"词频"(Term Frequency,缩写为TF),另一层是"逆文档频率"(Inverse Document Frequency,缩写为IDF)。
当有TF(词频)和IDF(逆文档频率)后,将这两个词相乘,就能得到一个词的TF-IDF的值。某个词在文章中的TF-IDF越大,那么一般而言这个词在这篇文章的重要性会越高,所以通过计算文章中各个词的TF-IDF,由大到小排序,排在最前面的几个词,就是该文章的关键词。
第一步,计算词频:
考虑到文章有长短之分,为了便于不同文章的比较,进行"词频"标准化。
第二步,计算逆文档频率:
这时,需要一个语料库(corpus),用来模拟语言的使用环境。
如果一个词越常见,那么分母就越大,逆文档频率就越小越接近0。分母之所以要加1,是为了避免分母为0(即所有文档都不包含该词)。log表示对得到的值取对数。
第三步,计算TF-IDF:
可以看到,TF-IDF与一个词在文档中的出现次数成正比,与该词在整个语言中的出现次数成反比。所以,自动提取关键词的算法就很清楚了,就是计算出文档的每个词的TF-IDF值,然后按降序排列,取排在最前面的几个词。
TF-IDF的优点是简单快速,而且容易理解。缺点是有时候用词频来衡量文章中的一个词的重要性不够全面,有时候重要的词出现的可能不够多,而且这种计算无法体现位置信息,无法体现词在上下文的重要性。如果要体现词的上下文结构,那么你可能需要使用word2vec算法来支持。
将整篇文档的词及n-gram向量叠加平均得到文档向量,然后使用文档向量做softmax多分类。这中间涉及到两个技巧:字符级N-gram特征的引入以及分层Softmax分类。
N-gram是基于语言模型的算法,基本思想是将文本内容按照子节顺序进行大小为N的窗口滑动操作,最终形成窗口为N的字节片段序列。
举个例子:
我来到达观数据参观
相应的bigram特征为:我来 来到 到达 达观 观数 数据 据参 参观
相应的trigram特征为:我来到 来到达 到达观 达观数 观数据 数据参 据参观
注意一点:n-gram中的gram根据粒度不同,有不同的含义。它可以是字粒度,也可以是词粒度的。上面所举的例子属于字粒度的n-gram,词粒度的n-gram看下面例子:
我 来到 达观数据 参观
相应的bigram特征为:我/来到 来到/达观数据 达观数据/参观
相应的trigram特征为:我/来到/达观数据 来到/达观数据/参观
n-gram产生的特征只是作为文本特征的候选集,你后面可能会采用信息熵、卡方统计、IDF等文本特征选择方式筛选出比较重要特征。
softmax函数常在神经网络输出层充当激活函数,目的就是将输出层的值归一化到0-1区间,将神经元输出构造成概率分布,主要就是起到将神经元输出值进行归一化的作用。
下图是一个分层Softmax示例:
通过分层的Softmax,计算复杂度一下从|K|降低到log|K|。
Word2vec,是一群用来产生词向量的相关模型。这些模型为浅而双层的神经网络,用来训练以重新建构语言学之词文本。网络以词表现,并且需猜测相邻位置的输入词,在word2vec中词袋模型假设下,词的顺序是不重要的。训练完成之后,word2vec模型可用来映射每个词到一个向量,可用来表示词对词之间的关系,该向量为神经网络之隐藏层。【百度百科】
Word2vec 是 Word Embedding 的方法之一。他是 2013 年由谷歌的 Mikolov 提出了一套新的词嵌入方法。
为了提高速度,Word2vec 经常采用 2 种加速方式:
1、Negative Sample(负采样)
2、Hierarchical Softmax
优点:
1、由于 Word2vec 会考虑上下文,跟之前的 Embedding 方法相比,效果要更好(但不如 18 年之后的方法)
2、比之前的 Embedding方 法维度更少,所以速度更快
3、通用性很强,可以用在各种 NLP 任务中
缺点:
1、由于词和向量是一对一的关系,所以多义词的问题无法解决。
2、Word2vec 是一种静态的方式,虽然通用性强,但是无法针对特定任务做动态优化
BERT(Bidirectional Encoder Representations from Transformers)词向量模型,2018年10月在《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》这篇论文中被Google提出,在11种不同nlp测试中创出最佳成绩,包括将glue基准推至80.4%(绝对改进7.6%),multinli准确度达到86.7% (绝对改进率5.6%)等。
1、通过联合调节所有层中的左右上下文来预训练深度双向表示
2、the first fine-tuning based representation model that achieves state-of-the-art performance on a large suite of sentence-level and token-level tasks, outperforming many systems with task-specific architectures
3、所需计算量非常大。Jacob 说:「OpenAI 的 Transformer 有 12 层、768 个隐藏单元,他们使用 8 块 P100 在 8 亿词量的数据集上训练 40 个 Epoch 需要一个月,而 BERT-Large 模型有 24 层、2014 个隐藏单元,它们在有 33 亿词量的数据集上需要训练 40 个 Epoch,因此在 8 块 P100 上可能需要 1 年?16 Cloud TPU 已经是非常大的计算力了。
4、预训练的BERT表示可以通过一个额外的输出层进行微调,适用于广泛任务的state-of-the-art模型的构建,比如问答任务和语言推理,无需针对具体任务做大幅架构修改。
5、一词多义问题
1、复旦大学邱锡鹏组实验室新生一般完成的五个NLP练习上手实验(NLP四大类任务:分类、序列标注、文本匹配、文本生成,都需要完整实现一遍)。
https://www.zhihu.com/question/324189960/answer/682130580?utm_source=wechat_session&utm_medium=social&utm_oi=952466020582064128
2自动化所宗成庆研究员:读懂NLP的过去与现在(梳理的非常好,把各个概念之间的关系和NLP的发展都梳理清楚了)
https://mp.weixin.qq.com/s/xgySwq2m-mHT7XG1zZGpzw
3、中文自然语言处理入门实战
https://mp.weixin.qq.com/s/5z7Xy4NL-buUkpBmv4iIpw
4、自然语言处理全家福:纵览当前NLP中的任务、数据、模型与论文
https://mp.weixin.qq.com/s/sQ903WNSR4v367t78_VG1Q
5、中文信息处理发展报告(综述由中文信息学会统筹,国内各大NLP专家撰写,非常适合入门了解NLP)
http://cips-upload.bj.bcebos.com/cips2016.pdf
6、Jumping NLP Curves: A Review of Natural Language Processing Research [Review Article]
https://ieeexplore.ieee.org/document/6786458
7、Natural Language Processing: A Review
https://www.researchgate.net/publication/309210149_Natural_Language_Processing_A_Review
8、A Review of the Neural History of Natural Language Processing
http://ruder.io/a-review-of-the-recent-history-of-nlp/
9、邓力和刘洋大神合著的图书《Deep Learning in Natural Language Processing》
10、宗成庆研究员所著《统计自然语言处理》(经典之作)
11、Steven Bird所著《Python自然语言处理》(快速掌握python开发nlp技术的各种能力)
12、机器学习 → 推荐周志华教授所著的《机器学习》
13、深度学习 → 推荐Ian Goodfellow等人合著的《Deep Learning》
14、开发框架 → 首推Pytorch,推荐陈云的《深度学习框架Pytorch入门与实践》或者廖星宇的《深度学习入门之Pytorch》
15、Tensorflow学习 → 推荐黄文坚、唐源的《Tensorflow实战》