Сделайте CountVectorizer быстрее для большого набора данных

Здравствуйте, я хочу кластеризовать фильмы на основе только их названия. Моя функция работает очень хорошо для моих данных, но у меня большая проблема, моя выборка - большие 150000 фильмов, и очень медленно, фактически, потребовалось 3 дня, чтобы объединить все фильмы

Процесс:

Сортировка названий фильмов по длине

Преобразуйте фильмы с помощью countvectorizer и вычислите сходство для каждого (для каждого кластерного фильма я каждый раз подгоняю векторизатор и преобразую целевой фильм)

def product_similarity( clustered_movie, target_movie ):

'''
Calculates the title distance of 2 movies based on title
'''
# fitted vectorizer is a dictionary with fitted movies if wee dont fit to 
# vectorizer the movie it fits and save it to dictionary

if clustered_movie in fitted_vectorizer: 
    vectorizer = fitted_vectorizer[clustered_movie]

    a = vectorizer.transform([clustered_movie]).toarray()
    b = vectorizer.transform( [target_movie] ).toarray()
    similarity = cosine_similarity( a, b )

else:
    clustered_movie = re.sub("[0-9]|[^\w']|[_]", " ",clustered_product )

    vectorizer = CountVectorizer(stop_words=None)
    vectorizer = vectorizer.fit([clustered_movie])

    fitted_vectorizer[clustered_movie] = vectorizer

    a = vectorizer.transform([clustered_movie]).toarray()
    b = vectorizer.transform( [target_movie] ).toarray()
    similarity = cosine_similarity( a, b )

return similarity[0][0]

1 ответ

Установите CountVectorizer один раз, на все названия. Сохранить модель. Затем преобразуйте, используя подходящую модель.

Другие вопросы по тегам