比较大量加权标签云?

时间:2010-06-19 16:14:19

标签: mysql

我有数千套大型标签云数据;我可以使用简单的select / group语句(例如)

为每个集合检索加权标记云
SELECT tag, COUNT( * ) AS weight
FROM tags
WHERE set_id = $set_id
GROUP BY tag
ORDER BY COUNT( * ) DESC

我想知道的是 - 比较加权标签云和找到最相似的其他集合的最佳方法是什么,考虑权重(集合中出现的次数),甚至可能计算一个比较分数,所有这些都在一个有些有效的陈述中?

我发现网络缺乏关于该主题的高质量文献,认为它有点广泛相关,并试图抽象我的例子以保持其普遍适用。

1 个答案:

答案 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表示相等。