0

我正在使用 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%。

4

1 回答 1

1

编辑:主要问题是训练数据没有按随机顺序打乱。使用任何在线学习时都需要这样做(除非训练数据已经打乱或者是实时序列)。可以使用 Unix 命令来完成shuf

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

另一个可能导致 F1 测量值低(并且几乎所有预测为正)的常见原因是数据不平衡(正例多,负例少)。Satarupa Guha 的问题中的数据集并非如此,但我将原始答案保留在这里:

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

如果我使用一个规则,如果值大于阈值,比如 14,那么它是正数,否则它是负数

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

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

于 2015-04-24T19:43:52.207 回答