Как объединить оценки TF-IDF, чтобы эквивалентно объединить две строки - PullRequest
0 голосов
/ 20 июня 2019

У меня есть корпус из 5000 названий книг, и я пытаюсь выполнить их кластеризацию. Я использую библиотеку sklearn TfidfVectorizer для генерации матрицы TF-IDF для каждого заголовка.

Однако теперь я объединяю два из названий (поэтому «Книга А» и «Книга Б» становится «Книгой А Книга Б»), и мне интересно, есть ли способ получить матрицу TF-IDF для «Книги» «Книга B» путем объединения матрицы для «Книги A» и матрицы для «Книги B».

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

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

import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

tf = TfidfVectorizer(analyzer='word', ngram_range=(1, 3), min_df=0, stop_words='english')

titles = list_of_strings

tfidf_matrix = tf.fit_transform(titles)

# This gives a matrix roughly (5000, 20000)

new_title = titles[0] + ' ' + titles[1]

# Get the tfidf_matrix for the new_title

Было бы здорово, если бы было что-то вроде:

matrix_for_book_a + matrix_for_book_b 

и это дало матрицу для "Книги А, Книги Б", но я не уверен, возможно ли это.

Спасибо за любую помощь или предложения.

1 Ответ

1 голос
/ 20 июня 2019

Вы можете добавить матрицы tf-idf, и все равно это будет несколько уместно, однако, векторы впоследствии не будут нормализованы, и их нормализация сама по себе не проще, чем векторизация. Для кластеризации данных, основанных на оценке сходства (которая может быть вычислена с помощью tfidf), настоятельно рекомендуется работать с нормализованными векторами. Кроме того, имейте в виду, что если вы действительно хотите объединить эти два в одно с простым добавлением, их словари должны быть одинаковыми, иначе это не будет иметь никакого значения (или даже размеры будут другими). Также проблема заключается в природе tf-idf, если какой-то термин был во многих документах в одном наборе данных, а в другом - в нескольких, его добавленная оценка tf-idf, вероятно, была бы не такой хорошей и релевантной, как рассчитанная по skratch. Так что мое лучшее предложение для вас, действительно, как вы сказали

пересчет TF-IDF снова

Для 5000 названий (или 10000, если объединены идентификаторы) это все еще не займет более разумного времени (в зависимости от вашей машины, на моем около 5-10 минут), а затем сохранит эту матрицу, чтобы не повторить вычисления окажу вам большую услугу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...