跟Kaggle大神17枚金牌得主学NLP实战

2019 年 9 月 20 日 新智元




  新智元推荐  

来源:图灵TOPIA

作者:Dean Sublett

编译:安然

整理编辑:元子

【新智元导读】本文作者Dean Sublett是Kaggle大神Abhishek Thakur的迷弟,通过学习Abhishek的相关教程受益良多,因此,近期他在medium上撰文对相关自然语言处理的知识做了梳理总结。


本文作者Dean Sublett是Kaggle大神Abhishek Thakur的迷弟,通过学习Abhishek的相关教程受益良多,因此,近期他在medium上撰文对相关自然语言处理的知识做了梳理总结。


提起Abhishek Thakur,很多kaggler对他都非常熟悉,2017年,他在 Linkedin 发表了一篇名为Approaching (Almost) Any Machine Learning Problem的文章,介绍他建立的一个自动的机器学习框架,几乎可以解决任何机器学习问题,这篇文章曾火遍 Kaggle。


 

Abhishek在Kaggle上的成就:


  • Competitions Grandmaster(17枚金牌,世界排名第3)
  • Kernels Expert  (Kagglers排名前1%)
  • Discussion Grandmaster(65枚金牌,世界排名第2)


目前,Abhishek在挪威boost公司担任首席数据科学家的职位,这是一家专门从事会话人工智能的软件公司。


以下是本文作者对Abhishek的NLP实战技术学习总结:


Abhishek的NLP方法
 
强烈建议在阅读本文的同时阅读kernel。想要更全面掌握NLP或数据科学,请确保自己写代码时,能理解Abhishek的每一行代码。我们的任务是确定测试集中每个句子的作者。
 
1.  研究数据并理解问题
 
导入必要的Python模块和数据之后,Abhishek调用数据上的head方法,查看前五行是什么样的。


由于Abhishek是专家,并且这是一个NLP问题,与涉及数值数据的问题相比,探索性数据分析EDA)是比较浅显的问题。


数据科学的新人会从更全面的EDA中收益。对数据进行深入的研究可以发现任何缺失的值,知道需要进行多少数据清理,并在问题的后期帮你做出建模决策。
 
Abhishek还提醒到,我们正在解决多类文本分类问题。他指出了Kaggle将用于评分提交的评估指标。


在这次竞赛中,Kaggle使用多分类的对数损失函数来衡量提交模型的性能。理想情况下,多类分类模型的对数损失函数为0。
 
2.  预处理


接下来,Abhishek使用scikit-learn中的LabelEncoder方法为每个作者分配一个整数值。


通过使用整数值(0,1,2)对作者列中值的文本标签进行编码,Abhishek使其分类模型更易于理解数据。
 
在对作者标签进行编码之后,Abhishek使用来自scikit-learn的train_test_split将数据分成训练和验证集。


他选择了90:10的训练/验证拆分(Python数据科学中最常用的拆分通常为70:30到80:20)。


因此,他打算在数据集中的90%的句子训练模型,然后他用剩余10%的数据评估模型的准确性。
 
3.  建模
 
在创建第一个模型前,Abhishek在数据上使用了TF-IDF(Term Frequency - reverse Document Frequency)。
TF-IDF将对文本列中的句子出现的单词赋予权重。


当我们试图确定一个特定的句子是由哪个作者写的,诸如“the”这样的词对于任何作者的分类都不重要,因为“the”经常出现并没有揭示很多信息,但是在对HP编写的句子进行分类时,像“Cthulhu”这样的词会非常重要。


因此,TF-IDF将在预测作者方面,能帮助我们理解哪些词是重要的。
 
对数据运行TF-IDF是一种特征提取形式。在这里,我们需要得出一些重要的数据预测或特征,来帮助我们找出一个特定的句子是由哪个作者写的。


有了TF-IDF,可以对单词的重要性进行统计测量,以帮助我们预测句子的作者。
 
在训练集和验证集上拟合TF-IDF之后,Abhishek准备了逻辑回归模型。如果对这种分类模型不熟悉,请先阅读本文。


在拟合逻辑回归模型之后,Abhishek计算了逻辑回归模型的对数损失(回想一下,他在kernel运行初始就编写了多分类对数损失函数)。


