我有数千套大型标签云数据;我可以使用简单的select / group语句(例如)
为每个集合检索加权标记云SELECT tag, COUNT( * ) AS weight
FROM tags
WHERE set_id = $set_id
GROUP BY tag
ORDER BY COUNT( * ) DESC
我想知道的是 - 比较加权标签云和找到最相似的其他集合的最佳方法是什么,考虑权重(集合中出现的次数),甚至可能计算一个比较分数,所有这些都在一个有些有效的陈述中?
我发现网络缺乏关于该主题的高质量文献,认为它有点广泛相关,并试图抽象我的例子以保持其普遍适用。
答案 0 :(得分:1)
首先,您需要像对待矢量一样对每个标签云进行标准化,假设标签云是 n维向量,其中每个维度都表示一个单词,其值代表权重这个词。
你可以通过计算每个云的norm(或幅度)来做到这一点,即所有权重平方的平方根:
m = sqrt( w1*w1 + w2*w2 + ... + wn*wn)
然后通过将每个权重除以云的范数来生成规范化的标记云。
在此之后,您可以通过在云之间使用标量积来轻松计算相似度,这只是将每对中的每个组件和所有这些组合在一起。例如:
v1 = { a: 0.12, b: 0.31; c: 0.17; e: 0.11 }
v2 = { a: 0.21, b: 0.11; d: 0.08; e: 0.28 }
similarity = v1.a*v2.a + v1.b*v1.b + 0 + 0 + v1.e*v2.e
如果某个载体的标签不是另一个,那么该特定产品显然是0。
范围[0,1]
内的这种相似性,0表示没有相关性,而1表示相等。