问题标签 [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.
python - 数据草图:MinHash LSH 森林
我正在尝试为最近邻搜索创建一个 forst,但我不确定我做对了,或者即使 MinHash / LSH 是否适合我的数据。我问这个是因为结果不可用。
我正在尝试按照文档中的示例进行操作。
我的数据:
512 个维度,例如值有点像 0 或 1 这实际上可用于 MinHash / LSH 吗?如果是,我将如何为每条记录构造 MinHash?
据我了解,minhash 的重点已经是将数据映射到这样的位结构?所以我可以把这些位加载进去吗?如h = MinHash(num_perm=512, hashvalues=listOfBits)
?
scala - 如何减少火花中的 approxSimilarityJoin 引起的随机写入?
我正在使用 approxSimilarityJoin 来查找两组之间的 Jaccard 相似度。
对于 16 GB 的数据集,我得到了大约 270 GB 的随机写入,即使在服务器(3 个工作节点,每个节点有 64 GB RAM 和 64 个内核)上也需要超过 3 小时。
我浏览了以下链接:-
[ LSH Spark 永远卡在 approxSimilarityJoin() 函数上,但它对我不起作用。
我还浏览了 databricks 网站,他们将运行时与数据大小进行了比较。对于以 MB 为单位的数据,即 436 MB,大约SimilarityJoin 需要 25 分钟。对于像 GB 这样的数据集,它会产生问题。[ https://databricks.com/blog/2017/05/09/detecting-abuse-scale-locality-sensitive-hashing-uber-engineering.html]。
我们可以通过对代码/服务器配置进行一些更改来减少这种随机写入,还是 approxSimilarityJoin 函数存在问题?有没有其他有效的方法来计算大型数据集上的 Jaccard 相似度?
apache-spark - Java Spark:在分类数据的情况下为 aprroxNearestNeighbor 创建关键向量
我正在尝试为分类数据集找到近似最近的邻居。为此,我正在使用MinHashLSH
Spark 中存在的模型。
我的数据集有分类数据。所以我使用StringIndexer
后跟OneHotEncoderEstimator
后跟VectorAssembler
将分类值转换为连续值。
现在我想从我的数据集中找到给定键的最近邻居,这个键应该是向量形式。我无法找到将分类键转换为连续向量的方法。
如何从分类键key
为方法创建(数字连续向量) ?approxNearestNeighbors
apache-spark-sql - 如何使用 Spark 中的 scala 将 RDD[DataFrame] 中的所有 DataFrame 合并到 DataFrame 而不使用 for 循环?
val 结果是一个火花 DataFram,其列是 [uid: Int, vector: Vector]。但是recomRes的类型是RDD[DataFrame],我如何将recomRes中的所有结果映射到一个DataFrame?
我试过用for循环来处理,但是非常非常慢。
apache-spark - 奇怪的性能问题 Spark LSH MinHash approxSimilarityJoin
我正在使用 Apache Spark ML LSH 的 approxSimilarityJoin 方法加入 2 个数据集,但我看到了一些奇怪的行为。
在(内部)加入之后,数据集有点倾斜,但是每次一个或多个任务都需要花费过多的时间才能完成。
如您所见,每个任务的中位数是 6 毫秒(我在较小的源数据集上运行它来测试),但 1 个任务需要 10 分钟。它几乎不使用任何 CPU 周期,它实际上连接了数据,但速度如此之慢。下一个最慢的任务在 14 秒内运行,记录多 4 倍,实际上溢出到磁盘。
join本身是pos&hashValue(minhash)上两个数据集的内连接,按照minhash规范&udf计算匹配对之间的jaccard距离。
分解哈希表:
杰卡德距离函数:
处理数据集的加入:
我尝试过缓存、重新分区甚至启用的组合spark.speculation
,但都无济于事。
数据由必须匹配的带状疱疹地址文本组成:
53536, Evansville, WI
=>53, 35, 36, ev, va, an, ns, vi, il, ll, le, wi
将与城市或邮政编码中存在拼写错误的记录有很短的距离。
这给出了非常准确的结果,但可能是连接偏差的原因。
我的问题是:
- 什么可能导致这种差异?(一项任务需要很长时间,即使它的记录较少)
- 如何在不损失准确性的情况下防止 minhash 中的这种偏差?
- 有没有更好的方法来大规模地做到这一点?(我不能 Jaro-Winkler / levenshtein 将数百万条记录与位置数据集中的所有记录进行比较)
python - 返回由逗号分隔的相同变量的函数
我不明白这个函数返回两个变量的意义,它们是相同的:
似乎多余,但必须有充分的理由,我只是不明白为什么。也许是因为有两个返回语句?如果 'h' 为真,它是否返回两个返回语句?调用函数如下所示:
和
数据集和函数调用如下所示:
github位置:lsh/LHS
hash - 局部敏感散列可以应用于动态维数据点吗?
例如,假设我们有一些长度不同的向量,我们想要做的是测量每两对这些向量之间的相似性。我们必须考虑的是这些向量的维度是随时间变化的。我们可以这样做吗?
data-mining - LSH:解决 EXACT Near Neighbor Search?
我很好奇是否可以使用 LSH 找到精确匹配。在麻省理工学院关于 LSH 的网站上,他们说:
Locality-Sensitive Hashing (LSH) 是一种用于解决高维空间中的近似或精确近邻搜索的算法
https://www.mit.edu/~andoni/LSH/
我有点在互联网和谷歌学者上进行了一些搜索,但似乎没有任何迹象。有谁知道这是否可能并且可以将我指向有关它的论文?非常感激。
numpy - 在 EMR 中使用 Spark LSH 时出现“设备上没有剩余空间”错误和 SIGTERM 信号
Spark version-2.3.2
EMR - 5.19.0
8 Executors
每个执行器 - 5 core
我正在尝试做的事情:-
1. s3 中有数百万个 numpy 功能(.npy 文件)。
2. 使用 spark 下载所有 numpy 特征向量。
3. 将它们转换为 Spark Dataframes,其中 Dataframe 架构是特征名称(字符串)和特征向量(VectorUDT)。
4.然后在数据帧之间使用spark找到LSH。
代码:-
错误:-
提交脚本:-
在某些情况下,执行程序因 SIGTERM 信号而死,我可以在日志文件中看到。我在这里做错了什么?
dataframe - 是否可以将自定义类对象作为列值存储在 Spark Data Frame 中?
我正在使用 LSH 算法研究重复文档检测问题。为了处理大规模数据,我们使用了 spark。
我有大约 300K 文档,每个文档至少 100-200 字。在 Spark 集群上,这些是我们在数据帧上执行的步骤。
- 运行 Spark ML 管道以将文本转换为标记。
- 对于每个文档,使用 datasketch( https://github.com/ekzhu/datasketch/ ) 库获取 MinHash 值并将其存储为新列。
第二步失败,因为 spark 不允许我们将自定义类型值存储为列。Value 是 MinHash 类的对象。
有谁知道我如何将 Minhash 对象存储在数据框中?