如何在 Python 中找到与 sklearn 管道的最佳匹配
How to find best match with sklearn pipeline in Python
我已经使用 TfidfVectorizer 和 TruncatedSVD 设置了管道。我使用 sklearn 训练模型并使用余弦相似度计算两个向量之间的距离。这是我的代码:
def create_scikit_corpus(leaf_names=None):
vectorizer = TfidfVectorizer(
tokenizer=Tokenizer(),
stop_words='english',
use_idf=True,
smooth_idf=True
)
svd_model = TruncatedSVD(n_components=300,
algorithm='randomized',
n_iterations=10,
random_state=42)
svd_transformer = Pipeline([('tfidf', vectorizer),
('svd', svd_model)])
svd_matrix = svd_transformer.fit_transform(leaf_names)
logging.info("Models created")
test = "This is a test search query."
query_vector = svd_transformer.transform(test)
distance_matrix = pairwise_distances(query_vector, svd_matrix, metric='cosine')
return svd_transformer, svd_matrix
问题是,我不确定在获得 distance_matrix 变量后该怎么做。我想我对那到底是什么感到有点困惑。
我正在尝试查找与我的查询最匹配的文档。感谢您朝着正确的方向推动!
一旦你计算了distance_matrix,你就可以根据余弦相似度找到最接近的奇异向量...这可能就是你感到困惑的原因:这个奇异向量代表什么?
问题是这个答案并不直接,奇异向量通常不是你语料库中的文档。
如果您想要最佳匹配,如"the document from your corpus that is the most similar to this one",还有更简单的方法:根据余弦相似度选择最接近的文档。这种方法不需要 SVD。
我已经使用 TfidfVectorizer 和 TruncatedSVD 设置了管道。我使用 sklearn 训练模型并使用余弦相似度计算两个向量之间的距离。这是我的代码:
def create_scikit_corpus(leaf_names=None):
vectorizer = TfidfVectorizer(
tokenizer=Tokenizer(),
stop_words='english',
use_idf=True,
smooth_idf=True
)
svd_model = TruncatedSVD(n_components=300,
algorithm='randomized',
n_iterations=10,
random_state=42)
svd_transformer = Pipeline([('tfidf', vectorizer),
('svd', svd_model)])
svd_matrix = svd_transformer.fit_transform(leaf_names)
logging.info("Models created")
test = "This is a test search query."
query_vector = svd_transformer.transform(test)
distance_matrix = pairwise_distances(query_vector, svd_matrix, metric='cosine')
return svd_transformer, svd_matrix
问题是,我不确定在获得 distance_matrix 变量后该怎么做。我想我对那到底是什么感到有点困惑。
我正在尝试查找与我的查询最匹配的文档。感谢您朝着正确的方向推动!
一旦你计算了distance_matrix,你就可以根据余弦相似度找到最接近的奇异向量...这可能就是你感到困惑的原因:这个奇异向量代表什么?
问题是这个答案并不直接,奇异向量通常不是你语料库中的文档。
如果您想要最佳匹配,如"the document from your corpus that is the most similar to this one",还有更简单的方法:根据余弦相似度选择最接近的文档。这种方法不需要 SVD。