gpt4 book ai didi

寻找对象之间相似性的算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:18:13 24 4
gpt4 key购买 nike

我有一些庞大的数据集(在 10-20 之间),我需要找出这些数据集之间的关系。数据集非常庞大,以至于计算可能无法在一台机器上完成。这些数据集中的字段是文本而不是数字。更复杂的是,一些字段也可能包含不正确的词,例如我正在使用模糊算法的“house”对应的“huose”。

为了解决这个问题,我正在考虑使用余弦相似度,但不确定如此庞大的数据集的性能。我的问题是,这个算法是否足以解决这类问题(性能和准确性方面)。如果没有,我应该研究其他算法吗?

编辑:更多信息

我将使用的数据集可能是文本文件和数据库表的混合体。列中的值通常为 10-50 个字符长,并且它不是一个巨大的文档。我寻找的关系是数据集的一列与其他列的相似程度。我有点想根据列之间的相似性得出一个分数。例如

Col1     Col2     Col3A        B        XC        S        BE        C        AT        V        CX        E

所以在上面的例子中,可以说 Col1Col3 彼此有很强的关系,而 Col1Col2 有弱关系。

最佳答案

不,使用余弦相似度不是一个好的选择,因为:

  1. 它不考虑词的顺序(假设词袋模型)。
  2. 它需要计算每对对象的成对距离,这对于大型集合而言在计算上是不可能的。

您可能会在 Information Retrieval 中寻找更像接近重复检测 的东西| .我已经在 different thread 中解释过一次了(虽然不是一个确切的骗局),但这是如何做到的:

已知的解决方案之一是使用 Jaccard-Similarity 用于获取两个文档之间的差异。

Jaccard 相似度基本上是 - 从每个文档中获取单词集,让这些集合为 s1s2 - jaccard 相似度为 |s1 [intersection ] s2|/|s1 [联合] s2|.

通常在面对几乎重复的情况时——然而单词的顺序有一定的重要性。为了处理它 - 在生成集合 s1s2 时 - 你实际上生成了 k-shinglings 的集合,而不是只有单词的集合。
例如

Text 1:"I'm writing a crawler to"
Text 2:"I'm writing a some text crawler to get"

如果k=2,集合将是:

s1 = { I'm write, write a, a crawler, crawler to }
s2 = { I'm write, write a, a some, some text, text crawler, crawler to, to get }
s1 [union] s2 = { I'm write, write a, a crawler, crawler to, a some, some text, text crawler, to get }
s1 [intersection] s2 = { I'm write, write a, crawler to }

在上面,jaccard 相似度将为 3/8。如果您使用相同方法使用单个单词,(k=1 shinglings) 您将获得所需的 5/8 - 但在我(和大多数 IR 专家)看来,这是更糟糕的解决方案。

这个过程可以很好地缩放以非常有效地处理大量集合,而无需检查所有对并创建大量集合。更多详细信息,请参阅 these lecture notes (我在大约 2 年前根据作者的笔记做了这个讲座)。

关于寻找对象之间相似性的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29963639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com