在写完上一篇文章之后,我了解到了Word Embeddings。出于好奇,我试着用一份已经训练好的GloVe word vectors给XGBoost加入了新特征,看看加入这些特征之后模型的预测效果会不会提升。
这篇文章简单记录一下这次尝试的结果。
这些新特征,具体是这样计算的:
- 给文本做tokenization
- 基于这个现有的(50维的)word vectors,将每一份文本向量化(50维)
- 用SVD将维度降至10维,把这10维数据加入到原有训练集中进行训练
也就是说,和上一次相比,这一次我的训练集多了10个新特征。
在没有进行精细调参的情况下,(测试集)结果相当感人:
- LogLoss:0.41(原本为0.43)
- AUC of ROC curve:0.896(原本为0.88)
ROC曲线对比图如下:
新模型(橙色)明显优于旧模型(蓝色)。
再来看看XGBoost返回的特征重要程度排名:
排在前4位的,有2个是这次新加入的特征。
最后在来看一下新模型下的confusion matrix(threshold = 0.48):
测试集中共有300份影评,其中正面影评共有161份,负面影评共139份。在这些正面的影评中,有80.7%份影评被正确识别(TPR);在这些负面的影评中,有81.3%份影评被正确识别(TNR)。换句话说,在TNR相似的情况下,TPR显著提升了。
被word vectors惊艳到了。
以上。