对于逻辑回归模型,多分类对数损失函数返回对数损失值0.626。虽然拟合TF-IDF和逻辑回归模型为我们提供了一个良好的开端,但是我们可以改进这个对数损失得分。
 
4.  模型调整
 
我们不满意0.626的对数损失得分,希望优化此项评估指标。从这里开始,我们可以采取多种途径,而这正是Abhishek所做的。


在对数据进行探索和预处理之后,我们留下了许多不同的特征提取和模型拟合的组合。


例如,Abhishek使用字数来进行特征提取而不是TF-IDF。


通过这种特征提取技术,他的逻辑回归模型的对数损失得分从0.626提高到0.528 ,这是高达0.098的改进!
 
总结
 
从这一点开始,Abhishek的内核越来越详细,因此,我将让他解释其他分类模型。
 
这是我们讨论的内容:
 
EDA:如果我们想要了解数据集,探索性数据分析是至关重要的,当我们开始构建模型时,EDA可以节省我们的时间。
 
多类别分类问题:这类问题要求我们预测观察属于哪个类别,每个观察可能属于三个或更多类别中的任何一个类别
 
预处理:在构建任何模型之前,必须对数据进行预处理。在这个例子中,为了我们的模型,需要使用LabelEndcoder将文本标签转换成整数值
 
特征提取:无论何时我们有原始数据集(在我们的示例中是句子摘录),我们都需要派生一些预测器,来帮助我们对观察进行分类。Abhishek向我们展示了如何使用TF-IDF和字数统计。
 
以下是本文中提到的所有Abhishek代码



参考链接:
https://towardsdatascience.com/what-i-learned-from-abhishek-thakur-4b905ac0fd55

本文授权转载自图灵TOPIA(turingtopia)
登录查看更多
7

相关内容

【资源】100+本免费数据科学书
专知会员服务
107+阅读 · 2020年3月17日
【干货书】机器学习Python实战教程,366页pdf
专知会员服务
338+阅读 · 2020年3月17日
《深度学习》圣经花书的数学推导、原理与Python代码实现
【机器学习课程】Google机器学习速成课程
专知会员服务
164+阅读 · 2019年12月2日
【资源】kaggle数据科学竞赛方案集锦
专知
27+阅读 · 2019年9月4日
Kaggle大神亲述:我是如何半年拿5次金牌晋升Grandmaster的?
机器学习算法与Python学习
14+阅读 · 2019年3月18日
手把手教你搞定90%的NLP问题
AI前线
3+阅读 · 2018年3月18日
如何解决自然语言处理中 90% 的问题
AI研习社
4+阅读 · 2018年2月15日
教程帖:如何解决90%的NLP问题(上)
论智
3+阅读 · 2018年2月12日
Python & 机器学习之项目实践 | 赠书
人工智能头条
14+阅读 · 2017年12月26日
Kaggle入门手册
Datartisan数据工匠
14+阅读 · 2017年11月9日
Python机器学习Kaggle案例实战
炼数成金订阅号
12+阅读 · 2017年8月10日
Arxiv
7+阅读 · 2019年4月8日
Arxiv
6+阅读 · 2018年11月1日
Arxiv
22+阅读 · 2018年8月30日
Arxiv
13+阅读 · 2018年1月20日
VIP会员
相关VIP内容
相关资讯
【资源】kaggle数据科学竞赛方案集锦
专知
27+阅读 · 2019年9月4日
Kaggle大神亲述:我是如何半年拿5次金牌晋升Grandmaster的?
机器学习算法与Python学习
14+阅读 · 2019年3月18日
手把手教你搞定90%的NLP问题
AI前线
3+阅读 · 2018年3月18日
如何解决自然语言处理中 90% 的问题
AI研习社
4+阅读 · 2018年2月15日
教程帖:如何解决90%的NLP问题(上)
论智
3+阅读 · 2018年2月12日
Python & 机器学习之项目实践 | 赠书
人工智能头条
14+阅读 · 2017年12月26日
Kaggle入门手册
Datartisan数据工匠
14+阅读 · 2017年11月9日
Python机器学习Kaggle案例实战
炼数成金订阅号
12+阅读 · 2017年8月10日
Top
微信扫码咨询专知VIP会员