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

一、quora question pairs简介

首先,介绍一下quora question pairs任务:
train_set格式:

test_set格式:

quora question pairs任务的主要内容是:训练model,判定question1和question2是否表达同一个意思,表达同一个意思,label=1,or else,label=0。

二、quora question pairs feature engineering思路

1、预处理

(1)规范一些写法:






(2)去除停用词
(3)stemming
(4)text.lower()

2、feature engineering
(1)statistics feature
  • 抽取question1,question2中not的数量,并根据question1,question2中not数量是否>0,构建一个feature list fs:
    如果两个question的not数量均大于0,fs.append(1) else fs.append(0)
    如果两个question的Not数量仅有一个大于0,fs.append(1) else fs.append(0)
    如果两个question的not数量呈如下形式 count_i < 0 < count_j,则fs.append(1) else fs.append(0)
    最后得到的len(fs)=3

  • question1和question2中share word 数量占question1和question2 word总数的比例:(share_1_to_2 + share_2_to_1)/(sum_1 + sum_2)

  • 加入 idf 权重的 share_word/total_word:
    idf[word] = math.log(num_docs / (idf[word] + 1.)) / math.log(2.)
    sum_shared_word_in_q1 = sum([q1words[w] * self.idf.get(w, 0) for w in q1words if w in q2words])
    sum_shared_word_in_q2 = sum([q2words[w] * self.idf.get(w, 0) for w in q2words if w in q1words])
    sum_tol = sum(q1words[w] * self.idf.get(w, 0) for w in q1words) + sum(q2words[w] * self.idf.get(w, 0) for w in q2words)
    share_word/total_word = [1.0 * (sum_shared_word_in_q1 + sum_shared_word_in_q2) / sum_tol]

  • 两个question的char length和word length

  • 两个question的char length之差

  • 两个question的char length之比: min/max

  • 计算subset中word在subset中出现的频率:word_num/subset_num:可以表征word是否为common word,如果为common word,则其对于prediction可能意义不大

  • 计算subset中word可以正确释义label的数量占word总数的比例:该比例越大,说明该word对label的指示性越强

  • 计算单侧word的正确比例= (label=0)正确时word出现次数 / word在question1 or question2中出现的数量 :比例越大,说明该word对于label的预测能力越大

  • 计算双侧word的正确比例= (label=1)正确时word出现次数 / word在question1 or question2中出现的数量 :比例越大,说明该word对于label的预测能力越大

  • 计算word出现在question1 or question2中的数量占word总数的比例(label = 0)

  • 计算word同时出现在question1 and question2中的数量 占 word总数的比例(label = 1)

  • 将能显著预测label=1的那些word,是否同时出现在question中的情况进行tag,返回:如果word同时出现在question中,则tag.append(1) else tag.append(0)

  • 将能显著预测label=0的那些word,是否同时出现在question中的情况进行tag,返回:如果word不同时出现在question中,则tag.append(1) else tag.append(0)。note that:该tag的length = subset中能显著预测label的word的个数

  • 在label=1的sample中,questions中shared_word不能预测label的概率 = [1 - r for r in rate_list]

  • 在label=0的sample中,questions中的diff_word不能预测label的概率 = [1 - r for r in rate_list]

  • 返回question1,question2的tfidf [sum, mean, len]

  • 返回question1和question2是否相等的情况
    首先,定义question1 =1
    如果question2 != question1,则question2 = 1 else question2 = 0

  • question1, question2中[a-z]字符的个数,以及2者char数量的差值

  • question1,question2中 1gram,2gram,3gram,4gram的jaccard_coef(q1,q2)

  • 两个question之间的distance [question_distance , word_stem_distance]

  • 两个question的Ngram distance

  • 两个question是否同为问句(查看questions[0:1]的单词是否为表达问句的word,如:when,will, does, is)

(2)representation feature
  • way1:利用sum(word_word2vec)表示两个question
  • way2:利用sum(idf * word_word2vec)表示两个question
  • 分别计算way1,way2下sentence的cosin_similarity
(3)nlp feature

以“树的形式”表征feature,下回分解

(4)graph feature

下回分解

(5)采用deep learning的方式,计算question1,question2的相似度
  • 采用Siamese architecture计算两个question的相似度(Siamese architecture常用在图像检索中),Siamese architecture结构如下:
    将questions的word2vec输入CNN中抽取特征,然后在进行fully connected,最后,计算二者的cosin_similarity
  • Interaction based model
    计算两个questions的interaction matrix,然后抽取interaction matrix的特征,最后根据抽取的特征计算两个questions的相似度

三、quora question pairs model方案

四、post_process

下次分解

五、作者code

相关博文:Kaggle:Quora Question Pairs

kaggle: quora question pairs相关推荐

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

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

  2. Quora Question Pairs 项目参考资料

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

  3. Kaggle:Quora Question Pairs

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

  4. kaggle比赛--Quora Question Pairs

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

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

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

  6. Quora Question Pairs

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

  7. kaggle Quora Insincere Questions 总结

    第三名: https://www.kaggle.com/wowfattie/3rd-place 用到了词向量的拼写检查: https://www.kaggle.com/cpmpml/spell-che ...

  8. 用bert来训练quoras question pairs的代码仓

    https://github.com/grapefroot/quora-question-pairs

  9. 文本相似度实战(kaggle)

    Kaggle:Quora Question Pairs:https://blog.csdn.net/sinat_33741547/article/details/80655906 Quora Ques ...

最新文章

  1. webstorm命令行提示‘node‘ 或‘npm‘不是内部或外部命令,也不是可运行的程序
  2. python网络信息提取_python网络爬虫与信息提取I
  3. vue中使用swiper的一些坑
  4. WINCE开发中,EBOOT模式下,TFTP方式无法下载NK镜像的问题解决方案
  5. 种豆得豆,种瓜得瓜 : 你的网络就是一片自留地
  6. ApiCloud云端管理平台(v.20151022)
  7. 相似度和相异度、常用距离度量、余弦相似度
  8. [C++STL]常用遍历算法
  9. 力压Java、C语言!Python 获2018年度编程语言
  10. 西瓜书——EM算法(一)
  11. 深度优先搜索——八皇后问题(洛谷 P1219)
  12. python调用edge_Abaqus中Python通过findAt方法建立region区域
  13. qcustomplot圆_QCustomPlot使用心得五:坐标轴常用属性设置
  14. 18. PHP 表单验证
  15. Spring的注入方式中,官方推荐哪种方式
  16. python入门经典100题
  17. Latex编辑线性规划、最优化模型
  18. 电压跟随器不要随便加
  19. 利用计算机指令清理垃圾,怎么用命令来清理系统垃圾
  20. 高一计算机课程教案,高一信息技术复习课教案.doc

热门文章

  1. ETAS ES581.4 ETAS ES582.1我就这样,醉在西溪的诗与画里
  2. 阿里云开放云搜索初探
  3. wifi 性能测试指导
  4. Form表单的属性action与method
  5. 数据结构二叉排序树建立_数据结构101什么是二叉搜索树
  6. 全球与中国人参营养品市场深度研究分析报告
  7. FIAR应收账款【04票据处理】
  8. MFC应用程序类型:单文档、多文档与基于对话框
  9. MATLAB中 disp函数
  10. DS期末复习试卷(一)