一、概要

Quora Question Pairs是kaggle上一个关于文本匹配的问题,主要目的是判断两个问题是不是同一个意思。

二、数据简介

数据结构相对比较简单,如下:

"id","qid1","qid2","question1","question2","is_duplicate"

共有6个字段,比较有用的便是question字段代表一个序列文本,is_duplicate代表两个文本是否为相同的意思。

三、数据预处理

作为文本数据,到手之后常用操作就是预处理,笔者这里将数据进行简单清洗,大致分为以下步骤:

1、将文本转为小写
2、对于文本中一些“不规范”表述,统一为一种形式,如:1000g——>1kg等
3、词干提取

预处理这里仔细考虑可以做出几层,比如:提取名词性短语、翻译模型、去除共现词等等,但出于时间考虑,这里只是简单的做了一层的处理。

四、特征工程

对于传统机器学习模型,重头戏就来自特征工程,这里将本项目中的特征工程分为以下几种:

1、统计特征

对于文本的统计特征,项目中提取了以下几种:

(1)共现词

共现词代表同一个词在两个文本同时出现,这是一个比较形象的特征,同时出现的词越多代表相似度越高,这里如果单纯使用名词性的词语可能效果会更好,因为这种问题形式的文本,其核心内容都会在名词短语中体现出来,具体计算方式如下:

(共现词的在q1中出现的次数+共现词在q2中出现的次数)/文本总次数
(2)加权共现词

加权其实就是用文本的TFIDF值作为权重,计算共现词概率

(3)特殊共现词

特殊共现的做法利用了训练数据里面的标签,通过计算每一个词,在文本重复时出现的次数,在文本不重复时出现的次数得到这个词的一个监督权重;

词在文本重复时出现的次数/词出现的总次数 = 词的监督权重

在得到每一个词的监督权重之后,对于文本只需要对每一个词的权重进行概率连乘就可以了。

词A的监督权重*词B的监督权重*... = 特殊共现概率
(4)其他

其他还有StrikeAMatch、编辑距离等,实际使用中效果也挺不错的,详细的特征可以参考代码。

2、表示特征

表示特征主要是一些跟word Embedding相关的特征提取,

(1)Word2Vec

基于清洗后的文本训练了一个300维的词向量,之后计算两个文本之间的cosine、euclidean、manhattan距离作为特征,这里的词向量也可以考虑利用预训练的模型如Glove等。
还有基于word2vec的n-gram特征,这个特征效果也还可以。

(2)wordMoverDistance

词移距离,详细可以参考我的博文,一种基于词向量计算文本相似度的方法,实践中效果相当不错。

(3)DocVector

上述词向量也是用了某些方式转化为句向量,之后再计算相似度。这里直接使用句向量模型,生成向量提取cosine特征。

3、NLP特征

(1)关键词特征

利用TFIDF算法,提取出文本的关键词,再结合词向量计算距离特征。

(2)TFIDF距离

这个直接使用TFIDF矩阵进行计算,有点暴力,因为这个矩阵有点大。后续基于这个特征还可以进行扩充,比如PAC后的50、100、300维的向量距离,还有其他的如LDA等等,但降维过程占用资源过大,笔者只有一台空置服务器可以使用,就放弃了。

(3)其他

后续还有一些想法没有实现,比如进行句法分析,基于句法的特征等等。

4、图特征

quora的数据集一个比较有意思的点是,这是一个社交网络状态下的数据集,对于这种数据,它很有可能并不是全部手动标注的,有可能是基于问题搜索后,用户对搜搜推荐的问题有没有点击来加权衡量出来,那么,这里其实存在一种很强的图联系。
基于问题与问题是否同时出现构建了一个网络,而多次出现的问题变成独立连接之间的桥梁,构成一个庞大的问题关系网。

(1)图的统计特征

统计特征计量了每一个问题得最大连接度,及问题的最大连通长度。

(2)图的结构特征

结构特征提取了每个问题的最大团,问题同时出现的最大团等,很有意思的是,这种出现重复的问题,很多时候会聚集在一个团中或者周围。

(3)图的传播特征

基于问题网络,还可以进行传播特征计算,如pagerank、hits等等,但笔者用python简单构建的模型占用资源过大,没法进一步计算,如果有时间,可以考虑在图数据库中重新构建一个,再进行相应的传播计算。

五、模型

1、传统模型

传统模型这里使用了xgboost,这个模型参数简单,且效果也不错,作为快速验证想法的工具很值得推荐。
其他还有随机森林也是一个不错的选择,两个模型相比较,xgboost会好一点,随机森林表现出来过拟合严重一些,但也要可能是笔者没有花时间进行仔细的调参所致。

2、深度模型

关于深度学习的模型,笔者实现了两个,一个基于CNN,一个基于LSTM-RNN,但效果都没有达到论文所说的预期,不知是论文中用了一些小trick没有注意到,还是在某些方面出了偏差,最后都弃之不用了。

3、融合模型

融合模型作为最后提升分数的利器,很值得一用。但前期在深度模型处花了不少时间,GPU渣。。后面就没时间了&没心情继续调了,就此作罢。

