实战智能推荐系统(12)-- 标签推荐系统
2018-03-30 17:41
302 查看
标签推荐系统
标签推荐系统指的是利用用户对物品打标签的行为作出推荐。数据组织形式可用最简单的三元组表示(用户,物品,标签)。对于每个物品 i ,item_tags[i] 存储了物品 i 的标签向量,其中 item_tags[i][b] 表示用户对物品 i 打标签 b 的次数。那么物品 i 和物品 j 的余弦相似度可以通过如下的程序计算:def CosineSim(item_tags, i, j):ret = 0
for b,wib in item_tags[i].items():
if b in item_tags[j].keys():
ret += wib * item_tags[j][b]
ni = 0
nj = 0
for b ,w in item_tags[i].items():
ni += w * w
for b, w in item_tags[j].items():
nj += w * w
if ret == 0:
return 0
return ret / math.sqrt(ni * nj)
得到物品相似度后,我们可以用如下公式计算推荐结果的多样性def Diversity(item_tags, recommend_items):
ret = 0
n = 0
for i in recommend_items.keys():
for j in recommend_items.keys():
if i == j :continue
ret += ConsineSim(item_tags, i ,j)
n += 1
return 1 - ret / (n * 1.0)
基于标签数据的推荐算法
针对标签数据,最简单的计算用户 u 对物品 i 的兴趣公式如下:b代表标签,u代表用户,i 代表物品,
表示用户u 打过标签 b 的次数,
表示标签b 被在物品 i 上被标记的次数。
用 records 存储标签数据的三元组,其中 records[i] = [user,item,tag]
用 user_tags 存储
,其中 user_tags[u][b] =
用 tag_items 存储
,其中 tag_items[b][i] =
如下程序可以从 records 中统计出 user_tags 和 tag_items:def InitStat(records):
user_tags = dict()
tag_items = dict()
user_items = dict()
for user, item, tag in records.items():
addValueToMat(user_tags, user, tag, 1)
addValueToMat(tag_items, tag, item, 1)
addValueToMat(user_items, user, item, 1)
统计出 user_tags 和 tag_items 后,我们可以利用上面的公式进行推荐,python实现如下:def Recommend(user):
recommend_items = dict()
tagged_items = user_items[user] #已经被标记过的物品
for b, nub in user_tags[user].items():
for i, nbi in tag_items[b].items():
if i in tagged_items:
continue
if i not in recommend_items:
recommend_items[i] = nub * nbi
else:
recommend_items[i] += nub * nbi
return recommend_items
推荐算法公式改进
以下是初始算法公式:b代表标签,u代表用户,i 代表物品,
表示用户u 打过标签 b 的次数,
表示标签b 被在物品 i 上被标记的次数。
这个公式倾向于给热门标签对应的物品很大的权重,因此会造成推荐热门标签的物品给用户,从而降低推荐结果的新颖性。对热门标签增加惩罚后,改进公式如下:
其中
记录了标签 b 被多少个不同的用户使用过。这个算法记为 TagBasedTFIDF。
再经过进一步的优化,再加上对热门物品的惩罚项后,改进公式如下:
其中
记录了物品 i 被多少个不同的用户标记过,其他项含义不变。这个算法记为 TagBasedTFIDF++。
标签的清理 & 给用户推荐标签
经过前面的讨论可以看到,标签的质量对标签推荐系统有至关重要的影响。但并是不所有的标签都有效,比如用户对一个物品打了一个表示情绪的标签“无聊”,那我们不可能向用户推荐具有“无聊”这个标签的物品。需要清除无效的标签,以免降低推荐系统算法的效果。一般来说有如下的标签清理方法:1.去除词频很高的停止词
2.去除因词根不同造成的同义词
3.去除因分隔符或大小写造成的同义词
如果上述标签清理的方法还不能满足标签的高度有效性的话,也可以给用户推荐标签。既可以方便用户输入标签,又可以提高标签质量。如下图所示就是一种给用户推荐标签的系统:
如图,一般推荐的标签由两部分组成,一部分是用户自己常用的标签,一部分是物品的热门标签。
相关文章推荐
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(12)-- 标签推荐系统
- 实战智能推荐系统(4)-- 什么是好的推荐系统?
- 实战智能推荐系统(5)-- 推荐系统评价指标