问题标签 [lsh]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
apache-spark - 如何使用 scala 在 Spark 中评估 minHashLSH?
我有一个学术论文数据集,它有 27770 篇论文(节点)和另一个文件(图形文件),原始边长为 352807 个条目。我想计算 minHashLSH 以找到相似的文档并预测两个节点之间的链接!下面你可以看到我尝试用 scala 在 spark 上实现这个。我面临的问题是我不知道如何评估结果!
原始图是具有nodeAId、nodeBId 格式的文件。我的结果是 nodeAId、nodeBId、JaccardSimilarity 的形式。它们都是数据框。如何评估我的结果并获得准确度或 F1 分数?
我已经阅读了如何找到准确度和 F1 分数,所以我尝试制作一个函数来计算它们。我的方法是下面的代码。
但是,当我尝试运行它时,它永远不会结束!我不知道如何改进或修复它以获得准确度和 F1 分数。有没有更简单的方法来做到这一点?
感谢大家!
scala - 增加 MinHashLSH 中的哈希表,降低准确性和 f1
我已经使用 MinHashLSH 和approximateSimilarityJoin 以及 Scala 和 Spark 2.4 来查找网络之间的边缘。基于文档相似度的链接预测。我的问题是,当我增加 MinHashLSH 中的哈希表时,我的准确性和 F1 分数正在下降。我已经为这个算法阅读的所有内容都表明我有一个问题。
我尝试了不同数量的哈希表,并提供了不同数量的 Jaccard 相似度阈值,但我遇到了同样的问题,准确度正在迅速下降。我也尝试过对我的数据集进行不同的采样,但没有任何改变。我的工作流程是这样进行的:我正在连接我的数据框的所有文本列,其中包括标题、作者、期刊和摘要,接下来我将连接的列标记为单词。然后我使用 CountVectorizer 将这个“词袋”转换为向量。接下来,我在 MinHashLSH 中为该列提供一些哈希表,最后我正在做一个近似相似性连接来查找低于我给定阈值的类似“论文”。我的实现如下。
我忘了告诉你,我在一个有 40 个内核和 64g RAM 的集群中运行这段代码。请注意,近似相似连接(Spark 的实现)适用于 JACCARD DISTANCE 而不是 JACCARD INDEX。因此,我提供了 JACCARD DISTANCE 作为相似度阈值,在我的情况下,它是 jaccardDistance = 1 - 阈值。(阈值 = Jaccard 指数)。
我希望在增加哈希表时获得更高的准确性和 f1 分数。你对我的问题有任何想法吗?
提前感谢大家!
python - LSH - 带状疱疹的二进制矩阵表示
我有一个庞大的新闻文章数据集,准确地说是 48000 篇。我已经为每篇文章制作了 ngrams n = 3
。我的 ngram 看起来像这样:
现在我需要为每个木瓦和文章制作一个二进制矩阵:
起初,我将所有带状疱疹都保存在一个列表中。之后,我尝试了这个来检查它是否有效。
因为一个是设置的,另一个是字符串它不起作用。任何建议,如何使它工作?或任何其他方法?
谢谢你
python - 在数据帧的所有行上应用 LSH approxNearestNeighbors
我正在尝试在数据框的model.approxNearestNeighbors(df, key, n)
所有行上应用 BucketedRandomProjectionLSH 的函数,以便为每个项目找到前 n 个最相似的项目。我的数据框有 100 万行。
我的问题是我必须找到一种方法在合理的时间内(不超过 2 小时)计算它。我已经阅读了有关该函数的信息,approxSimilarityJoin(df, df, threshold)
但是该函数花费的时间太长并且没有返回正确的行数:如果我的数据框有 100.000 行,并且我设置了一个非常高/允许的阈值,我得到的结果甚至不是 10%返回的行数。
所以,我正在考虑approxNearestNeighbors
在所有行上使用,以便计算时间几乎是线性的。
您如何将该功能应用于数据框的每一行?我不能使用 UDF,因为我需要模型 + 数据框作为输入。
你有什么建议吗 ?
matching - 用于相似匹配的局部敏感度散列
我正在尝试使用局部敏感度散列算法,我想用它来查找计算机断层扫描 (CT) 图像中的患者相似性。我已经建立了一个深度神经网络提取特征。现在我想拍摄一位新患者的图像,提取特征并通过 LSH 算法将它们与所有其他(训练)患者特征一起发送,以找到最相似的特征。
由于这些特征是高维的,我认为 LSH 将是一个不错的选择。
现在我想知道我应该如何为这样的任务设置算法的超参数。每个病人都应该得到自己的桶。例如 100 名患者,100 个水桶,还是我应该只有一个水桶并将所有患者放入其中以获得最近的一个?
所有 CT 图像都包含相同的解剖结构。
感谢您的任何建议,
亲切的问候,
迈克尔
python - LSH 即时分箱
我想使用 MinHash LSH 将大量文档放入相似文档的桶中(Jaccard 相似度)。
问题:是否可以在不知道其他文档的 MinHash 的情况下计算 MinHash 的桶?
据我了解,LSH“只是”计算 MinHashes 的哈希值。所以应该可以吧?
我觉得很有希望的一种实现是datasketch。在知道所有文档的 MinHash 后,我可以在 LSH 中查询与给定文档相似的文档。但是,在了解其他文档之前,我认为没有办法获取单个文档的存储桶。 https://ekzhu.github.io/datasketch/index.html
pyspark - PySpark ApproxSimilarityJoin 缺失结果
我试图通过在名称的变音位表示的二元组上应用 MinHashLSH 在两个数据帧之间进行相似性连接。这在大多数情况下效果很好,但似乎不能处理短子字符串情况。
例如,我想查找具有类似于“LTSNKK”
的变音位的名称。近似相似连接的结果如下所示:
但是,还有另一个名称没有被连接捕获,“LTS”。我预计“LTS”会以 0.2 左右的置信度出现,但事实并非如此。
我的连接配置为 1.0 的最大置信度,将限制提高到更高的值没有任何效果。
pyspark 的近似相似性连接是否存在一些隐藏的限制,会导致它忽略“LTS”但考虑“LTSNK”?
python - 在python中使用余弦相似度将向量与其他向量进行比较的快速方法?预计算矩阵?LSH 哈希?
我正在研究一个需要相似性度量来从更大的集合中提取数据子集以进行进一步分析的问题。
我提取子集的方法是使用高于某个阈值的余弦相似度。下面的玩具套装描述了这个问题:
该矩阵给出了 10 个“样本”与 10 个“特征”的相似性:
我发现使用此功能的相似之处:
然后返回最相似的项目,高于阈值:
这很好用,我遇到的问题是我的数据集有超过 100 万行乘 200 列,并且similarity_df 是 100 万乘 100 万。不用说,我的 for 循环中的顺序比较很慢。
由于我需要一次找到大约 100 个向量的相似性,这使情况更加复杂。
有没有更快的方法来做这个搜索/排名?也许是最大化相似性(而不是最小化共谋)的散列函数,例如 LSH?虽然我使用的是余弦相似度,但也许另一个相似度指标做得更好,但现在的问题是一种更快的方法来进行一对多比较。
lsh - 基于 LSH 等技术的语义文本相似性搜索与基于分布式语义的嵌入技术有何不同?
表面上看起来,我们通过散列或向量化它们来生成文本的低维表示,如果嵌入(在嵌入情况下)相似的向量将靠近向量空间,并且相似的散列将在同一个桶中(在LSH 案例)。这些有什么不同?我错过了什么?
apache-spark - 性能问题 Spark LSH MinHash approxSimilarityJoin
我正在使用 Apache Spark ML LSH 的 approxSimilarityJoin 方法加入 2 个数据集,一个包含 600 万条记录,另一个包含 1100 万条记录。
我尝试过使用 500 到 2000 的随机分区,最后 2 个任务永远卡住了。Executors 是 50 executor 内存是 50GB
还有什么可以做的?