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

新智元

共 2539字,需浏览 6分钟

 ·

2019-09-20 23:21

0853c20ec2ffc3d6d79013c6b2a8a5f5.webp



  新智元推荐  

来源:图灵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代码


dc0bce379736607f8cd5b029c987c4b4.webp5b917e4628b882896c58c61bf1eb7990.webp57354aebd8f194600dd17975cc90bf65.webp


参考链接:https://towardsdatascience.com/what-i-learned-from-abhishek-thakur-4b905ac0fd55
本文授权转载自图灵TOPIA(turingtopia)
浏览 17
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报