Quora Question Pairs 链接:https://www.kaggle.com/c/quora-question-pairs
选择参加 Quora 这场比赛主要是为了学习一下 NLP(自然语言处理)。受益于广大 kagglers 无私的分享,收获挺大。
先简单总结一下我的方案,主要使用了两种 model:
1. 梯度提升(LightGBM)
2. 深度学习(LSTM with concatenation 和 Decomposable attention)
值得一提的是深度学习在这个比赛中,效果还是很惊艳的,避免了特征工程,端到端的独特优势。不过在 Quora 比赛中受限于 pretrained embedding 词汇量覆盖范围,数据集中也存在不少拼写错误,端到端的深度学习 很快就到达了瓶颈。不过在最后用 deep model 和 lgb model 做 stacking、用 deep model 给 lgb model 做特征提取,或者用 deep model concate 一些 特征,都取得了不错的结果。
# 简介
下面简单介绍一下背景。这次比赛的主办方 Quora 是美国一个著名的知识问答网站。Quora 一个重要的产品原则是,尽量每个页面都是不同的问题,避免问题的回答者需要回答重复的问题;也便于搜索答案的用户在一个页面就能获取需要的信息。举一个简单的例子:“What is the most populous state in the USA?” 和 “Which state in the United States has the most people?” 这两个问题虽然表述不同,但有相同的语义,应该在一个问题页面出现。
# Data Exploration
## 数据集
Quora 训练数据集有40多万个可能相似的问题对。如下:
![](http://7xnkah.com1.z0.glb.clouddn.com/1498444674607_3.png)
由问题id(qid1,qid2),问题(question1,question2),和是否重复(is_isduplicate)三部分组成。
## 评价指标 evaluation
输出结果为是否是重复问题的概率,使用 log loss 作为评价标准,数学表达式如下:
![](http://7xnkah.com1.z0.glb.clouddn.com/1498444671078_2.png)
经常被用作二分类问题的评价指标还有:
- Precision:P=TP/(TP+FP)
- Recall:R=TP/(TP+FN)
- F1-score:2/(1/P+1/R)
- ROC/AUC:TPR=TP/(TP+FN), FPR=FP/(FP+TN)
## 不平衡的 train,test 数据集
我们来看一下 Quora 比赛中的第一个小“坑”:train 和 test 中正负例所占的比例是不同的。
首先,我们可以计算出 train 数据集正例的平均值为 p = 0.3692。以常量 0.3692 为预测结果做一次提交,得到在 test 上的 Public LB 分数为 0.55。计算 train 上的 log loss,结果为 0.6585。可以看出 train,test 数据集分布是不均衡的。
下面我们计算一下 test 数据集正例的均值。根据:
- 二分类 log loss 的定义
- p = 0.3692 时,logloss 为 0.554
可得:
![](http://7xnkah.com1.z0.glb.clouddn.com/595212eb4cbc1d43e6000000.png)
r 为正例比例,r = 0.174。以常量 0.174 再次提交,Public LP 为 0.463。
可以看出,test 数据集中重复问题的比例比 train 中小了不少。那么如何解决这个不平衡的问题呢?Quora 比赛中大家主要使用了三种方法:
- 对 train 中非重复问题对(负例)进行过采样,使 train 中正例比例变为 0.174
- 通过一个转换函数,将 train 上训练模型的预测结果转换到 test 数据集的分布上
- 通过 Keras 的 class_weight 设置权重
方法1,过采样会增大训练集,分割训练集和验证集的时候需要注意对分割后的数据集分别过采样,避免过采样的数据泄露。我在本次比赛中主要使用了方法2,如下:
- a = 0.174 / 0.3692, b = (1 - 0.174) / (1 - 0.3692)
- f(x) = a * x / (a * x + b * (1 - x))
通过转换,f(0) = 0; f(1) = 1; f(0.3692) = 0.174
![](http://7xnkah.com1.z0.glb.clouddn.com/59522cad4cbc1d43e6000001.png)
关于推导和更详细的分析可以参考:
[How many 1's are in the Public LB?](https://www.kaggle.com/davidthaler/how-many-1-s-are-in-the-public-lb)
[Statistically valid way to convert training predictions to test predictions](https://www.kaggle.com/c/quora-question-pairs/discussion/31179)
# 特征工程
特征工程是机器学习的基础,同时也非常繁重的一项工作。需要有一定的业务知识和对数据的洞察力。特征工程有多重要呢?引用一句话“数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限”;再引用一句话“Garbage in, garbage out”。在大部分 Kaggle 比赛中算法是比较固定的,而特征工程是决定成绩最关键的因素。
什么是特征工程?我们看一下下面这张图的总结,参考[链接](https://www.zhihu.com/question/29316149)。
![](http://7xnkah.com1.z0.glb.clouddn.com/595473ee9a7ec02333000000.png)
Quora 比赛中我使用的特征有200个左右,主要可以分为两部分:
- nlp 特征,问题文本挖掘特征,比如:问题对字符长度差,问题对相同单词个数(有/无Tfidf权重),问题对 Embedding 的各种 distance,等等
- 网络特征,由 train、test 问题对组成的 graph 提取的各种特征(问题为 node,问题对为 edge),比如:问题出现频率,问题对中两个问题共同邻居的个数,问题的 PageRank,等等。网络特征在 Kaggle 论坛引起了不少争议,大部分都认为这是 Quora 以某种规则构造本次比赛数据集导致的 leakage。
## nlp 特征
文本长度特征:
- 字符长度、长度差、比例
- 单词长度、长度差、比例
- 平均单词长度、差值
- 首字符大写单词个数、差值
相同单词特征:
- 相同单词个数、比例
- 增加 Tfidf 权重相同单词个数、比例
- 去除停用词相同单词个数、比例
- 相同名词个数、比例
- 去除停用词相同 unigrams、bigrams、trigrams 单词个数、比例
- 词干化相同单词个数、比例
Embedding 特征(分别使用了 glove,google news,fasttext):
- cosine/euclidean/jaccard/minkowski/... distance
- word mover's distance,关于 wmd 简单的介绍可以参考[链接](https://www.zhihu.com/question/29978268?sort=created)
Fuzzy 特征(基于 [fuzzywuzzy](https://github.com/seatgeek/fuzzywuzzy)):
- QRatio、WRatio、partial ratio...
SimHash 特征(基于 [simhash](https://github.com/leonsim/simhash)):
- word/word bigrams/word trigrams distance
- character bigrams/character trigrams distance
Tfidf Vector/Counter Vector 特征:
- tfidf mean/sum/len
- 基于 Counter Vector(char)的 unigram/bigram/trigram jaccard 距离
- 基于 Tfidf(char)的 unigram/bigram/trigram euclidean 距离
- 基于 Tfidf(char)的 oof(out of fold)特征
- 基于 Tfidf(char)的 SVD([Singular value decomposition](https://en.wikipedia.org/wiki/Singular_value_decomposition))、SVD oof、等特征
- 基于 Tfidf(word)的 euclidean 距离
- 基于 Tfidf(word)的 oof 特征
POS(part of speech)、NER(named entity recognizer)特征,基于 Stanford CoreNLP:
- Noun(n),Adjective(a),Verb(v),Personal Pronoun(prp),WH-Pronoun(wp),Numbers(cd) 等 POS 特征(参考[标签](https://stackoverflow.com/questions/1833252/java-stanford-nlp-part-of-speech-labels))
- NER 匹配特征
上面不少特征都来自于热心 kagglers 的分享,参加 Kaggle 比赛一定要经常关注论坛,比赛结束后 top teams 会分享一些他们的取胜方法,甚至直接在 github 开源。
## 网络特征(magic feature)
网络特征可能是这次 Quora 比赛争议最大的部分了。网络特征效果之好,以至于大家都觉得参加了一个假 NLP 比赛。
记得当时比赛进行了一多半的时候,我的成绩在0.20+(下面提到分数都是 Public LB),和 top teams 的成绩差距非常大(0.13+)。想方设法增加 nlp 特征,改进 model,却只能得到很有限的提升。后来,两个 kagglers 分享了他们发现的 magic feature:
- 问题出现在数据集中的频率越高,是重复问�
没有合适的资源?快使用搜索试试~ 我知道了~
Kaggle Quora 第21名解决方案.zip
共31个文件
py:30个
md:1个
需积分: 3 0 下载量 187 浏览量
2024-01-15
11:34:35
上传
评论
收藏 47KB ZIP 举报
温馨提示
方案是为解决特定问题或达成特定目标而制定的一系列计划或步骤。它的作用是提供一种系统性的方法,以有效地应对挑战、优化流程或实现目标。以下是方案的主要作用: 问题解决: 方案的核心目标是解决问题。通过系统性的规划和执行,方案能够分析问题的根本原因,提供可行的解决方案,并引导实施过程,确保问题得到合理解决。 目标达成: 方案通常与明确的目标相关联,它提供了一种达成这些目标的计划。无论是企业战略、项目管理还是个人发展,方案的制定都有助于明确目标并提供达成目标的路径。 资源优化: 方案在设计时考虑了可用资源,以最大化其效用。通过明智的资源分配,方案可以在有限的资源条件下实现最大的效益,提高效率并减少浪费。 风险管理: 方案通常会对潜在的风险进行评估,并制定相应的风险管理策略。这有助于减轻潜在问题的影响,提高方案的可行性和可持续性。 决策支持: 方案提供了决策者所需的信息和数据,以便做出明智的决策。这种数据驱动的方法有助于减少不确定性,提高决策的准确性。 团队协作: 复杂的问题通常需要多个人的协同努力。方案提供了一个共同的框架,帮助团队成员理解各自的职责和任务,促进协作并确保整个团队朝着共同的目标努力。 监控与评估: 方案通常包括监控和评估的机制,以确保实施的有效性。通过定期的评估,可以及时调整方案,以适应变化的环境或新的挑战。 总体而言,方案的作用在于提供一种有序、有计划的方法,以解决问题、实现目标,并在实施过程中最大化资源利用和风险管理。
资源推荐
资源详情
资源评论
收起资源包目录
Kaggle Quora 第21名解决方案.zip (31个子文件)
SJT-code
README.md 19KB
code
utils.py 292B
generate_feature_simhash.py 3KB
submission_post_process.py 3KB
model_1dcnn.py 7KB
features.py 3KB
model_lstm_concatenation_with_feautres.py 3KB
generate_feature_stanford_corenlp_train.py 4KB
model_lgb.py 5KB
semantic_similarity.py 7KB
model_decomposable_attention_with_features.py 11KB
generate_feature_difflib.py 683B
generate_feature_graph_question_intersect.py 3KB
model_decomposable_attention.py 12KB
generate_feature_graph_pagerank.py 1KB
generate_feature_oof.py 20KB
generate_nn_embedding_data.py 3KB
generate_feature_match_2.py 5KB
generate_feature_tfidf.py 1KB
model_xgb.py 4KB
generate_feature_embedding.py 9KB
dependency_parse.py 1KB
generate_test_stanford_corenlp.py 2KB
generate_feature_graph_question_frequence.py 2KB
model_lstm_concatenation.py 6KB
generate_train_stanford_corenlp.py 2KB
generate_feature_stanford_corenlp_test.py 4KB
generate_feature_match.py 5KB
generate_feature_graph_clique.py 1KB
generate_feature_fuzzy.py 1KB
generate_feature_len.py 1KB
共 31 条
- 1
资源评论
JJJ69
- 粉丝: 6194
- 资源: 5785
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功