最近在做基于内容的课程推荐,使用到了sklearn中的TfidfVectorizer。
核心流程如下:
vectorizer = TfidfVectorizer()
#corpus存储的是分好词的语料库
tfidf = vectorizer.fit_transform(corpus)#得到TF-IDF矩阵
weight = tfidf.toarray()
similarity_matrix = cosine_similarity(weight)#计算余弦相似度
以上代码段是我之前在一些博客上看到的,我疑惑的是:
我们一般使用文本的词向量来计算文本之间的相似度的,但是这里使用TF-IDF矩阵作为参数传入cosine_similarity(),也就是使用TF-IDF矩阵替代词频矩阵来计算余弦相似度。虽然词频矩阵和TF-IDF矩阵结构很相似,词频矩阵只有0和1,而TF-IDF矩阵是将1换为TF-IDF值。但是从严谨的角度来说,这样做可以吗?