六、其他

最终只提交了一个单模型的xgboost的结果上去,分数0.17574,由于比赛已经结束,自行算了一个大概的位置,应该是 600/3300 Top 20%,以后有时间再优化吧

具体代码已经开源,可以在我的github上找到:https://github.com/lpty/kaggle

Kaggle:Quora Question Pairs相关推荐

  1. kaggle比赛--Quora Question Pairs

    文章目录 数据来源 数据分析 训练集 测试集 训练集的数据分析 字符个数 词的个数 词云 逻辑回归 获得特征 训练数据 ROC 评价 Precision-Recall Curve 评价 XGBoost ...

  2. kaggle竞赛 | Quora Question Pairs | 判断相似的Question

    目录 赛题背景 解题过程 1. 数据分析 2. 构建模型 2.1 特征工程 + 树模型 2.2 词向量 + LSTM 代码中有详细注释解析 不懂请看代码 比赛链接:(数据集下载) https://ww ...

  3. kaggle: quora question pairs

    今天看了kaggle竞赛:quora question pairs的一个解决方案,受益匪浅,在此记录一下作者的解题思路. 一.quora question pairs简介 首先,介绍一下quora q ...

  4. Quora Question Pairs 项目参考资料

    实现多种解决方案的 kaggle比赛--Quora Question Pairs https://blog.csdn.net/qq_27009517/article/details/87716641? ...

  5. 从Kaggle赛题: Quora Question Pairs 看文本相似性/相关性

    从Kaggle赛题: Quora Question Pairs 看文本相似性/相关性 包大人 健身 Kaggle 自然语言处理 数据挖掘 137 人赞了该文章 从Kaggle赛题: Quora Que ...

  6. Quora Question Pairs

    官方比赛链接:https://www.kaggle.com/c/quora-question-pairs here is some tips: pandas读取数据的问题 dataframe=pd.r ...

  7. Kaggle:Home Credit Default Risk 特征工程构建及可视化(2)

    博主在之前的博客 Kaggle:Home Credit Default Risk 数据探索及可视化(1) 中介绍了 Home Credit Default Risk 竞赛中一个优秀 kernel 关于 ...

  8. 玩转Kaggle:Classify Leaves(叶子分类)——模型设计与训练

    文章目录 一.数据加载 二.模型构建与训练 1. resnet 1.1 ResNet-50模型微调+冻结 1.2 五折交叉验证 1.3 模型预测 1.4 利用K-Fold结果投票获取最终提交数据 1. ...

  9. QMessageBox.question报错:TypeError: question(QWidget, str, str, buttons: Union[QMessageBox.StandardBut

    报错: TypeError: question(QWidget, str, str, buttons: Union[QMessageBox.StandardButtons, QMessageBox.S ...

最新文章

  1. 国航移动门户让我出行无忧
  2. python数据结构包括什么_Python中的数据结构详解
  3. mysql与php驱动,用PHP和MySQL构建一个数据库驱动的网站(四)-PHP教程,PHP基础
  4. 枚举与常量 java_java – 为什么两个枚举常量可以在同一行中使用?
  5. Angular 2 DI系统中 函数forwardRef 的作用?
  6. CF 1093G Multidimensional Queries——线段树(消去绝对值符号)
  7. 开创先河!《王者荣耀国际版》成为东南亚运动会正式比赛项目
  8. hdu4746 Mophues
  9. iPhone不送充电器?工信部发话了
  10. Linux安装gcc的四种方法
  11. android wifi控制手机屏幕,如何将手机屏幕无线投射到电脑 电脑反向控制手机屏幕的详细教程...
  12. Air Keyboard
  13. Html基本标签(斜体em、空格nbsp、段落p、标题h1、换行br、大于号gt、小于号lt、引号quot、版权符号copy、图片img、水平线hr)
  14. 利用 Python 爬取58同城品牌公寓(附带租房指南)
  15. 学微积,用手机,人人“知识共享”学真知
  16. HTML作业-商城网页
  17. 最早walkman android,首款Walkman血统安卓手机 索爱E16i评测
  18. RabbitMQ的消费者处理消息失败后之重试3次,重试3次仍然失败发送到死信队列。
  19. 多线程之interrupt
  20. Debian搭建dns服务器

热门文章

  1. 用什么软件可以提高视频批量剪辑的效率
  2. java面试题 sql_SQL 面试题目及答案 | java面试题
  3. 外贸公司邮箱怎么申请?往国外邮箱发邮件哪个好用?
  4. 跑鸭”微信小程序-一款基于校园跑步的社交小程序
  5. 常见计算机主机内部硬件设备,电脑主机内部有哪些配件,电脑硬件组成图解
  6. 用python计算正多边形面积_Python怎么编写计算多边形面积的代码。?
  7. 精通正则表达式读书笔记
  8. 北美电影票房Top10-2020年1月3日:《星战9》帽子戏法
  9. 代码中的下划线_是什么意思呢?
  10. sg-uap mysql_SG-UAP常用注解介绍