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

137 人赞了该文章

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

今天来复盘一下9个月前的Kaggle: Quora Question Pairs, 也算是对文本相似性工作的一点总结,Quora赛题是我接触数据竞赛的第一次比赛,正值大四的下学期开学,在实验室做一些NLP方面的横向课题,学弟找我来说要不要玩比赛,我们就把当时kaggle上当时的比赛罗列了一下,最后挑了这个NLP的赛题,当时对调参,特征工程,模型融合,pipeline没有深刻的理解。误打误撞的拿了银牌,现在让我再打一次的话,还是比较有信心冲击金区的。

这篇文章想发散开来讲,从传统方法到深度模型,结合赛题的数据特点对文本相似性匹配的方法做一个梳理。以及针对比赛中的技巧做一个总结。

Quora给的题就给定两个quora中的提问。提问数据是类似知乎上的提问标题,判断两个问题是不是一个问题。比如:A.如何学习NLP? B.怎样学习自然语言处理?这就明显是一个问题。这个题属于NLP中的文本相似性匹配,由于quora构建数据的方式存在图的特征,后来发现其图模型方面也值得研究。以下部分图片来自于Quora第四名YesOfCourse团队的ppt,在此注明版权。

文本相似性/相关性度量是NLP和信息检索中非常基础的任务,在搜索引擎,QA系统中有举足轻重的地位,一般的文本相似性匹配,从大的方法来讲,传统方法和深度学习方法。

特征工程方法

传统方法不外乎各种角度的特征工程,我把常用的特征罗列如下,比如

  • 编辑距离

编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。一般来说,编辑距离越小,两个串的相似度越大。
例如: 
我们有两个字符串: kitten 和 sitting: 
现在我们要将kitten转换成sitting 
我们可以做如下的一些操作;
k i t t e n –> s i t t e n 将K替换成S
sitten –> sittin 将 e 替换成i
sittin –> sitting 添加g
在这里我们设置每经过一次编辑,也就是变化(插入,删除,替换)我们花费的代价都是1。
FuzzyWuzzy这个python包提供了比较齐全的编辑距离度量方法。

  • 集合度量特征

集合度量方式就是把两个句子看成 BOW (bag of words)。然后使用集合相似性度量方法比如Jaccard等。这种方法有一个严重问题就是丢失语序。当然基于集合算重合度的度量方法不止Jaccard,也有很多别的,感兴趣的同学可以了解下。

  • 统计特征

比如句子长度,词长度,标点数量,标点种类,以及词性序列上的度量,这也是最直观的度量方法,大家可以发挥自己的想象力把这一部分做丰富一点

  • 使用预训练的词向量得到句子表示进行度量

词向量是深度学习进入NLP的非常代表性的工作,谷歌的词向量论文引用了3000+次,可谓影响深远了。
使用词向量的一种简单的方法是,BOW求平均,得到两个句子的表示,然后利用余弦相似度度量或者Minkowski,欧几里得距离等等。这是一种非常简单而直观的方法。
在比赛中我们这篇参考了论文, From Word Embeddings To Document Distances 这篇论文提出的一种叫做WMD的度量方法,七级本原理是利用word2vec的特性,将文本文档表示为一个weighted point cloud of embedded words。两个文档A和B之间的距离定义为A中所有的词移动精确匹配到文档B中点云的最小累积距离。这个思路也非常直觉,实际表现也非常良好‘

  • 使用传统方法如tfidf,LDA等topic model等拿到句子表示进行度量

对于LDA和tfidf的句子表示原理在此不做细讲,在实践中我们发现,使用tfidf值对词向量做一个加权,得到的句子表示也是一种不错的表示。

深度模型

深度模型有两种思路,一种是基于表示,一种是基于交互。不过基于交互的模型大多也是先要拿到文本表示,从文本表示构建交互,从交互到特征抽取的思路。其基本的模型如下所示

