快速矢量差异/相似性度量

时间:2010-12-14 01:22:54

标签: java optimization similarity cosine


我正在开展一个项目,我正在使用遗传算法生成最能描述文本的单词列表 我现在正在使用余弦相似性来做它,但它有两个缺点:它的目的太慢了,如果两个被比较的向量是零,它最终会产生一个人为的高相似性和一个不太相似的单词向量好。 对于其他措施的任何建议会更快/更少注意不存在的单词? 感谢。

1 个答案:

答案 0 :(得分:3)

余弦相似度是数量乘积的点积,因此最小化维数是至关重要的。

要稍微剔除牛群,您可能需要应用stemming将具有相似含义的单词折叠到单个维度中,然后抛出hapax legomena(仅在考虑的语料库中出现一次的单词) )来自维度池,因为算法不太可能从它们中获取很多有用的信息。

但是,我不确定是什么会产生零向量。你能举个例子吗?

编辑:那么您要为特定文档或群集创建选择性的单词列表?在这种情况下,您需要一些方法来消除低选择性的单词。

您可能希望将最常见的单词视为stop words,以进一步剔除维度集并获得更多性能。此外,在遗传算法方面,您的适应度函数需要惩罚与目标群集之外的文档匹配的单词列表,而不仅仅是奖励与群集内的文档匹配的单词列表,因此您的单词列表不会被仅仅是单词的术语混乱经常而非选择性。

如果您在调整适应度函数后需要更好的语义选择性,则可能需要考虑使用orthogonal sparse bigrams而不是单个单词。我不知道它在尺寸方面会做些什么,因为虽然会有 O(kn 2 不同的术语而不是 n ,他们中的更多人将是hapaxes。如果您在术语列表中需要单个单词而不是OSB,则可能会出现问题。