如何在 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 中对语料库进行矢量化的方式吗?