作者:18cyl
时间:2021-09-01
一、什么是用户标签数据
通过一些特征联系用户和物品,给用户推荐那些具有用户喜欢的特征的物品。这里的特征可以是物品的属性集合,也可以是隐语义向量,同时也可以使用标签信息。
标签的应用一般分为两种:
- 让作者或者专家给物品打标签。
- 让普通用户给物品打标签UGC(User Generated Content)
标签系统中的推荐问题主要有以下两个:
- 如何利用用户打标签的行为为其推荐物品(基于标签的推荐)
- 如何在用户给物品打标签时为其推荐适合该物品的标签(标签推荐)
为了研究以上两个问题,需要解答下面三个问题:
- 用户为什么要打标签
- 用户怎么打标签
- 用户打什么样的标签
二、用户打标签三连问探究
用户为什么打标签
- 社会维度:有的用户标注是给内容上传者使用的,有的用户标注是给广大用户使用的
- 功能维度:有些标注用于更好的组织内容,方便用户将来的查找
- 传达某种信息:如照片的拍摄时间和地点
用户如何打标签
标签的流行度分布遵循长尾分布:某一物品被打的标签表明自己对其的分类,虽然千奇百怪但是总是趋同的。这个特性也说明了人打的标签可以用来作为物品的特征,而且特征数量多且物理意义良好。
某一用户给所有物品打的标签也遵循长尾分布
用户打什么样的标签
-
表明物品是什么
-
表明物品的种类
-
表明谁拥有物品
-
用户相关的标签
-
用户的任务
-
类型
-
时间
-
任务
-
地点
-
语言
-
奖项
-
其他
三、基于标签的推荐系统
将标签作为联系用户和物品的纽带(即将标签当做物品的特征与用户的偏好)
用户的一个标签行为一般由一个三元组表示(u,i,b)即用户u给物品i打了标签b。如若加上时间地点等等上下文信息则扩充一个标签行为的特征向量即可
计算一个推荐列表的多样性:
D
i
v
e
r
s
i
t
y
=
1
−
∑
i
∈
R
(
u
)
∑
j
∈
R
(
u
)
,
j
≠
i
S
i
m
(
i
t
e
m
t
a
g
s
[
i
]
,
i
t
e
m
t
a
g
s
[
j
]
)
(
∣
R
(
u
)
∣
2
)
公
式
的
意
思
是
先
计
算
相
似
度
,
然
后
(
1
−
相
似
度
)
即
为
多
样
性
Diversity = 1 - \frac{\sum_{i\in R(u)}\sum_{j\in R(u),j\neq i}Sim(item_tags[i],item_tags[j])} { \left( \begin{matrix} |R(u)| \\ 2 \end{matrix} \right)} \\ 公式的意思是先计算相似度,然后(1-相似度)即为多样性
Diversity=1−(∣R(u)∣2)∑i∈R(u)∑j∈R(u),j=iSim(itemtags[i],itemtags[j])公式的意思是先计算相似度,然后(1−相似度)即为多样性
计算一个推荐列表的平均热门程度:
A
v
e
r
a
g
e
P
o
p
u
l
a
r
i
t
y
=
∑
u
∑
i
∈
R
(
u
)
l
o
g
(
1
+
i
t
e
m
p
o
p
(
i
)
)
∑
u
∑
i
∈
R
(
u
)
1
其
中
i
t
e
m
p
o
p
(
i
)
为
给
这
个
物
品
打
过
标
签
的
用
户
数
。
AveragePopularity = \frac{\sum_u\sum{i\in R(u)}log(1+item_pop(i))}{\sum_u\sum_{i \in R(u)}1} \\ 其中item_pop(i)为给这个物品打过标签的用户数。
AveragePopularity=∑u∑i∈R(u)1∑u∑i∈R(u)log(1+itempop(i))其中itempop(i)为给这个物品打过标签的用户数。
拿到用户标签数据后可以借用统计学知识做个性化推荐:
- 统计每个用户最常用的标签
- 对于每个标签,统计被打过这个标签次数最多的物品
- 对于一个用户,首先找到他常用的标签,然后找到具有这些标签的最热门物品推荐给这个用户
这个过程可以使用:
p
(
u
,
i
)
=
∑
b
n
u
,
b
l
o
g
(
1
+
n
b
(
u
)
n
b
,
i
这
里
n
b
(
u
)
记
录
了
标
签
b
被
多
少
个
不
同
的
用
户
使
用
过
。
这
个
算
法
即
为
T
a
g
B
a
s
e
d
T
F
I
D
F
p(u,i) = \sum_b\frac{n_{u,b}}{log(1+n_b^{(u)}}n_{b,i}\\ 这里 n^{(u)}_b 记录了标签b被多少个不同的用户使用过。这个算法即为TagBasedTFIDF
p(u,i)=b∑log(1+nb(u)nu,bnb,i这里nb(u)记录了标签b被多少个不同的用户使用过。这个算法即为TagBasedTFIDF
同时,如果对热门物品进行乘法可以在分母上加上惩罚因子
p
(
u
,
i
)
=
∑
b
n
u
,
b
l
o
g
(
1
+
n
b
(
u
)
n
b
,
i
l
o
g
(
1
+
n
i
(
u
)
)
这
里
n
i
(
u
)
为
物
品
i
被
多
少
个
用
户
打
过
标
签
。
p(u,i) = \sum_b\frac{n_{u,b}}{log(1+n_b^{(u)}}\frac{n_{b,i}}{log(1+n_i^{(u)})}\\ 这里n_i^{(u)}为物品i被多少个用户打过标签。
p(u,i)=b∑log(1+nb(u)nu,blog(1+ni(u))nb,i这里ni(u)为物品i被多少个用户打过标签。
然而当面对一个新的用户或者新的物品,那么使用该算法的冷启动问题将会十分明显。所以标签拓展也是一个急需解决的问题:
- 计算标签相似度,然后对新物品所获的少量标签扩充相似标签。这样也可以解决数据量系数的问题。
同时由于人类打标签的无序性与随意性导致有相当一部分的无用标签产生,同时简洁有效的标签也会可以提高推荐解释性。所以标签清理也是一个需要解决的问题:
-
一般情况下我们通过标签寻找用户的兴趣物品,所以负面的标签可以清理。
-
去除词频很高的停止词
-
去除因词根不同造成的同义词
-
去除因分隔符造成的同义词
同时为了控制标签的质量,也可以采用让用户进行反馈的思想,即让用户告诉系统某个标签是否合适。
四、给用户推荐标签
当用户浏览某个物品时,标签系统希望用户可以给这个物品打上高质量标签。所以需要为用户推荐标签:
- 方便用户输入标签
- 提高标签质量
如何给用户推荐标签
- 给用户推荐整个系统中最热门的标签(效果差)
- 给用户u推荐物品i上最热门的标签
- 给用户u推荐他自己经常使用的标签
- 将上述后两种用系数加权然后取其中前几个进行推荐