基于内容的推荐:TF-IDF 与余弦相似度计算
字数 3185 2025-12-08 21:46:24
基于内容的推荐:TF-IDF 与余弦相似度计算
题目描述
在推荐系统中,基于内容的推荐是一种重要的方法。其核心思想是通过分析物品(如文章、商品、视频)的内容特征,为用户推荐与其历史喜好物品相似的物品。本专题将详细讲解如何将文本内容(如文章标题、描述)转化为数值特征,并使用 TF-IDF 和余弦相似度计算物品之间的相似性,从而构建一个简易的基于内容的推荐模型。
知识点剖析
基于内容的推荐主要包括以下步骤:
- 特征提取:将非结构化的文本内容转化为结构化的特征向量。
- 特征加权:使用 TF-IDF 等统计方法,评估特征词在描述特定内容时的重要性。
- 相似度计算:通过余弦相似度等度量方法,计算不同内容特征向量之间的相似程度。
详细步骤讲解
第一步:文本预处理与特征提取
目标是构建一个“词袋”(Bag of Words),即所有文档中出现的独特词汇的集合。
- 分词:将每篇文档(例如商品描述)的文本,分割成独立的词(Token)。例如,文档 D1: "这个苹果手机很流畅" -> ["这个", "苹果", "手机", "很", "流畅"]。
- 去除停用词:移除对内容区分意义不大的高频词,如“这个”、“很”。得到 ["苹果", "手机", "流畅"]。
- 构建词汇表:统计所有文档处理后得到的独特词汇,形成一个列表。假设我们有三个商品描述:
- D1: ["苹果", "手机", "流畅"]
- D2: ["华为", "手机", "拍照", "清晰"]
- D3: ["苹果", "电脑", "办公"]
- 词汇表 V = ["苹果", "手机", "流畅", "华为", "拍照", "清晰", "电脑", "办公"]
- 向量化:将每篇文档表示为一个向量,向量的维度等于词汇表大小。向量每个位置的值,初始可以使用该词在文档中出现的次数(词频,TF)。例如:
- D1 向量: [1, 1, 1, 0, 0, 0, 0, 0] (对应“苹果”出现1次,“手机”1次,“流畅”1次,其他词0次)
- D2 向量: [0, 1, 0, 1, 1, 1, 0, 0]
- D3 向量: [1, 0, 0, 0, 0, 0, 1, 1]
第二步:TF-IDF 特征加权
仅用词频(TF)无法有效衡量一个词的重要性。例如,“手机”这个词在所有文档中都常见,其区分度不高。TF-IDF 通过以下公式改进:
- 词频(Term Frequency, TF):词在当前文档中出现的频率。通常用
TF(t, d) = (词t在文档d中出现的次数) / (文档d中总词数) 或简单的计数表示。我们用计数简化版。
- 逆文档频率(Inverse Document Frequency, IDF):衡量一个词的普遍重要性。如果某个词在所有文档中都出现,则其IDF值低。公式为:
IDF(t) = log( (文档总数N) / (包含词t的文档数 df(t) + 1) )。加1是为了防止分母为0。
- TF-IDF:
TF-IDF(t, d) = TF(t, d) * IDF(t)。
计算示例:
我们有3篇文档(N=3)。
- 计算每个词的IDF(以自然对数log为例):
- “苹果”: df(苹果)=2 (D1, D3), IDF = log(3 / (2+1)) = log(1) = 0
- “手机”: df(手机)=2 (D1, D2), IDF = log(3 / 3) = 0
- “流畅”: df(流畅)=1, IDF = log(3 / 2) ≈ 0.405
- “华为”: df(华为)=1, IDF = log(3 / 2) ≈ 0.405
- “拍照”: df(拍照)=1, IDF = log(3 / 2) ≈ 0.405
- “清晰”: df(清晰)=1, IDF = log(3 / 2) ≈ 0.405
- “电脑”: df(电脑)=1, IDF = log(3 / 2) ≈ 0.405
- “办公”: df(办公)=1, IDF = log(3 / 2) ≈ 0.405
- 计算每篇文档的 TF-IDF 向量(这里TF用计数,非归一化值):
- D1: [10, 10, 1*0.405, 0, 0, 0, 0, 0] = [0, 0, 0.405, 0, 0, 0, 0, 0]
- D2: [0, 10, 0, 10.405, 10.405, 10.405, 0, 0] = [0, 0, 0, 0.405, 0.405, 0.405, 0, 0]
- D3: [10, 0, 0, 0, 0, 0, 10.405, 1*0.405] = [0, 0, 0, 0, 0, 0, 0.405, 0.405]
- 可以看出,“苹果”、“手机”这类常见词的权重被降低甚至清零,而更能体现文档特色的词获得了更高权重。
第三步:余弦相似度计算
有了物品的特征向量,我们需要一个指标来衡量两个向量(即两个物品)的相似程度。余弦相似度通过计算两个向量夹角的余弦值来实现,其值在[-1,1]之间,通常用于非负向量(如TF-IDF),其值在[0,1]之间,值越大越相似。
公式:cos(θ) = (A·B) / (||A|| * ||B||)
- A·B 是向量A和B的点积(对应元素相乘再求和)。
- ||A|| 是向量A的欧几里得范数(模长),即各元素平方和开根号。
计算示例:比较 D1 和 D2 的余弦相似度。
- D1向量: [0, 0, 0.405, 0, 0, 0, 0, 0]
- D2向量: [0, 0, 0, 0.405, 0.405, 0.405, 0, 0]
- 点积 A·B: (00)+(00)+(0.4050)+(00.405)+... = 0
- 模长 ||A||: sqrt(0^2 + 0^2 + 0.405^2 + ...) = 0.405
- 模长 ||B||: sqrt(0^2+0^2+0^2+0.405^2+0.405^2+0.405^2) ≈ sqrt(0.492) ≈ 0.701
- 余弦相似度: 0 / (0.405 * 0.701) = 0
- 因为D1和D2没有共享任何有区分度的词(TF-IDF权重大于0的词),所以相似度为0。
比较 D1 和 D3:
- D1: [0, 0, 0.405, 0, 0, 0, 0, 0]
- D3: [0, 0, 0, 0, 0, 0, 0.405, 0.405]
- 点积: 0
- 模长:||D1||=0.405, ||D3||≈0.573
- 余弦相似度: 0
- 虽然D1和D3共享“苹果”,但“苹果”的IDF为0,不贡献相似度。
第四步:推荐生成
在基于内容的推荐中,我们通常有一个用户的历史偏好物品集合(称为用户画像)。
- 构建用户画像向量:将该用户喜欢(或交互过)的所有物品的TF-IDF向量求平均,得到一个代表该用户整体偏好的综合向量。例如,假设用户喜欢D1,则其画像向量就是D1的TF-IDF向量本身。
- 计算相似度并排序:对于尚未被该用户交互过的候选物品(如D2, D3),计算其向量与用户画像向量之间的余弦相似度。
- 生成推荐列表:将候选物品按照相似度得分从高到低排序,将排名靠前的物品推荐给用户。
总结
基于内容的推荐通过将物品内容量化为特征向量,利用 TF-IDF 进行特征加权,并使用余弦相似度衡量物品间或物品与用户画像间的匹配度。其优点是可解释性强,不依赖其他用户数据(不存在冷启动问题),但缺点在于特征提取依赖领域知识,且推荐结果可能局限于与用户历史兴趣高度相似的物品,缺乏多样性。在实际系统中,常与协同过滤等算法结合使用。
基于内容的推荐:TF-IDF 与余弦相似度计算 题目描述 在推荐系统中,基于内容的推荐是一种重要的方法。其核心思想是通过分析物品(如文章、商品、视频)的内容特征,为用户推荐与其历史喜好物品相似的物品。本专题将详细讲解如何将文本内容(如文章标题、描述)转化为数值特征,并使用 TF-IDF 和余弦相似度计算物品之间的相似性,从而构建一个简易的基于内容的推荐模型。 知识点剖析 基于内容的推荐主要包括以下步骤: 特征提取 :将非结构化的文本内容转化为结构化的特征向量。 特征加权 :使用 TF-IDF 等统计方法,评估特征词在描述特定内容时的重要性。 相似度计算 :通过余弦相似度等度量方法,计算不同内容特征向量之间的相似程度。 详细步骤讲解 第一步:文本预处理与特征提取 目标是构建一个“词袋”(Bag of Words),即所有文档中出现的独特词汇的集合。 分词 :将每篇文档(例如商品描述)的文本,分割成独立的词(Token)。例如,文档 D1: "这个苹果手机很流畅" -> [ "这个", "苹果", "手机", "很", "流畅" ]。 去除停用词 :移除对内容区分意义不大的高频词,如“这个”、“很”。得到 [ "苹果", "手机", "流畅" ]。 构建词汇表 :统计所有文档处理后得到的独特词汇,形成一个列表。假设我们有三个商品描述: D1: [ "苹果", "手机", "流畅" ] D2: [ "华为", "手机", "拍照", "清晰" ] D3: [ "苹果", "电脑", "办公" ] 词汇表 V = [ "苹果", "手机", "流畅", "华为", "拍照", "清晰", "电脑", "办公" ] 向量化 :将每篇文档表示为一个向量,向量的维度等于词汇表大小。向量每个位置的值,初始可以使用该词在文档中出现的次数(词频,TF)。例如: D1 向量: [ 1, 1, 1, 0, 0, 0, 0, 0 ] (对应“苹果”出现1次,“手机”1次,“流畅”1次,其他词0次) D2 向量: [ 0, 1, 0, 1, 1, 1, 0, 0 ] D3 向量: [ 1, 0, 0, 0, 0, 0, 1, 1 ] 第二步:TF-IDF 特征加权 仅用词频(TF)无法有效衡量一个词的重要性。例如,“手机”这个词在所有文档中都常见,其区分度不高。TF-IDF 通过以下公式改进: 词频(Term Frequency, TF) :词在 当前文档 中出现的频率。通常用 TF(t, d) = (词t在文档d中出现的次数) / (文档d中总词数) 或简单的计数表示。我们用计数简化版。 逆文档频率(Inverse Document Frequency, IDF) :衡量一个词的普遍重要性。如果某个词在 所有文档 中都出现,则其IDF值低。公式为: IDF(t) = log( (文档总数N) / (包含词t的文档数 df(t) + 1) ) 。加1是为了防止分母为0。 TF-IDF : TF-IDF(t, d) = TF(t, d) * IDF(t) 。 计算示例 : 我们有3篇文档(N=3)。 计算每个词的IDF(以自然对数log为例): “苹果”: df(苹果)=2 (D1, D3), IDF = log(3 / (2+1)) = log(1) = 0 “手机”: df(手机)=2 (D1, D2), IDF = log(3 / 3) = 0 “流畅”: df(流畅)=1, IDF = log(3 / 2) ≈ 0.405 “华为”: df(华为)=1, IDF = log(3 / 2) ≈ 0.405 “拍照”: df(拍照)=1, IDF = log(3 / 2) ≈ 0.405 “清晰”: df(清晰)=1, IDF = log(3 / 2) ≈ 0.405 “电脑”: df(电脑)=1, IDF = log(3 / 2) ≈ 0.405 “办公”: df(办公)=1, IDF = log(3 / 2) ≈ 0.405 计算每篇文档的 TF-IDF 向量(这里TF用计数,非归一化值): D1: [ 1 0, 1 0, 1* 0.405, 0, 0, 0, 0, 0] = [ 0, 0, 0.405, 0, 0, 0, 0, 0 ] D2: [ 0, 1 0, 0, 1 0.405, 1 0.405, 1 0.405, 0, 0] = [ 0, 0, 0, 0.405, 0.405, 0.405, 0, 0 ] D3: [ 1 0, 0, 0, 0, 0, 0, 1 0.405, 1* 0.405] = [ 0, 0, 0, 0, 0, 0, 0.405, 0.405 ] 可以看出,“苹果”、“手机”这类常见词的权重被降低甚至清零,而更能体现文档特色的词获得了更高权重。 第三步:余弦相似度计算 有了物品的特征向量,我们需要一个指标来衡量两个向量(即两个物品)的相似程度。余弦相似度通过计算两个向量夹角的余弦值来实现,其值在[ -1,1]之间,通常用于非负向量(如TF-IDF),其值在[ 0,1 ]之间,值越大越相似。 公式 : cos(θ) = (A·B) / (||A|| * ||B||) A·B 是向量A和B的点积(对应元素相乘再求和)。 ||A|| 是向量A的欧几里得范数(模长),即各元素平方和开根号。 计算示例 :比较 D1 和 D2 的余弦相似度。 D1向量: [ 0, 0, 0.405, 0, 0, 0, 0, 0 ] D2向量: [ 0, 0, 0, 0.405, 0.405, 0.405, 0, 0 ] 点积 A·B : (0 0)+(0 0)+(0.405 0)+(0 0.405)+... = 0 模长 ||A|| : sqrt(0^2 + 0^2 + 0.405^2 + ...) = 0.405 模长 ||B|| : sqrt(0^2+0^2+0^2+0.405^2+0.405^2+0.405^2) ≈ sqrt(0.492) ≈ 0.701 余弦相似度 : 0 / (0.405 * 0.701) = 0 因为D1和D2没有共享任何有区分度的词(TF-IDF权重大于0的词),所以相似度为0。 比较 D1 和 D3 : D1: [ 0, 0, 0.405, 0, 0, 0, 0, 0 ] D3: [ 0, 0, 0, 0, 0, 0, 0.405, 0.405 ] 点积 : 0 模长 :||D1||=0.405, ||D3||≈0.573 余弦相似度 : 0 虽然D1和D3共享“苹果”,但“苹果”的IDF为0,不贡献相似度。 第四步:推荐生成 在基于内容的推荐中,我们通常有一个用户的历史偏好物品集合(称为用户画像)。 构建用户画像向量 :将该用户喜欢(或交互过)的所有物品的TF-IDF向量 求平均 ,得到一个代表该用户整体偏好的综合向量。例如,假设用户喜欢D1,则其画像向量就是D1的TF-IDF向量本身。 计算相似度并排序 :对于尚未被该用户交互过的候选物品(如D2, D3),计算其向量与用户画像向量之间的余弦相似度。 生成推荐列表 :将候选物品按照相似度得分从高到低排序,将排名靠前的物品推荐给用户。 总结 基于内容的推荐通过将物品内容量化为特征向量,利用 TF-IDF 进行特征加权,并使用余弦相似度衡量物品间或物品与用户画像间的匹配度。其优点是可解释性强,不依赖其他用户数据(不存在冷启动问题),但缺点在于特征提取依赖领域知识,且推荐结果可能局限于与用户历史兴趣高度相似的物品,缺乏多样性。在实际系统中,常与协同过滤等算法结合使用。