как я могу ускорить проверку сходства моего документа с одной матрицей?

#python #pandas #machine-learning #tf-idf #cosine-similarity

#python #pandas #машинное обучение #tf-idf #косинусное сходство

Вопрос:

Я пытаюсь найти сходство документа из большого набора статей (460 файлов, содержащих 4000 строк в каждом). Но cosine similarity для вычисления требуется много времени.

Я не могу использовать библиотеки python sklearn или scipy. Итак, я попытался реализовать raw tf-idf vectorizer и cosine similarity . Векторизатор выдает мне список списков.

Матрица выглядит следующим образом:

 [[0.0,0.0,...…,0.35480,0.0,0.0],[0.0,.....]]
  

Мой код:

 def computeTFIDFVector(document):
    tfidfVector = [0.0] * len(wordDict)

    for i, word in enumerate(wordDict):
        if word in document:
            tfidfVector[i] = document[word]
    return tfidfVector

def cosine_similarity(vector1, vector2):

    dot_product = sum(p*q for p,q in zip(vector1, vector2))

    magnitude = math.sqrt(sum([val**2 for val in vector1])) * math.sqrt(sum([val**2 for val in vector2]))

    if not magnitude:

        return 0

    return dot_product/magnitude


duplicates=[]
count=0
for i in range(len(tfidfVector)):
    for j in range(i 1, len(tfidfVector)):
        count=count 1
        clear_output()
        print(count)
        similarity=cosine_similarity(tfidfVector[i],tfidfVector[j])
        duplicates.append((i,j,similarity))
  

Теперь ожидаемые результаты в порядке, но для вычисления требуется вечность. есть предложения, как сделать это быстрее?

Комментарии:

1. Можете ли вы использовать DataFrame ? Их векторные реализации могут значительно ускорить это.

2. Спасибо 🙂 я попробую.