在vowpal wabbit中使用了什么样的特征提取器?

时间:2017-03-29 15:30:12

标签: machine-learning scikit-learn neural-network feature-extraction vowpalwabbit

sklearn中,当我们将句子传递给算法时,我们可以使用文本特征提取器,如countvectorizertf-idf vectoriser等...我们得到一个浮点数组。

但是当传递给vowpal wabbit输入文件时我们得到的是这样的:

-1 |Words The sun is blue
1 |Words The sun is yellow

vowpal wabbit的内部实现中使用了什么?这段文字如何改变?

1 个答案:

答案 0 :(得分:5)

这里有两个不同的问题:

Q1: 在使用tf-idf时,为什么不能(而且不应该)使用vowpal wabbit之类的转换?

A1: vowpal wabbit不是批量学习系统,它是一个在线学习系统。为了计算像tf-idf这样的度量(每个文档中的术语频率与整个语料库),您需要首先看到所有数据(语料库),有时会对数据进行多次传递。 vowpal wabbit作为在线/增量学习系统,旨在解决 提前获得完整数据的问题。请参阅This answer for a lot more details

Q2: vowpal wabbit如何“转换”它看到的功能?

A2: 它没有。它只是将每个单词功能即时映射到内存中的哈希位置。在线学习步骤由重复的优化循环(SGDBFGS)示例驱动,以最小化建模错误。您可以选择loss function进行优化。

但是,如果您已经拥有想要训练的完整数据,那么在将变换后的值提供给vowpal wabbit之前,没有什么可以阻止您对其进行转换(使用任何其他工具)。这是你的选择。根据特定数据,使用转换预传可能会获得更好或更差的结果,而不是使用vowpal wabbit本身运行多次传递而无需进行初步转换(签出vw --passes选项)。

要完成答案,我们添加另一个相关问题:

Q3: 我可以使用tf-idf的预转换(例如vowpal wabbit)数据吗?

A3: 是的,你可以。只需使用以下(转换后)表单即可。使用整数作为要素ID,而不是单词,因为任何要素都可以具有可选的显式权重,请使用tf-idf浮点作为权重,遵循典型SVMlight格式的:分隔符:

-1 |  1:0.534  15:0.123  3:0.27  29:0.066  ...
1  |  3:0.1  102:0.004  24:0.0304  ...

这个工作的原因是因为vw具有区分字符串和整数特征的很好的特征。它不会散列看起来像整数的要素名称(除非您明确使用--hash_all选项)。整数特征编号直接使用,就好像它们是特征的散列结果一样。