在 vowpal wabbit 中使用的是什么类型的特征提取器?

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

但是,当我们将如下格式的输入文件传递给vowpal wabbit时,我们会得到什么?

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

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


回答:

这里有两个独立的问题:

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

回答1: vowpal wabbit 不是一个批量学习系统,而是一个在线学习系统。为了计算像 tf-idf 这样的度量(每个文档中的词频与整个语料库的对比),你需要先看到所有数据(语料库),并且有时需要对数据进行多次处理。vowpal wabbit 作为一个在线/增量学习系统,设计目的是处理那些你提前没有完整数据的问题。详见这个回答了解更多细节。

问题2: vowpal wabbit 是如何“转换”它看到的特征的?

回答2: 它并不进行转换。它只是将每个词特征即时映射到内存中的哈希位置。在线学习步骤由重复的优化循环(例如SGDBFGS)驱动,逐个样本地最小化建模误差。你可以选择要优化的损失函数

然而,如果你已经有了想要训练的完整数据,没有什么能阻止你先使用其他工具对其进行转换,然后将转换后的值输入给 vowpal wabbit。这是你的选择。根据具体数据,使用转换预处理可能会比直接使用 vowpal wabbit 进行多次处理(查看 vw --passes 选项)得到更好或更差的结果。

为了完成回答,让我们再添加一个相关问题:

问题3: 我可以使用预转换的(例如 tf-idf)数据与 vowpal wabbit 一起使用吗?

回答3: 是的,你可以。只要使用以下(转换后)的格式。不要使用单词,而是使用整数作为特征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 选项)。整数特征编号直接用作特征的哈希结果。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注