手把手教你解决90%的NLP问题( 三 )


手把手教你解决90%的NLP问题

文章插图
混淆矩阵(绿色表示比例高 , 蓝色表示比例低)
我们的分类器创建的假阴性比假阳性多(按比例) 。换句话说 , 我们的模型最常见的错误是不准确地将灾难分类为无关紧要的 。如果假阳性代表执法的高成本 , 对我们的分类器 , 这可能是一个很好的偏见 ,  。
解释我们的模型
为了验证我们的模型并解释它的预测 , 很重要的是看看它使用哪些词汇来做决策 。如果我们的数据是有偏差的 , 我们的分类器会在样本数据中做出准确的预测 , 但是模型在现实世界中不能很好地推广 。在这里 , 我们为灾难类和无关类绘制最重要的单词 。由于我们只需要提取模型用于预测的系数并对其进行排序 , 因此用词袋模型和逻辑回归来绘制单词重要性图非常简单 。
手把手教你解决90%的NLP问题

文章插图
词袋:单词重要性
我们的分类器正确地选择了一些模式(广岛 , 大屠杀) , 但显然似乎在一些无意义的术语上过拟合(heyoo, x1392) 。现在 , 我们的词袋模型正在处理大量不同单词的词汇 , 并且平等地对待所有单词 。然而 , 其中一些词汇非常频繁 , 而且只会对我们的预测产生干扰 。接下来 , 我们将尝试一种表示句子的方法来解释单词的频率 , 看看我们能否从数据中获取更多的信号 。
第6步:词汇结构计数
TF-IDF
为了帮助我们的模型更多地关注有意义的单词 , 我们可以在我们的词袋模型上使用TF-IDF score (Term Frequency, Inverse Document Frequency) 。TF-IDF根据单词在我们的数据集中的稀有程度来衡量单词 , 对过于频繁且只会增加噪音的单词进行减弱 。这是我们新的嵌入的PCA投影 。
手把手教你解决90%的NLP问题

文章插图
TF-IDF嵌入可视化
从上面我们可以看到 , 这两种颜色的区别更加明显 。这将使我们的分类器更容易地将两个组分开 。让我们看看这是否会带来更好的性能 。在我们的新嵌入上训练另一个逻辑回归 , 我们得到了76.2%的准确率 。
非常轻微的改善 。我们的模型是否开始学习更重要的单词?如果我们在防止模型“作弊”的同时获得了更好的结果 , 那么我们就可以真正地将该模型视为一个升级 。
手把手教你解决90%的NLP问题

文章插图
TF-IDF: 单词重要性
选到到的单词看起来更相关了!尽管我们测试集上的准确率只增加了一点点 , 但是我们对我们的模型所使用的术语有了更多的信心 , 因此在一个与客户交互的系统中部署它会更舒服 。
第7步:语义的威力
word2Vec
我们最新的模型能够识别高频词 。然而 , 如果我们部署这个模型 , 很有可能会遇到以前在我们的训练集中没有见过的单词 。之前的模型不能准确地对这些tweet进行分类 , 即使在训练期间看到了非常相似的单词 。
为了解决这个问题 , 我们需要捕捉单词的语义 , 这意味着我们需要理解像“good”和“positive”这样的单词要比“apricot”和“continent”更接近 。我们用来帮助我们捕捉语义的工具叫做Word2Vec 。
使用预训练的单词
Word2Vec是一种为单词寻找连续嵌入的技术 。它通过阅读大量的文本和记忆在相似的语境中出现的单词来学习 。在对足够的数据进行训练后 , 它为词汇表中的每个单词生成一个300维的向量 , 具有相似含义的单词彼此之间距离更近 。
这篇论文的作者(https://arxiv.org/abs/1301.3781)公开了一个模型的源代码 , 这个模型是在一个非常大的语料库上预先训练的 , 我们可以利用这个语料库将一些语义知识包含到我们的模型中 。可以在与本文关联的repository中找到预先训练好的向量 。
语义级别的表示
为我们的分类器获得一个句子嵌入的快速方法是平均我们句子中所有单词的Word2Vec得分 。这是一个词袋的方法 , 就像以前一样 , 但是这次我们只丢失了我们句子的语法 , 而保留了一些语义信息 。
手把手教你解决90%的NLP问题

文章插图


推荐阅读