Vowpal Wabbit 的输出解读

Interpretation of output of Vowpal Wabbit

我正在使用 Vowpal Wabbit 使用基本的 unigram 特征进行二元情感分类(正面和负面)。 这是我的火车功能的样子:

1 | 28060 10778 21397 64464 19255
-1 | 44248 21397 3353 57948 4340 7594 3843 44368 33938 49249 45696     32698 57948 21949 58810 32698 62793 64464
1 | 44248 21397 3353 32698 62996
1 | 44248 21397 3353 57948 63747 40024 46815 37197 7594 47339 28060 10778 32698 45035 3843 54789 19806 60087 7594 47339

每一行都以标签开头,后面是词汇表中的一系列单词索引。这些特征的默认值为 1。

我用这个命令训练:

cat trainfeatures.txt | vw --loss_function logistic -f trainedModel

这是我用来测试的命令:

cat testfeatures.txt | vw  -i trainedModel -p test.pred

这是输出文件 test.pred 的样子:

28.641335
15.409834
13.057793
28.488165
16.716839
19.752426

值介于 -0.114076 和 28.641335 之间。如果我使用一个规则,如果该值大于阈值,比如 14,那么它是正的,否则它是负的,那么我得到 51% 的准确度和 40.7% 的 f-measure。

但是我正在关注的论文报告了该数据集的准确率为 81%。所以我在实施或对结果的解释中肯定有问题。我无法弄清楚那是什么。

编辑:我在测试命令中使用了 --binary 选项,这给了我标签 {-1,+1}。我对其进行了评估并得到了以下结果——准确度为 51.25%,f-measure 为 34.88%。

编辑:主要问题是训练数据没有随机排列。这在使用任何在线学习时都是必需的(除非训练数据已经打乱或者如果它是实时序列)。可以使用 Unix 命令 shuf.

来完成

解释:在极端情况下,如果训练数据首先包含所有负面示例,然后是所有正面​​示例,那么模型很可能会学习将(几乎)所有内容分类为正面。

另一个可能导致低 F1 度量(以及几乎所有预测都是正的)的常见原因是数据不平衡(很多正例,很少有负例)。这不是 Satarupa Guha 问题中的数据集的情况,但我在这里保留我的原始答案:

显而易见的解决方案是为负样本赋予更高(高于默认值 1)的重要性权重。可以使用 heldout 集找到重要性权重的最佳值。

If I use a rule that if the value is more than a threshold, say, 14, then it is positive and otherwise it is negative

负预测与正预测的阈值应为 0。

请注意,Vowpal Wabbit 的一大优势是您无需将特征名称(在您的情况下为单词)转换为整数。您可以使用原始(标记化)文本,只需确保转义管道“|”和冒号“:”(以及 space 和换行符)。当然,如果你已经将单词转换为整数,你可以使用它。