这是一个非常直观的思路,最后一层的matching score建模方法甚至可以用一个简单的FC代替,或者做一次element-wise 乘之后接FC。下面有在IR中用表示方法做这个问题的几篇论文。

  • DSSM: LearningDeep Structured Semantic Models for
  • WebSearchusing Click-through Data (Huanget al., CIKM’13)
  • CDSSM: Alatentsemanticmodelwith convolutional- poolingstructureforinformationretrieval (ShenY,HeX, Gao J,etal.CIKM’14)
  • ARC I: ConvolutionalNeural NetworkArchitecturesfor MatchingNaturalLanguageSentences(Huet al., NIPS’14)
  • LSTM-RNN:Deep Sentence Embedding Using the Long Short Term MemoryNetwork:Analysis and Application toInformation Retrieval (Palangietal.,TASLP’2016)

基于交互的方法是通过Interaction来对文本相似性建模,其模型基本的原理是。

有一篇非常有意思的文章Text Matching as Image Recognition. (Liang Pang, Yanyan Lan, Jiafeng Guo, Jun Xu, and Xueqi Cheng. AAAI 2016)这也是庞亮学长在AAAI 2016上的工作,所以他们打这个比赛,完全就是把中科院的模型拉出来遛遛。这个模型也很直觉,就是把两个文本的相似性建模成一张图片,再用CNN做特征抽取器。

  • 拿到每个词的embedding。 (embedding)
  • 构建两个文本的相似矩阵。 (Interaction)
  • 把相似矩阵放入两层CNN中。 (Feature extract)
  • 把CNN的结果放入两层的全连接中。 (FC)
  • 获得二分类的score。 (distribution)

后来的一些工作都大同小异,比如不直接使用词向量,利用RNN的隐层向量去构建交互等等。具体的文章如下,感兴趣的同学可以看一下。

  • DeepMatch: A Deep Architecture for Matching Short Texts (Lu and Li, NIPS’13)
    ARC II: Convolutional Neural Network Architectures for Matching Natural Language Sentences (Hu et al., NIPS’14)
  • MatchPyramid: Text Matching as Image Recognition. (Liang Pang, Yanyan Lan, Jiafeng Guo, Jun Xu, and Xueqi Cheng. AAAI 2016)
  • Match-SRNN: Modeling the Recursive Matching Structure with Spatial RNN. (Shengxian Wan, Yanyan Lan, Jiafeng Guo, Jun Xu, and Xueqi Cheng. IJCAI 2016)

下面回到这个比赛中,具体结合数据谈一谈。

在比赛中发现,训练集和测试集的正负样本比有明显差异,分布上的差异最后体现在logloss指标上的gap,在比赛中大家推导出一个后处理的公式,然后可以拉平分布带来的分数异动。使用贝叶斯公司能推导出这个后处理,前提是可以测出分布的情况下。有论文对这个做了详细的讲解。"Adjusting the Outputs of a Classifier to New a Priori Probabilities: A Simple Procedure"pdfs.semanticscholar.org

比赛中一些预处理方法有

  • 词元化/词干花
  • 停止词删除
  • 标点符号清洗
  • 特殊符号替换
  • 词向量扩充句子得到另一份句子(这个直觉的思路是,利用词向量找相关词的特性,增加传统特征方法的容错性。比如集合度量方法,开心和高兴虽然是一个意思,但是不扩充近义词的话,其容错性很低)

不得不提的是,这个比赛中有一个非常关键的leak信息。一个问题如果出现频繁的话,就很可能是一个重复的问题。后来发现前几名在这个leak上做了很多文章,取得了非常好的效果。后来CPMP给的解释是:

A question that is asked often has more chances to be redundant. Thanks for sharing.

以第一名的解法为例,他的特征工程中含有大量的来自图的Structural features 。我感觉这部分也是最关键的。

kaggle.com/c/quora-ques第一名的解法有300多个模型做了stacking。简直爆炸。

第四名HouJP学长的,kaggle.com/c/quora-ques,亮点就是深度模型的分数很高,不愧是中科院IR大佬。

第五名的解法也是在图的建模上挖掘了大量的特征。

第七名亮点就是这个人比较懒,花了大量的时间在深度模型上。和第一名都用了一个叫 decomposable attention 的东西。kaggle.com/c/quora-ques

后来总结一下这个赛题,由于基于图的特征的存在,使得这部分的特征工程尤为重要,这也是我们做的不好的地方。前几名在图上都做了充分的挖掘,体现了强大的特征工程能力。不过这部分东西,单纯的文本相似性/相关性的工作没什么贡献,如果抱着研究目的的同学可以忽略这部分。

