Сходство Pairiwse jaccard с использованием алгоритма minha sh - PullRequest
0 голосов
/ 19 июня 2020

Я работаю с 200 тыс. Предложений и хочу найти сходство с Жаккаром, используя алгоритм minha sh. но он становится очень медленным из-за двух циклов 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)

1 Ответ

0 голосов
/ 09 августа 2020

Проблема в том, что MinHa sh вычисляется много раз для одного и того же входа. Вычисляя MinHa sh подписи только один раз, вы можете сэкономить много времени:

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)
...