0Pricing
Learn AI with Python · 课时

基于内容的过滤

TF-IDF 物品表示、余弦相似度,以及根据元数据构建电影推荐器。

基于内容的过滤 是 CoddyKit 上的免费 Learn AI with Python 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn AI with Python 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn AI with Python 课程共包含 4 节课。

什么是基于内容的过滤

基于内容的过滤根据项目自身的特征(文本、类型、标签),推荐与用户已经喜欢的项目相似的项目。与协同过滤不同,它不需要其他用户的数据,因此可以避开项目冷启动问题。

将项目表示为特征向量

核心思想是:将每个项目转换为描述其内容的数值向量,然后衡量向量之间的相似度。对于文本描述,TF-IDF 是构建这类向量的经典方法。

什么是 TF-IDF

TF-IDF(词频-逆文档频率)根据词语在某个项目中出现的频率赋予权重,同时降低在所有项目中都很常见的词语的权重。罕见且具有区分度的词语会获得较高权重,从而体现项目的独特之处。

TfidfVectorizer

scikit-learn 只需两行代码,就能将项目描述列表转换为 TF-IDF 矩阵。

from sklearn.feature_extraction.text import TfidfVectorizer

vectorizer = TfidfVectorizer(stop_words="english")
tfidf_matrix = vectorizer.fit_transform(df["description"])

理解矩阵形状

tfidf_matrix 的形状为 (项目数, 词项数):每行对应一个项目,每列对应词汇表中的一个唯一词语。由于大多数项目只使用全部词语中的一小部分,因此该矩阵是稀疏的。

print(tfidf_matrix.shape)  # (n_items, vocabulary_size)

调节向量化器

常用参数包括:stop_words 会去除常见词,max_features 会限制词汇表大小,而 ngram_range=(1,2) 会加入双词短语,以获得更丰富的特征。

vectorizer = TfidfVectorizer(
    stop_words="english",
    max_features=5000,
    ngram_range=(1, 2)
)

项目之间的余弦相似度

计算所有项目之间的成对相似度。结果是一个项目数 x 项目数的矩阵,其中每个单元格表示两个项目描述之间的相似程度。

from sklearn.metrics.pairwise import cosine_similarity

cosine_sim = cosine_similarity(tfidf_matrix)
print(cosine_sim.shape)  # (n_items, n_items)

线性核快捷方式

由于 TF-IDF 向量默认经过 L2 归一化,linear_kernel 可以更快地得到与余弦相似度相同的结果,这是大型目录中常用的优化方法。

from sklearn.metrics.pairwise import linear_kernel

cosine_sim = linear_kernel(tfidf_matrix, tfidf_matrix)

将标题映射到索引

要根据名称查找项目,请建立一个从标题映射到行位置的反向索引。

indices = pd.Series(df.index, index=df["title"]).drop_duplicates()

get_recommendations 函数

给定一个标题,获取其相似度行,按降序排列,跳过项目本身,然后返回排名靠前的匹配项目。

def get_recommendations(title, n=10):
    idx = indices[title]
    scores = list(enumerate(cosine_sim[idx]))
    scores = sorted(scores, key=lambda x: x[1], reverse=True)
    top = scores[1:n+1]          # skip itself at position 0
    item_idxs = [i for i, _ in top]
    return df["title"].iloc[item_idxs]

优势与局限

优势:适用于全新的项目,而且推荐结果易于解释(“因为它们共享这些词语”)。

局限:它只能围绕用户已知的品味进行推荐(过度专业化),无法像协同过滤那样发现出人意料的跨类型优质项目。

快速检查

请测试您对基于内容的过滤的掌握程度。

回顾

您构建了基于内容的过滤:TfidfVectorizer 将描述转换为(项目数, 词项数)矩阵,cosine_similarity 比较项目,而 get_recommendations 返回最相似的项目(跳过项目本身)。它能够处理冷启动,但存在过度专业化的风险。下一部分:混合系统与评估指标。

常见问题解答

「基于内容的过滤」课时是免费的吗?

是的 — 「基于内容的过滤」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn AI with Python 课程的其余内容,请升级到 CoddyKit PRO。 Learn AI with Python 课程共包含 4 节课。

「基于内容的过滤」这节课中我会学到什么?

TF-IDF 物品表示、余弦相似度,以及根据元数据构建电影推荐器。 你通过在浏览器中直接运行的动手代码来练习 Learn AI with Python,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn AI with Python 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn AI with Python 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「基于内容的过滤」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn AI with Python 课中编写并运行代码吗?

能。每节 Learn AI with Python 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 协同过滤:基于用户与基于物品
  2. 使用 SVD 进行矩阵分解
  3. 基于内容的过滤
  4. 混合系统与评估指标
← 返回 Learn AI with Python