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

Machine learning vowpal wabbit中使用了什么样的特征提取器?,machine-learning,scikit-learn,neural-network,feature-extraction,vowpalwabbit,Machine Learning,Scikit Learn,Neural Network,Feature Extraction,Vowpalwabbit,当我们将句子传递给算法时,我们可以使用文本特征提取器,如。。。我们得到了一组浮点数 但是当我们像这样传递到输入文件时得到的是: -1 |Words The sun is blue 1 |Words The sun is yellow vowpal wabbit的内部实现中使用了什么?此文本如何转换?这里有两个独立的问题: Q1:为什么在使用vowpal wabbit时不能(也不应该)使用像tf idf这样的转换 A1:vowpal wabbit不是批量学习系统,而是在线学习系统。为了计算像tf

当我们将句子传递给算法时,我们可以使用文本特征提取器,如。。。我们得到了一组浮点数

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

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

vowpal wabbit的内部实现中使用了什么?此文本如何转换?

这里有两个独立的问题:

Q1:为什么在使用
vowpal wabbit
时不能(也不应该)使用像
tf idf
这样的转换

A1:
vowpal wabbit
不是批量学习系统,而是在线学习系统。为了计算像
tf idf
(每个文档中的术语频率与整个语料库相比)这样的度量,您需要首先查看所有数据(语料库),有时还需要对数据进行多次传递
vowpal wabbit
作为一个在线/增量学习系统,设计用于解决您未提前获得完整数据的问题。看

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

A2:它没有。它只是将每个单词特征动态映射到其在内存中的散列位置。在线学习步骤由重复优化循环(或)逐例驱动,以最小化建模误差。您可以选择要优化的

但是,如果您已经有了要训练的完整数据,则在将转换后的值馈送给
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
选项)。整数功能编号被直接使用,就好像它们是该功能的散列结果一样。

真棒的答案!非常感谢!但我还有一个问题。如果我想学习二进制S形前馈网络,有必要使用--passes arg吗?它的用途是什么?以及如何测试预测模型?您可以始终将
--passes
vw
一起使用,就好像它是一个批处理设置,其中所有数据都是预先知道的一样。这是你的选择。但要注意,多次传递可能会导致过度装配。还可以查看
--holdout\u period
--bootstrap
选项,以帮助避免过度安装。要了解更多选项和用法,请查看github上的完整教程和文档。事实上,VW无法转换这些功能并不是真的。有许多“转换”可用,例如,
--二次的
(和
--三次的
,通常是
--交互
)或
--字典
。如果特征是单词,则可以使用
--ngram
--skip
--affix
--spelling
。有关详细信息,请参见
vw-h
。@Andrei当您测试(
-i modelfile-t…
)时,
--nn 4
已从保存的模型中读取,因此只需从测试命令行中删除它即可。@MykhailoLisovyi对这两个模型进行训练会使模型变得复杂,其中有些(似乎很大)重叠/冗余,所以我的直觉告诉我最好避免它。如果您知道tf idf,那么附加功能将更弱、更嘈杂,也不会有多大帮助。会不会太合适了?这取决于许多因素。最重要的是,示例数(数据集长度)与模型复杂性(特征数、数据集宽度)的比率。如果您有太多功能的示例太少,这通常会导致过度拟合,但如果您有很多示例,则您会更安全地避免过度拟合。