如何在 CountVectorizer 中对句子应用权重(计算每个句子标记数次)

Posted

技术标签:

【中文标题】如何在 CountVectorizer 中对句子应用权重(计算每个句子标记数次)【英文标题】:How to apply weights to sentences in CountVectorizer (count each sentences tokens several times) 【发布时间】:2019-01-23 19:51:03 【问题描述】:

我正在使用 CountVectorizer 创建共现矩阵的稀疏矩阵表示。

我有一个句子列表,还有另一个“权重”列表(向量)——我希望计算每个句子标记的次数。

可以创建一个列表,每个句子根据其相关权重重复多次,但这非常低效且不符合 Python 标准。我的一些体重数百万甚至更高。

如何有效地告诉 CountVectorizer 使用我拥有的权重向量?

【问题讨论】:

将每个句子向量(计数向量)乘以所需的权重不能解决问题吗? 在某种程度上,这就是我最终所做的。如果有人需要做类似的事情,我会发布我的解决方案。 【参考方案1】:

由于无法(我能找到)对提供给 countvectorizer 的每个句子应用权重,因此可以将得到的稀疏矩阵相乘。

cv = CountVectorizer(lowercase = False, min_df=0.001, tokenizer = space_splitter)
X = cv.fit_transform(all_strings)

# Multiply the resulting sparse matrix by the weight (count) of each sentence.
counts = scipy.sparse.diags(df.weight, 0)
X = (X.T*counts).T
Xc = (X.T * X) # create co-occurance matrix

请注意,您乘以的矩阵必须是稀疏矩阵,并且权重必须在其对角线上。

【讨论】:

嗨,我遇到了与您完全相同的问题。您是否可以扩展此答案?我正在尝试这种方法,但我不太了解我得到的结果是否正确。 你可以做一个小测试。查看几个具有相似单词的简单句子的计数向量化器的结果。然后乘以一个小的权重向量。您也可以手动进行这个简短的计算并进行比较,以确保该方法达到预期的结果。

以上是关于如何在 CountVectorizer 中对句子应用权重(计算每个句子标记数次)的主要内容,如果未能解决你的问题,请参考以下文章

使用 SciKit-Learn CountVectorizer() 将句子转换为数字

我可以控制 CountVectorizer 在 scikit learn 中对语料库进行矢量化的方式吗?

CountVectorizer,Tf-idfVectorizer和word2vec构建词向量的区别

CountVectorizer 构建字典以删除多余的单词

将句子映射到 sklearn 中的词汇表

Sklearn 通过句子对文档进行矢量化以进行分类