У меня есть набор данных из нескольких тысяч строк текста, моя цель - рассчитать оценку tfidf, а затем подобрать косинус между документами, это то, что я сделал с помощью gensim в Python следовал учебник:Python tf-idf: быстрый способ обновить матрицу tf-idf
dictionary = corpora.Dictionary(dat)
corpus = [dictionary.doc2bow(text) for text in dat]
tfidf = models.TfidfModel(corpus)
corpus_tfidf = tfidf[corpus]
index = similarities.MatrixSimilarity(corpus_tfidf)
Допустим, у нас есть матрица tfidf и подобие построены, когда у нас есть новый документ, заходите, я хочу запросить его наиболее аналогичный документ в нашем существующем наборе данных.
Вопрос: можно ли каким-либо образом обновить матрицу tf-idf, чтобы мне не пришлось добавлять новый текстовый документ к исходному набору данных и пересчитывать все это снова?
Действительно ли это работает? Я бы подумал, что из-за характера tfidf, по сути, вы не можете постепенно обновлять модель (обновлять матрицу tfidf), потому что каждый раз, когда приходит новый документ, вам придется обновлять значения IDF всех соответствующих функций слова, содержащихся в новый документ по всему корпусу. Кроме того, что происходит, когда документ приходит с новым словом - не будет ли у вас несоответствие длины функции? Пожалуйста, дайте мне знать, так как я также активно изучаю эту проблему. – killerT2333
Работает, но я считаю, что это только запрос вашего нового документа с использованием существующей модели. Я отредактирую свой ответ, чтобы показать работу. – snowneji
Вау! Это действительно здорово - спасибо за это. Итак, если я правильно понимаю, когда приходит новый документ запроса, gensim вычисляет счет tfidf из предварительно вычисленной матрицы tfidf _and_ нового документа запроса? Или он рассчитывает только его из предварительно рассчитанной матрицы tfidf? Обновление модели периодически имеет смысл, если в нее поступают постоянно новые запросы, особенно если это дорого для обновления модели. – killerT2333