我有成千上万的大型标签云数据集;我可以使用简单的选择/组语句为每个集合检索加权标签云(例如)

SELECT tag, COUNT( * ) AS weight
FROM tags
WHERE set_id = $set_id
GROUP BY tag
ORDER BY COUNT( * ) DESC


我想知道的是-比较加权标签云并找到最相似的其他集合的最佳方法是什么,考虑权重(集合中出现的次数),甚至可能计算比较分数,全部归结为某种有效的陈述?

我发现网络上缺乏有关该主题的高质量文献,认为它在某种程度上具有广泛的相关性,并尝试对我的示例进行抽象化以使其始终适用。

最佳答案

首先,您需要像对待向量一样标准化每个标签云,假设标签云是一个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表示相等。

关于mysql - 比较大量加权标签云?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3076196/

10-11 05:22