微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么R中的textreuse packge会使LSH桶的大小比原始的小杂项大?

如何解决为什么R中的textreuse packge会使LSH桶的大小比原始的小杂项大?

据我了解,LSH方法的主要功能之一是数据缩减,甚至超出了基础哈希(通常是哈希)。我一直在R中使用INSERT INTO包,但对它生成的数据大小感到惊讶。 textreuse是经过同行评审的ROpenSci软件包,因此我认为它可以正确执行其工作,但是我的问题仍然存在。

假设我的minhash和LSH函数分别使用256个排列和64个波段-现实值通常用于检测相对确定性(em)(〜98%),相似度低至50%

如果我使用textreuse(256个权限)对随机文本文件进行哈希处理并将其分配给TextReuseTextDocument,我将拥有:

trtd

现在让我们为此对象创建LSH桶(64个波段)并将其分配给object.size(trtd$minhashes) > 1072 bytes ,我将拥有:

l

因此,LSH桶中保留的哈希值是原始哈希值的六倍。我了解发生这种情况是因为object.size(l$buckets) > 6704 bytes uses a md5 digest会创建存储桶哈希。

但是这不是太浪费了吗?我不能改善它吗?我们的数据缩减技术最终膨胀到这种程度是否正常?而且,基于原始哈希值(类似于烫发= 256和条带= 256)匹配文档,然后使用阈值清除误报不是更有效吗?

请注意,我已经阅读了诸如Mining of Massive Datasets之类的典型文本,但是有关此特定实现的问题仍然存在。还应注意,这个问题不仅出于好奇,而且出于需求。当您拥有数百万或数十亿的哈希值时,这些差异就变得很明显。

解决方法

此处的软件包作者。是的,使用比您需要的更多的哈希/频带会很浪费。 (尽管请记住,我们在这里谈论的是千字节,它可能比原始文档小得多。)

问题是,您需要什么?如果您只需要查找接近相同的匹配项(即Jaccard得分接近1.0),则不需要特别敏感的搜索。但是,如果您需要可靠地检测仅部分重叠(例如,Jaccard得分接近0)的潜在匹配,那么您需要更多的哈希/带。

由于您已阅读MMD,因此可以在此处查找方程式。但是包中有两个功能,documented here,它们可以帮助您计算需要多少个哈希/带。 Dim Findstring = IO.File.ReadAllText("data.txt") Dim Data As String = TextBox1.Text Dim aryTextFile() As String aryTextFile = Findstring.Split(",") If aryTextFile.Contains(Data) Then End If 将计算将被检测到的阈值Jaccard分数;而lsh_threshold()会告诉您检测到具有给定Jaccard分数的一对文档的可能性。尝试使用这两个功能,直到获得最适合搜索问题的哈希/带数为止。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。