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())
我正在尝试进行预处理,获取所有文档,并构建词袋比较器。
在我的 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())