我正在尝试构建一种算法,能够根据我以前喜欢的文章预测我是否会喜欢一篇文章。
例子:
- 我读了 50 篇文章,我喜欢 10 篇。我告诉我的程序我喜欢它们。
- 然后有 20 篇新文章来了。我的程序必须根据我之前喜欢的 10 篇文章为每篇新文章提供一个“喜欢百分比”。
我在这里找到了线索: Python: tf-idf-cosine: to find document similarity
>>> from sklearn.feature_extraction.text import TfidfVectorizer
>>> from sklearn.datasets import fetch_20newsgroups
>>> twenty = fetch_20newsgroups()
>>> tfidf = TfidfVectorizer().fit_transform(twenty.data)
然后,将数据集的第一个文档与数据集中的其他文档进行比较:
>>> from sklearn.metrics.pairwise import linear_kernel
>>> cosine_similarities = linear_kernel(tfidf[0:1], tfidf).flatten()
>>> cosine_similarities
array([ 1. , 0.04405952, 0.11016969, ..., 0.04433602,
0.04457106, 0.03293218])
对于我的情况,我想我会做的是连接我的 10 篇文章的文本,运行 TfidfVectorizer,然后将新的大向量与每篇新文章进行比较。
但我想知道如何进行比较:
- 大向量(10 篇文章)与小向量相比或
- 小个子和大个子的比较
我不知道你是否明白我的意思,但在第一种情况下,大向量中 90% 的单词不会出现在小向量中。
所以我的问题是:余弦相似度是如何计算的?您认为我的项目有更好的方法吗?