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

And*_*rei 2 machine-learning feature-extraction neural-network vowpalwabbit scikit-learn

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

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

-1 |Words The sun is blue
1 |Words The sun is yellow
Run Code Online (Sandbox Code Playgroud)

什么在vowpal wabbit的内部实现中使用?这个文本如何变换?

ari*_*elf 5

这里有两个不同的问题:

Q1: 你为什么不能(而且不应该)使用像tf-idf使用时那样的转换vowpal wabbit

A1: vowpal wabbit不是批量学习系统,它是一个在线学习系统.为了计算诸如tf-idf(每个文档中的术语频率与整个语料库)之类的度量,您需要首先查看所有数据(语料库),有时还要对数据进行多次传递. vowpal wabbit作为在线/增量学习系统,它还可以解决您没有提供完整数据的问题.有关详细信息,请参阅此答案.

Q2: 如何vowpal wabbit"转换"它所看到的功能?

A2:没有.它只是将每个单词功能即时映射到内存中的哈希位置.在线学习步骤由示例的重复优化循环( SGD BFGS)示例驱动,以最小化建模误差.您可以选择要优化的损失函数.

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

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

问题3: 我可以使用预转换(例如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  ...
Run Code Online (Sandbox Code Playgroud)

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