如何增加CountVectorizer中某个单词的权重

我有一个已经分词的文档,然后我拿另一个文档来比较它们,通过计算它们的余弦相似度来进行比较。

然而,在计算相似度之前,我想先增加其中一个单词的权重。我考虑通过将该单词的计数翻倍来实现,但不知道具体该怎么做。

假设我有以下内容…

text = [    "This is a test",    "This is something else",    "This is also a test"]test = ["This is something"]

接下来我定义停用词,并对两组文档调用CountVectorizer

stopWords = set(stopwords.words('english'))vectorizer = CountVectorizer(stop_words=stopWords)trainVectorizerArray = vectorizer.fit_transform(text).toarray()testVectorizerArray = vectorizer.transform(test).toarray()

在接下来的部分,我计算余弦相似度

cosine_function = lambda a, b : round(np.inner(a, b)/(LA.norm(a)*LA.norm(b)), 3)for vector in trainVectorizerArray:    print(vector)    for testV in testVectorizerArray:        print(testV)        cosine = cosine_function(vector, testV)        print(cosine)

然而,在计算相似度之前,如何增加某个单词的权重呢?假设在这个例子中我想增加something的权重,该怎么做呢?我认为可以通过增加单词计数来实现,但我不知道如何增加这个计数。


回答:

我认为最简单的方法是结合使用CountVectorizerget_feature_names函数和scipy.spatial.distance中的cosine函数。但请注意,这计算的是余弦距离而不是相似度,所以如果你只对相似度感兴趣,你必须使用similarity = 1-distance。以你的例子为例

from scipy.spatial.distance import cosineimport numpy as npword_weights = {'something': 2}feature_names = vectorizer.get_feature_names()weights = np.ones(len(feature_names))for key, value in word_weights.items():    weights[feature_names.index(key)] = valuefor vector in trainVectorizerArray:    print(vector)    for testV in testVectorizerArray:        print(testV)        cosine_unweight = cosine(vector, testV)        cosine_weighted = cosine(vector, testV, w=weights)        print(cosine_unweight, cosine_weighted)

如你所请求的,对word_weights字典做进一步解释。它是你分配给其他单词的权重。每个权重都被设置为1,除非你在word_weights字典中添加了一个条目,所以word_weights = {'test': 0}会从余弦相似度中移除“test”,但word_weights = {'test': 1.5}会使“test”的权重比其他单词增加50%。你也可以根据需要包含多个条目,例如word_weights = {'test': 1.5, 'something': 2}将调整“test”和“something”的权重,相对于其他单词。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注