最快计数向量器实现

Posted

技术标签:

【中文标题】最快计数向量器实现【英文标题】:Fastest Count Vectorizer Implementation 【发布时间】:2015-01-09 23:31:39 【问题描述】:

我正在寻找比 scikit-learn 的 CountVectorizer 更有效的 n-gram 计数向量化实现。我已经将CountVectorizer.transform() 调用确定为一些软件中的一个巨大瓶颈,如果我们能够使这部分管道更高效,可以显着提高模型吞吐量。适合时间并不重要,我们只关心变换时间。最终输出必须是 scipy.sparse 向量。如果有人有任何潜在替代品的线索,将不胜感激。

【问题讨论】:

关于mapreduce 计数的自制实现怎么样?之后您可以转换为稀疏矩阵。 我们已经有了数据并行性(不同的进程处理不同的数据块),所以我们可能不会看到使用 mapreduce 调用的吞吐量有任何增加。不过还是谢谢你的推荐。 【参考方案1】:

你试过HashingVectorizer吗?它稍微快一点(如果我没记错的话,最高可达 2 倍)。下一步是分析代码,去除CountVectorizerHashingVectorizer 中您不使用的功能,并在优化的 Cython 代码中重写剩余部分(再次分析后)。

默认情况下使用散列技巧的 Vowpal Wabbit 的准系统功能处理可能会提示您可以实现什么。

【讨论】:

感谢您的回复,奥利维尔。我已经看到 HashingVectorizer 的边际改进(大约 30% 的加速)。我们不需要映射回原始词汇表,因此我们将继续使用 HashingVectorizer。我也一定会尝试cythonization。分析在 transform 调用中没有显示出任何明显的瓶颈,所以我猜测 cythonization 将是加速的唯一真正机会。 另外,如果我们确实发现了在不剥离功能的情况下提高效率的任何重要机会,我们将确保提交 PR。 @MadisonMay 如果这不是秘密,那么故事的结局是什么? :)

以上是关于最快计数向量器实现的主要内容,如果未能解决你的问题,请参考以下文章

LLVM ScalarEvolution Pass 无法计算循环向量器的退出计数

For 循环增量器不能作为字符串向量的索引

为啥这个自动向量器关心构造函数/析构函数?

vector容量器的应用

检查元素是不是在两个向量中的最快方法

具有最快“存在”搜索的 C++ 容器(向量/数组/等)