HouJP和庞亮学长把他们的方案开源了,链接如下:github.com/HouJP/kaggle。他们的自动化框架很厉害,值得学习。

我们也把代码开源了,不过在大佬面前就是班门弄斧了:github.com/SpongebBob/Q

由于这是我参加的第一次比赛,所以印象十分深刻。学到了一些对比赛使用的流程性的东西,体会到pipeline的重要性,不过教训也很多,也算一种成长吧。

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

  1. kaggle: quora question pairs

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

  2. Kaggle:Quora Question Pairs

    一.概要 Quora Question Pairs是kaggle上一个关于文本匹配的问题,主要目的是判断两个问题是不是同一个意思. 二.数据简介 数据结构相对比较简单,如下: "id&quo ...

  3. Quora Question Pairs 项目参考资料

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

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

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

  5. kaggle比赛--Quora Question Pairs

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

  6. Kaggle赛题-Synthetic Financial Datasets For Fraud Detection

    本文主要通过Kaggle中的Synthetic Financial Datasets For Fraud Detection赛题,即金融反欺诈预测来对数据挖掘的过程进行一个较为全面完整的学习理解.本赛 ...

  7. Kaggle赛题解析:Google手语识别

    文章目录 一.比赛前言信息 二.比赛背景 三.比赛任务 四.评价指标 五.数据描述 六.解题思路 一.比赛前言信息 比赛名称:Google - Isolated Sign Language Recog ...

  8. 机器学习大作业《Kaggle赛题之Kannada MNIST研究》论文和Python代码

    一.赛题概述及分析 1.背景介绍 邮政系统每天都会处理大量的信件,最为要紧的一环是要根据信件上的收信人邮编进行识别和分类,以便确定信件的投送地.原本这项任务是依靠大量的人工来进行,后来人们尝试让计算机 ...

  9. Kaggle赛题解析:Diffusion Prompt生成

    文章目录 一.比赛信息 二.比赛背景 三.比赛任务 四.评价指标 五.数据描述 六.解题思路 一.比赛信息 比赛名称:Stable Diffusion - Image to Prompts 推断生成高 ...

最新文章

  1. css中hideFocus的用法
  2. 上传图片时 , 返回 nginx 出现413 Request Entity Too Large 问题
  3. BZOJ[1713][Usaco2007 China]The Bovine Accordion and Banjo Orchestra 音乐会 二维斜率优化
  4. Linux生成ssh公钥免密码登录远程主机和Xshell跨跳板机登录
  5. python小白逆袭大神课程心得_python小白逆袭大神(深度学习7日训练营)——心得体会...
  6. [机器学习]AutoML---谷歌开源AdaNet:基于TensorFlow的AutoML框架
  7. OC----内存管理
  8. yum删除mysql数据库_MySQL数据库之Centos中彻底删除Mysql(rpm、yum安装的情况)
  9. android listview 不显示_Android使用ExpandableListview实现时间轴
  10. bzoj1562[NOI2009] 变换序列
  11. corosync配置与详解
  12. python-图书管理系统3-[代码部分]-需要完善
  13. 网景R6400做无线中继服务器,网件R6400刷梅林后5G掉线假死怎么办解决办法
  14. hibernate jar 下载地址
  15. 2021爱分析·时尚品牌数字化厂商全景报告
  16. ns3在packet中加入自定义数据
  17. Python Web 开发中 Excel 转 PDF 文件
  18. 前端CSS核心部分盒子模型
  19. 什么是ITSS认证?哪些企业需要申请ITSS资质证书?
  20. 客户流失预测模型python_使用python进行客户流失案例分析

热门文章

  1. linux脚本下载,Shell脚本实现批量下载网络图片代码分享
  2. java下载网页内容_java下载网页并读取内容
  3. 乐佰小迪智能机器人_儿童聪明的陪伴!云知声教育机器人方案广州玩具展“C位”出道...
  4. liverpool中文意思_Liverpool是什么意思
  5. 天正改变视口比例的方法
  6. Reverse Influence Sampling in Python(译文)
  7. 高效学习传感器|浅谈CCD的工作原理以及常用波
  8. 程序员用 Python、nginx 搭建在线家庭影院(附详细步骤)
  9. 经验歧视 学历歧视 英语歧视及其它
  10. 18.10----19.3知识点复盘