实例-基于内容推荐

点击查看我的知乎专栏:推荐搜索广告


本文以文章推荐为例,编写一个推荐系统,应用基于内容推荐算法解决问题。

实现过程

基于内容推荐的过程一般包括以下三步:

1、给出物品表示:为每个物品抽取出一些特征来表示此物品;
2、学习用户偏好:利用一个用户过去喜欢(及不喜欢)的物品的特征数据,来学习出此用户偏好;
3、生成推荐列表:根据候选物品表示和用户偏好,为该用户生成其最可能感兴趣的 n 个物品。

:有关基于内容推荐的基本理论框架可参见之前的文章《推荐算法分类:协同过滤推荐、基于内容推荐、基于知识推荐、混合推荐》


本文的具体实现过程如下:

1、给出物品表示 - 基于向量空间模型的方法,具体采用了基于 TF-IDF 的文本表示法;
2、学习用户偏好 - 把用户所有喜欢的物品对应的向量的平均值作为此用户的 profile;
3、生成推荐列表 - 把候选物品里与此用户最相关(余弦相似度最大)的 N 个物品推荐给此用户。

基于 TF-IDF 的文本表示法

文本相似计算是进行文本聚类的基础,和传统结构化数值数据的聚类方法类似,文本聚类是通过计算文本之间"距离"来表示文本之间的相似度并产生聚类。文本相似度的常用计算方法有余弦定理和 Jaccard 系数。但是文本数据与普通的数值数据或类属数据不同,文本数据是一种半结构化数据,在进行文本挖掘之前必须要对文本数据源进行处理,如分词、向量化表示等。其目的就是使用量化的数值来表达这些半结构化的文本数据,使其适用于分析计算。下面以基于 TF-IDF 的文档表示法为例,先介绍 TF-IDF 算法,再基于 TF-IDF 算法表示文本。

TF-IDF

TF-IDF 是一种加权技术,它通过统计的方法来计算和表达某个关键词在文本中的重要程度。

TF-IDF 是由两部分组成,一部分是词频 TF(Token Frequency),TFtd=Ftd/Sd,关键词 t 在文档 d 中的词频=关键词 t 在文档 d 中出现的次数/所有关键词在文档 d 中出现的总次数。另一部分是逆向文档频率 IDF(Inverse Document Frequency),IDFt=ln((1+|D|)/|Dt|),关键词 t 的逆向文档频率=ln((1+文档总数)/包含关键词 t 的文档数量)。

TF-IDF 的值就是由这两部分相乘得到的,TF-IDFtd=TFtd*IDFt。要指出的是 TF-IDF 不是指某一个特定的公式,而是表示了一系列基于基本 TF-IDF 方法变形(分别对 TF 和 IDF 这两部分进行处理)的公式的集合,上述公式是被多数系统证明比较有效的一个公式。

TF-IDF 表示文本

通过上面的介绍可以发现,每个文本中的每个关键词都有属于自己的 TF-IDF 值,所以我们的思路大致是:

1、获取关键词表;
2、计算每个关键词的 TF-IDF 值;
3、使用 TF-IDF 表示一个文本。


1、获取关键词表
现有两个文本 d1 和 d2,将所有文本分词后得到关键词表【A, B, C, D, E, F, G】。


2、计算每个关键词的 TF-IDF 值
文本 d1 关键词分布:【A, B, C, C, E, D, A, B, F, E, E, E, F, G, G】
文本 d2 关键词分布:【C, E, E, F, G, G, A, B, E, B】


关键词 t 在文档 d 中出现的次数如下:

d1 d2
A 2 1
B 2 2
C 2 1
D 1 0
E 4 3
F 2 1
G 2 2


词频矩阵如下:

d1 d2
A 0.13 0.10
B 0.13 0.20
C 0.13 0.10
D 0.07 0.00
E 0.27 0.30
F 0.13 0.10
G 0.13 0.20


然后再计算每个关键词对应的逆向文档频率即 IDF 的值。如下表所示:

ln
A 0.4
B 0.4
C 0.4
D 1.1
E 0.4
F 0.4
G 0.4


最后将正规化后的词频与IDF值相乘,结果如下:

d1 d2
A 0.052 0.040
B 0.052 0.080
C 0.052 0.040
D 0.077 0.000
E 0.108 0.120
F 0.052 0.040
G 0.052 0.080


3、使用 TF-IDF 表示一个文本
使用TF-IDF表示文本其实就是个填表的过程,将每一个文本中的每一个关键词对应关键词表的索引进行填值。


关键词表【A, B, C, D, E, F, G】
文本 d1 的文本表示:[0.052, 0.052, 0.052, 0.077, 0.108, 0.052, 0.052]
文本 d2 的文本表示:[0.040, 0.080, 0.040, 0.000, 0.120, 0.040, 0.080]

代码实例

#!/usr/bin/env python
# coding: utf-8 

"""
@Time: Created on 2021-02-23 | Updated on 2021-02-23
@Author: 小小磊
@Website: 
@Description: 基于 TF-IDF 的文本表示。具体地,
              1、获取关键词表;
              2、计算每个关键词的 TF-IDF 值;
              3、使用 TF-IDF 表示一个文本。;
"""


import jieba
import numpy as np
import math


class TfIdf(
  • 0
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
ARM Cortex-M3是一种广泛应用于嵌入式系统的32位处理器架构。NXP LPC1768是基于ARM Cortex-M3架构的一款微控制器,具有丰富的外设和易于使用的开发环境。 在使用NXP LPC1768进行嵌入式开发实例时,我们需要以下步骤: 1. 硬件准备:准备好NXP LPC1768开发板和必要的连接线材。将开发板连接到计算机,确保正确安装驱动程序。 2. 开发环境设置:ARM Cortex-M3开发使用Keil MDK软件包,下载并安装Keil MDK开发环境。将LPC1768相关文件添加到Keil MDK,并设置正确的编译和调试选项。 3. 编写代码:使用Keil MDK的集成开发环境,我们可以编写C或汇编语言程序来控制LPC1768的外设。例如,可以通过GPIO控制LED灯,通过UART与计算机通信等。 4. 编译和下载:通过Keil MDK编译代码,生成二进制文件。然后,使用编程器将二进制文件下载到LPC1768开发板上。 5. 调试和测试:使用Keil MDK的调试功能,可以在LPC1768上单步执行程序,观察变量的值和寄存器的状态,以确保程序正确运行。 6. 扩展功能:利用LPC1768的丰富外设,我们可以实现各种功能,如通过ADC读取模拟信号,使用PWM控制电机速度等。开发者可以根据具体需求进行相应的硬件和软件开发。 总的来说,ARM Cortex-M3嵌入式开发实例基于NXP LPC1768的开发,需要进行硬件准备、开发环境设置、编写代码、编译和下载、调试和测试等步骤。通过这些步骤,我们可以实现各种功能并开发嵌入式应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值