Как найти косинусное сходство для очень большого массива - PullRequest
0 голосов
/ 16 октября 2018

У меня очень большой набор данных доменного имени.Приблизительный размер набора данных составляет 1 млн.

Я хочу найти похожие домены, которые дублируются в наборе данных из-за неправильного написания.

Поэтому я использовал косинусное сходство для поиска похожих документов.

dataset = ["example.com","examplecom","googl.com","google.com"........]
tfidf_vectorizer = TfidfVectorizer(analyzer="char")
tfidf_matrix = tfidf_vectorizer.fit_transform(documents)
cs = cosine_similarity(tfidf_matrix, tfidf_matrix)

Приведенный выше пример отлично работает для небольшого набора данных, но для большого набора данных он выдает ошибку памяти.

Конфигурация системы:

1) 8 ГБ RAM

2) Установлена ​​64-битная система и 64-битный Python

3) Процессор i3-3210

Как найти косинусное сходство для большого набора данных?

1 Ответ

0 голосов
/ 16 октября 2018

Вы можете использовать KDTree на основе нормированных входов для генерации косинусного расстояния, согласно ответу здесь .Тогда это просто случай установки минимального расстояния, которое вы хотите вернуть (таким образом, вы не сохраняете все большие расстояния, которые составляют большую часть используемой вами памяти) и возврат матрицы разреженного расстояния с использованием, например, coo_matrix из scipy.spatial.cKDTree.sparse_distance_matrix.

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

Makeоднако, любая модель, которую вы подходите из этой матрицы расстояний, может принимать разреженные входные данные.

...