【问题标题】:Pairiwse jaccard similarity using minhash algorithm使用 minhash 算法的 Piriwse jaccard 相似度
【发布时间】:2020-06-19 06:02:36
【问题描述】:

我正在处理 20 万个句子,我想使用 minhash 算法找到 Jaccard 相似度。但由于两个 for 循环,它变得非常慢。有人可以建议我一些好的实施吗?

下面是我当前的代码

from datasketch.minhash import MinHash

def eg1(data1, data2):
    m1 = MinHash()
    m2 = MinHash(enter code here)
    for d in data1:
        m1.update(d.encode('utf8'))
    for d in data2:
        m2.update(d.encode('utf8'))
    return m1.jaccard(m2)

jac_sim = []
for i_doc in range(len(shingles)-1):
    for j_doc in range(i_doc + 1, len(shingles)):
        jaccard_similarity = eg1(shingles[i_doc], shingles[j_doc])
        jac_sim.append(jaccard_similarity)

【问题讨论】:

    标签: performance text similarity minhash


    【解决方案1】:

    问题在于 MinHash 会为相同的输入计算多次。通过只计算一次 MinHash 签名,您应该能够节省大量时间:

    signatures = []
    for i_doc in range(len(shingles)):
        m = MinHash()
        for d in shingles[i_doc]:
            m.update(d.encode('utf8'))
        signatures.append(m)
    
    jac_sim = []    
    for i_doc in range(len(shingles)-1):
        for j_doc in range(i_doc + 1, len(shingles)):
            jaccard_similarity = signatures[i_doc].jaccard(signatures[j_doc])
            jac_sim.append(jaccard_similarity)
    

    【讨论】:

      猜你喜欢
      • 2022-07-21
      • 2022-01-04
      • 2017-03-27
      • 1970-01-01
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 2018-01-23
      • 2021-09-01
      相关资源
      最近更新 更多