python - 在 scikit-learn 中向文本向量化器添加新词

标签 python numpy scipy scikit-learn scikits

用于词袋方法的 Scikit-learn CountVectorizer 目前提供了两个子选项:(a) 使用自定义词汇表 (b) 如果自定义词汇表不可用,则它会根据出现在语料库。

我的问题:我们能否指定一个自定义词汇表作为开始,但确保在处理语料库时看到新词时更新它。我假设这是可行的,因为矩阵是通过稀疏表示存储的。

用处:在必须向训练数据中添加额外文档且不必从头开始的情况下,它会有所帮助。

最佳答案

不,目前这是不可能的。这也不是“可行的”,原因如下。

CountVectorizerTfidfVectorizer 旨在将文本文档转换为向量。这些向量都需要具有相同数量的元素,这又等于词汇表的大小,因为该约定在所有 scikit-learn 代码中根深蒂固。如果允许词汇表增长,那么在不同时间产生的向量具有不同的长度。这会影响例如在此类向量上训练的线性(或其他参数)分类器中的参数数量,然后也需要能够增长。它影响 k-means 和降维类。它甚至会影响像矩阵乘法这样简单的事情,不再可以通过简单调用 NumPy 的 dot 例程来处理,而是需要自定义代码。换句话说,除非您采用 所有 scikit-learn 来处理结果,否则在向量化器中允许这种灵 active 毫无意义。

虽然这是可能的,但我(作为核心 scikit-learn 开发人员)会强烈反对这种变化,因为它会使代码变得非常复杂,可能会变慢,而且即使它可以工作,也无法区分“不断增长的词汇量”和用户以错误方式传递数据的更常见情况,因此维数出现错误。

如果您想分批输入数据,则可以使用 HashingVectorizer(无词汇)或对数据进行两次遍历以预先收集词汇。

关于python - 在 scikit-learn 中向文本向量化器添加新词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19945334/

相关文章:

python - SQLAlchemy 映射将表的列连接到一个对象

python - 如何获得 [-2.3,-2.2,...] 的列表?

python - 在python中高效地生成点阵

python - 有效地从二维似然矩阵(numpy 数组)中提取局部最大值(坐标)

python - 在 Python 中运行 Theil-Sen 回归时出错

python - scipy.optimize.minimize 返回零维数组?

python - Azure 认知服务文本转语音 REST API

python - 我可以对 df.column 的元素进行分类并创建一个不带迭代输出的列(Python-Pandas-Np)吗?

python - 如何使用带有分数的 numpy 数组?

python - pydot.InvocationException : GraphViz's executables not found