scikit-learn CountVectorizer return 不同大小的向量

scikit-learn CountVectorizer return different sizes of vectors

我正在尝试进行预处理,获取所有文档,并构建词袋比较器。

在我的 init 方法中,我创建了 scikit-learn CountVectorizer 模型并对其进行训练。

当我得到 2 个新文档时,我需要 return 它们之间的余弦相似度。

但是self.vectorizer.transform return 不同大小的向量。 这是我的代码:

from sklearn.feature_extraction.text import CountVectorizer
from scipy import spatial

class Bow_comparer:
    def __init__(self, texts):
        self.vectorizer = CountVectorizer()
        self.vectorizer.fit_transform(texts)

    def compare(self, doc_a, doc_b):
        doc_a_embeddings = self.vectorizer.transform([doc_a])
        doc_b_embeddings = self.vectorizer.transform([doc_b])
        return 1 - spatial.distance.cosine(doc_a_embeddings, doc_b_embeddings)

我做错了什么?

问题是向量化器返回的文档嵌入是稀疏矩阵(csr 格式)。

>>> type(doc_a_embeddings)
>>> <class 'scipy.sparse.csr.csr_matrix'>

这意味着根据嵌入中零的数量,向量大小会有所不同。 由于 spatial.distance.cosine 不支持稀疏数组,您需要先将嵌入转换为数组(或矩阵)。如果您使用 embedding.toarray() (或 .todense()),它将起作用:

spatial.distance.cosine(doc_a_embeddings.toarray(), doc_b_embeddings.toarray())