内容推荐怎么做?用 TF-IDF 和余弦相似度推荐相关文章

用 TF-IDF 与余弦相似度给文章做内容推荐,排除原文并核对推荐分数和词面相似的限制。

已有文章内容、想给读者推荐相近文章时,可以先把每篇文本变成 TF-IDF 向量,再计算余弦相似度。这个方法适合做可解释的内容推荐起点:推荐理由来自共同词语,不依赖用户历史,也不等同于大模型语义理解。

准备最小文章集合

在 Python 3.13 环境安装 scikit-learn。下面四篇“文章”只有一行标题与摘要,是人为构造的中文演示数据。正式使用时应换成正文或有信息量的摘要,保留稳定文章 ID,不把标签页与重复版本一起当作不同文章。

内容推荐怎么做?用 TF-IDF 和余弦相似度推荐相关文章

python -m pip install scikit-learn

建立向量,排除原文后排序

演示语料已用空格分词。设置 tokenizer=str.split 是为了让代码直接使用这些词,不代表真实中文文章无需分词。

import numpy as np
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

ids = [101, 102, 103, 104]
texts = [
    "机器学习 模型 训练 数据 分类",
    "机器学习 模型 训练 验证 分类",
    "视频 剪辑 字幕 时间轴",
    "数据 标注 分类 标签 复核",
]
vectorizer = TfidfVectorizer(tokenizer=str.split, token_pattern=None)
X = vectorizer.fit_transform(texts)
query_row = 0
scores = cosine_similarity(X[query_row], X).ravel()
scores[query_row] = -np.inf
order = np.argsort(-scores)
recommendations = [(ids[i], round(float(scores[i]), 4))
                   for i in order if scores[i] > 0][:2]
print(recommendations)
assert all(article_id != ids[query_row] for article_id, _ in recommendations)

怎样判断推荐有用

验证时先确认推荐结果不包含原文 101,再比较 102 与 103:102 共享模型训练分类等词,应该比没有共同词的 103 更相近。分数是文本向量夹角的度量,不是读者点击概率。

给十篇真实文章人工标记“相关文章”,检查 Top-2 是否包含这些文章;再检查页脚、栏目名和固定广告是否误导结果。若推荐主要由“官网、教程、点击”等通用词驱动,先移除模板文字、调整停用词,并固定词表版本,再比较同一批文章。

接入站点时保留哪些信息

下一步把演示列表换成有稳定 ID 的文章集合,保存向量器和 ID 顺序;新增文章用同一个向量器转换后再检索。若重新拟合词表,旧向量也要同步重算,不能把两套坐标直接混用。

本文示例只验证词面相似的计算流程,不证明真实站点的推荐效果。短标题、同义词、冷门领域和多语言内容容易失配;需要语义理解时,应另行用嵌入模型比较,而不是把余弦高分解释成必然相关。

资料与适用版本

以下官方资料核对于 2026 年 10 月 1 日;安装和界面以实际使用版本为准。

Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30195.html

赞 (0)
AI小管家的头像AI小管家
n8n智能体记忆怎么配置?用 Simple Memory 保留上下文并隔离会话
上一篇 1天前
文本词频怎么统计?用 CountVectorizer 区分出现次数与文档频率
下一篇 1天前

相关推荐

联系我们

联系我们

1

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
关注微信
分享本页
返回顶部