使用sklearn的HashingVectoriz中HashEmbeddings的思想

2024-05-16 11:35:30 发布

您现在位置:Python中文网/ 问答频道 /正文

Svenstrup et. al. 2017提出了一种处理散列向量器中散列冲突的有趣方法:使用2个不同的散列函数,并在建模之前连接它们的结果。你知道吗

他们声称多个散列函数的组合近似于一个范围更大的散列函数(见本文第4节)。你知道吗

我想用我在sklearn中使用的一些文本数据来尝试一下。我们的想法是运行HashingVectorizer两次,每次使用不同的散列函数,然后将结果串联起来作为模型的输入。你知道吗

我该如何处理sklearn?没有一个选项可以更改所使用的哈希函数,但也许可以修改矢量器?你知道吗

或者我可以用SparseRandomProjection实现这个目标?你知道吗


Tags: 数据方法函数模型文本矢量选项sklearn
1条回答
网友
1楼 · 发布于 2024-05-16 11:35:30

scikit learn中的HashingVectorizer已经包含了一种机制,可以通过^{}选项减轻哈希冲突。这在令牌求和期间添加了一个随机符号,从而改进了散列空间中距离的保存(有关详细信息,请参见scikit-learn#7513)。你知道吗

通过使用N散列函数并连接输出,可以将结果稀疏矩阵中的n_features和非空项(nnz)的数量增加N。换句话说,每个标记现在将被表示为N个元素。这真是浪费记忆。此外,由于稀疏数组计算的运行时间直接依赖于nnz(而不是n_features),这将比只增加n_features对性能产生更大的负面影响。我不确定这种方法在实践中是否有用。你知道吗

如果您仍然想实现这样的矢量器,下面是一些注释。你知道吗

  • 因为FeatureHasher是在Cython中实现的,所以不编辑/重新编译代码就很难从Python修改它的功能。你知道吗
  • 编写HashingVectorizer的快速纯python实现可能是一种方法。你知道吗
  • 否则,在text-vectorize包中有一个HashingVectorizer的实验性重新实现。因为它是用Rust编写的(使用Python绑定),所以其他哈希函数很容易访问和can potentially be added。你知道吗

相关问题 更多 >